<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>


<rfc ipr="trust200902" docName="draft-peltan-edns-presentation-format-03" category="std" consensus="true" submissionType="IETF" updates="8427">
  <front>
    <title abbrev="edns-presentation-and-json-format">EDNS Presentation and JSON Format</title>

    <author initials="L." surname="Peltan" fullname="Libor Peltan">
      <organization>CZ.NIC</organization>
      <address>
        <email>libor.peltan@nic.cz</email>
      </address>
    </author>
    <author initials="T." surname="Carpay" fullname="Tom Carpay">
      <organization>NLnet Labs</organization>
      <address>
        <email>tomcarpay@gmail.com</email>
      </address>
    </author>

    <date />

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document describes the textual and JSON representation formats of EDNS options.
It also modifies the escaping rules of the JSON representation of DNS messages, previously defined in RFC8427.</t>



    </abstract>



  </front>

  <middle>


<section anchor="introduction"><name>Introduction</name>

<t>A DNS record<xref target="RFC1035"/> of any type can be converted between its binary Wire format and textual Presentation format. The Wire format is used in DNS messages transferred over the Internet, while the Presentation format is used not only in Zone Files (called "master files" in the referenced document), but also to display the contents of DNS messages to humans by debugging utilities and possible other use-cases.</t>

<t>The Presentation format can, however, be processed programatically and also converted back to Wire Format unambiguously.</t>

<t>The EDNS<xref target="RFC6891"/> option pseudo-record does not appear in Zone Files, but it sometimes needs to be converted to human-readable or even machine-readable textual representation.
This document describes such a Presentation Format of the OPT pseudo-record.
It is advised to use this when displaying an OPT pseudo-record to humans.
It is recommended to use this when the textual format is expected to be machine-processed further.</t>

<t>The JSON<xref target="RFC8259"/> representation<xref target="RFC8427"/> of DNS messages is also helpful as both human-readable and machine-readable format (despite the limitation in non-preservation of the order of options and possible issues with repeated options, which prevents reversing the conversion unambiguously), but it did not define a JSON representation of EDNS option pseudo-record.
This document defines it.</t>

<t>The aforementioned document<xref target="RFC8427"/> also defined ambiguous and possibly conflicting rules for escaping special characters when representing DNS names in JSON.
This document modifies and clarifies those rules.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>The key words "<strong>MUST</strong>", "<strong>MUST NOT</strong>", "<strong>REQUIRED</strong>",
"<strong>SHALL</strong>", "<strong>SHALL NOT</strong>", "<strong>SHOULD</strong>", "<strong>SHOULD NOT</strong>",
"<strong>RECOMMENDED</strong>", "<strong>NOT RECOMMENDED</strong>", "<strong>MAY</strong>", and
"<strong>OPTIONAL</strong>" in this document is to be interpreted as described in
BCP 14 <xref target="RFC2119"/><xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>

<t><list style="symbols">
  <t>Base16 is the representation of arbitrary binary data by an even number of case-insensitive hexadecimal digits (<xref section="8" sectionFormat="comma" target="RFC4648"/>).</t>
  <t>Backslash is the character, also called Reverse Solidus, ASCII code 0x5c.</t>
  <t>ID-string is a string of characters containing only (uppercase or lowercase) letters, digits, dashes, and underscores, and its first character is a (uppercase or lowercase) letter.</t>
  <t>"Note" denotes a sentence that is not normative. Instead, it points out some non-obvious consequences of previous statements.</t>
</list></t>

</section>
<section anchor="independent"><name>Generic EDNS Presentation Format</name>

<t>A malformed EDNS record or a record of an unsupported EDNS version can be converted to Presentation format using this generic method.
OPT pseudo-record is, in this case, represented the same way as a RR of unknown type according to <xref section="5" sectionFormat="comma" target="RFC3597"/>.
In specific:</t>

<t><list style="symbols">
  <t>Owner Name is the Owner Name of the OPT record.
Note that this is usually <spanx style="verb">.</spanx> (DNS Root Domain Name) unless malformed.</t>
  <t>TTL is the 32-bit big-endian integer appearing at the TTL position of the OPT pseudo-record Wire format, see <xref section="6.1.3" sectionFormat="comma" target="RFC6891"/>.</t>
  <t>CLASS is a text representation of the 16-bit integer at the CLASS position of the OPT pseudo-record Wire format (UDP payload size happens to appear there).
This will usually result in <spanx style="verb">CLASS####</spanx> (where #### will be the integer), but it might also result, for example in <spanx style="verb">IN</spanx> or <spanx style="verb">CH</spanx> if the value is 1 or 4, respectively.</t>
  <t>TYPE is either <spanx style="verb">TYPE41</spanx> or <spanx style="verb">OPT</spanx>.</t>
  <t>RDATA is formatted by <spanx style="verb">\#</spanx>, its length as a decadic number, and data as Base16 as per <xref section="5" sectionFormat="comma" target="RFC3597"/>.</t>
</list></t>

<t>Example:</t>

<figure><artwork><![CDATA[
. 16859136 CLASS1232 TYPE41 \# 6 000F00020015
]]></artwork></figure>

</section>
<section anchor="jindependent"><name>Generic EDNS JSON representation</name>

<t>A malformed EDNS record or a record of an unsupported EDNS version can be converted to JSON using this generic method.
The OPT pseudo-record is, in this case, represented in JSON as an object with following members:</t>

<t><list style="symbols">
  <t><spanx style="verb">NAME</spanx> - String with the Owner Name of the OPT record.
Note that this is usually <spanx style="verb">.</spanx> (DNS Root Domain Name) unless malformed.
See <xref target="jsonescaping"></xref> for representing DNS names in JSON.</t>
  <t><spanx style="verb">TTL</spanx> - Integer with the 32-bit big-endian value appearing at the TTL position of the OPT pseudo-record Wire format, see <xref section="6.1.3" sectionFormat="comma" target="RFC6891"/>.</t>
  <t><spanx style="verb">CLASS</spanx> - Integer with the 16-bit value at the CLASS position of the OPT pseudo-record Wire format (UDP payload size happens to appear there).</t>
  <t><spanx style="verb">TYPE</spanx> - Integer with the value 41.</t>
  <t><spanx style="verb">RDATAHEX</spanx> - String with the pseudo-record RDATA formatted as Base16.</t>
</list></t>

<t>Example:</t>

<figure><artwork><![CDATA[
{
    "NAME": ".",
    "TTL": 16859136,
    "CLASS": 1232,
    "TYPE": 41,
    "RDATAHEX": "000f00020015"
}
]]></artwork></figure>

</section>
<section anchor="concept"><name>Common Concept</name>

<t>In order to represent the binary data from EDNS option textually, we first define the abstract concept of <em>FIELD</em>s.
First four <em>FIELD</em>s represent the OPT record header, one more <em>FIELD</em> represents every EDNS option that appears in the OPT record RDATA.
Each <em>FIELD</em> has a defined <em>FIELD-NAME</em>, which is an ID-string; a specific <em>FIELD-TYPE</em> from the list below; and prescribed way how to construct the <em>FIELD-VALUE</em> from given binary data.
Based on those, the Presentaion and JSON formats are defined in <xref target="presentation"></xref> and <xref target="json"></xref>, respectively.</t>

<t>The <em>FIELD-NAME</em>s of <em>FIELD</em>s representing the OPT record header are <spanx style="verb">version</spanx>, <spanx style="verb">flags</spanx>, <spanx style="verb">rcode</spanx> and <spanx style="verb">udpsize</spanx>.
The <em>FIELD-NAME</em>s of <em>FIELD</em>s representing EDNS options are defined as their <em>Mnemonic</em>s according to <xref target="IANA.EDNS.Options"/> (see also <xref target="iana"></xref>).</t>

<t>A <em>FIELD-TYPE</em> can be one of following:</t>

<t><list style="symbols">
  <t><em>int</em>, a non-negative integer</t>
  <t><em>ID-NAME</em>, a mnemonic string denoting a numeric value defined by this document, other referenced RFC, and/or referenced IANA table; mnemonics that are not ID-strings MUST NOT be used</t>
  <t><em>ID-CODE</em>, a non-negative integer prefixed with a fixed ID-string</t>
  <t><em>mixed</em>, a variant type that can be any of the above-defined types</t>
  <t><em>base16</em>, an even number of hexadecimal (case-insensitive) digits representing a string of arbitrary octets</t>
  <t><em>list</em>, a variable-sized (possibly empty) list of values of homogenous type defined above (possibly <em>mixed</em>)</t>
  <t><em>dname</em>, a Fully-Qualified Domain Name</t>
  <t><em>string</em>, a string of arbitrary octets where quoting and escaping is used to represent it as ASCII string</t>
  <t><em>object</em>, a defined fixed number of <em>SUBFIELD</em>s, each having its <em>FIELD-NAME</em> and <em>FIELD-TYPE</em> defined according to the rules above (nested <em>object</em>s are forbidden)</t>
</list></t>

<t>The <em>FIELD-TYPE</em> and the construction of <em>FIELD-VALUE</em> of each <em>FIELD</em> is defined in <xref target="fieldefs"></xref>.</t>

</section>
<section anchor="presentation"><name>EDNS Presentation Format</name>

<t>The EDNS Presentation Format follows the RR format of the master file (<xref section="5.1" sectionFormat="comma" target="RFC1035"/>), including quotation of non-printable characters, multi-line format using round brackets, and semicolons denoting comments.
However, one difference is that &lt;character-string&gt;s are not limited in size (to 255 represented octets).</t>

<t>Depending on the use-case, implementations MAY choose to display only RDATA.
In the event that the resource-record-like Presentation format is desired, the following applies:</t>

<t><list style="symbols">
  <t>Owner Name MUST be <spanx style="verb">.</spanx> (DNS Root Domain Name).</t>
  <t>TTL MAY be omitted.
If it is present, it MUST be <spanx style="verb">0</spanx> (zero).
Note that this differs from DNS RR wire-to-text conversion as well as <xref target="independent">Generic Presentation Format</xref>.</t>
  <t>CLASS MAY be omitted.
If it is present, it MUST be <spanx style="verb">ANY</spanx>.</t>
  <t>TYPE MUST be <spanx style="verb">EDNS</spanx>.</t>
</list></t>

<t>RDATA consists of &lt;character-string&gt;s, each <em>FIELD</em> is represented by at least two of them.
First represented <em>FIELD</em>s are <spanx style="verb">version</spanx>, <spanx style="verb">flags</spanx>, <spanx style="verb">rcode</spanx>, and <spanx style="verb">udpsize</spanx> in this order; however, <spanx style="verb">version</spanx> MAY be omitted if the EDNS Version is zero.
The rest of <em>FIELD</em>s respect the EDNS options in the same order as they appear in the OPT record, including possibly repeated options.
The following paragraph defines how a single <em>FIELD</em> is represented with &lt;character-string&gt;s.</t>

<t>The first &lt;character-string&gt; is the <em>FIELD-NAME</em> concatenated (no spaces in between) with a colon (<spanx style="verb">:</spanx>) and SHOULD NOT be enclosed in quotes.
The rest depends on the <em>FIELD-TYPE</em>:</t>

<t><list style="symbols">
  <t><em>int</em> is represented as a decadic number with no leading zeroes</t>
  <t><em>ID-NAME</em> or <em>ID-CODE</em> is represented as-is</t>
  <t><em>base16</em> is represented as-is, zero-length <em>base16</em> as an empty string enclosed in quotes (<spanx style="verb">""</spanx>)</t>
  <t><em>list</em> is represented as a comma-separated list of its items with no spaces; an empty list as an empty string enclosed in quotes (<spanx style="verb">""</spanx>)</t>
  <t><em>dname</em> is represented according to the rules of representing Domain names in the master file (<xref section="5.1" sectionFormat="comma" target="RFC1035"/>); Internationalized Domain Name (IDN) labels MAY be expressed in their U-label form, as described in <xref target="RFC5890"/>.</t>
  <t><em>string</em> is represented as &lt;character-string&gt; according to <xref section="5.1" sectionFormat="comma" target="RFC1035"/>; and SHOULD be enclosed in quotes even when not containing any spaces</t>
  <t><em>object</em> is represented by the same number of &lt;character-string&gt;s as how many <em>SUBFIELD</em>s it has; their <em>FIELD-NAME</em>s are ignored and <em>FIELD-VALUE</em>s are represented in their defined order</t>
</list></t>

<t>Note that each <em>object</em> has fixed number of &lt;character-string&gt;s, other types have one.
This is cruical for parsing, the colon plays only decorative role, strings might also end with a colon.</t>

</section>
<section anchor="json"><name>EDNS Representation in JSON</name>

<t>The EDNS OPT record can be represented in JSON as an object called <spanx style="verb">EDNS</spanx>.
Each <em>FIELD</em> is represented as one object member (name-value pair) ,where the name is <em>FIELD-NAME</em> and the value depends on <em>FIELD-TYPE</em>:</t>

<t><list style="symbols">
  <t><em>int</em> is represented as an Integer</t>
  <t><em>ID-NAME</em>, <em>ID-CODE</em> or <em>base16</em> is represented as a String</t>
  <t><em>mixed</em> is represented as a String even when it happens to be <em>int</em></t>
  <t><em>list</em> is represented as a JSON Array containing its members in specified order</t>
  <t><em>dname</em> is represented as a String with quotation rules in <xref target="jsonescaping"></xref></t>
  <t><em>string</em> is represented as a String according to <xref section="7" sectionFormat="comma" target="RFC8259"/></t>
  <t><em>object</em> is represented as a JSON object with each <em>SUBFIELD</em> represented as one of its member according to rules above (note that nested <em>object</em>s are forbidden)</t>
</list></t>

<t>Note that the order of members is not preserved in JSON and that repeated options might cause issues in JSON. The <em>FIELD</em>s <spanx style="verb">flags</spanx>, <spanx style="verb">rcode</spanx>, and <spanx style="verb">udpsize</spanx> MUST be represented, <spanx style="verb">version</spanx> MAY be omitted if the EDNS Version is zero.</t>

</section>
<section anchor="fieldefs"><name>Field Definitions</name>

<section anchor="version"><name>Version</name>

<t>EDNS Version is represented by <em>FIELD-NAME</em> <spanx style="verb">version</spanx>, its <em>FIELD-TYPE</em> is <em>int</em> and <em>FIELD-VALUE</em> is the EDNS Version.</t>

</section>
<section anchor="eflags"><name>Flags</name>

<t>EDNS FLAGS is represented by <em>FIELD-NAME</em> <spanx style="verb">flags</spanx> and its <em>FIELD-TYPE</em> is a <em>list</em> of <em>mixed</em>:</t>

<t><list style="symbols">
  <t><em>ID-NAME</em> <spanx style="verb">DO</spanx> if the DO bit is set</t>
  <t><em>ID-CODE</em> <spanx style="verb">BITn</spanx> for each <spanx style="verb">n</spanx>-th bit (other than DO) set</t>
</list></t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
flags: ""
]]></artwork></figure>

<figure><artwork><![CDATA[
flags: DO,BIT1
]]></artwork></figure>

<figure><artwork><![CDATA[
flags: BIT3,BIT7,BIT14
]]></artwork></figure>

</section>
<section anchor="extrcode"><name>Extended RCODE</name>

<t>Extended RCODE is represented by <em>FIELD-NAME</em> <spanx style="verb">rcode</spanx> and its <em>FIELD-TYPE</em> is a <em>mixed</em>.</t>

<t>For the sake of readability, it is RECOMMENDED to compute the whole DNS Message Extended RCODE from both the OPT record and the DNS Message Header.
If the whole DNS Message Extended RCODE is computed and has a mnemonic in <xref target="IANA.RCODEs"/>, the <em>FIELD-VALUE</em> MAY be this mnemonic as <em>ID-NAME</em>.
If the whole DNS Message Extended RCODE is computed and no mnemonic is available (or used), the <em>FIELD-VALUE</em> is an <em>int</em> with the computed Extended RCODE.
If the whole DNS Message Extended RCODE cannot be computed, the <em>FIELD-VALUE</em> is an <em>ID-CODE</em> <spanx style="verb">EXT##</spanx>, where <spanx style="verb">##</spanx> stands for DNS Message Extended RCODE with the lower four bits set to zero (i.e. the four-bit left shift still applies).</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
rcode: NXDOMAIN
]]></artwork></figure>
<figure><artwork><![CDATA[
rcode: 3841
]]></artwork></figure>
<figure><artwork><![CDATA[
rcode: EXT3840
]]></artwork></figure>

</section>
<section anchor="udpsize"><name>UDP Payload Size</name>

<t>UDP Payload Size is represented by <em>FIELD-NAME</em> <spanx style="verb">udpsize</spanx>, its <em>FIELD-TYPE</em> is <em>int</em> and <em>FIELD-VALUE</em> is the UDP Payload Size.</t>

</section>
<section anchor="unrecognized"><name>Unrecognized Option</name>

<t>EDNS options that are not part of this specification, and their own specifications do not specify their <em>FIELD-NAME</em> and <em>FIELD-VALUE</em> MUST be displayed according to this subsection.
Other options (specified below or otherwise) MAY be displayed so as well.</t>

<t>Unrecognized EDNS option is represented by <em>FIELD-NAME</em> <spanx style="verb">OPT##</spanx>, where <spanx style="verb">##</spanx> stands for its OPTION-CODE, its <em>FIELD-TYPE</em> is <em>base16</em> and <em>FIELD-VALUE</em> is its OPTION-VALUE encoded as Base16.</t>

</section>
<section anchor="llq-option"><name>LLQ Option</name>

<t>The LLQ (OPTION-CODE 1 <xref target="RFC8764"/>) option is represented as unrecognized (<xref target="unrecognized"></xref>), since this option has been deprecated since year 2020.</t>

</section>
<section anchor="nsid-option"><name>NSID Option</name>

<t>The NSID (OPTION-CODE 3 <xref target="RFC5001"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">NSID</spanx> and its <em>FIELD-VALUE</em> is an object with two <em>SUBFIELD</em>s in the following order:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">HEX</spanx> and <em>FIELD-VALUE</em> is a <em>base16</em> representation of the OPTION-VALUE</t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">TEXT</spanx> and <em>FIELD-VALUE</em> is a <em>string</em> representation of the OPTION-VALUE</t>
</list></t>

<t>The <spanx style="verb">TEXT</spanx> value MAY be substituted with an empty string (for example, if the OPTION-VALUE contains non-printable characters).
Within JSON, the <spanx style="verb">TEXT</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.</t>

</section>
<section anchor="dau"><name>DAU, DHU and N3U Options</name>

<t>The DAU, DHU, and N3U (OPTION-CODES 5, 6, 7, respectively <xref target="RFC6975"/>) options are represented by <em>FIELD-NAME</em>s <spanx style="verb">DAU</spanx>, <spanx style="verb">DHU</spanx>, and <spanx style="verb">N3U</spanx>, respectively, and their <spanx style="verb">FIELD-VALUES</spanx> are <em>list</em>s of <em>int</em>s with their ALG-CODEs.</t>

<t>Within Presentation format, their <em>FIELD-VALUE</em>s MAY be substituted with <em>list</em>s of <em>ID-NAME</em>s with the textual mnemonics of the ALG-CODEs found in their respective IANA registries <xref target="IANA.EDNS.DAU"/><xref target="IANA.EDNS.DHU"/><xref target="IANA.EDNS.N3U"/>.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
DAU: 8,10,13,14,15
DHU: 1,2,4
N3U: 1
]]></artwork></figure>
<figure><artwork><![CDATA[
DAU: RSASHA256,RSASHA512,ECDSAP256SHA256,ECDSAP384SHA384,ED25519
DHU: SHA-1,SHA-256,SHA-384
N3U: SHA-1
]]></artwork></figure>

</section>
<section anchor="edns-client-subnet-option"><name>Edns-Client-Subnet Option</name>

<t>The EDNS Client Subnet (OPTION-CODE 8 <xref target="RFC7871"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">ECS</spanx> and its <em>FIELD-TYPE</em> is a <em>string</em>.
If FAMILY is either IPv4 (<spanx style="verb">1</spanx>) or IPv6 (<spanx style="verb">2</spanx>) and the OPTION-LENGTH matches the expected length, the <em>FIELD-VALUE</em> is a slash-separated (no spaces) tuple of:</t>

<t><list style="symbols">
  <t>the textual IPv4 or IPv6 address (<xref section="3.4.1" sectionFormat="comma" target="RFC1035"/> or <xref section="4" sectionFormat="comma" target="RFC5952"/>, respectively)</t>
  <t>SOURCE PREFIX-LENGTH as a decadic number</t>
  <t>SCOPE PREFIX-LENGTH as a decadic number, SHOULD be omitted (including the separating slash) if zero</t>
</list></t>

<t>Otherwise, the <em>FIELD-VALUE</em> is a <em>string</em> with base16-representation of the OPTION-VALUE.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
ECS: "1.2.3.4/24"
]]></artwork></figure>
<figure><artwork><![CDATA[
ECS: "1234::2/56/48"
]]></artwork></figure>
<figure><artwork><![CDATA[
ECS: "000520000102030405060708"
]]></artwork></figure>

</section>
<section anchor="edns-expire-option"><name>EDNS EXPIRE Option</name>

<t>The EDNS EXPIRE (OPTION-CODE 9 <xref target="RFC7314"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">EXPIRE</spanx> and its <em>FIELD-VALUE</em> is a <em>mixed</em>:</t>

<t><list style="symbols">
  <t><em>ID-NAME</em> <spanx style="verb">NONE</spanx> if OPTION-LENGTH is zero</t>
  <t><em>int</em> with EXPIRE value otherwise</t>
</list></t>

</section>
<section anchor="cookie-option"><name>Cookie Option</name>

<t>The DNS Cookie (OPTION-CODE 10 <xref target="RFC7873"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">COOKIE</spanx> and its <em>FIELD-VALUE</em> is a <em>list</em> of <em>base16</em> with the Client Cookie and, if OPTION-LENGTH is greater than 8, the Server Cookie.</t>

</section>
<section anchor="keepalive"><name>Edns-Tcp-Keepalive Option</name>

<t>The edns-tcp-keepalive (OPTION-CODE 11 <xref target="RFC7828"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">KEEPALIVE</spanx> and its <em>FIELD-VALUE</em> is an <em>int</em> with the TIMEOUT in tenths of seconds.</t>

</section>
<section anchor="padding"><name>Padding Option</name>

<t>The Padding (OPTION-CODE 12 <xref target="RFC7830"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">PADDING</spanx> and its <em>FIELD-VALUE</em> is an <em>object</em> with two <em>SUBFIELD</em>s:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">LENGTH</spanx> and its <em>FIELD-VALUE</em> is the OPTION-LENGTH as <em>int</em></t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">HEX</spanx> and its <em>FIELD-VALUE</em> is a <em>string</em> with base16-representation of OPTION-DATA</t>
</list></t>

<t>If the OPTION-DATA consists only of zeroes (0x00 octets), the <spanx style="verb">HEX</spanx> <em>SUBFIELD</em> SHOULD be an empty <em>string</em>.
Within JSON, the <spanx style="verb">HEX</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.</t>

</section>
<section anchor="chain-option"><name>CHAIN Option</name>

<t>The CHAIN (OPTION-CODE 13 <xref target="RFC7901"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">CHAIN</spanx> and its <em>FIELD-VALUE</em> is the Closest trust point as <em>dname</em>.</t>

</section>
<section anchor="edns-key-tag-option"><name>Edns-Key-Tag Option</name>

<t>The edns-key-tag (OPTION-CODE 14 <xref section="4" sectionFormat="comma" target="RFC8145"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">KEYTAG</spanx> and its <em>FIELD-VALUE</em> is the list of Key Tag values as <em>list</em> of <em>int</em>s.</t>

</section>
<section anchor="ede"><name>Extended DNS Error Option</name>

<t>The Extended DNS Error (OPTION-CODE 15 <xref target="RFC8914"/>) option is represented by <em>FIELD-NAME</em> <spanx style="verb">EDE</spanx> and its <em>FIELD-VALUE</em> is an <em>object</em> with three <em>SUBFIELD</em>s:</t>

<t><list style="symbols">
  <t>first <em>FIELD-NAME</em> is <spanx style="verb">CODE</spanx> and its <em>FIELD-VALUE</em> is the INFO-CODE as <em>int</em></t>
  <t>second <em>FIELD-NAME</em> is <spanx style="verb">Purpose</spanx> and its <em>FIELD-VALUE</em> is the Purpose (first presented in <xref section="5.2" sectionFormat="comma" target="RFC8914"/> and then governed by <xref target="IANA.EDNS.EDE"/>) as <em>string</em>, or an empty <em>string</em></t>
  <t>third <em>FIELD-NAME</em> is <spanx style="verb">TEXT</spanx> and its <em>FIELD-VALUE</em> is the EXTRA-TEXT as <em>string</em> (possibly of zero length)</t>
</list></t>

<t>Within JSON, the <spanx style="verb">Purpose</spanx> <em>SUBFIELD</em> MAY be omitted if it is an empty string.
The same applies for <spanx style="verb">TEXT</spanx> <em>SUBFIELD</em>.</t>

<t>Examples of Presentation format:</t>

<figure><artwork><![CDATA[
EDE: 18 "Prohibited" ""
]]></artwork></figure>
<figure><artwork><![CDATA[
EDE: 6 "DNSSEC Bogus" "signature too short"
]]></artwork></figure>

</section>
<section anchor="report-channel-option"><name>Report-Channel Option</name>

<t>The Report-Channel (OPTION-CODE 18) option is represented by <em>FIELD-NAME</em> <spanx style="verb">REPORT</spanx> and its <em>FIELD-VALUE</em> is the AGENT DOMAIN as <em>dname</em>.</t>

<t>Example of JSON format:</t>

<figure><artwork><![CDATA[
"REPORT": "back\\\\slash.example.com."
]]></artwork></figure>

</section>
</section>
<section anchor="eexamples"><name>Examples of EDNS Presentation Format</name>

<t>The following examples shall illustrate the features of EDNS Presentation format described above.
They may not make much sense and should not appear in normal DNS operation.</t>

<figure><artwork><![CDATA[
. 0 ANY EDNS (
    version: 0
    flags: DO
    rcode: BADCOOKIE
    udpsize: 1232
    EXPIRE: 86400
    COOKIE: 36714f2e8805a93d,4654b4ed3279001b
    EDE: 18 "Prohibited" "bad cookie\000"
    OPT1234: 000004d2
    PADDING: 113 ""
    )
]]></artwork></figure>
<figure><artwork><![CDATA[
. 0 ANY EDNS ( flags: 0 rcode: BADSIG udpsize: 4096 EXPIRE: NONE
               NSID: 6578616d706c652e636f6d2e "example.com."
               DAU: 8,10 KEEPALIVE: 600 CHAIN: zerobyte\000.com.
               KEYTAG: 36651,6113 PADDING: 8 "df24d08b0258c7de" )
]]></artwork></figure>

</section>
<section anchor="jexamples"><name>Examples of EDNS Representation in JSON</name>

<t>The following examples are the JSON equivalents of the examples in <xref target="eexamples"></xref>.
They may not make much sense and should not appear in normal DNS operation.</t>

<figure><artwork><![CDATA[
"EDNS": {
    "version": 0,
    "flags": [ "DO" ],
    "rcode": "BADCOOKIE",
    "udpsize": 1232,
    "EXPIRE": 86400,
    "COOKIE": [ "36714f2e8805a93d", "4654b4ed3279001b" ],
    "EDE": {
        "CODE": 18,
        "Purpose": "Prohibited",
        "TEXT": "bad cookie\u0000"
    },
    "OPT1234": "000004d2",
    "PADDING": {
        "LENGTH": 113
    }
}
]]></artwork></figure>
<figure><artwork><![CDATA[
"EDNS": { "flags": [ ], "rcode": "BADSIG", "udpsize": 4096,
          "EXPIRE": "NONE", "NSID": { "HEX": "6578616d706c652e636f6d2e",
          "TXT": "example.com." }, "DAU": [ 8, 10 ], "KEEPALIVE": 600,
          "CHAIN": "zerobyte\\000.com.", "KEYTAG": [ 36651, 6113 ],
          "PADDING": { "LENGTH": 8, "HEX": "df24d08b0258c7de" } }
]]></artwork></figure>

</section>
<section anchor="guidelines"><name>Guidelines for Future EDNS Options</name>

<t>This draft describes the presentation and JSON format of those ENDS options that are known at the time of writing.
Other EDNS options fall in the category of Unrecognized Options (<xref target="unrecognized"></xref>), unless specified otherwise.
The following guidelines shall help define them.</t>

<t>When defining new EDNS options, it is recommended to specify their <em>FIELD-NAME</em>s, <em>FIELD-TYPE</em>s and the construction of <em>FIELD-VALUE</em>s so that the EDNS Presentation and JSON format comprehensibly handles them.
Those formats should follow the semantics of the options' values rather than the syntax in order to make them more human-readable.
If it is necessary to define a new <em>FIELD-TYPE</em>, care must be taken to define its representation in Presentation and JSON format in a similar fashion like in this document.</t>

<t>The <em>FIELD-NAME</em> MUST always be an ID-string and MUST be added as new option's Mnemonic when requesting IANA to add respective entry to the table <xref target="IANA.EDNS.Options"/>.</t>

</section>
<section anchor="future"><name>Forward-Compatibility Considerations</name>

<t>This specification of ENDS Presentation and JSON format prefers displaying textual mnemonics over potentially cryptic numeric values wherever possible, which is desirable for human readers.
It refers to several IANA tables collecting the definitions of those mnemonics.
Those tables may be getting updated throughout time, and for human readers, it is still beneficial that the EDNS formats reflect those updates.
However, this may cause difficulties for algorithms implementing the reverse process of converting EDNS Presentation and/or JSON format back to wire format, because they might not understand some new mnemonics.
This limitation has to be taken into consideration.</t>

<t>Similarly, new documents may define Presentation and JSON format of newly defined EDNS options according to (or not according to) the guidelines above (<xref target="guidelines"></xref>).
This is, again, beneficial for human readers, as otherwise all new EDNS options would have to be represented as Unrecognized Options (<xref target="unrecognized"></xref>).
However, this may also cause difficulties for algorithms implementing the reverse process of converting EDNS Presentation and/or JSON format back to wire format, because they might not understand some new options.</t>

</section>
<section anchor="jsonescaping"><name>Update Representing DNS Messages in JSON</name>

<t>This section is not related to EDNS.
This section updates <xref section="2.6" sectionFormat="comma" target="RFC8427"/>, including erratum 5439, which introduced contradicting MUSTs for escaping backslashes.</t>

<t>In order to solve this contradiction and correctly represent a DNS name in JSON, it MUST be first converted to textual Presentation format according to <xref section="5.1" sectionFormat="comma" target="RFC1035"/> (called master file format in the referenced document), and the resulting &lt;character-string&gt; subsequently is inserted into JSON as String (<xref section="7" sectionFormat="comma" target="RFC8259"/>).</t>

<t>Note that the previous paragraph prescribes the following escaping strategy:
In the first step, every problematic character (non-printable, backslash, dot within Label, or any octet) is either substituted with the sequence <spanx style="verb">\DDD</spanx>, where <spanx style="verb">DDD</spanx> is the three-digit decimal ASCII code, or in some cases (backslash, dot, any printable character) just prepended with a backslash.
In the second step, every quote (<spanx style="verb">"</spanx>) and backslash (<spanx style="verb">\</spanx>) in the resulting &lt;character-string&gt; is prepended with another backslash.
Note that the JSON escaping sequence <spanx style="verb">\uXXXX</spanx> (where <spanx style="verb">XXXX</spanx> is a hexadecimal Unicode code) is thus never needed.</t>

<t>Moreover, the following requirements from <xref target="RFC8427"/> still hold:
The name MUST be represented as an absolute Fully-Qualified Domain Name.
Internationalized Domain Name (IDN) labels MUST be expressed in their A-label form, as described in <xref target="RFC5890"/>.</t>

<t>Example: the name with the Wire format <spanx style="verb">04005C2E2203636F6D00</spanx> can be represented in JSON as:</t>

<figure><artwork><![CDATA[
"NAME": "\\000\\\\\\046\".com."
]]></artwork></figure>

<t>but also as (among other ways):</t>

<figure><artwork><![CDATA[
"NAME": "\\000\\092\\.\\\".c\\om."
]]></artwork></figure>

</section>
<section anchor="iana"><name>IANA Considerations</name>

<t>IANA is requested to augment the table <xref target="IANA.EDNS.Options"/> with a new column titled "Mnemonic", possibly as third column between "Name" and "Status".
The initial values for existing entries are according to the table below:</t>

<texttable>
      <ttcol align='right'>Value</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Mnemonic</ttcol>
      <c>1</c>
      <c>LLQ</c>
      <c>LLQ</c>
      <c>2</c>
      <c>UL</c>
      <c>UL</c>
      <c>3</c>
      <c>NSID</c>
      <c>NSID</c>
      <c>5</c>
      <c>DAU</c>
      <c>DAU</c>
      <c>6</c>
      <c>DHU</c>
      <c>DHU</c>
      <c>7</c>
      <c>N3U</c>
      <c>N3U</c>
      <c>8</c>
      <c>edns-client-subnet</c>
      <c>ECS</c>
      <c>9</c>
      <c>EDNS EXPIRE</c>
      <c>EXPIRE</c>
      <c>10</c>
      <c>COOKIE</c>
      <c>COOKIE</c>
      <c>11</c>
      <c>edns-tcp-keepalive</c>
      <c>KEEPALIVE</c>
      <c>12</c>
      <c>Padding</c>
      <c>PADDING</c>
      <c>13</c>
      <c>CHAIN</c>
      <c>CHAIN</c>
      <c>14</c>
      <c>edns-key-tag</c>
      <c>KEYTAG</c>
      <c>15</c>
      <c>Extended DNS Error</c>
      <c>EDE</c>
      <c>18</c>
      <c>Report-Channel</c>
      <c>REPORT</c>
</texttable>

<t>The values for entries and rows that are unassigned, reserved or on-hold are to be left blank with no Mnemonic defined.</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>This document only describes the textual representation of binary data and therefore has no security impact on related protocols.</t>

<t>When implementing software, care must be taken to handle possibly inconsistent or broken input data.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>TODO</t>

</section>
<section anchor="implementation-status"><name>Implementation Status</name>

<t><strong>Note to the RFC Editor</strong>: Please remove this entire appendix before publication.</t>

<t>This version of this specification draft-peltan-edns-presentation-format-02 has been implemented in Knot DNS 3.3.2.</t>

</section>
<section anchor="change-history"><name>Change History</name>

<t><strong>Note to the RFC Editor</strong>: Please remove this entire appendix before publication.</t>

<t><list style="symbols">
  <t>edns-presentation-format-00</t>
</list></t>

<ul empty="true"><li>
  <t>Initial public draft.</t>
</li></ul>

<t><list style="symbols">
  <t>edns-presentation-format-01</t>
</list></t>

<ul empty="true"><li>
  <t>Added Guidelines for Future EDNS Options, dummy IANA Considerations and Security Considerations.</t>
</li></ul>

<t><list style="symbols">
  <t>edns-presentation-format-02</t>
</list></t>

<ul empty="true"><li>
  <t>Substantial re-work with common FIELD-TYPE specifications, bigger changes in presentation format and smaller in JSON.</t>
</li></ul>

<t><list style="symbols">
  <t>edns-presentation-format-03</t>
</list></t>

<ul empty="true"><li>
  <t>Added IANA Actions for additional column for Mnemonic.
Added Report-Channel option and removed LLQ.
Improved Common concept, tiny fixes.</t>
</li></ul>

</section>


  </middle>

  <back>

    <references title='Normative References'>



<reference anchor='RFC1035' target='https://www.rfc-editor.org/info/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='RFC6891' target='https://www.rfc-editor.org/info/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='RFC8259' target='https://www.rfc-editor.org/info/rfc8259'>
  <front>
    <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
    <author fullname='T. Bray' initials='T.' role='editor' surname='Bray'/>
    <date month='December' year='2017'/>
    <abstract>
      <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
      <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
    </abstract>
  </front>
  <seriesInfo name='STD' value='90'/>
  <seriesInfo name='RFC' value='8259'/>
  <seriesInfo name='DOI' value='10.17487/RFC8259'/>
</reference>

<reference anchor='RFC8427' target='https://www.rfc-editor.org/info/rfc8427'>
  <front>
    <title>Representing DNS Messages in JSON</title>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <date month='July' year='2018'/>
    <abstract>
      <t>Some applications use DNS messages, or parts of DNS messages, as data. For example, a system that captures DNS queries and responses might want to be able to easily search them without having to decode the messages each time. Another example is a system that puts together DNS queries and responses from message parts. This document describes a general format for DNS message data in JSON. Specific profiles of the format in this document can be described in other documents for specific applications and usage scenarios.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8427'/>
  <seriesInfo name='DOI' value='10.17487/RFC8427'/>
</reference>

<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='RFC4648' target='https://www.rfc-editor.org/info/rfc4648'>
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname='S. Josefsson' initials='S.' surname='Josefsson'/>
    <date month='October' year='2006'/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='4648'/>
  <seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>

<reference anchor='RFC3597' target='https://www.rfc-editor.org/info/rfc3597'>
  <front>
    <title>Handling of Unknown DNS Resource Record (RR) Types</title>
    <author fullname='A. Gustafsson' initials='A.' surname='Gustafsson'/>
    <date month='September' year='2003'/>
    <abstract>
      <t>Extending the Domain Name System (DNS) with new Resource Record (RR) types currently requires changes to name server software. This document specifies the changes necessary to allow future DNS implementations to handle new RR types transparently. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='3597'/>
  <seriesInfo name='DOI' value='10.17487/RFC3597'/>
</reference>

<reference anchor='RFC5890' target='https://www.rfc-editor.org/info/rfc5890'>
  <front>
    <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
    <author fullname='J. Klensin' initials='J.' surname='Klensin'/>
    <date month='August' year='2010'/>
    <abstract>
      <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5890'/>
  <seriesInfo name='DOI' value='10.17487/RFC5890'/>
</reference>

<reference anchor='RFC6975' target='https://www.rfc-editor.org/info/rfc6975'>
  <front>
    <title>Signaling Cryptographic Algorithm Understanding in DNS Security Extensions (DNSSEC)</title>
    <author fullname='S. Crocker' initials='S.' surname='Crocker'/>
    <author fullname='S. Rose' initials='S.' surname='Rose'/>
    <date month='July' year='2013'/>
    <abstract>
      <t>The DNS Security Extensions (DNSSEC) were developed to provide origin authentication and integrity protection for DNS data by using digital signatures. These digital signatures can be generated using different algorithms. This document specifies a way for validating end-system resolvers to signal to a server which digital signature and hash algorithms they support. The extensions allow the signaling of new algorithm uptake in client code to allow zone administrators to know when it is possible to complete an algorithm rollover in a DNSSEC-signed zone.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6975'/>
  <seriesInfo name='DOI' value='10.17487/RFC6975'/>
</reference>

<reference anchor='RFC5952' target='https://www.rfc-editor.org/info/rfc5952'>
  <front>
    <title>A Recommendation for IPv6 Address Text Representation</title>
    <author fullname='S. Kawamura' initials='S.' surname='Kawamura'/>
    <author fullname='M. Kawashima' initials='M.' surname='Kawashima'/>
    <date month='August' year='2010'/>
    <abstract>
      <t>As IPv6 deployment increases, there will be a dramatic increase in the need to use IPv6 addresses in text. While the IPv6 address architecture in Section 2.2 of RFC 4291 describes a flexible model for text representation of an IPv6 address, this flexibility has been causing problems for operators, system engineers, and users. This document defines a canonical textual representation format. It does not define a format for internal storage, such as within an application or database. It is expected that the canonical format will be followed by humans and systems when representing IPv6 addresses as text, but all implementations must accept and be able to handle any legitimate RFC 4291 format. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5952'/>
  <seriesInfo name='DOI' value='10.17487/RFC5952'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="IANA.RCODEs" target="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6">
  <front>
    <title>DNS RCODEs</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.Options" target="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11">
  <front>
    <title>DNS EDNS0 Option Codes</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.EDE" target="https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#extended-dns-error-codes">
  <front>
    <title>EDNS Extended Error Codes</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.DAU" target="https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml">
  <front>
    <title>DNS Security Algorithm Numbers</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.DHU" target="https://www.iana.org/assignments/ds-rr-types/ds-rr-types.xhtml#ds-rr-types-1">
  <front>
    <title>DNSSEC DS RR Type Digest Algorithms</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANA.EDNS.N3U" target="https://www.iana.org/assignments/dnssec-nsec3-parameters/dnssec-nsec3-parameters.xhtml#dnssec-nsec3-parameters-3">
  <front>
    <title>DNSSEC NSEC3 Hash Algorithms</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor='RFC8764' target='https://www.rfc-editor.org/info/rfc8764'>
  <front>
    <title>Apple's DNS Long-Lived Queries Protocol</title>
    <author fullname='S. Cheshire' initials='S.' surname='Cheshire'/>
    <author fullname='M. Krochmal' initials='M.' surname='Krochmal'/>
    <date month='June' year='2020'/>
    <abstract>
      <t>Apple's DNS Long-Lived Queries (LLQ) is a mechanism for extending the DNS protocol to support change notification, thus allowing clients to learn about changes to DNS data without polling the server. From 2005 onwards, LLQ was implemented in Apple products including Mac OS X, Bonjour for Windows, and AirPort wireless base stations. In 2020, the LLQ protocol was superseded by the IETF Standards Track RFC 8765, "DNS Push Notifications", which builds on experience gained with the LLQ protocol to create a superior replacement.</t>
      <t>The existing LLQ protocol deployed and used from 2005 to 2020 is documented here to give background regarding the operational experience that informed the development of DNS Push Notifications, and to help facilitate a smooth transition from LLQ to DNS Push Notifications.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8764'/>
  <seriesInfo name='DOI' value='10.17487/RFC8764'/>
</reference>

<reference anchor='RFC5001' target='https://www.rfc-editor.org/info/rfc5001'>
  <front>
    <title>DNS Name Server Identifier (NSID) Option</title>
    <author fullname='R. Austein' initials='R.' surname='Austein'/>
    <date month='August' year='2007'/>
    <abstract>
      <t>With the increased use of DNS anycast, load balancing, and other mechanisms allowing more than one DNS name server to share a single IP address, it is sometimes difficult to tell which of a pool of name servers has answered a particular query. While existing ad-hoc mechanisms allow an operator to send follow-up queries when it is necessary to debug such a configuration, the only completely reliable way to obtain the identity of the name server that responded is to have the name server include this information in the response itself. This note defines a protocol extension to support this functionality. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='5001'/>
  <seriesInfo name='DOI' value='10.17487/RFC5001'/>
</reference>

<reference anchor='RFC7871' target='https://www.rfc-editor.org/info/rfc7871'>
  <front>
    <title>Client Subnet in DNS Queries</title>
    <author fullname='C. Contavalli' initials='C.' surname='Contavalli'/>
    <author fullname='W. van der Gaast' initials='W.' surname='van der Gaast'/>
    <author fullname='D. Lawrence' initials='D.' surname='Lawrence'/>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>This document describes an Extension Mechanisms for DNS (EDNS0) option that is in active use to carry information about the network that originated a DNS query and the network for which the subsequent response can be cached. Since it has some known operational and privacy shortcomings, a revision will be worked through the IETF for improvement.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7871'/>
  <seriesInfo name='DOI' value='10.17487/RFC7871'/>
</reference>

<reference anchor='RFC7314' target='https://www.rfc-editor.org/info/rfc7314'>
  <front>
    <title>Extension Mechanisms for DNS (EDNS) EXPIRE Option</title>
    <author fullname='M. Andrews' initials='M.' surname='Andrews'/>
    <date month='July' year='2014'/>
    <abstract>
      <t>This document specifies a method for secondary DNS servers to honour the SOA EXPIRE field as if they were always transferring from the primary, even when using other secondaries to perform indirect transfers and refresh queries.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7314'/>
  <seriesInfo name='DOI' value='10.17487/RFC7314'/>
</reference>

<reference anchor='RFC7873' target='https://www.rfc-editor.org/info/rfc7873'>
  <front>
    <title>Domain Name System (DNS) Cookies</title>
    <author fullname='D. Eastlake 3rd' initials='D.' surname='Eastlake 3rd'/>
    <author fullname='M. Andrews' initials='M.' surname='Andrews'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>DNS Cookies are a lightweight DNS transaction security mechanism that provides limited protection to DNS servers and clients against a variety of increasingly common denial-of-service and amplification/ forgery or cache poisoning attacks by off-path attackers. DNS Cookies are tolerant of NAT, NAT-PT (Network Address Translation - Protocol Translation), and anycast and can be incrementally deployed. (Since DNS Cookies are only returned to the IP address from which they were originally received, they cannot be used to generally track Internet users.)</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7873'/>
  <seriesInfo name='DOI' value='10.17487/RFC7873'/>
</reference>

<reference anchor='RFC7828' target='https://www.rfc-editor.org/info/rfc7828'>
  <front>
    <title>The edns-tcp-keepalive EDNS0 Option</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <author fullname='J. Abley' initials='J.' surname='Abley'/>
    <author fullname='S. Dickinson' initials='S.' surname='Dickinson'/>
    <author fullname='R. Bellis' initials='R.' surname='Bellis'/>
    <date month='April' year='2016'/>
    <abstract>
      <t>DNS messages between clients and servers may be received over either UDP or TCP. UDP transport involves keeping less state on a busy server, but can cause truncation and retries over TCP. Additionally, UDP can be exploited for reflection attacks. Using TCP would reduce retransmits and amplification. However, clients commonly use TCP only for retries and servers typically use idle timeouts on the order of seconds.</t>
      <t>This document defines an EDNS0 option ("edns-tcp-keepalive") that allows DNS servers to signal a variable idle timeout. This signalling encourages the use of long-lived TCP connections by allowing the state associated with TCP transport to be managed effectively with minimal impact on the DNS transaction time.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7828'/>
  <seriesInfo name='DOI' value='10.17487/RFC7828'/>
</reference>

<reference anchor='RFC7830' target='https://www.rfc-editor.org/info/rfc7830'>
  <front>
    <title>The EDNS(0) Padding Option</title>
    <author fullname='A. Mayrhofer' initials='A.' surname='Mayrhofer'/>
    <date month='May' year='2016'/>
    <abstract>
      <t>This document specifies the EDNS(0) "Padding" option, which allows DNS clients and servers to pad request and response messages by a variable number of octets.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7830'/>
  <seriesInfo name='DOI' value='10.17487/RFC7830'/>
</reference>

<reference anchor='RFC7901' target='https://www.rfc-editor.org/info/rfc7901'>
  <front>
    <title>CHAIN Query Requests in DNS</title>
    <author fullname='P. Wouters' initials='P.' surname='Wouters'/>
    <date month='June' year='2016'/>
    <abstract>
      <t>This document defines an EDNS0 extension that can be used by a security-aware validating resolver configured to use a forwarding resolver to send a single query, requesting a complete validation path along with the regular query answer. The reduction in queries potentially lowers the latency and reduces the need to send multiple queries at once. This extension mandates the use of source-IP- verified transport such as TCP or UDP with EDNS-COOKIE, so it cannot be abused in amplification attacks.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='7901'/>
  <seriesInfo name='DOI' value='10.17487/RFC7901'/>
</reference>

<reference anchor='RFC8145' target='https://www.rfc-editor.org/info/rfc8145'>
  <front>
    <title>Signaling Trust Anchor Knowledge in DNS Security Extensions (DNSSEC)</title>
    <author fullname='D. Wessels' initials='D.' surname='Wessels'/>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <author fullname='P. Hoffman' initials='P.' surname='Hoffman'/>
    <date month='April' year='2017'/>
    <abstract>
      <t>The DNS Security Extensions (DNSSEC) were developed to provide origin authentication and integrity protection for DNS data by using digital signatures. These digital signatures can be verified by building a chain of trust starting from a trust anchor and proceeding down to a particular node in the DNS. This document specifies two different ways for validating resolvers to signal to a server which keys are referenced in their chain of trust. The data from such signaling allow zone administrators to monitor the progress of rollovers in a DNSSEC-signed zone.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8145'/>
  <seriesInfo name='DOI' value='10.17487/RFC8145'/>
</reference>

<reference anchor='RFC8914' target='https://www.rfc-editor.org/info/rfc8914'>
  <front>
    <title>Extended DNS Errors</title>
    <author fullname='W. Kumari' initials='W.' surname='Kumari'/>
    <author fullname='E. Hunt' initials='E.' surname='Hunt'/>
    <author fullname='R. Arends' initials='R.' surname='Arends'/>
    <author fullname='W. Hardaker' initials='W.' surname='Hardaker'/>
    <author fullname='D. Lawrence' initials='D.' surname='Lawrence'/>
    <date month='October' year='2020'/>
    <abstract>
      <t>This document defines an extensible method to return additional information about the cause of DNS errors. Though created primarily to extend SERVFAIL to provide additional information about the cause of DNS and DNSSEC failures, the Extended DNS Errors option defined in this document allows all response types to contain extended error information. Extended DNS Error information does not change the processing of RCODEs.</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='8914'/>
  <seriesInfo name='DOI' value='10.17487/RFC8914'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
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
3tBI1kPZiNw2DoICqPpP8nFDh5Nj846/kiU5zIhuQswWenS7xzzaArXz/PFo
eV6V6/K9dsadAHRiTt2hx2JFe9nwQlO8NlDSgXqJTeByiz4rjRu1fN+d68Pw
jrGrU9s5Ta9SFPktghCYxKWb0Pd8/zJqcBSmyxXeVIXmj9dWd2hTtoN3MM3c
AHqmO+jyOq10Ekbh88EsJEBe9WycluTta7hTmnbN4ik9b46HMqU3sPXtrNmx
RjXoSF46Ju9EpJvE+B4ZfUq/ONV4+tycbXUZ5oN5f8nMZWLomBjv6UVQxpeK
JQTV6CYvkP0ci2EkxtWHuB2Ed5CzdnuBvKxByyvI9YQVFleysTmloswSaQye
FFc83eo+GJe/5i8nMPcY4a49ApdGYY0YaXgUuZv656wIfFX2UKvpMxUgH0vb
CyxTBkqkBbdxK0+Gd9/tOCPxQFabzmwwvwr7cr7Fn5ZJmLyv7v+jmOlTh2AI
70mHsnhGXf7zTl/nmTt0orb/a5Mo01xye3vk+ra8domMbr6S1FeR3VuZ5cna
jT6u2maLp24EYp2uRa/bOdV2Tt437Dq0ySXCpViiGD1J4TLLmbprkO6bNC+h
iUP/o9xrZbQitQGEGWY+4UOa8ty/ra9DEjrRZZy4lTcBmndOPXFj8YHnvvSd
wubxt8w5sySV3Sus0BNfUobd7D2BRjsE8cJAHC5qIcSOEecy1b1ZoDDyAMfR
nkMbuN00f/ZB3zuYHWPVd83Ehe1f2d2jlPBZbs/U6XHmKox9Y8mLdkBjwOHQ
bcTGvYtHuV1OVjbvFnCFN6MBvy7xUJ/Mpcr7H2rGzoidTTYM9/gyRTF9PxwO
sy2L+KDybJTcrtPNGkJdvZFdVkkd4ukc1Dy6h1kc5emziJ6STVo18WvK+eUN
I2p5Qkx/ro/Zy+y2ySk6GIhnM+XeDv0RlL2HMi1Az4oIHzLPkRDwCQKDkPz0
c1pDz2vGxPRH+NE37k35iRbkzItL7sH/4T2f+E+N2ZwiMkTcg9c900WI7wA7
h9Iem+KEKNHjq3Ll2fzcHbmMMlah75wRaA3M2wN2z5PZMzAVuNX/iVtHcBoO
P3Yquyo5dzr4mnOn6rqv7JCdFlrzyrJps9ts9s7bo3a72YGw/6I/bDanT58Q
VBlgdXkYxe/v6afZ7b+vmqlffYU5kHtkA3JZynOTiPhre1pqnrbfv29Ac9DU
+/dmHpkA6Q4Ex0uL8BYxfElBJsUBbGbtdLlWV3g9gfiV7qDvA6SbrgO+v98R
VRVkVK3sdD4d6cdFFVlX3VBfxQmtkkJVJ2DT07jKwTRhZRBdCdN5g6bHwQpG
JZ5M+u0cgmaaaQ82cOuL+IF2inxhycn/fMniIfGl8qVOP2dfzuq7P2YhVKXP
W9AA7mXeaTUrVFXbUHp/WayZK1RVO0gr7jYuVs0KVdUelA4H97utZoWqah9L
35ZVfVuseox9dUqqZoWq6gmU0tLwnDfyxbxT74sYnU8KVU+x1NiVpFvNnmXV
VhNKOXtZICArVFVbioD89pUvWTZbV8UpULtAcq3K1JjRKk4BL9kXCdCFqmpX
EaAWx1VVzsqZVXG2StaUkS1qoKoq8rWwzsWt8hoSVyU1MdVDaQXoUsQX9ci8
WRrwn+7AMzj6rCSeTwjqaLc5eU64ns6/zHw7+KBvMtAqIsMXQrj6T57smJZY
vnks/nEOeXS77C907O4PMW8xlOALkBkldzClgQG3JABiAbyxEI/YSpwMkCYJ
wczEKsmWCxficJE8wID3pXc4e5UZLgDPvBeFxgAuOgo5VNyAoeY7+oAfgznm
JsH6LdlPwuCvh9dkgHM3/Qi2cZXKy5fs4NlmgR8SI8dLwujlyzNxgxe/oC9Z
hwpTI/ERX/0ZON4noJiYsUlnvkydNCS/1QU5pWdoDv3jUu3spIRmHnu07zEi
QeHtNDqNNo0dJRQP2gGPwmj77xnay5K/oKWIbVYqfxVj6S74Mx7nM9+18LsB
pcmez28DsEzX622pP6XLJMoV4hkS2kjCBHGyTWkqYEz9IYyk8s35/s8sL1k4
82Th3bB4bd6cZoDCypK/cMMrV2uMfKLczbNP/XExzRoa8GAu8+mI9cGEMi5T
vhxLlZVo6A8L9ksuy5Nxotl30E1iddCQiJ7lfafy8lGAoR7AeLxfIpZ/JAfh
ceV/AKdgNX2AbQAA

-->

</rfc>

