<?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-lenders-dns-cbor-16" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="dns+cbor">A Concise Binary Object Representation (CBOR) of DNS Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-lenders-dns-cbor-16"/>
    <author fullname="Martine Sophie Lenders">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>martine.lenders@tu-dresden.de</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <author initials="M." surname="Gütschow" fullname="Mikolai Gütschow">
      <organization abbrev="TU Dresden">TUD Dresden University of Technology</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>mikolai.guetschow@tu-dresden.de</email>
      </address>
    </author>
    <author fullname="Thomas C. Schmidt">
      <organization>HAW Hamburg</organization>
      <address>
        <email>t.schmidt@haw-hamburg.de</email>
      </address>
    </author>
    <author initials="M." surname="Wählisch" fullname="Matthias Wählisch">
      <organization abbrev="TU Dresden &amp; Barkhausen Institut">TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
      <address>
        <postal>
          <street>Helmholtzstr. 10</street>
          <city>Dresden</city>
          <code>D-01069</code>
          <country>Germany</country>
        </postal>
        <email>m.waehlisch@tu-dresden.de</email>
      </address>
    </author>
    <date year="2026" month="February" day="04"/>
    <area>Applications</area>
    <workgroup>CBOR</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>CBOR</keyword>
    <keyword>DNS</keyword>
    <abstract>
      <?line 95?>

<t>This document specifies a compact data format of DNS messages using
the Concise Binary Object Representation <xref target="RFC8949"/>.
The primary purpose is to keep DNS messages small in constrained networks.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/cbor-dns/draft-lenders-dns-cbor.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-lenders-dns-cbor/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CBOR Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/cbor-dns"/>.</t>
    </note>
  </front>
  <middle>
    <?line 102?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In constrained networks <xref target="RFC7228"/>, the link layer may restrict the payload sizes of frames to
only a few hundreds bytes.  Encrypted DNS resolution, such as DNS over HTTPS (DoH) <xref target="RFC8484"/> or
DNS over CoAP (DoC) <xref target="I-D.ietf-core-dns-over-coap"/>, may lead to DNS message sizes that exceed this limit, even when
implementing header compression such as 6LoWPAN IPHC <xref target="RFC6282"/> or SCHC <xref target="RFC8724"/>,
<xref target="RFC8824"/>.</t>
      <t>Although adoption layers such as 6LoWPAN <xref target="RFC4944"/> or SCHC <xref target="RFC8724"/> offer fragmentation to
comply with small MTUs, fragmentation should be avoided in constrained networks.
Fragmentation combined with high packet loss multiplies the likelihood of loss.
Hence, a compression format that reduces fragmentation of DNS messages is beneficial.</t>
      <t>This document specifies a compact data format for DNS messages using Concise Binary Object Representation (CBOR) <xref target="RFC8949"/> encoding. Additionally,  unnecessary or redundant information are stripped off DNS messages.  To use the outcome of this specification in DoH and DoC,
this document also specifies a Media Type header for DoH and a Content-Format option for DoC.</t>
      <t>Note, that there is another format that expresses DNS messages in CBOR, C-DNS <xref target="RFC8618"/>.
C-DNS is primarily a file format to minimize traces of multiple DNS messages and uses the fact that there are multiple messages to do its compression.
Common values such as names or addresses are collected in separate tables which are referenced from the messages, comparable to Packed CBOR <xref target="I-D.ietf-cbor-packed"/>.
However, this may add overhead for individual DNS messages.</t>
      <t>The format described in this document is a transfer format that aims to provide conciseness and compression for individual DNS messages to be sent over the network.
This is achieved applying the following objectives:</t>
      <t>Conciseness:</t>
      <ul spacing="normal">
        <li>
          <t>Encoding DNS messages in CBOR and</t>
        </li>
        <li>
          <t>Omitting (redundant) fields in DNS queries and responses.</t>
        </li>
      </ul>
      <t>Compression:</t>
      <ul spacing="normal">
        <li>
          <t>Providing easy to implement name compression that allows for on-the-fly construction of DNS queries and responses and</t>
        </li>
        <li>
          <t>Providing optional address and value compression in DNS responses using Packed CBOR <xref target="I-D.ietf-cbor-packed"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="terminology-and-conventions">
      <name>Terminology and Conventions</name>
      <t>CBOR types (unsigned integer, byte string, text string, arrays, etc.) are used as defined in
<xref target="RFC8949"/>.</t>
      <t>The terms "DNS server", "DNS client", and "(DNS) resolver" are used as defined in <xref target="RFC8499"/>.</t>
      <t>A DNS query is a message that queries DNS information from an upstream DNS resolver.
The reply to that is a DNS response.</t>
      <t>The DNS message format specified in <xref target="RFC1035"/> for DNS over UDP we call "classic DNS format" throughout this document or refer to it by its media type "application/dns-message" as specified in <xref target="RFC8484"/>.</t>
      <t>The term "constrained networks" is used as defined in <xref target="RFC7228"/>.</t>
      <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>To define the representation of binary objects we use the Concise Data Definition Language (CDDL) <xref target="RFC8610"/>.
For examples, we use the CBOR Extended Diagnostic Notation <xref target="I-D.ietf-cbor-edn-literals"/> with the <tt>e''</tt> application extension <xref target="I-D.ietf-cbor-edn-e-ref"/>.</t>
    </section>
    <section anchor="cbor-representations-applicationdnscbor">
      <name>CBOR Representations (application/dns+cbor)</name>
      <t>DNS messages in "application/dns+cbor" are represented as CBOR arrays to minimize overhead.
All CBOR items used in this specification are of definite length.
CBOR arrays that do not follow the length definitions of this or of follow-up specifications, <bcp14>MUST</bcp14> be silently ignored.
CBOR arrays that exceed the message size provided by the transport, <bcp14>MUST</bcp14> be silently ignored.
It is assumed that DNS query and DNS response are distinguished message types and that the query can be mapped to the response by the transfer protocol of choice.</t>
      <figure anchor="fig_dns-msg">
        <name>This document defines both DNS Queries and Responses in CDDL</name>
        <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-message = dns-query / dns-response
]]></sourcecode>
      </figure>
      <t>If, for any reason, a DNS message cannot be represented in the CBOR format specified in this document, or if unreasonable overhead is introduced, a fallback to another DNS message format, e.g., the classic DNS format specified in <xref target="RFC1035"/>, <bcp14>MUST</bcp14> always be possible.</t>
      <section anchor="sec_domain-names">
        <name>Domain Name Representation</name>
        <t>Domain names are represented by a sequence of one or more (unicode) text strings.
For instance, "example.org" would be represented as <tt>"example","org"</tt> in CBOR diagnostic notation.
The root domain "." is represented as an empty string <tt>""</tt>.
The absence of any label means the name is elided.
For the purpose of this document, domain names remain case-insensitive as specified in <xref target="RFC1035"/>.</t>
        <t>The representation of a domain name is defined in <xref target="fig_domain-name"/>.
A label may either be encoded in ASCII-compatible encoding (ACE) <xref target="RFC5891"/> embedded within UTF-8 encoding of the text strings or plain UTF-8.
It is <bcp14>RECOMMENDED</bcp14> to use the encoding with the shorter length in bytes, otherwise message sizes may
increase.
A decoder identifies the ACE encoding by identifying the label as a valid A-label (see <xref target="RFC5891"/>) and <bcp14>MUST</bcp14> assume the label to be encoded in UTF-8 otherwise.</t>
        <t>This sequence of text strings is supposed to be embedded into a surrounding array, usually the query
or resource record.</t>
        <t>Name compression is implemented using an extension to Packed CBOR, see <xref target="sec_name-compression"/>.
For readers unfamiliar with Packed CBOR this name compression can be abstracted to a name
compression similar to that described in <xref section="4.1.4" sectionFormat="of" target="RFC1035"/>.
However, instead of using the byte index as reference within the message, text strings are counted,
starting at 0, depth-first within the message.
That number is used as index for the reference.
Since names are the only text strings in a CBOR-based DNS message, the end of a name can be identified when the decoder cursor
does not point to a text string or reference to another text string anymore.
For the reference itself, either simple values or tag 6 are used (see <xref section="2.2" sectionFormat="of" target="I-D.ietf-cbor-packed"/>).</t>
        <figure anchor="fig_domain-name">
          <name>Domain Name Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
domain-name = ( *label )
label = tstr
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_rr">
        <name>DNS Resource Records</name>
        <t>This document specifies the representation of both standard DNS resource records (RRs, see <xref target="RFC1035"/>)
and EDNS option pseudo-RRs (see <xref target="RFC6891"/>.
If for any reason, a resource record cannot be represented in the given formats, they can be
represented in their binary wire-format form as a byte string.</t>
        <t>Further special records, e.g., TSIG <xref target="RFC8945"/>, can be defined in follow-up specifications using the <tt>$$structured-ts-rd</tt>
extension point (see <xref target="fig_dns-standard-rr"/>) and are out of scope of this document.</t>
        <t>The representation of a DNS resource records is defined in <xref target="fig_dns-rr"/>.</t>
        <figure anchor="fig_dns-rr">
          <name>DNS Resource Record Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$dns-rr = rr / #6.141(opt-rr) / bstr
]]></sourcecode>
        </figure>
        <section anchor="standard-rrs">
          <name>Standard RRs</name>
          <t>Standard DNS resource records are encoded as CBOR arrays containing 2 or more entries in the following order:</t>
          <ol spacing="normal" type="1"><li>
              <t>An optional name (as text string, see <xref target="sec_domain-names"/>),</t>
            </li>
            <li>
              <t>A TTL (as unsigned integer),</t>
            </li>
            <li>
              <t>An optional record type (as unsigned integer),</t>
            </li>
            <li>
              <t>An optional record class (as unsigned integer), and lastly</t>
            </li>
            <li>
              <t>A record data entry (as byte string, domain name, or array for dedicated record data representation) or
a boolean (true) that indicates that the resource record is actually a resource record set with
an array of one or more record data entries following. In the latter case, individual domain
names need to be put into their own array.</t>
            </li>
          </ol>
          <t>If the first item of the resource record is a text string, it is the first label of a domain name (see <xref target="sec_domain-names"/>).
If the name is elided, the name is derived from the question section of the message.
For responses, the question section is either taken from the query (see <xref target="sec_queries"/>) or provided with the response see <xref target="sec_responses"/>.
The query may be derived from the context of the transfer protocol.</t>
          <t>If the record type is elided, the record type from the question is assumed.
If record class is elided, the record class from the question is assumed.
When a record class is required to be expressed, the record type <bcp14>MUST</bcp14> also be provided.</t>
          <t>The byte string format of the record data as a byte string follows the classic DNS format as specified in <xref section="3.3" sectionFormat="of" target="RFC1035"/> (or other specifications of the respective record type).
Note that the CBOR format does not include the RDLENGTH field from the classic format as this value is encoded in the length field of the CBOR header of the byte string.</t>
          <t>If the record data represents a domain name (e.g., for CNAME or PTR records), the record data <bcp14>MAY</bcp14> be represented as domain name as specified in <xref target="sec_domain-names"/>.
This way of representing the record data means that name compression (see <xref target="sec_name-compression"/>) can also be used on it.</t>
          <t>Depending on the record type, the record data may also be expressed as an array.
Some initial array types are specified below.
Future specifications can extend the definition for <tt>$$structured-ts-rd</tt> in <xref target="fig_dns-standard-rr"/>.
Extensions to that in this document mainly serve to expose names to name compression (see <xref target="sec_name-compression"/>).
There is an argument to be made for CBOR-structured formats of other record data representations (e.g. DNSKEY or RRSIG), but structuring such records as an array usually adds more overhead than just transferring the byte representation.
As such, structured record data that do not contain names are to be represented as a byte string in this specification.</t>
          <t>Multiple resource records of the same type, class, and TTL can be summarized to a resource record set.
A decoder can be notified about this, by including the boolean true value before an array of multiple record data entries of the same type.
Note, that this adds more overhead to the message and should only really be considered, when there are
more than one resource records of the same type, class, and TTL in the message.</t>
          <figure anchor="fig_dns-standard-rr">
            <name>DNS Standard Resource Record Definition</name>
            <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
max-uint8 = 0..255
max-uint16 = 0..65535
max-uint32 = 0..4294967295
ttl = max-uint32
ipv4-addr = bstr .size 4
ipv6-addr = bstr .size 16
$ip-addr = ipv4-addr / ipv6-addr

rr = [
  ? domain-name,
  ttl: ttl,
  type-spec-rdata,
]
type-spec-rdata = (
  ? type-spec,
  rdata: bstr // ( $ip-addr ) // ( domain-name ) // ( rdata-set ),
)
rdata-set = ((
  is-rrset: true,
  rdata-set: [ +bstr ]
) // (
  is-rrset: true,
  rdata-set: [ +[ domain-name ] ],
))
type-spec-rdata //= ( $$structured-ts-rd )
type-spec = (
  record-type: max-uint16,
  ? record-class: max-uint16,
)
]]></sourcecode>
          </figure>
          <section anchor="soa-record-data">
            <name>SOA Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 6 (SOA) <bcp14>MAY</bcp14> be expressed as an array with at least 7 entries representing the 7 parts of the SOA resource record defined in <xref target="RFC1035"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>MNAME as a domain name (see <xref target="sec_domain-names"/>),</t>
              </li>
              <li>
                <t>SERIAL as an unsigned integer,</t>
              </li>
              <li>
                <t>REFRESH as an unsigned integer,</t>
              </li>
              <li>
                <t>RETRY as an unsigned integer,</t>
              </li>
              <li>
                <t>EXPIRE as an unsigned integer,</t>
              </li>
              <li>
                <t>MINIMUM as an unsigned integer, and</t>
              </li>
              <li>
                <t>RNAME as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>MNAME and RNAME are put to the beginning and end of the array, respectively, to keep their labels apart.</t>
            <t>The definition for SOA record data can be seen in <xref target="fig_dns-rdata-soa"/>.</t>
            <figure anchor="fig_dns-rdata-soa">
              <name>SOA Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  6,    ; record-type = SOA
  ? 1,  ; record-class = IN
  ( soa // ( is-rrset: true, rdata-set: [ +soa ] ) ),
)

soa = [
  domain-name,  ; mname
  serial: max-uint32,
  refresh: max-uint32,
  retry: max-uint32,
  expire: max-uint32,
  minimum: max-uint32,
  domain-name,  ; rname
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="mx-record-data">
            <name>MX Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 15 (MX) <bcp14>MAY</bcp14> be expressed as an array with at least 2 entries representing the 2 parts of the MX resource record defined in <xref target="RFC1035"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>PREFERENCE as an unsigned integer and</t>
              </li>
              <li>
                <t>EXCHANGE as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>The definition for MX record data can be seen in <xref target="fig_dns-rdata-mx"/>.</t>
            <figure anchor="fig_dns-rdata-mx">
              <name>MX Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  15,   ; record-type = MX
  ? 1,  ; record-class = IN
  ( mx // ( is-rrset: true, rdata-set: [ +mx ] ) ),
)

mx = [
  preference: max-uint16,
  domain-name,  ; exchange
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="srv-record-data">
            <name>SRV Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 33 (SRV) <bcp14>MAY</bcp14> be expressed as an array with at least 3 entries representing the parts of the SRV resource record defined in <xref target="RFC2782"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>Priority as an unsigned integer,</t>
              </li>
              <li>
                <t>an optional Weight as an unsigned integer,</t>
              </li>
              <li>
                <t>Port as an unsigned integer,</t>
              </li>
              <li>
                <t>Target as a domain name (see <xref target="sec_domain-names"/>).</t>
              </li>
            </ul>
            <t>If the weight is present or not can be determined by the number of unsigned integers before Target.
2 unsigned integers before the Target mean the weight was elided and defaults to 0.
3 unsigned integers before the Target mean the weight is in the second position of the record data array.
The default of 0 was picked, as this is the value domain administrators should pick when there is no server selection to do <xref target="RFC2782"/>.</t>
            <t>The definition for SRV record data can be seen in <xref target="fig_dns-rdata-srv"/>.</t>
            <figure anchor="fig_dns-rdata-srv">
              <name>SRV Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  33,   ; record-type = SRV
  ? 1,  ; record-class = IN
  ( srv // ( is-rrset: true, rdata-set: [ +srv ] ) ),
)

srv = [
  priority: max-uint16,
  ? weight: max-uint16 .default 0,
  port: max-uint16,
  domain-name,  ; target
]
]]></sourcecode>
            </figure>
          </section>
          <section anchor="svcb-and-https-record-data">
            <name>SVCB and HTTPS Record Data</name>
            <t>The record data of RRs with <tt>record-type</tt> = 64 (SVCB) and <tt>record-type</tt> = 65 (HTTPS) <bcp14>MAY</bcp14> be expressed as an array with at least 3 entries representing the 3 parts of the SVCB/HTTPS resource record defined in <xref target="RFC9460"/> in the following order:</t>
            <ul spacing="normal">
              <li>
                <t>An optional SvcPriority as an unsigned integer,</t>
              </li>
              <li>
                <t>An optional TargetName as a domain name (see <xref target="sec_domain-names"/>), and</t>
              </li>
              <li>
                <t>SvcParams as an array of alternating pairs of SvcParamKey (as unsigned integer) and SvcParamValue
(as byte string).
The type of SvcParamValue may be extended in future specifications.</t>
              </li>
            </ul>
            <t>If the SvcPriority is present can be determined by checking if the record data array starts with an unsigned integer or not.
If the array does not start with an unsigned integer, the SvcPriority is elided and defaults to 0, i.e., the record is in AliasMode (see <xref section="2.4.2" sectionFormat="of" target="RFC9460"/>).
If the array starts with a unsigned integer, it is the SvcPriority.</t>
            <t>If the TargetName is present can be determined by checking if the record data array has a domain name after the SvcPriority, i.e., if the SvcPriority is elided the array would start with a domain name.
If there is no domain name after the SvcPriority, the TargetName is elided and defaults to the sequence of text strings <tt>""</tt> (i.e., the root domain "." in the common name representation defined in <xref section="2.3.1" sectionFormat="of" target="RFC1035"/>, see <xref target="sec_domain-names"/>) and <xref section="2.5" sectionFormat="of" target="RFC9460"/>.
If there is a domain name after the SvcPriority, the TargetName is not elided and in the domain name form specified in <xref target="sec_domain-names"/>.</t>
            <t>The definition for SVCB and HTTPS record data can be seen in <xref target="fig_dns-rdata-svcb"/>.</t>
            <figure anchor="fig_dns-rdata-svcb">
              <name>SVCB and HTTPS Resource Record Data Definition</name>
              <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
$$structured-ts-rd //= (
  64 / 65,  ; record-type = SVCB or HTTPS
  ? 1,      ; record-class = IN
  ( svcb // ( is-rrset: true, rdata-set: [ +svcb ] ) ),
)

svcb = [
  ? svc-priority: max-uint16 .default 0,
  ? domain-name,  ; target name
  svc-params: [ *svc-param-pair ],
]

svc-param-pair = (
  svc-param-key: max-uint16,
  svc-param-value: $$svc-param-value,
)
$$svc-param-value = bstr / $ip-addr
]]></sourcecode>
            </figure>
            <t>The SvcParams are provided as an array rather than a map, as their order needs to be preserved <xref target="RFC9460"/> which can not be guaranteed for maps.</t>
          </section>
        </section>
        <section anchor="sec_edns">
          <name>EDNS OPT Pseudo-RRs</name>
          <t>EDNS OPT Pseudo-RRs are represented as a CBOR array.
To distinguish them from normal standard RRs, they are marked with tag TBD141.</t>
          <t>Name and record type can be elided as they are always "." and OPT (41), respectively <xref target="RFC6891"/>.</t>
          <t>The UDP payload size may be the first element as an unsigned integer in the array.
It <bcp14>MUST</bcp14> be elided if its value is the default value of 512, the maximum allowable size for unextended DNS over UDP (see Sections <xref target="RFC1035" section="2.3.4" sectionFormat="bare"/> and <xref target="RFC1035" section="4.2.1" sectionFormat="bare"/> of <xref target="RFC1035"/>).</t>
          <t>The next element is an array of the options as alternating pairs of option code (as unsigned integer) and option data (as byte string).
The type of the option data may be extended in future specifications.
As per <xref section="6.1.2" sectionFormat="of" target="RFC6891"/>, the order of options is not defined in this specification, but the considerations to order provided in <xref section="6.1.2" sectionFormat="of" target="RFC6891"/> also apply here.</t>
          <t>After that, up to three unsigned integers are following.
The first being the extended flags as unsigned integer (implied to be 0 if elided),
the second the extended RCODE as an unsigned integer (implied to be 0 if elided), and
the third the EDNS version (implied to be 0 if elided).
They are dependent on each of their previous elements.
If the EDNS version is not elided, both extended flags and extended RCODE <bcp14>MUST</bcp14> not be elided.
If the RCODE is not elided the extended flags <bcp14>MUST</bcp14> not be elided.</t>
          <t>Note that future EDNS versions may require a different format than the one described above.</t>
          <figure anchor="fig_dns-opt-rr">
            <name>DNS OPT Resource Record Definition</name>
            <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
opt-rr = [
  ? udp-payload-size: max-uint16 .default 512,
  options: [* opt-pair ],
  ? opt-rcode-v-flags,
]
opt-pair = (
  ocode: max-uint16,
  odata: $$odata,
)
opt-rcode-v-flags = (
  flags: max-uint16 .default 0,
  ? opt-rcode-v,
)
rcode = 0..4095
opt-rcode-v = (
  rcode: rcode .default 0,
  ? version: max-uint8 .default 0,
)
$$odata = bstr
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="sec_queries">
        <name>DNS Queries</name>
        <t>DNS queries are encoded as CBOR arrays containing up to 6 entries in the following order:</t>
        <ol spacing="normal" type="1"><li>
            <t>An optional boolean field,</t>
          </li>
          <li>
            <t>An optional flag field (as unsigned integer),</t>
          </li>
          <li>
            <t>The question section (as array),</t>
          </li>
          <li>
            <t>An optional answer section (as array),</t>
          </li>
          <li>
            <t>An optional authority section (as array), and</t>
          </li>
          <li>
            <t>An optional additional section (as array)</t>
          </li>
        </ol>
        <t>If the first item is a boolean and when true, it tells the responding resolver that it <bcp14>MUST</bcp14> include the question section in its response. If that boolean is not present, it is assumed to be false.</t>
        <t>If the first item of the query is an array, it is the question section, if it is an unsigned integer, it is as flag field and maps to the header flags in <xref target="RFC1035"/> and the "DNS Header Flags" IANA registry including the QR flag and the Opcode.</t>
        <t>If the flags are elided, the value 0 is assumed.</t>
        <t>This specification assumes that the DNS messages are sent over a transfer protocol that can map the queries to their responses, e.g., DNS over HTTPS <xref target="RFC8484"/> or DNS over CoAP <xref target="I-D.ietf-core-dns-over-coap"/>.
As a consequence, the DNS transaction ID is always elided and the value 0 is assumed.</t>
        <t>A question record within the question section is encoded as a CBOR array containing the following entries:</t>
        <ol spacing="normal" type="1"><li>
            <t>The queried name (as domain name, see <xref target="sec_domain-names"/>) which <bcp14>MUST</bcp14> not be elided,</t>
          </li>
          <li>
            <t>An optional record type (as unsigned integer), and</t>
          </li>
          <li>
            <t>An optional record class (as unsigned integer)</t>
          </li>
        </ol>
        <t>If the record type is elided, record type <tt>AAAA</tt> as specified in <xref target="RFC3596"/> is assumed.
If the record class is elided, record class <tt>IN</tt> as specified in <xref target="RFC1035"/> is assumed.
When a record class is required, the record type <bcp14>MUST</bcp14> also be provided.</t>
        <t>There usually is only one question record <xref target="RFC9619"/>, which is why the question section is a flat array and not nested like the other sections.
This serves to safe overhead from the additional CBOR array header.
In the rare cases when there is more than one question record in the question section, the next question just follows.
In this case, for every question but the last, the record type <bcp14>MUST</bcp14> be included, i.e., it is not optional.
This way it is ensured that the parser can distinguish each question by looking up the name first.</t>
        <t>The remainder of the query is either empty or <bcp14>MUST</bcp14> consist of up to three extra arrays.</t>
        <t>If one extra array is in the query, it encodes the additional section of the query as an array of DNS resource records (see <xref target="sec_rr"/>).
If two extra arrays are in the query, they encode, in that order, the authority and additional sections of the query each as an array of DNS resource records (see <xref target="sec_rr"/>).
If three extra arrays are in the query, they encode, in that order, the answer section, the authority, and additional sections of the query each as an array of DNS resource records (see <xref target="sec_rr"/>).</t>
        <t>As such, the highest precedence in elision is given to the answer section, as it only occurs with mDNS to signify Known Answers <xref target="RFC6762"/>.
The lowest precedence is given to the additional section, as it may contain EDNS OPT Pseudo-RRs, which are common in queries (see <xref target="sec_edns"/>).</t>
        <t>The representation of a DNS query is defined in <xref target="fig_dns-query"/>.</t>
        <figure anchor="fig_dns-query">
          <name>DNS Query Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-query = [
  ? incl-question: bool .default false,
  ? flags: max-uint16 .default 0x0000,
  question-section,
  ? query-extra-sections,
]
question-section = [
  * full-question,
  ? last-question,
]
full-question = (
  domain-name,
  type-spec,
)
last-question = (
  domain-name,
  ? type-spec,
)
query-extra-sections = (
  ? answer-section,
  extra-sections,
)
answer-section = [+ $$dns-rr]
extra-sections = (
  ? authority: [+ $$dns-rr],
  additional: [+ $$dns-rr],
)
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_responses">
        <name>DNS Responses</name>
        <t>A DNS response is encoded as a CBOR array containing up to 5 entries.</t>
        <ol spacing="normal" type="1"><li>
            <t>An optional flag field (as unsigned integer),</t>
          </li>
          <li>
            <t>An optional question section (as array, encoded as described in <xref target="sec_queries"/>)</t>
          </li>
          <li>
            <t>The answer section (as array),</t>
          </li>
          <li>
            <t>An optional authority section (as array), and</t>
          </li>
          <li>
            <t>An optional additional section (as array)</t>
          </li>
        </ol>
        <t>As for queries, the DNS transaction ID is elided and implied to be 0.</t>
        <t>If the CBOR array is a response to a query for which the flags indicate that flags are set in the
response, they <bcp14>MUST</bcp14> be set accordingly and thus included in the response.
If the flags are not included, the flags are implied to be 0x8000 (everything unset except for the
QR flag).</t>
        <t>If the response includes only one array, then the DNS answer section represents an
array of one or more DNS Resource Records (see <xref target="sec_rr"/>).</t>
        <t>If the response includes more than 2 arrays, the first entry may be the question section, identified
by not being an array of arrays. It <bcp14>MUST</bcp14> be included, if the client requested it using the boolean
field in the query. If it is present, it is followed by the answer section. The question section is
encoded as specified in <xref target="sec_queries"/>.</t>
        <t>If the answer section is followed by one extra array, this array is the additional section.
Like the answer section, the additional section is represented as an array of one or more DNS Resource Records (see <xref target="sec_rr"/>).</t>
        <t>If the answer section is followed by two extra arrays, the first is the authority section, and the second is the additional section.
The authority section is also represented as an array of one or more DNS Resource Records (see
<xref target="sec_rr"/>).</t>
        <t>The authority section is given precedence in elision over the additional section, as due to EDNS options or, e.g., CNAME answers that also provide the A/AAAA records. The additional section tends to show up more often than the authority section.</t>
        <figure anchor="fig_dns-response">
          <name>DNS Response Definition</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
dns-response = [
  ? flags: max-uint16 .default 0x8000,
  ? question-section,
  answer-section,
  ? extra-sections,
]
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section anchor="sec_cbor-packed">
      <name>Compression with Packed CBOR</name>
      <t>Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is used for name compression in "application/dns+cbor".</t>
      <t>If both DNS server and client support table setup tag 113 as described in <xref section="3.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>, it <bcp14>MAY</bcp14> be used for further
compression in DNS responses.
Especially IPv6 addresses, e.g., in AAAA resource records can benefit from straight referencing to
compress common address prefixes.</t>
      <section anchor="sec_name-compression">
        <name>Name Compression</name>
        <figure anchor="fig_name-compression-cddl">
          <name>CDDL for name compression based on Packed CBOR and as defined in this document.</name>
          <sourcecode type="cddl"><![CDATA[
Text-String-Suffix-Sequence-Packed-CBOR = #6.28259(rump)
]]></sourcecode>
        </figure>
        <t>For name compression, a new packing table setup tag TBD28259 ('n' and 'c' in ASCII) for Packed CBOR <xref target="I-D.ietf-cbor-packed"/> is defined.
Any "application/dns+cbor" encoder and decoder <bcp14>MUST</bcp14> support tag TBD28259 for DNS queries and responses.
It provides an implicit text string suffix sequence table for shared items <em>V</em>.
This table <em>V</em> is appended to the existing table for shared items of any table setup tag enclosing tag TBD28259 (by default empty table).
This implicit (i.e., not explicitly represented) table <em>V</em> is constructed as follows:
Any coherent sequence of text strings encountered within the rump of tag TBD28259 when reading it depth-first, as well as any of its non-empty suffixes, ordered by their appearance within the rump, are added to the table as arrays marked with the splice integration tag 1115 (see <xref section="5.1" sectionFormat="comma" target="I-D.ietf-cbor-packed"/>).
If a sequence for which a tagged array is already in <em>V</em> is encountered, a shared item reference <em>i</em> is added to the rump instead, splicing the content of the array within tag 1115 into the existing array (see <xref section="5.1" sectionFormat="comma" target="I-D.ietf-cbor-packed"/>) and that sequence as well as its non-empty suffixes are not added again to <em>V</em>.
The resulting rump should look like referencing the first instance of the <em>i</em>-th complete string sequence (depth first) in the sequence.</t>
        <t>It is <bcp14>NOT RECOMMENDED</bcp14> to use any other table building tag as defined in <xref section="3" sectionFormat="of" target="I-D.ietf-cbor-packed"/> within TBD28259, as the implicit table of TBD28259 may otherwise lead to more complicating en- and decoding steps.
Particularly, a one-pass decoding with minimal state of DNS messages <bcp14>SHOULD</bcp14> be ensured to be viable on constrained devices.
If another table setup needs to be transported within TBD28259, e.g., certain RDATA or option values might elect to use Packed CBOR as well, they <bcp14>SHOULD</bcp14> be encapsulated as encoded CBOR within a byte string using tag 24 <xref target="RFC8949"/>.</t>
        <t>Due to the order of strings being important, special care should be taken for the order of map (major type 5, <xref target="RFC8949"/>) elements within tag TBD28259.
The "application/dns+cbor" media type specified within this document avoids maps for this reason, in addition to enforcing orders derived from DNS specifications, e.g., <xref target="RFC9460"/> for SvcParams.
If any other CBOR object than an object defined by <tt>dns-message</tt> in <xref target="fig_dns-msg"/> is compressed using TBD28259, map elements <bcp14>MUST</bcp14> be encoded in bytewise lexicographic order of their keys, as specified in <xref section="4.2.1" sectionFormat="of" target="RFC8949"/>, unless the definition of that particular object type provides a different predetermined order.</t>
        <t>The "application/dns+cbor" media type comes with an optional parameter "packed".
If it is not provided, the value of it is assumed to be 0.
With the "application/dns+cbor;packed=0" media type (i.e., even with "application/dns+cbor"), the tag TBD28259 is implicit, i.e., it <bcp14>SHOULD NOT</bcp14> be sent.
This avoids sending the 3 bytes of overhead generated by the presence of the tag.
If the decoder encounters an object marked with "application/dns+cbor;packed=0" that is tagged TBD28259, it <bcp14>MUST NOT</bcp14> discard it and parse its content as if it were implicit.
Otherwise, it might incur an additional message to be sent and media type negotiation might fail unnecessarily.</t>
        <t>The splice integration tag 1115 is the only integration tag in use for "application/dns+cbor" for "packed=0" and "packed=1" (see <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-packed"/>).</t>
        <t>Name compression with an example message can be found in <xref target="sec_name-compression-example"/>.</t>
      </section>
      <section anchor="further-dns-representation-with-tag-113">
        <name>Further DNS Representation with Tag 113</name>
        <t>The representation of DNS responses with packed value 1, i.e., "application/dns+cbor;packed=1", has the same semantics as for tag TBD113
(see <xref section="3.1" sectionFormat="of" target="I-D.ietf-cbor-packed"/>) compressing the name-compressed response as rump.
The difference to <xref target="I-D.ietf-cbor-packed"/> is that tag TBD113 is implicit with media type parameter "packed=1", see <xref target="fig_packed-dns-msg"/>.</t>
        <t>Take the following definition:</t>
        <figure anchor="fig_packed-dns-msg">
          <name>Definition of packed DNS message with media type "application/dns+cbor;packed=1".</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
packed-dns-message = [
  [*shared-and-argument-item],
  rump
]
]]></sourcecode>
        </figure>
        <t>When marked by the "application/dns+cbor;packed=1" media type and parameter it <bcp14>MUST</bcp14> be implicitly understood as the definition provided in <xref target="fig_expl-packed-dns-msg"/>.</t>
        <figure anchor="fig_expl-packed-dns-msg">
          <name>The implicit definition of a packed DNS message with media type "application/dns+cbor;packed=1".</name>
          <sourcecode type="cddl" name="dns-cbor.cddl"><![CDATA[
Packed-Text-String-Suffix-Sequence-Packed-CBOR = #6.113(
  [
    [*shared-and-argument-item],
    Text-String-Suffix-Sequence-Packed-CBOR
  ]
)
]]></sourcecode>
        </figure>
        <t>If the decoder encounters an object marked with "application/dns+cbor;packed=1" that is tagged TBD113 or with its rump tagged TBD28259, it <bcp14>MUST NOT</bcp14> discard it and parse its content as if it were implicit.
Any object marked with "application/dns+cbor;packed=1" that does not fit the definition of
<tt>packed-dns-message</tt> provided in <xref target="fig_packed-dns-msg"/> or variants of explicit tags TBD113 or TBD28259 <bcp14>MUST</bcp14> be interpreted as an invalid message.</t>
        <t>"packed=1" compression of queries is not specified, as apart from EDNS(0) (see <xref target="sec_edns"/>), they only
consist of one question most of the time, i.e., there is close to no redundancy that is not already
covered by "packed=0" and encoding such an object can be too complex for a potentially constrained resolver.</t>
        <t>An example of this mechanism, as well as pseudo-code for a simple decoder can be found in
<xref target="sec_packed-cbor-example"/>.</t>
      </section>
      <section anchor="media-type-negotiation">
        <name>Media Type Negotiation</name>
        <t>A DNS client tells a server that it would accept the media type "application/dns+cbor;packed=1" to negotiate (see, e.g.,
<xref target="RFC9110"/> or <xref section="5.5.4" sectionFormat="comma" target="RFC7252"/>) with the DNS server whether the server supports setup table tag TBD113.
If it does, it <bcp14>MAY</bcp14> request the response to be in packed value 1 (media type "application/dns+cbor;packed=1").
The server then <bcp14>SHOULD</bcp14> reply with the response in Packed CBOR, which it also signals with media type
"application/dns+cbor;packed=1".
Otherwise, both fall back to the implicit "packed=0".</t>
      </section>
      <section anchor="sec_pack-compression">
        <name>Compression</name>
        <t>The method of the compressor to construct the packing table, i.e., how the compression is applied, is out of scope of this document.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".
<?line -20?>
      </t>
      <section anchor="python-decoderencoder">
        <name>Python decoder/encoder</name>
        <t>The authors of this document provide a <eref target="https://github.com/netd-tud/cbor4dns">decoder/encoder
implementation</eref> of both the unpacked and packed format
specified in this document in Python.</t>
        <dl>
          <dt>Level of maturity:</dt>
          <dd>
            <t>prototype</t>
          </dd>
          <dt>Version compatibility:</dt>
          <dd>
            <t>draft-lenders-dns-cbor-10</t>
          </dd>
          <dt>License:</dt>
          <dd>
            <t>MIT</t>
          </dd>
          <dt>Contact information:</dt>
          <dd>
            <t><tt>Martine Lenders &lt;martine.lenders@tu-dresden.de&gt;</tt></t>
          </dd>
          <dt>Last update of this information:</dt>
          <dd>
            <t>July 2024</t>
          </dd>
        </dl>
      </section>
      <section anchor="embedded-decoderencoder">
        <name>Embedded decoder/encoder</name>
        <t>The authors of this document provide a <eref target="https://github.com/RIOT-OS/RIOT/pull/19989">decoder/encoder
implementation</eref> of the unpacked format specified in this
document for the RIOT operating system. It can only encode queries and decode responses.</t>
        <dl>
          <dt>Level of maturity:</dt>
          <dd>
            <t>prototype</t>
          </dd>
          <dt>Version compatibility:</dt>
          <dd>
            <t>draft-lenders-dns-cbor-08</t>
          </dd>
          <dt>License:</dt>
          <dd>
            <t>MIT</t>
          </dd>
          <dt>Contact information:</dt>
          <dd>
            <t><tt>Martine Lenders &lt;martine.lenders@tu-dresden.de&gt;</tt></t>
          </dd>
          <dt>Last update of this information:</dt>
          <dd>
            <t>October 2023</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-type">
        <name>Media Type Registration</name>
        <t>This document registers a media type for the serialization format of DNS messages in CBOR. It
follows the procedures specified in <xref target="RFC6838"/>.</t>
        <section anchor="applicationdnscbor">
          <name>"application/dns+cbor"</name>
          <t>Type name: application</t>
          <t>Subtype name: dns+cbor</t>
          <t>Required parameters: None</t>
          <t>Optional parameters: packed</t>
          <t>Encoding considerations: Must be encoded as using <xref target="RFC8949"/>. See [TBD-this-spec] for details.</t>
          <t>Security considerations: See <xref target="security-considerations"/> of this draft</t>
          <t>Interoperability considerations: TBD</t>
          <t>Published specification: [TBD-this-spec]</t>
          <t>Applications that use this media type: TBD DNS over X systems</t>
          <t>Fragment Identifier Considerations: TBD</t>
          <t>Additional information:</t>
          <t>   Deprecated alias names for this type: N/A</t>
          <t>   Magic number(s): N/A</t>
          <t>   File extension(s): dnsc</t>
          <t>   Macintosh file type code(s): none</t>
          <t>Person &amp; email address to contact for further information:
   IETF CBOR Working Group (cbor@ietf.org) or IETF Applications and Real-Time Area (art@ietf.org)</t>
          <t>Intended usage: COMMON</t>
          <t>Restrictions on Usage: None?</t>
          <t>Author: Martine S. Lenders <eref target="mailto:m.lenders@fu-berlin.de">m.lenders@fu-berlin.de</eref></t>
          <t>Change controller: IETF</t>
          <t>Provisional registrations? No</t>
        </section>
      </section>
      <section anchor="coap-content-format-registration">
        <name>CoAP Content-Format Registration</name>
        <t>IANA is requested to assign CoAP Content-Format ID for the new DNS message media
types in the "CoAP Content-Formats"
sub-registry, within the "CoRE Parameters" registry <xref target="RFC7252"/>, corresponding the
"application/dns+cbor" media type specified in <xref target="media-type"/>:</t>
        <section anchor="cf-app-d-c">
          <name>"application/dns+cbor"</name>
          <t>Media-Type: application/dns+cbor</t>
          <t>Encoding: -</t>
          <t>Id: TBD53</t>
          <t>Reference: [TBD-this-spec]</t>
        </section>
        <section anchor="applicationdnscborpacked1">
          <name>"application/dns+cbor;packed=1"</name>
          <t>Media-Type: application/dns+cbor;packed=1</t>
          <t>Encoding: -</t>
          <t>Id: TBD54</t>
          <t>Reference: [TBD-this-spec]</t>
        </section>
      </section>
      <section anchor="cbor-tags-registry">
        <name>CBOR Tags Registry</name>
        <t>In the registry "<xref section="CBOR Tags" relative="#cbor-tags" sectionFormat="bare" target="IANA.cbor-tags"/>" <xref target="IANA.cbor-tags"/>,
IANA is requested to allocate the tags defined in <xref target="tab-tag-values"/>.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tag Numbers</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">TBD141</td>
              <td align="left">array</td>
              <td align="left">CBOR EDNS option record</td>
              <td align="left">draft-lenders-dns-cbor</td>
            </tr>
            <tr>
              <td align="right">TBD28259</td>
              <td align="left">any</td>
              <td align="left">Packed CBOR; implicit text string suffix sequence shared-item table</td>
              <td align="left">draft-lenders-dns-cbor</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="cddl-model-for-e-application-extension">
        <name>CDDL model for <tt>e''</tt> application extension</name>
        <t><xref target="fig_e-cddl-model"/> shows the CDDL model used for the <tt>e''</tt> application extension (see
<xref target="I-D.ietf-cbor-edn-e-ref"/>) in our examples.
<tt>C-</tt> contants define DNS classes as unsigned integers from the "DNS CLASSes" sub-registry of the
IANA "Domain Name System (DNS) Parameters" registry.
<tt>RR-</tt> constants define resource record types from the "Resource Record (RR) TYPEs" sub-registry of
the IANA "Domain Name System (DNS) Parameters" registry.</t>
        <figure anchor="fig_e-cddl-model">
          <name>CDDL model defining constants for this document for e''.</name>
          <sourcecode type="cddl"><![CDATA[
C-IN = 1
C-ANY = 255

RR-A = 1
RR-NS = 2
RR-CNAME = 5
RR-PTR = 12
RR-AAAA = 28
RR-ANY = 255
]]></sourcecode>
        </figure>
      </section>
      <section anchor="sec_query-examples">
        <name>DNS Queries</name>
        <t>A DNS query of the record <tt>AAAA</tt> in class <tt>IN</tt> for name "example.org" is
represented in CBOR extended diagnostic notation (EDN) <xref target="I-D.ietf-cbor-edn-literals"/> with <tt>e''</tt>
application extension <xref target="I-D.ietf-cbor-edn-e-ref"/> as follows:</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org"]]
]]></sourcecode>
        <t>The binary (in hexadecimal encoding) of the query looks as follows (14 bytes):</t>
        <artwork><![CDATA[
81                      # array(1)
   82                   # array(2)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
]]></artwork>
        <t>A query of an <tt>A</tt> record for the same name is represented as</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org", e'RR-A']]
]]></sourcecode>
        <t>or in binary (15 bytes)</t>
        <artwork><![CDATA[
81                      # array(1)
   83                   # array(3)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
      01                # e'RR-A' (unsigned(1))
]]></artwork>
        <t>A query of <tt>ANY</tt> record for that name is represented as</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org", e'RR-ANY', e'C-ANY']]
]]></sourcecode>
        <t>or in binary (18 bytes)</t>
        <artwork><![CDATA[
81                      # array(1)
   84                   # array(4)
      67                # text(7)
         6578616d706c65 # "example"
      63                # text(3)
         6f7267         # "org"
      18 ff             # e'RR-ANY' (unsigned(255))
      18 ff             # e'RR-ANY' (unsigned(255))
]]></artwork>
      </section>
      <section anchor="sec_name-compression-example">
        <name>Name Compression</name>
        <t>Take the following response <em>o</em> in CBOR extended diagnostic notation (EDN) <xref target="I-D.ietf-cbor-edn-literals"/>.
It contains a question for the "www.example.org" AAAA record, with a "svc.www.example.org" CNAME answer and its AAAA record, as well as the "org.example.org" NS record for the "example.org" domain in the authority section, each record with TTL 3600:</t>
        <figure anchor="fig_name-compression-example-unpacked">
          <name>Unpacked example for implicit name compression.</name>
          <sourcecode type="edn"><![CDATA[
[
  ["www", "example", "org"],
  [
    [3600, "www", "example", "org", e'RR-CNAME', "svc", "www", "example", "org"],
    [3600, "svc", "www", "example", "org", ip'2001:db8::1']
  ],
  [
    [3600, "example", "org", e'RR-NS', "org", "example", "org"]
  ],
  []
]
]]></sourcecode>
        </figure>
        <t>The object <em>o</em> would be sent over the wire as the following 136 bytes of binary data, represented
here with hexadecimal encoding (type and data noted in comment).</t>
        <figure anchor="fig_name-compression-example-unpacked-binary">
          <name>Binary of the unpacked example for implicit name compression (136 bytes).</name>
          <artwork><![CDATA[
84                                      # array(4)
   83                                   # array(3)
      63                                # text(3)
         777777                         # "www"
      67                                # text(7)
         6578616D706C65                 # "example"
      63                                # text(3)
         6F7267                         # "org"
   82                                   # array(2)
      89                                # array(9)
         19 0E10                        # unsigned(3600)
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         05                             # e'RR-CNAME' (unsigned(5))
         63                             # text(3)
            737663                      # "svc"
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
      86                                # array(6)
         19 0E10                        # unsigned(3600)
         63                             # text(3)
            737663                      # "svc"
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         50                             # bytes(16)
            20010DB8000000000000000000000001 # ip'2001:db8::1'
   81                                   # array(1)
      87                                # array(7)
         19 0E10                        # unsigned(3600)
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
         02                             # e'RR-NS' (unsigned(2))
         63                             # text(3)
            6F7267                      # "org"
         67                             # text(7)
            6578616D706C65              # "example"
         63                             # text(3)
            6F7267                      # "org"
   80                                   # array(0)
]]></artwork>
        </figure>
        <t>This would generate the following virtual table <em>V</em>.</t>
        <figure anchor="fig_name-compression-example-table">
          <name>Implicit table of shared items for the example _o_.</name>
          <sourcecode type="edn"><![CDATA[
[
    /index 0:/ 1115(["www", "example", "org"]),
    /index 1:/ 1115(["example", "org"]),
    /index 2:/ 1115(["org"]),
    /index 3:/ 1115(["svc", "www", "example", "org"]),
    /index 4:/ 1115(["org", "example", "org"])
]
]]></sourcecode>
        </figure>
        <t>An implementation <bcp14>MAY</bcp14> choose to use references here to reduce memory consumption, as represented in <xref target="fig_name-compression-example-table-comp"/>.
Circular references are not possible due to the construction algorithm of <em>V</em>.</t>
        <figure anchor="fig_name-compression-example-table-comp">
          <name>Implicit table of shared items for the example _o_ with self-references.</name>
          <sourcecode type="edn"><![CDATA[
[
    /index 0:/ 1115(["www", "example", "org"]),
    /index 1:/ 1115(["example", "org"]),
    /index 2:/ 1115(["org"]),
    /index 3:/ 1115(["svc", simple(0)]),
    /index 4:/ 1115(["org", simple(1)])
]
]]></sourcecode>
        </figure>
        <t>Note that the sequence "org", simple(0) is added at index 4 with leading "org", instead of referencing index 2 + index 1 (<tt>simple(2), simple(1)</tt>), as it is its own distinct suffix sequence.
However, its suffix "example", "org" is not added to the table again, as it is already present at index 1.</t>
        <t>Assuming media type "application/dns+cbor;packed=0" (i.e., an implicit tag TBD28259), the packed representation of <em>o</em> would thus be:</t>
        <figure anchor="fig_name-compression-example-packed">
          <name>The packed representation of the name compression example.</name>
          <sourcecode type="edn"><![CDATA[
[
  ["www", "example", "org"],
  [
    [
      3600,
      simple(0) / expands to "www", "example", "org" /,
      e'RR-CNAME',
      "svc",
      simple(0) / expands to "www", "example", "org" /
    ],
    [
      3600,
      simple(3) / expands to "svc", "www", "example", "org" /
      ip'2001:db8::1'
    ]
  ],
  [
    [
      3600,
      simple(1) / expands to "example", "org" /,
      e'RR-NS',
      "org",
      simple(1) / expands to "example", "org" /,
    ]
  ],
  []
]
]]></sourcecode>
        </figure>
        <t>In binary the packed representation of <em>o</em> would be:</t>
        <figure anchor="fig_name-compression-example-packed-binary">
          <name>Binary of the packed representation of the example (65 bytes).</name>
          <artwork><![CDATA[
84                                   # array(4)
   83                                # array(3)
      63                             # text(3)
         777777                      # "www"
      67                             # text(7)
         6578616D706C65              # "example"
      63                             # text(3)
         6F7267                      # "org"
   82                                # array(2)
      85                             # array(5)
         19 0E10                     # unsigned(3600)
         E0                          # simple(0)
         05                          # e'RR-CNAME' (unsigned(5))
         63                          # text(3)
            737663                   # "svc"
         E0                          # simple(0)
      83                             # array(3)
         19 0E10                     # unsigned(3600)
         E3                          # simple(3)
         50                          # bytes(16)
            20010DB8000000000000000000000001 # ip'2001:db8::1'
   81                                # array(1)
      85                             # array(5)
         19 0E10                     # unsigned(3600)
         E1                          # simple(1)
         02                          # e'RR-NS' (unsigned(2))
         63                          # text(3)
            6F7267                   # "org"
         E1                          # simple(1)
   80                                # array(0)
]]></artwork>
        </figure>
      </section>
      <section anchor="sec_response-examples">
        <name>DNS Responses</name>
        <t>The responses to the examples provided in <xref target="sec_query-examples"/> are shown
below. We use the CBOR extended diagnostic notation (EDN) (see <xref target="I-D.ietf-cbor-edn-literals"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>)
with <tt>e''</tt> application extension <xref target="I-D.ietf-cbor-edn-e-ref"/>,
most notably the "ip" extension to represent binary IP addresses as a IP address app-string literal.</t>
        <t>To represent an <tt>AAAA</tt> record with TTL 300 seconds for the IPv6 address 2001:db8::1, a minimal
response to <tt>[["example", "org"]]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[[[300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>or in binary (23 bytes)</t>
        <artwork><![CDATA[
81                                            # array(1)
   81                                         # array(1)
      82                                      # array(2)
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>In this case, the name is derived from the query.</t>
        <t>If the name or the context is required, the following response would also
be valid:</t>
        <sourcecode type="edn"><![CDATA[
[[["example", "org", 300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>In binary that response looks like the following (35 bytes):</t>
        <artwork><![CDATA[
81                                            # array(1)
   81                                         # array(1)
      84                                      # array(4)
         67                                   # text(7)
            6578616d706c65                    # "example"
         63                                   # text(3)
            6f7267                            # "org"
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>If the query can not be mapped to the response for some reason, a response
would look like:</t>
        <sourcecode type="edn"><![CDATA[
[["example", "org"], [[300, ip'2001:db8::1']]]
]]></sourcecode>
        <t>In binary that response looks like the following (36 bytes):</t>
        <artwork><![CDATA[
82                                            # array(2)
   82                                         # array(2)
      67                                      # text(7)
         6578616d706c65                       # "example"
      63                                      # text(3)
         6f7267                               # "org"
   81                                         # array(1)
      82                                      # array(2)
         19 012c                              # unsigned(300)
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
]]></artwork>
        <t>To represent a minimal response of an <tt>A</tt> record with TTL 3600 seconds for the IPv4 address
192.0.2.1, a minimal response to <tt>[["example", "org", 1]]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[[[300, ip'192.0.2.1']]]
]]></sourcecode>
        <t>or in binary (11 bytes)</t>
        <artwork><![CDATA[
81                   # array(1)
   81                # array(1)
      82             # array(2)
         19 012c     # unsigned(300)
         44          # bytes(4)
            c0000201 # ip'192.0.2.1'
]]></artwork>
        <t>Note that here also the 1 of record type <tt>A</tt> can be elided, as this record
type is specified in the question section.</t>
        <t>Lastly, a response to <tt>[["example", "org", e'RR-ANY', e'C-ANY']]</tt> could be</t>
        <sourcecode type="edn"><![CDATA[
[
  # PTR (12) question for "example.org"
  [
    # appends 0 => ["example", "org"] to virtual packing table
    "example",
    # appends 1 => ["org"] to virtual packing table
    "org",
    e'RR-PTR'
  ],
  # Answer section:
  [[
    # PTR (12) for "example.org"
    # (both elided since they are the same as in question)
    # is "_coap._udp.local" with TTL 3600
    3600,
    # appends 2 => ["_coap", "_udp", "local"] to virtual packing table
    "_coap",
    # appends 3 => ["_udp", "local"] to virtual packing table
    "_udp",
    # appends 4 => ["local"] to virtual packing table
    "local"
  ]],
  # Authority section:
  [
    [
      # NS (2) for "example.org"
      # (name elided since its the same as in question)
      # is "ns1.example.org" with TTL 3600
      3600, e'RR-NS',
      # appends 5 => ["ns1", simple(0)] to virtual packing table
      "ns1", simple(0)  # expands to ["example", "org"]
    ],
    [
      # NS (2) for "example.org"
      # (name elided since its the same as in question)
      # is "ns2.example.org" with TTL 3600
      3600, e'RR-NS',
      # appends 6 => ["ns2", simple(0)] to virtual packing table
      "ns2", simple(0)  # expands to ["example", "org"]
    ]
  ],
  # Additional section
  [
    [
      # AAAA (28) for "_coap._udp.local"
      # is 2001:db8::1 with TTL 3600
      simple(2),    # expands to ["_coap", "_udp", "local"]
      3600, e'RR-AAAA', ip'2001:db8::1'
    ],
    [
      # AAAA (28) for "_coap._udp.local"
      # is 2001:db8::2 with TTL 3600
      simple(2),    # expands to ["_coap", "_udp", "local"]
      3600, e'RR-AAAA', ip'2001:db8::2'
    ],
    [
      # AAAA (28) for "ns1.example.org"
      # is 2001:db8::35 with TTL 3600
      simple(5),    # expands to ["ns1", ["example", "org"]]
      3600, e'RR-AAAA', ip'2001:db8::35'
    ],
    [
      # AAAA (28) for "ns2.example.org"
      # is 2001:db8::3535 with TTL 3600
      simple(6),    # expands to ["ns2", ["example", "org"]
      3600, e'RR-AAAA', ip'2001:db8::3535'
    ]
  ]
]
]]></sourcecode>
        <t>or in binary (155 bytes)</t>
        <artwork><![CDATA[
84                                            # array(4)
   83                                         # array(3)
      67                                      # text(7)
         6578616d706c65                       # "example"
      63                                      # text(3)
         6f7267                               # "org"
      0c                                      # e'RR-PTR' (unsigned(12))
   81                                         # array(1)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         65                                   # text(5)
            5f636f6170                        # "_coap"
         64                                   # text(4)
            5f756470                          # "_udp"
         65                                   # text(5)
            6c6f63616c                        # "local"
   82                                         # array(2)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         02                                   # e'RR-NS' (unsigned(2))
         63                                   # text(3)
            6e7331                            # "ns1"
         e0                                   # simple(0)
      84                                      # array(4)
         19 0e10                              # unsigned(3600)
         02                                   # e'RR-NS' (unsigned(2))
         63                                   # text(3)
            6e7332                            # "ns2"
         e0                                   # simple(0)
   84                                         # array(4)
      84                                      # array(4)
         e2                                   # simple(2)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000001  # ip'2001:db8::1'
      84                                      # array(4)
         e2                                   # simple(2)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000002  # ip'2001:db8::2'
      84                                      # array(4)
         e5                                   # simple(5)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000000035  # ip'2001:db8::35'
      84                                      # array(4)
         e6                                   # simple(6)
         19 0e10                              # unsigned(3600)
         18 1c                                # e'RR-AAAA' (unsigned(28))
         50                                   # bytes(16)
            20010db8000000000000000000003535  # ip'2001:db8::3535'
]]></artwork>
        <t>This response advertises two local CoAP servers (identified by service name _coap._udp.local) at
2001:db8::1 and 2001:db8::2 and two nameservers for the example.org domain, ns1.example.org at
2001:db8::35 and ns2.example.org at 2001:db8::3535. Each of the transmitted records has a TTL of
3600 seconds.
Note the use of name compression (see <xref target="sec_name-compression"/>) in this example.</t>
      </section>
      <section anchor="sec_packed-cbor-example">
        <name>Name Compression and Packed CBOR</name>
        <t><xref target="fig_name-compression-example-packed-113"/> shows the example from <xref target="fig_name-compression-example-unpacked"/> with "packed=1".</t>
        <figure anchor="fig_name-compression-example-packed-113">
          <name>The packed representation of the example of a message marked with "application/dns+cbor;packed=1".</name>
          <sourcecode type="edn"><![CDATA[
[
  ["org", 3600],
  [
    ["www", "example", simple(0) / expands to "org" /],
    [
      [
        simple(1) / expands to 3600 /,
        simple(2) / expands to "www", "example", "org" /,
        e'RR-CNAME',
        "svc",
        simple(2) / expands to "www", "example", "org" /
      ],
      [
        simple(1) / expands to 3600,
        simple(5) / expands to "svc", "www", "example", "org" /
        ip'2001:db8::1'
      ]
    ],
    [
      [
        simple(1) / expands to 3600 /,
        simple(3) / expands to "example", "org" /,
        e'RR-NS',
        simple(0) / expands to "org" /,
        simple(3) / expands to "example", "org" /,
      ]
    ],
    []
  ]
]
]]></sourcecode>
        </figure>
        <t>Note, that the encoder needs to rewrite the references from <xref target="fig_name-compression-example-unpacked"/> as the implicit table <em>V</em> is appended to the shared argument table <tt>["org", 600]</tt>.</t>
        <t>In binary, that example looks like the following (represented in hexadecimal):</t>
        <figure anchor="fig_name-compression-example-packed-113-binary">
          <name>The binary of the packed representation of the example marked with "application/dns+cbor;packed=1" (62 bytes).</name>
          <artwork><![CDATA[
82                                      # array(2)
   82                                   # array(2)
      63                                # text(3)
         6F7267                         # "org"
      19 0E10                           # unsigned(600)
   84                                   # array(4)
      83                                # array(3)
         63                             # text(3)
            777777                      # "www"
         67                             # text(7)
            6578616D706C65              # "example"
         E0                             # simple(0)
      82                                # array(2)
         85                             # array(5)
            E1                          # simple(1)
            E2                          # simple(2)
            05                          # e'RR-CNAME' (unsigned(5))
            63                          # text(3)
               737663                   # "svc"
            E2                          # simple(2)
         83                             # array(3)
            E1                          # simple(1)
            E5                          # simple(5)
            50                          # bytes(16)
               20010DB8000000000000000000000001 # ip'2001:db8::1'
      81                                # array(1)
         85                             # array(5)
            E1                          # unsigned(600)
            E3                          # simple(3)
            02                          # e'RR-NS' (unsigned(2))
            E0                          # simple(0)
            E3                          # simple(3)
      80                                # array(0)
]]></artwork>
        </figure>
        <t>Implicitly, a decoder would interpret this as the following EDN:</t>
        <figure anchor="fig_expl-name-compression-example-packed-113">
          <name>The explicit interpretation of the packed representation of the example of a message marked with "application/dns+cbor;packed=1".</name>
          <sourcecode type="edn"><![CDATA[
TBD113(
  [
    ["org", 3600],
    TBD28259(
      [
        ["www", "example", simple(0)],
        [
          [
            simple(1),
            simple(2) / expands to "www", "example", "org" /,
            e'RR-CNAME',
            "svc",
            simple(2) / expands to "www", "example", "org" /
          ],
          [
            simple(1),
            simple(5) / expands to "svc", "www", "example", "org" /
            ip'2001:db8::1'
          ]
        ],
        [
          [
            simple(1),
            simple(3) / expands to "example", "org" /,
            e'RR-NS',
            simple(0),
            simple(3) / expands to "example", "org" /,
          ]
        ],
        []
      ]
    )
  ]
)
]]></sourcecode>
        </figure>
        <section anchor="example-decoder">
          <name>Example Decoder</name>
          <t>A decoder to interpret an object like the one in <xref target="fig_name-compression-example-packed-113"/> would have the following pseudo-code:</t>
          <figure anchor="fig_28259-113-decoder">
            <name>Pseudo-code for an example decoder</name>
            <artwork><![CDATA[
function decode_cbor_dns(binary: bytes, packed: uint = 0): CBORObject {
  obj: CBORObject = cbor.decode(binary)
  unpacker: Unpacker = Unpacker()
  match (packed) {
    when 0 then {
      packing_table = []
      rump = obj
    },
    when 1 then {
      /* except explicit 113 */
      if (typeof(obj) is CBORTag and tag-number of obj == 113) {
        obj = tag-content of obj
      }

      assume that typeof(obj) is CBORArray and obj.length == 2
      assume that typeof(obj[0]) is CBORArray  # packing table

      /* step into tag 113 context for unpacker with all its references
       * (simple values and tag 6) and function tags */
      Tell `unpacker` that we are in rump of tag 113 now

      /* prepend to current packing table of unpacker */
      unpacker.packing_table = obj[0] concat unpacker.packing_table
      rump = obj[1]
    },
    when anything else then {
      throw "Not supported yet!"
    },
  }

  return unpack_names(rump, unpacker)
}

function unpack_names(rump: Any, unpacker: Unpacker): CBORObject {
  /* except explicit 28259 */
  if (typeof(rump) is CBORTag and tag-number of rump == 28259) {
    rump = tag-content of rump
  }

  /* step into tag 28259 context for unpacker with all its references
   * (simple values and tag 6) */
  Tell `unpacker` that we are in rump of tag 28259 now

  return recursive_unpack_names(rump, unpacker, unpacker.packing_table.length)
}

function is_splice_tag(obj: CBORObject): bool {
  return (typeof(packed_idx) is CBORTag and tag-number of packed_idx == 1115)
}

function recursive_unpack_names(
    obj: CBORObject, unpacker: Unpacker, outer_table_len: Integer
): CBORObject {
  match typeof(obj) {
    when CBORInt, CBORByteString, or CBORTextString then {
      return obj
    }
    when CBORArray then {
      result: CBORArray = []
      /* name_start_idx will point to first element of a name and its suffixes
       * in the packing table */
      name_start_idx: CBORInt or null = null
      for (elem in obj) {
        if (typeof(elem) is CBORTextString) {
          /* Create a local name reference in packing table for this name
           * and all its suffixes */
          if (name_start_idx is null) {
            unpacker.packing_table = unpacker.packing_table concat [
              CBORTag(tag-number = 1115, tag-content = []))
            ]
            name_start_idx = unpacker.packing_table.length - 1
          }
          else {
            /* create packing table entry for new suffix */
            unpacker.packing_table = unpacker.packing_table concat [
              CBORTag(tag-number = 1115, tag-content = []))
            ]
          }

          /* Append to all suffixes in local name reference */
          for (i from i == name_start_idx
                 to i < unpacker.packing_table.length)) {
            append elem to tag-content of unpacker.packing_table[i]
          }
          append elem to result
        }
        elif (unpacker.is_shared_reference(elem)) {   /* is simple() or 6() */
          /* calculate index from simple() or 6() */
          ref_idx: uint = unpacker.ref_idx(elem)
          assume that (ref_idx < unpacker.packing_table.length)

          packed_obj: CBORObject = unpacker.packing_table[ref_idx]

          /* check if this reference is part of a longer name */
          if (is_splice_tag(packed_obj) or
              typeof(packed_obj) is CBORTextString) {
            if (name_start_idx is not null) {
              /* if name_start_idx is already set, append to all suffixes
               * from name_start_idx to end of packing table */
              for (i from i == name_start_idx
                     to i < unpacker.packing_table.length)) {
                append elem to tag-content of unpacker.packing_table[i]
              }

              /* check if ref_idx references implicit table V */
              if (ref_idx > outer_table_len) {
                /* close name_start_idx pointing to first element of name
                 * sequence, as only CBORTextStrings (including those
                 * referenced in outer tables) continue the name */
                name_start_idx = null
              }
            }
          }
          if (is_splice_tag(packed_obj)) {
            /* name suffix is spliced in */
            assume that (
              typeof(tag-content of packed_obj) is CBORArray containing
              only CBORTextString and references to CBORTextSTring
            )
            result = result concat tag-content of packed_obj
          }
          else {
            append packed_obj to result
          }
        }
        else {
          /* not part of a name anymore, so close name_start_idx pointing to
           * first element of name sequence */
          name_start_idx = null
          match typeof(elem) {
            /* step into arrays and tags */
            when CBORArray then {
              result = result concat recursive_unpack_names(
                  elem, unpacker, outer_table_len
              )
            }
            when CBORTag then {
              append CBORTag(
                tag-number = tag-number of elem,
                tag-content = recursive_unpack_names(
                    tag-content of elem, unpacker, outer_table_len
                ),
              ) to result
            }
            when CBORMap then {
              throw warning "Ignore maps which are not part of this spec"
            }
            when anything else then {
              append elem to result
            }
          }
        }
      }
      return result
    }
    when anything else then {
      throw warning "Ignore other types not part of this spec"
    }
  }
}
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec_comparison-to-classic-dns">
      <name>Comparison to Classic DNS Wire Format</name>
      <t><xref target="tab-cbor-comparison"/> shows a comparison between the classic DNS wire format and the
application/dns+cbor format. Note that the worst case results typically appear only rarely in DNS.
The classic DNS format is preferred in those cases. A key for which configuration was used in which
case can be seen in <xref target="tab-cbor-comparison-key"/>. Any name label that is longer than 23 bytes adds
a name overhead of 1 byte to its CBOR type header.<cref anchor="_10" source="—mlenders">TBD: Also add structured RRs?.</cref></t>
      <table anchor="tab-cbor-comparison">
        <name>Comparison of application/dns+cbor to classic DNS format.</name>
        <thead>
          <tr>
            <th align="left" rowspan="2">Item</th>
            <th align="right" rowspan="2">Classic DNS format [bytes]</th>
            <th align="center" colspan="3">application/dns+cbor [bytes]</th>
          </tr>
          <tr>
            <th align="right">best case</th>
            <th align="right">realistic worst case</th>
            <th align="right">theoretical worst case</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Header (ID &amp; Flags)</td>
            <td align="right">4</td>
            <td align="right">1</td>
            <td align="right">4</td>
            <td align="right">4</td>
          </tr>
          <tr>
            <td align="left">Count fields</td>
            <td align="right">2</td>
            <td align="right">1</td>
            <td align="right">3</td>
            <td align="right">3</td>
          </tr>
          <tr>
            <td align="left">Question section</td>
            <td align="right">6 + name len.</td>
            <td align="right">2 + name len.</td>
            <td align="right">6 + name len. + name overhead</td>
            <td align="right">9 + name len. + name overhead</td>
          </tr>
          <tr>
            <td align="left">Standard RR</td>
            <td align="right">12 + name len. + rdata len.</td>
            <td align="right">3        <br/>
 + rdata len.</td>
            <td align="right">14 + name len. + rdata len. + name overhead</td>
            <td align="right">17 + name len. + rdata len. + name overhead</td>
          </tr>
          <tr>
            <td align="left">Standard RR with name rdata</td>
            <td align="right">12 + name len. + rdata len.</td>
            <td align="right">4</td>
            <td align="right">14 + name len. + rdata len. + name overheads</td>
            <td align="right">16 + name len. + rdata len. + name overheads</td>
          </tr>
          <tr>
            <td align="left">EDNS Opt Pseudo-RR</td>
            <td align="right">11 + options</td>
            <td align="right">2 + options</td>
            <td align="right">6 + options</td>
            <td align="right">14 + options</td>
          </tr>
          <tr>
            <td align="left">EDNS Option</td>
            <td align="right">4 + value len.</td>
            <td align="right">2 + value len.</td>
            <td align="right">4 + value len.</td>
            <td align="right">6 + value len.</td>
          </tr>
        </tbody>
      </table>
      <table anchor="tab-cbor-comparison-key">
        <name>Configuration key for     <xref target="tab-cbor-comparison"/>
.</name>
        <thead>
          <tr>
            <th align="left" rowspan="2">Item</th>
            <th align="center" colspan="3">application/dns+cbor configuration</th>
          </tr>
          <tr>
            <th align="right">best case</th>
            <th align="right">realistic worst case</th>
            <th align="right">theoretical worst case</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Header (ID &amp; Flags)</td>
            <td align="right">Flags elided</td>
            <td align="right">QR, Opcode, AA, TC, or RD are set</td>
            <td align="right">QR, Opcode, AA, TC, or RD are set</td>
          </tr>
          <tr>
            <td align="left">Count fields</td>
            <td align="right">Encoded in CBOR array header</td>
            <td align="right">Encoded in CBOR array header,        <br/>
&gt;255 records in section</td>
            <td align="right">Encoded in CBOR array header,        <br/>
&gt;255 records in section</td>
          </tr>
          <tr>
            <td align="left">Question section</td>
            <td align="right">Class, type, and name elided</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23</td>
          </tr>
          <tr>
            <td align="left">Standard RR</td>
            <td align="right">Class, type, and name elided,        <br/>
rdata len. &lt; 24</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23        <br/>
rdata len. &gt; 255</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23        <br/>
rdata len. &gt; 255</td>
          </tr>
          <tr>
            <td align="left">Standard RR with name rdata</td>
            <td align="right">Class, type, and name elided,        <br/>
simple(i) with i &lt; 16</td>
            <td align="right">Type &gt; 255,        <br/>
label len. &gt; 23        <br/>
name uncompressed</td>
            <td align="right">Type &gt; 255,        <br/>
Class &gt; 255,        <br/>
label len. &gt; 23        <br/>
name uncompressed</td>
          </tr>
          <tr>
            <td align="left">EDNS Opt Pseudo-RR</td>
            <td align="right">All EDNS(0) fields elided</td>
            <td align="right">Rcode &lt; 24,        <br/>
DO flag set,        <br/>
            </td>
            <td align="right">UDP payload        <br/>
len. &gt; 255        <br/>
Rcode &gt; 255        <br/>
Version &gt; 255        <br/>
DO flag set</td>
          </tr>
          <tr>
            <td align="left">EDNS Option</td>
            <td align="right">Code &lt; 24        <br/>
Length &lt; 24</td>
            <td align="right">Code &lt; 24        <br/>
Length &gt; 255</td>
            <td align="right">Code &gt; 255        <br/>
Length &gt; 255</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="change-log">
      <name>Change Log</name>
      <section anchor="since-draft-lenders-dns-cbor-15">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-15">draft-lenders-dns-cbor-15</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Vadim Goncharov as contributor</t>
          </li>
          <li>
            <t>Add Mikolai Gütschow as co-author</t>
          </li>
          <li>
            <t>Make options in OPT record a flat list of alternating key-value-pairs</t>
          </li>
          <li>
            <t>Use e'' application extension in examples for better readability of RR types and clases</t>
          </li>
          <li>
            <t>Pass on name compression
            </t>
            <ul spacing="normal">
              <li>
                <t>TBD28259 now appends, rather than prepends to existing packing tables to allow for single pass
decoders with minimum state.</t>
              </li>
              <li>
                <t>Consequently, disallow inner table setup tags to TBD28259, as that would increase complexity of
both decoders and encoders</t>
              </li>
              <li>
                <t>Add considerations on maps within TBD28259 (see also #15)</t>
              </li>
              <li>
                <t>Clarify implicit nature with <tt>packed</tt></t>
              </li>
              <li>
                <t>Provide actual DNS examples</t>
              </li>
              <li>
                <t>Add example decoder as pseudo-code</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-14">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-14">draft-lenders-dns-cbor-14</eref></name>
        <ul spacing="normal">
          <li>
            <t>Correction and nits</t>
          </li>
          <li>
            <t>Explicitly state which integration tags are in use</t>
          </li>
          <li>
            <t>Add binary examples in CBOR-pretty</t>
          </li>
          <li>
            <t>Unify formatting for and mention explicitly application/dns+cbor from the top</t>
          </li>
          <li>
            <t>Explicitly define behavior for query[0] = True in response text</t>
          </li>
          <li>
            <t>Clarifications around media type parameter <tt>packed=1</tt></t>
          </li>
          <li>
            <t>Remove TBD reference (it never came to be)</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-13">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-13">draft-lenders-dns-cbor-13</eref></name>
        <ul spacing="normal">
          <li>
            <t>Make use of splicing integration tag 1115
            </t>
            <ul spacing="normal">
              <li>
                <t>Make domain names flat text string sequences again</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Add capability to summarize rrsets</t>
          </li>
          <li>
            <t>Provide extension point for IP addresses</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-12">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-12">draft-lenders-dns-cbor-12</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fix bug in packed examples</t>
          </li>
          <li>
            <t>Improve compression examples for clarity</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-11">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-11">draft-lenders-dns-cbor-11</eref></name>
        <ul spacing="normal">
          <li>
            <t>Update repo links to cbor-wg org in draft</t>
          </li>
          <li>
            <t><tt>s/CBOR-packed/Packed CBOR/</tt></t>
          </li>
          <li>
            <t>Small pass on wording</t>
          </li>
          <li>
            <t>Remove commented-out parts</t>
          </li>
          <li>
            <t>Make name compression be based on Packed CBOR</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-10">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-10">draft-lenders-dns-cbor-10</eref></name>
        <ul spacing="normal">
          <li>
            <t>Address IANA #1392416 early review</t>
          </li>
          <li>
            <t>Fix external section references</t>
          </li>
          <li>
            <t>Update implementation status</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-09">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-09">draft-lenders-dns-cbor-09</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add recommendation on label encoding</t>
          </li>
          <li>
            <t>Provide extension points
            </t>
            <ul spacing="normal">
              <li>
                <t>Mark dns-rr specifically as extension point</t>
              </li>
              <li>
                <t>Provide extension points for parameter values (options and svc-params)</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Point out CBOR-packed needs to be unpacked when identifying names</t>
          </li>
          <li>
            <t>Distinguish from C-DNS <xref target="RFC8618"/></t>
          </li>
          <li>
            <t>State objectives in introduction</t>
          </li>
          <li>
            <t>Fix nits and typos</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-08">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-08">draft-lenders-dns-cbor-08</eref></name>
        <ul spacing="normal">
          <li>
            <t>Clarify why question section was designed the way it is</t>
          </li>
          <li>
            <t>Add answer section to queries for Known Answers in mDNS</t>
          </li>
          <li>
            <t>Express names as sequence of labels</t>
          </li>
          <li>
            <t>Provide dedicated types for more structured RDATA</t>
          </li>
          <li>
            <t>Add RFC1035-like name compression</t>
          </li>
          <li>
            <t>Add switching boolean to query message to explicitly have question present in response</t>
          </li>
          <li>
            <t>Make EDNS options a map</t>
          </li>
          <li>
            <t>Update examples and comparison table in appendices</t>
          </li>
          <li>
            <t>Update implementation section</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-07">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-07">draft-lenders-dns-cbor-07</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add <xref target="sec_comparison-to-classic-dns"/> with comparison to classic DNS wire format</t>
          </li>
          <li>
            <t>"wire format" -&gt; "classic DNS wire format"</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-06">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-06">draft-lenders-dns-cbor-06</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fixes wording and spelling mistakes</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-05">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-05">draft-lenders-dns-cbor-05</eref></name>
        <ul spacing="normal">
          <li>
            <t>Fix <xref target="cf-app-d-c"/> title</t>
          </li>
          <li>
            <t>Amend for capability to carry more than one question</t>
          </li>
          <li>
            <t>Hint at future of name compression in later draft versions</t>
          </li>
          <li>
            <t>Use canonical name for CBOR-packed</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-04">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-04">draft-lenders-dns-cbor-04</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Implementation Status section</t>
          </li>
          <li>
            <t>Remove int as representation for rdata</t>
          </li>
          <li>
            <t>Add note on representation of more structured rdata</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-03">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-03">draft-lenders-dns-cbor-03</eref></name>
        <ul spacing="normal">
          <li>
            <t>Provide format description for EDNS OPT Pseudo-RRs</t>
          </li>
          <li>
            <t>Simplify CDDL to more idiomatic style</t>
          </li>
          <li>
            <t>Remove DNS transaction IDs</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-02">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-02">draft-lenders-dns-cbor-02</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add Discussion section and note on compression</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-01">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-01">draft-lenders-dns-cbor-01</eref></name>
        <ul spacing="normal">
          <li>
            <t>Use MIME type parameter for packed instead of own MIME type</t>
          </li>
          <li>
            <t>Update definitions to accommodate for TID and flags, as well as more sections in query</t>
          </li>
          <li>
            <t>Clarify fallback to wire-format</t>
          </li>
        </ul>
      </section>
      <section anchor="since-draft-lenders-dns-cbor-00">
        <name>Since <eref target="https://datatracker.ietf.org/doc/html/draft-lenders-dns-cbor-00">draft-lenders-dns-cbor-00</eref></name>
        <ul spacing="normal">
          <li>
            <t>Add support for DNS transaction IDs</t>
          </li>
          <li>
            <t>Name and Address compression utilizing CBOR-packed</t>
          </li>
          <li>
            <t>Minor fixes to CBOR EDN and CDDL</t>
          </li>
        </ul>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>We want to extend special thanks to Christian Amsüss for his input in the brainstorming session that resulted in the current form of name compression.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC3596">
          <front>
            <title>DNS Extensions to Support IP Version 6</title>
            <author fullname="S. Thomson" initials="S." surname="Thomson"/>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="V. Ksinant" initials="V." surname="Ksinant"/>
            <author fullname="M. Souissi" initials="M." surname="Souissi"/>
            <date month="October" year="2003"/>
            <abstract>
              <t>This document defines the changes that need to be made to the Domain Name System (DNS) to support hosts running IP version 6 (IPv6). The changes include a resource record type to store an IPv6 address, a domain to support lookups based on an IPv6 address, and updated definitions of existing query types that return Internet addresses as part of additional section processing. The extensions are designed to be compatible with existing applications and, in particular, DNS implementations themselves. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="88"/>
          <seriesInfo name="RFC" value="3596"/>
          <seriesInfo name="DOI" value="10.17487/RFC3596"/>
        </reference>
        <reference anchor="RFC5891">
          <front>
            <title>Internationalized Domain Names in Applications (IDNA): Protocol</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is the revised protocol definition for Internationalized Domain Names (IDNs). The rationale for changes, the relationship to the older specification, and important terminology are provided in other documents. This document specifies the protocol mechanism, called Internationalized Domain Names in Applications (IDNA), for registering and looking up IDNs in a way that does not require changes to the DNS itself. IDNA is only meant for processing domain names, not free text. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5891"/>
          <seriesInfo name="DOI" value="10.17487/RFC5891"/>
        </reference>
        <reference anchor="RFC6891">
          <front>
            <title>Extension Mechanisms for DNS (EDNS(0))</title>
            <author fullname="J. Damas" initials="J." surname="Damas"/>
            <author fullname="M. Graff" initials="M." surname="Graff"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <date month="April" year="2013"/>
            <abstract>
              <t>The Domain Name System's wire protocol includes a number of fixed fields whose range has been or soon will be exhausted and does not allow requestors to advertise their capabilities to responders. This document describes backward-compatible mechanisms for allowing the protocol to grow.</t>
              <t>This document updates the Extension Mechanisms for DNS (EDNS(0)) specification (and obsoletes RFC 2671) based on feedback from deployment experience in several implementations. It also obsoletes RFC 2673 ("Binary Labels in the Domain Name System") and adds considerations on the use of extended labels in the DNS.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="75"/>
          <seriesInfo name="RFC" value="6891"/>
          <seriesInfo name="DOI" value="10.17487/RFC6891"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9460">
          <front>
            <title>Service Binding and Parameter Specification via the DNS (SVCB and HTTPS Resource Records)</title>
            <author fullname="B. Schwartz" initials="B." surname="Schwartz"/>
            <author fullname="M. Bishop" initials="M." surname="Bishop"/>
            <author fullname="E. Nygren" initials="E." surname="Nygren"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>This document specifies the "SVCB" ("Service Binding") and "HTTPS" DNS resource record (RR) types to facilitate the lookup of information needed to make connections to network services, such as for HTTP origins. SVCB records allow a service to be provided from multiple alternative endpoints, each with associated parameters (such as transport protocol configuration), and are extensible to support future uses (such as keys for encrypting the TLS ClientHello). They also enable aliasing of apex domains, which is not possible with CNAME. The HTTPS RR is a variation of SVCB for use with HTTP (see RFC 9110, "HTTP Semantics"). By providing more information to the client before it attempts to establish a connection, these records offer potential benefits to both performance and privacy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9460"/>
          <seriesInfo name="DOI" value="10.17487/RFC9460"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-packed">
          <front>
            <title>Packed CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Mikolai Gütschow" initials="M." surname="Gütschow">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <date day="2" month="February" year="2026"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949 == STD 94)
   is a data format whose design goals include the possibility of
   extremely small code size, fairly small message size, and
   extensibility without the need for version negotiation.

   CBOR does not provide any forms of data compression.  CBOR data
   items, in particular when generated from legacy data models, often
   allow considerable gains in compactness when applying data
   compression.  While traditional data compression techniques such as
   DEFLATE (RFC 1951) can work well for CBOR encoded data items, their
   disadvantage is that the recipient needs to decompress the compressed
   form before it can make use of the data.

   This specification describes Packed CBOR, a set of CBOR tags and
   simple values that enable a simple transformation of an original CBOR
   data item into a Packed CBOR data item that is almost as easy to
   consume as the original CBOR data item.  A separate decompression
   step is therefore often not required at the recipient.


   // (This cref will be removed by the RFC editor:) The present
   // revision -19 is a work-in-progress release in preparation for
   // another cbor-packed side meeting.  This revision resolves the use
   // of the tunables A/B/C by setting A=16, B=8, and C=8, and choosing
   // requested simple values and tag numbers, in preparation for
   // continuing the early allocation process.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-packed-19"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-literals">
          <front>
            <title>CBOR Extended Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="16" month="October" year="2025"/>
            <abstract>
              <t>   This document formalizes and consolidates the definition of the
   Extended Diagnostic Notation (EDN) of the Concise Binary Object
   Representation (CBOR), addressing implementer experience.

   Replacing EDN's previous informal descriptions, it updates RFC 8949,
   obsoleting its Section 8, and RFC 8610, obsoleting its Appendix G.

   It also specifies and uses registry-based extension points, using one
   to support text representations of epoch-based dates/times and of IP
   addresses and prefixes.


   // (This cref will be removed by the RFC editor:) The present -19
   // includes the definition of the cri'' application- extension. cri''
   // was previously defined in draft-ietf-core-href; however the latter
   // document overtook the present document in the approval process.
   // As the definition of cri'' is dependent on the present document
   // (and conversely has essentially no dependency on the technical
   // content of draft-ietf-core-href beyond its mere existence), the
   // text (including IANA considerations) has been moved here. -19 is
   // intended for use at the CBOR WG meeting at IETF 124.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-19"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="2" month="July" year="2025"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-02"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </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="RFC2782">
          <front>
            <title>A DNS RR for specifying the location of services (DNS SRV)</title>
            <author fullname="A. Gulbrandsen" initials="A." surname="Gulbrandsen"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <author fullname="L. Esibov" initials="L." surname="Esibov"/>
            <date month="February" year="2000"/>
            <abstract>
              <t>This document describes a DNS RR which specifies the location of the server(s) for a specific protocol and domain. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2782"/>
          <seriesInfo name="DOI" value="10.17487/RFC2782"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC4944">
          <front>
            <title>Transmission of IPv6 Packets over IEEE 802.15.4 Networks</title>
            <author fullname="G. Montenegro" initials="G." surname="Montenegro"/>
            <author fullname="N. Kushalnagar" initials="N." surname="Kushalnagar"/>
            <author fullname="J. Hui" initials="J." surname="Hui"/>
            <author fullname="D. Culler" initials="D." surname="Culler"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document describes the frame format for transmission of IPv6 packets and the method of forming IPv6 link-local addresses and statelessly autoconfigured addresses on IEEE 802.15.4 networks. Additional specifications include a simple header compression scheme using shared context and provisions for packet delivery in IEEE 802.15.4 meshes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4944"/>
          <seriesInfo name="DOI" value="10.17487/RFC4944"/>
        </reference>
        <reference anchor="RFC6282">
          <front>
            <title>Compression Format for IPv6 Datagrams over IEEE 802.15.4-Based Networks</title>
            <author fullname="J. Hui" initials="J." role="editor" surname="Hui"/>
            <author fullname="P. Thubert" initials="P." surname="Thubert"/>
            <date month="September" year="2011"/>
            <abstract>
              <t>This document updates RFC 4944, "Transmission of IPv6 Packets over IEEE 802.15.4 Networks". This document specifies an IPv6 header compression format for IPv6 packet delivery in Low Power Wireless Personal Area Networks (6LoWPANs). The compression format relies on shared context to allow compression of arbitrary prefixes. How the information is maintained in that shared context is out of scope. This document specifies compression of multicast addresses and a framework for compressing next headers. UDP header compression is specified within this framework. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6282"/>
          <seriesInfo name="DOI" value="10.17487/RFC6282"/>
        </reference>
        <reference anchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS. Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
        <reference anchor="RFC8499">
          <front>
            <title>DNS Terminology</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="A. Sullivan" initials="A." surname="Sullivan"/>
            <author fullname="K. Fujiwara" initials="K." surname="Fujiwara"/>
            <date month="January" year="2019"/>
            <abstract>
              <t>The Domain Name System (DNS) is defined in literally dozens of different RFCs. The terminology used by implementers and developers of DNS protocols, and by operators of DNS systems, has sometimes changed in the decades since the DNS was first defined. This document gives current definitions for many of the terms used in the DNS in a single document.</t>
              <t>This document obsoletes RFC 7719 and updates RFC 2308.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8499"/>
          <seriesInfo name="DOI" value="10.17487/RFC8499"/>
        </reference>
        <reference anchor="RFC8618">
          <front>
            <title>Compacted-DNS (C-DNS): A Format for DNS Packet Capture</title>
            <author fullname="J. Dickinson" initials="J." surname="Dickinson"/>
            <author fullname="J. Hague" initials="J." surname="Hague"/>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="T. Manderson" initials="T." surname="Manderson"/>
            <author fullname="J. Bond" initials="J." surname="Bond"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a data representation for collections of DNS messages. The format is designed for efficient storage and transmission of large packet captures of DNS traffic; it attempts to minimize the size of such packet capture files but retain the full DNS message contents along with the most useful transport metadata. It is intended to assist with the development of DNS traffic- monitoring applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8618"/>
          <seriesInfo name="DOI" value="10.17487/RFC8618"/>
        </reference>
        <reference anchor="RFC8724">
          <front>
            <title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="C. Gomez" initials="C." surname="Gomez"/>
            <author fullname="D. Barthel" initials="D." surname="Barthel"/>
            <author fullname="JC. Zuniga" initials="JC." surname="Zuniga"/>
            <date month="April" year="2020"/>
            <abstract>
              <t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t>
              <t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t>
              <t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t>
              <t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8724"/>
          <seriesInfo name="DOI" value="10.17487/RFC8724"/>
        </reference>
        <reference anchor="RFC8824">
          <front>
            <title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
            <author fullname="A. Minaburo" initials="A." surname="Minaburo"/>
            <author fullname="L. Toutain" initials="L." surname="Toutain"/>
            <author fullname="R. Andreasen" initials="R." surname="Andreasen"/>
            <date month="June" year="2021"/>
            <abstract>
              <t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8824"/>
          <seriesInfo name="DOI" value="10.17487/RFC8824"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9619">
          <front>
            <title>In the DNS, QDCOUNT Is (Usually) One</title>
            <author fullname="R. Bellis" initials="R." surname="Bellis"/>
            <author fullname="J. Abley" initials="J." surname="Abley"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document updates RFC 1035 by constraining the allowed value of the QDCOUNT parameter in DNS messages with OPCODE = 0 (QUERY) to a maximum of one, and it specifies the required behavior when values that are not allowed are encountered.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9619"/>
          <seriesInfo name="DOI" value="10.17487/RFC9619"/>
        </reference>
        <reference anchor="I-D.ietf-core-dns-over-coap">
          <front>
            <title>DNS over CoAP (DoC)</title>
            <author fullname="Martine Sophie Lenders" initials="M. S." surname="Lenders">
              <organization>TUD Dresden University of Technology</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <author fullname="Cenk Gündoğan" initials="C." surname="Gündoğan">
              <organization>NeuralAgent GmbH</organization>
            </author>
            <author fullname="Thomas C. Schmidt" initials="T. C." surname="Schmidt">
              <organization>HAW Hamburg</organization>
            </author>
            <author fullname="Matthias Wählisch" initials="M." surname="Wählisch">
              <organization>TUD Dresden University of Technology &amp; Barkhausen Institut</organization>
            </author>
            <date day="16" month="September" year="2025"/>
            <abstract>
              <t>   This document defines a protocol for exchanging DNS queries (OPCODE
   0) over the Constrained Application Protocol (CoAP).  These CoAP
   messages can be protected by (D)TLS-Secured CoAP (CoAPS) or Object
   Security for Constrained RESTful Environments (OSCORE) to provide
   encrypted DNS message exchange for constrained devices in the
   Internet of Things (IoT).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-dns-over-coap-20"/>
        </reference>
        <reference anchor="RFC8945">
          <front>
            <title>Secret Key Transaction Authentication for DNS (TSIG)</title>
            <author fullname="F. Dupont" initials="F." surname="Dupont"/>
            <author fullname="S. Morris" initials="S." surname="Morris"/>
            <author fullname="P. Vixie" initials="P." surname="Vixie"/>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="O. Gudmundsson" initials="O." surname="Gudmundsson"/>
            <author fullname="B. Wellington" initials="B." surname="Wellington"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document describes a protocol for transaction-level authentication using shared secrets and one-way hashing. It can be used to authenticate dynamic updates to a DNS zone as coming from an approved client or to authenticate responses as coming from an approved name server.</t>
              <t>No recommendation is made here for distributing the shared secrets; it is expected that a network administrator will statically configure name servers and clients using some out-of-band mechanism.</t>
              <t>This document obsoletes RFCs 2845 and 4635.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="93"/>
          <seriesInfo name="RFC" value="8945"/>
          <seriesInfo name="DOI" value="10.17487/RFC8945"/>
        </reference>
        <reference anchor="RFC6762">
          <front>
            <title>Multicast DNS</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
            <abstract>
              <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
              <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
              <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6762"/>
          <seriesInfo name="DOI" value="10.17487/RFC6762"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="V." surname="Goncharov" fullname="Vadim Goncharov">
        <organization/>
        <address>
          <email>vadimnuclight@gmail.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
