<?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.43 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-dnssd-tsr-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="TSR EDNS option for mDNS">Multicast DNS conflict resolution using the Time Since Received (TSR) EDNS option</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-tsr-04"/>
    <author fullname="Ted Lemon">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino</city>
          <code>California 95014</code>
          <country>United States of America</country>
        </postal>
        <email>mellon@fugue.com</email>
      </address>
    </author>
    <author fullname="Esko Dijk">
      <organization>IoTconsultancy.nl</organization>
      <address>
        <postal>
          <city>Utrecht</city>
          <country>Netherlands</country>
        </postal>
        <email>esko.dijk@iotconsultancy.nl</email>
      </address>
    </author>
    <date year="2026" month="October" day="31"/>
    <area>int</area>
    <workgroup>dnssd</workgroup>
    <keyword>mDNS</keyword>
    <keyword>TSR</keyword>
    <keyword>conflict resolution</keyword>
    <keyword>EDNS</keyword>
    <keyword>DNS</keyword>
    <abstract>
      <?line 59?>

<t>This document specifies a new conflict resolution mechanism for Multicast DNS (mDNS), for use in cases where the advertisement is
being proxied, rather than advertised directly, e.g. when using a combined DNS-SD advertising proxy and SRP
registrar. A new EDNS option Time Since Received (TSR) is defined that communicates the time at which the set of
resource records on a particular DNS owner name was most recently updated.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://datatracker.ietf.org/doc/html/draft-ietf-dnssd-tsr"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-dnssd-tsr/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:dnssd@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dnssd/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dnssd/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/dnssd-wg/draft-ietf-dnssd-tsr"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Unlike the Domain Name System <xref target="RFC1034"/>, with its authority servers and delegation of authority,
Multicast DNS has no single source of authority. Because of this, mDNS has a mechanism, conflict resolution
(<xref section="9" sectionFormat="of" target="RFC6762"/>) for detecting and fixing conflicts in mDNS advertisements.</t>
      <t>The current goal of mDNS conflict resolution is to prevent a newly advertised service from taking the place of
an existing service with the same name that is already being advertised. This goal, however, assumes that the
entity advertising an mDNS service is in fact authoritative for that service. For mDNS proxies, such as
an advertising proxy <xref target="I-D.ietf-dnssd-advertising-proxy"/>, this is not the case: the source of truth for
the service being advertised is a DNSSD Service Registration Protocol (SRP) <xref target="RFC9665"/> requester.</t>
      <t>On a link with more than one SRP registrar, an SRP requester may register with one SRP registrar, and then subsequently
update its registration on a different SRP registrar. Both SRP registrars may be acting as advertising proxies. If so, the
original SRP registrar may still be advertising the old SRP registration using mDNS. If the information in the new SRP
registration is identical to that in the old registration, this is often not a problem. However if some information has
changed (e.g., a new IP address has been added, or a TXT record updated), then the new registration will be seen to
be in conflict with the old registration. In addition, the method used in mDNS to detect conflicts can sometimes produce apparent
conflicts where no actual conflict exists because of the way records in mDNS packets are marshalled.</t>
      <t>In the case of such an apparent conflict, the current behavior of mDNS is for the older (stale) registration to win, and the
newer (current) information to be discarded. This behavior, which is entirely correct for services that are
advertising on their own behalf, is exactly wrong when a service advertisement is being proxied.</t>
      <section anchor="current-behavior">
        <name>Current Behavior</name>
        <t>When a new service is to be advertised, the registrant (the entity requesting the registration) typically registers the
service with a central mDNS registrar on the host on which it is running.  This mDNS registrar locally stores services
that have already been registered, and may detect a conflict with one of those registered services. This can be true whether
the conflicting service entry is data for which the mDNS registrar is authoritative (stored in its local registration
database), or an entry it has received via mDNS (stored in its cache).</t>
        <t>In the case of such a conflict, no network transaction is required: the mDNS registrar detects it locally. It
addresses the conflict in one of two ways. The first alternative is that the mDNS registrar will report the
conflict to the registrant as an error, which it must fix. Alternatively, if the registrant has indicated that
the mDNS registrar should automatically choose a new name for the service in case of conflict, the mDNS registrar does so
automatically, without necessarily notifying the registrant.</t>
        <t>Once any locally-detectable conflicts have been resolved, the mDNS registrar probes (see <xref section="8.1" sectionFormat="of" target="RFC6762"/>)
the local network to see if any other host has already registered a service name that conflicts with the proposed new
service name. If such a service name is present on the network, the mDNS registrar follows the same process previously
described: either report the error to the mDNS registrant or automatically choose a new name.</t>
        <t>The effect of this approach is that generally whichever registrant first registers a service under a particular name
wins. If another registrant comes along later and registers the same service name with conflicting service information,
the newcomer’s information is rejected.</t>
      </section>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>The current behavior works well for registrants registering services on their own behalf. However, for example in the case of
an SRP registrar, it works poorly: an SRP registrar acting as an advertising proxy publishes the contents of its
DNS zone using mDNS. The sources of truth for this information are the SRP requesters,
not the SRP registrar itself. The SRP registrar in this case acts as a proxy for the SRP requesters.</t>
        <t>In the case of an advertising proxy publishing records originating from an SRP Update, the most recent information
is correct; the older information is simply stale, and not competing.
When the SRP requester is able to continue registering with the same SRP registrar, this works well: stale
data is automatically removed and replaced with current data. However, if more than one SRP registrar is
available, the SRP requester may wind up sending its SRP Updates to a different SRP registrar. This can happen as a result of
a network partition event, or in cases where the SRP registrar is contacted using an anycast address.</t>
        <t>When the SRP requester sends its SRP Update to a different SRP registrar, the behavior of the mDNS conflict
resolution approach without TSR is that the SRP requester's service will be given a new name, and both the old (stale)
service advertisement (A) and the new (more recent) service advertisement (A’) will be discoverable as separate services.</t>
        <t>This creates a new burden on consumers of such services: they need to parse through the whole list of services of
their type, using metadata from the TXT record in the service instance data, if possible, to determine that
service A and service A’ are the same service. If no such information is present in the TXT record, the only way
to determine that one of these two advertised services is stale is to attempt to use the advertised service, which may
no longer be reachable if, for example, the change that produced the conflict was an IP address change. When the
SRP lease for the stale service expires, that service's mDNS advertisement will be removed, and the service will no
longer be discoverable under the original name, even if its IP address hasn't changed.</t>
        <t>This document proposes an enhancement to the current conflict resolution algorithm for mDNS, which allows an mDNS
proxy to report the time at which it received the registration for DNS records it is advertising, and the source from which
these records were received.
This is done using a new Time Since Received (TSR) EDNS(0) (<xref target="RFC6891"/>) option, of which there must be exactly one
per name being advertised by the mDNS proxy.</t>
      </section>
      <section anchor="conventions-terms-and-definitions">
        <name>Conventions, Terms and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>The list below defines the most important terms that are used in this document.
In addition, a reader is expected to be familiar with DNS terminology <xref target="RFC9499"/>, in particular
"EDNS", "OPT", "Owner", "resource record", "RR", and "RRset".</t>
        <dl>
          <dt><strong>absolute time</strong></dt>
          <dd>
            <t>a node-local timestamp that is derived from a local monotonic clock. This clock is not required to be synchronized
with any other clock, nor is it an absolute time in the sense of UTC. The clock may restart upon boot of the node but
not during regular operation.</t>
          </dd>
          <dt><strong>authoritative data</strong></dt>
          <dd>
            <t>DNS records stored in the local registration database, for which an mDNS registrar is authoritative (as defined
by <xref target="RFC6762"/>).</t>
          </dd>
          <dt><strong>cache</strong></dt>
          <dd>
            <t>each mDNS registrar maintains a cache of DNS records received from hosts on the local network, as described in <xref target="RFC6762"/>.
Information in the cache represents the mDNS registrar's current understanding of what records are advertised on the network.
Authoritative data may be present in the cache, but the presence of data in the cache does not in itself indicate that
the mDNS registrar is authoritative for that data.</t>
          </dd>
          <dt><strong>local registration database</strong></dt>
          <dd>
            <t>a database of DNS records maintained by the mDNS registrar. Records in this database are registered locally with
the mDNS registrar. The mDNS registrar is authoritative for all DNS records in this database.
When the mDNS registrar receives queries that match records in this database, the mDNS registrar can respond to these
queries with the matching records.</t>
          </dd>
          <dt><strong>mDNS registrar</strong></dt>
          <dd>
            <t>an mDNS <xref target="RFC6762"/> implementation on a host that accepts local requests for querying, advertising and registering
DNS records from one or more requesters and/or registrants. This could for example be an mDNS daemon process running
in an operating system, accepting API calls from local processes to register or update DNS records for that process.
It stores the locally-registered records in its local registration database.</t>
          </dd>
          <dt><strong>mDNS registrant</strong></dt>
          <dd>
            <t>an entity or software process that is attempting to register records for advertisement to a (local) mDNS registrar.</t>
          </dd>
          <dt><strong>mDNS requester</strong></dt>
          <dd>
            <t>an entity or software process that issues mDNS queries to a local mDNS registrar, via an API call.
The mDNS registrar is responsible for executing these queries and notifying the mDNS requester about the answer(s).</t>
          </dd>
          <dt><strong>mDNS proxy</strong></dt>
          <dd>
            <t>a host that runs an mDNS registrar and at least one mDNS registrant acting as a proxy. That is, it needs to advertise
mDNS records on behalf of one or more entities not located on the host itself.
The advertising proxy <xref target="I-D.ietf-dnssd-advertising-proxy"/> is an example of an mDNS proxy.</t>
          </dd>
          <dt><strong>SRP requester</strong></dt>
          <dd>
            <t>a client that uses the Service Registration Protocol (SRP) <xref target="RFC9665"/> to send an SRP Update to an SRP registrar.</t>
          </dd>
          <dt><strong>SRP registrar</strong></dt>
          <dd>
            <t>a server that accepts SRP Updates sent by SRP requesters using the SRP <xref target="RFC9665"/>.
DNS records registered via SRP to an SRP registrar may then be advertised by mDNS using an advertising proxy
<xref target="I-D.ietf-dnssd-advertising-proxy"/> located on the same host.
In that case, the SRP registrar process acts as an mDNS registrant towards its local mDNS registrar process.</t>
          </dd>
          <dt><strong>TSR data</strong></dt>
          <dd>
            <t>locally stored data, associated with a single DNS owner name, that keeps track of the absolute time ('TSR time') when a set of
resource records was last updated and includes a key checksum to identify the owner of these records.
It may be data proposed by an mDNS registrant's registration, or stored in the local registration database, or
extracted from a received mDNS advertisement by parsing a TSR option.</t>
          </dd>
          <dt><strong>TSR option</strong></dt>
          <dd>
            <t>an EDNS0 Time Since Received (TSR) option as defined by this specification.</t>
          </dd>
          <dt><strong>TSR time</strong></dt>
          <dd>
            <t>the (node-local) absolute time indicated by a particular TSR data.
The internal representation of TSR time is defined in <xref target="internal-tsr"/>, and comparisons in <xref target="tolerance"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="tsrrr">
      <name>Time Since Received EDNS Option</name>
      <t>Each Time Since Received (TSR) EDNS option is applicable to exactly one DNS owner name. So all the records for that owner
name that appear in the answer, authority and/or additional sections of an mDNS message would be covered by a single TSR
option.</t>
      <t>The TSR EDNS option has the following format:</t>
      <artset>
        <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="528" viewBox="0 0 528 208" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
            <path d="M 8,64 L 8,192" fill="none" stroke="black"/>
            <path d="M 264,64 L 264,192" fill="none" stroke="black"/>
            <path d="M 520,64 L 520,160" fill="none" stroke="black"/>
            <path d="M 8,64 L 520,64" fill="none" stroke="black"/>
            <path d="M 8,96 L 520,96" fill="none" stroke="black"/>
            <path d="M 8,128 L 520,128" fill="none" stroke="black"/>
            <path d="M 8,160 L 520,160" fill="none" stroke="black"/>
            <path d="M 8,192 L 264,192" fill="none" stroke="black"/>
            <g class="text">
              <text x="16" y="36">0</text>
              <text x="176" y="36">1</text>
              <text x="336" y="36">2</text>
              <text x="496" y="36">3</text>
              <text x="16" y="52">0</text>
              <text x="32" y="52">1</text>
              <text x="48" y="52">2</text>
              <text x="64" y="52">3</text>
              <text x="80" y="52">4</text>
              <text x="96" y="52">5</text>
              <text x="112" y="52">6</text>
              <text x="128" y="52">7</text>
              <text x="144" y="52">8</text>
              <text x="160" y="52">9</text>
              <text x="176" y="52">0</text>
              <text x="192" y="52">1</text>
              <text x="208" y="52">2</text>
              <text x="224" y="52">3</text>
              <text x="240" y="52">4</text>
              <text x="256" y="52">5</text>
              <text x="272" y="52">6</text>
              <text x="288" y="52">7</text>
              <text x="304" y="52">8</text>
              <text x="320" y="52">9</text>
              <text x="336" y="52">0</text>
              <text x="352" y="52">1</text>
              <text x="368" y="52">2</text>
              <text x="384" y="52">3</text>
              <text x="400" y="52">4</text>
              <text x="416" y="52">5</text>
              <text x="432" y="52">6</text>
              <text x="448" y="52">7</text>
              <text x="464" y="52">8</text>
              <text x="480" y="52">9</text>
              <text x="496" y="52">0</text>
              <text x="512" y="52">1</text>
              <text x="104" y="84">OPTION-CODE</text>
              <text x="160" y="84">=</text>
              <text x="188" y="84">TBD1</text>
              <text x="376" y="84">OPTION-LENGTH</text>
              <text x="440" y="84">=</text>
              <text x="460" y="84">10</text>
              <text x="108" y="116">RR</text>
              <text x="144" y="116">Index</text>
              <text x="352" y="116">Key</text>
              <text x="404" y="116">Checksum</text>
              <text x="456" y="116">...</text>
              <text x="64" y="148">...</text>
              <text x="96" y="148">Key</text>
              <text x="148" y="148">Checksum</text>
              <text x="372" y="148">Time</text>
              <text x="420" y="148">Offset</text>
              <text x="464" y="148">...</text>
              <text x="64" y="180">...</text>
              <text x="100" y="180">Time</text>
              <text x="148" y="180">Offset</text>
            </g>
          </svg>
        </artwork>
        <artwork type="ascii-art"><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-------------------------------+-------------------------------+
|      OPTION-CODE = TBD1       |       OPTION-LENGTH = 10      |
+-------------------------------+-------------------------------+
|           RR Index            |         Key Checksum ...      |
+-------------------------------+-------------------------------+
|     ... Key Checksum          |           Time Offset ...     |
+-------------------------------+-------------------------------+
|     ... Time Offset           |
+-------------------------------+
]]></artwork>
      </artset>
      <t>The TSR EDNS option includes three fields in the OPTION-DATA (<xref target="RFC6891"/>): 'RR Index' (two-byte integer in network
byte order), 'Key Checksum' (four bytes), and 'Time Offset' (four bytes).</t>
      <t>The 'RR Index' is the number of the RR in the mDNS packet. Question RRs are not counted.  So if the message includes two
answer RRs, one authority RR and two additional RRs, an index of 0 would refer to the first answer, an index of 1 to the
second answer, an index of 2 to the single authority record, and so on. Questions are excluded because they have no
data associated with them, and so it makes no sense to have TSR options associated with them.</t>
      <t>If there is more than one record in the mDNS message with the same owner name, only one TSR option is emitted for
that name, and it applies to every RR in the mDNS message with that owner name. It is not possible in the
SRP protocol for two updates at two different times to contain records that apply to the same name: in such a
situation, the second update completely replaces the first, so all data in the first update is then rendered stale.</t>
      <t>The second field, 'Key Checksum', is a simple 32-bit checksum of the public key that the owner of the data (for example
the SRP requester) used to authenticate itself. The key checksum is computed by treating the key as a series of 32-bit
unsigned integers in network byte order, and adding these integers together to produce a 32-bit unsigned checksum.
Overflow is not considered. This checksum need not be cryptographically secure: mDNS messages are not authenticated, so
an attacker on the local link can always cause problems with mDNS by providing spurious responses. The purpose of
the checksum is simply to notice whether, for a specific owner name, two different authoritative sources have provided
information.</t>
      <t>The 'Time Offset' field contains the difference, in seconds, between the time at which the TSR option is being
generated and the time of receipt of resource records for that owner name (as encoded in TSR data).</t>
      <t>The time offset is represented in the mDNS message as a time in seconds relative to the time when the mDNS message
is sent. If this difference is greater than 7 days (7 * 24 * 60 * 60 = 604,800), the mDNS registrar <bcp14>MUST</bcp14> use a value of 7 days
rather than the larger value.  The relative time value in the TSR option is converted to an absolute (local) time when stored
in a cache or a local registration database on an mDNS registrar as TSR data, and is converted back to a relative time whenever an
mDNS message with a TSR option is generated from local data.</t>
    </section>
    <section anchor="mdns-registrar-behavior">
      <name>mDNS Registrar Behavior</name>
      <section anchor="locval">
        <name>Validating requested local RR registrations with TSR data</name>
        <t>When a local mDNS registrant asks an mDNS registrar to register one or more records on an owner name, and provides TSR data
for that name, the mDNS registrar first checks that none of the records are marked shared. If any record is marked shared,
the mDNS registrar <bcp14>MUST</bcp14> respond with an error indicating that the registration is invalid.</t>
        <t>It then checks to see if there are any records either in cache or in its local registration database
on that owner name. If no such data exists, the mDNS registrar stores the record(s) in this registration in its local
registration database and puts them in the probing state.</t>
        <t>When such data exists, the registrar <bcp14>MUST</bcp14> check to see if it has TSR data for that owner name. If it does not, or if there
is TSR data on that name but the key checksum does not match, the registrar <bcp14>MUST</bcp14> treat this registration as a conflict
and return an appropriate error to the registrant.</t>
        <t>If such data exists and the key checksums match, there are three possibilities based on the known TSR time
(from the existing data) and the proposed TSR time (from the TSR data in the registration request):</t>
        <dl>
          <dt><strong>Known TSR time is more recent</strong></dt>
          <dd>
            <t>In this case, the registrar <bcp14>MUST</bcp14> treat the requested data as stale, and return an indication to the
registrant that its registration is stale. This indication must be distinct from the "appropriate error" indication of
conflict that was defined above.</t>
          </dd>
          <dt><strong>Both TSR times are the same (equal)</strong></dt>
          <dd>
            <t>In this case, cached data (if any) on the owner name is discarded first. Then, the requested records are added to
the local registration database, updating existing records (if any). Since the requested records are considered
identical to the known records, based on TSR time, no probing or announcing is performed for these records.</t>
          </dd>
          <dt><strong>Proposed TSR time is more recent</strong></dt>
          <dd>
            <t>In this case, cached data (if any) on the owner name is discarded first.
The registrant for any existing locally-registered data is notified that
the data they had previously registered is stale, and the stale data (if any) is removed from the local
registration database.
The requested records including TSR data are then added to the local registration database.
The records are put in the probing state only if needed, as described in <xref target="probing-or-updating"/>.
If probing is not performed, the new records are only announced (<xref section="8.4" sectionFormat="of" target="RFC6762"/>) and a "goodbye"
announcement (<xref section="10.1" sectionFormat="of" target="RFC6762"/>) with TSR option is sent for any RRset that is removed due to the
local registration database update.</t>
          </dd>
        </dl>
        <t>Note that any TSR time comparisons are performed with a small tolerance as defined in <xref target="tolerance"/>.</t>
        <t>It is in principle possible for two different mDNS registrants to ask the same mDNS registrar to publish different RRs on
the same name, some of which are shared and some of which are unique (see <xref section="2" sectionFormat="of" target="RFC6762"/>).
If an mDNS registrant tries to register an RR on a name for which the mDNS registrar already has data, cached or
authoritative, on the same name, whether of the same RR type or a different RR type, for which there is no TSR data, or for
which the key checksum in the TSR data being registered does not match what is already known, the registrar <bcp14>MUST</bcp14> treat
this as an immediate conflict, and <bcp14>MUST NOT</bcp14> add the data to its local registration database and <bcp14>MUST NOT</bcp14> probe.</t>
        <section anchor="probing-or-updating">
          <name>Probing or Updating when the proposed TSR time is more recent</name>
          <t>For the third case above where the proposed TSR time is more recent, the newly registered records are only put in the
probing state if the mDNS registrar does not
have unique ownership of the name yet. This follows <xref section="8.4" sectionFormat="of" target="RFC6762"/>: a host that has already
established unique ownership of a name does not repeat the probing step when it updates the records on that name,
but only re-announces them.
Therefore, an mDNS registrar that has already completed probing for the previous (now stale) set of records on this
owner name, that were stored in the local registration database, <bcp14>MUST NOT</bcp14> probe the newly registered records on this
same name.</t>
          <t>Cases where the mDNS registrar has not (yet) established unique ownership of the owner name include for example:</t>
          <ul spacing="normal">
            <li>
              <t>previous records on the name were present only in the cache (learned from another mDNS host on the link);</t>
            </li>
            <li>
              <t>records on the name are already locally registered but still in the probing state (i.e., probing has
not completed yet).</t>
            </li>
          </ul>
          <t>In any such cases the mDNS registrar <bcp14>MUST</bcp14> put the requested records in the probing state and treat them as tentative,
as with any new local mDNS registration, until they have been fully probed as described in <xref section="8.1" sectionFormat="of" target="RFC6762"/>.</t>
          <t>If probing for the owner name was already in progress, it <bcp14>SHOULD</bcp14> continue without restarting: only the proposed
records in the authority section (<xref section="8.2" sectionFormat="of" target="RFC6762"/>) are updated for the probe messages that
are still to be sent.</t>
        </section>
      </section>
      <section anchor="probing-resource-records-on-names-with-tsr-data">
        <name>Probing resource records on names with TSR data</name>
        <t><xref section="8.1" sectionFormat="of" target="RFC6762"/> describes how an mDNS registrar probes to ensure that there is
no conflicting data for records in the probing state. The behavior for records that are in the probing state with owner names to
which no TSR data applies remains unchanged.  When there is TSR data on a name for which records are being probed,
the mDNS registrar <bcp14>MUST</bcp14> include TSR options for each such name as described in <xref target="tsrrr"/> and <xref target="construct"/>. Handling of
responses is described in <xref target="procmes"/>.</t>
        <section anchor="probing-tsr-change-only">
          <name>Probing when only the TSR time has changed</name>
          <t>If the only change to the set of mDNS records advertised on a name with TSR data is the TSR time itself,
probing is not necessary and in this case an mDNS registrar <bcp14>MUST NOT</bcp14> probe.
The reason to eliminate this probe is that it avoids unnecessary multicast traffic:
in this situation the probe serves no purpose, since nothing substantive has changed and the mDNS registrar was
already authoritative for the records.</t>
        </section>
      </section>
      <section anchor="processing-mdns-questions-for-which-tsr-data-exists">
        <name>Processing mDNS questions for which TSR data exists</name>
        <t>When processing a question for which local TSR data is present, the mDNS registrar <bcp14>MUST</bcp14> first check to see if there is corresponding
data in the mDNS message being processed. In this case, before constructing a response,
the mDNS registrar <bcp14>MUST</bcp14> process the non-question records in the packet, since this could result in stale data being flushed. Processing
is performed as described in <xref target="procmes"/>.</t>
        <t>Once all non-question records have been processed, the registrar <bcp14>MUST</bcp14> respond to any questions that match
locally-registered resource records for which a known answer is not present in the query. Responses are constructed as
described in <xref target="construct"/>.</t>
      </section>
      <section anchor="receiving-mdns-messages-that-may-contain-tsr-options">
        <name>Receiving mDNS messages that may contain TSR options</name>
        <t>mDNS registrars that support TSR need to compute an absolute time based on a time offset. This means that registrars need
to know when the packet was received. A naive implementation might assume that the time that the packet is read off the
input queue by the registrar is close enough. However, in practice it can be the case on a heavily
loaded system that the time of receipt and the time of processing are far enough apart to create the appearance of
staleness.</t>
        <t>To avoid this, mDNS registrars that have an API available to get the actual time of receipt of a packet should make use
of that API. For example, the SO_TIMESTAMP_CONTINUOUS socket option is available on Linux and BSD Unix platforms,
including MacOS. When such APIs are not available, another option is to receive such packets on a high priority thread,
mark a timestamp and queue them for later processing.</t>
      </section>
      <section anchor="procmes">
        <name>Processing mDNS messages that may contain TSR options</name>
        <t>mDNS registrars that support the TSR option <bcp14>MUST</bcp14> check incoming messages for the presence of an EDNS(0) option containing
TSR options. mDNS registrars that do not support TSR will not do this check, and will behave as if no TSR options are present.
For non-proxy use cases, this should make no difference, since in such cases if multiple devices advertise records
on the same owner name, these are actually in conflict. However, for the proxy use case, what this means is that two
proxies that are proxying the same data cannot interoperate if one supports TSR and the other doesn't.</t>
        <t>It is important to note that mDNS messages, particularly in the case of proxies, can contain combined information
answering multiple queries that may be outstanding, and as such, it's entirely possible for an mDNS message sent by an
mDNS registrar that supports TSR to contain some answers for which there is TSR data, and some answers for which there
is not. It's equally possible that such a registrar will send mDNS packets containing no TSR options at all.</t>
        <t>When an mDNS message contains TSR options, for each TSR option in an mDNS message, the mDNS registrar first determines
the owner name of the TSR option by assigning
an index to each non-question resource record in the mDNS message. The 'RR Index' of each TSR option is then matched to the
index of a resource record, and the owner name for that resource record is applied to the TSR option. The TSR time
is then computed by taking the current local clock time and subtracting from it the 'Time Offset' value in
the TSR option.</t>
        <t>If there is a TSR option in an mDNS message for which there is no matching resource record in the mDNS message, the mDNS
registrar <bcp14>MUST</bcp14> ignore that TSR option. The mDNS registrar <bcp14>MUST NOT</bcp14> use the 'RR Index' value in the TSR option to search across the
mDNS packet since such an index can easily be out of bounds.</t>
        <t>Now, for each record in the mDNS message, the mDNS registrar first determines whether the record is an OPT record, is in
the question section, or is a known answer (QR bit <xref target="RFC1035"/> is '0' and it's a record in the answer section).
For all such records, no special processing is done for TSRs, since no TSR should exist in the mDNS message for these
records.</t>
        <t>For each remaining resource record in the mDNS message, the mDNS registrar <bcp14>MUST</bcp14> check to see if there is a TSR option in
the mDNS message for that owner name. If there is not, the mDNS registrar <bcp14>MUST</bcp14> check to see if there is TSR data with that
owner name locally. If there is not, the record is processed normally.</t>
        <t>If there is local TSR data for the record's owner name, but no TSR data for that owner name in the mDNS message,
the mDNS registrar checks to see if there are any resource records
in the local registration database on that name. If there are, all such records are treated as in
conflict. This conflict exists even if the locally registered records are all shared records. In cases where there are
records on the name in the cache, those records are all discarded, because they are in conflict with the new data.</t>
        <t>In the case that there is TSR data for the record in the mDNS message, and there are local records on the same owner name
for which there is no local TSR data, this always means that any
data is in conflict. How that conflict is addressed depends on the data. First, note that resource records in the answer
section of an mDNS query (QR bit is '0') are "known answers" and therefore are not relevant when adding data
to the cache. Such records can never have TSR options associated with them.  However, resource records in
the authority and additional sections of a query do need to be processed (but in the case of authority records, are not
added to the cache).</t>
        <t>In cases where the TSR data for a particular name is present both locally and in the mDNS message, the mDNS registrar
<bcp14>MUST</bcp14> compare the key checksums. If these are different, then the records are always in conflict, and are handled according
to the context of the conflict, as described in <xref section="9" sectionFormat="of" target="RFC6762"/>.</t>
        <t>In cases where the key checksums match, the mDNS registrar <bcp14>MUST</bcp14> compare the times. When the TSR time from the mDNS message
is more recent than the local TSR time, the local data in the cache is flushed.
Stale data in the local registration database is removed, and the mDNS registrant is informed that this data is stale.</t>
        <t>When the TSR times are the same, any resource records on that name in the answer section and additional section are added
to the cache.</t>
        <t>When the local TSR time is more recent, the data in the message is not added to the cache, and no action is taken with
respect to any locally-registered data.</t>
      </section>
      <section anchor="dupans">
        <name>Duplicate answer suppression behavior</name>
        <t><xref section="7.4" sectionFormat="of" target="RFC6762"/>, Duplicate Answer Suppression, describes behavior intended to prevent the redundant transmission
of duplicate answers. When an mDNS query is received for which the mDNS registrar has authoritative data, the mDNS registrar
will wait for a random amount of time before sending a response. If, during that time, a response is received that contains
all the answers it would have sent, it suppresses sending these answers, since they are redundant.
Such a received response is referred to as a "pre-empting response" from here on.</t>
        <t>In the case where TSR data is present locally or in a pre-empting response, it can be the case that the data in a pre-empting
response is stale or conflicting. For this reason, an mDNS registrar <bcp14>MUST NOT</bcp14> suppress duplicate answers when:</t>
        <ul spacing="normal">
          <li>
            <t>the TSR key checksum for the owner name in a pre-empting response does not match the local TSR key checksum for that
owner name</t>
          </li>
          <li>
            <t>TSR data is present locally for that owner name but is not present in the pre-empting response</t>
          </li>
          <li>
            <t>A TSR option is present for that owner name in the pre-empting response, but local authoritative data for that owner
name is present with no associated TSR data</t>
          </li>
          <li>
            <t>local authoritative data for that owner name is present and includes TSR data, and a TSR option for that owner name is
present in the pre-empting response, but the local TSR time for that owner name is more recent than the TSR time
for that owner name in the pre-empting response</t>
          </li>
        </ul>
        <t><xref target="dupasexample"/> shows what this might look like from the perspective of an mDNS requester.</t>
      </section>
      <section anchor="suppression-of-goodbye-announcements">
        <name>Suppression of "Goodbye" announcements</name>
        <t>When authoritative data is removed on an mDNS registrar because an mDNS message has been received with more recent
data, the mDNS registrar <bcp14>MUST NOT</bcp14> send a "goodbye" announcement for any RR/RRset on that owner name as a result of flushing
this stale data.</t>
        <t>The reason for this is that in the case where an mDNS registrant updates one or more RRsets on an owner name covered
by TSR data, and as a result of this some records are removed, but some remain, the mDNS registrar that was directly
updated will either send a "goodbye" announcement or an announcement with the cache flush bit set as specified in
<xref section="8.4" sectionFormat="of" target="RFC6762"/>. Since the mDNS registrar with the most current information has already done what is needed,
if an mDNS registrar that is flushing locally-registered data were to send a "goodbye" announcement this would at
best be redundant and hence wasteful use of multicast, and at worst might cause valid data to be flushed from the cache
on some mDNS registrar.</t>
      </section>
      <section anchor="suppression-of-redundant-probing">
        <name>Suppression of redundant probing</name>
        <t>There are use cases for TSR in which the same set of records, with the same TSR time, can be registered at multiple
mDNS registrars on multiple hosts.
Examples are:
* an mDNS registrant that registers its set of records to a remote SRP registrar via unicast, while at the same time
  it advertises these records itself, if needed, using mDNS as a backup solution.
* a group of two or more mDNS proxies that run a replication protocol, each one sharing any change to a set of records
  with its peers. Each proxy's mDNS registrar then can advertise the same records, for redundancy.</t>
        <t>If in such cases the registration triggers probing by an mDNS registrar, the situation of multiple mDNS registrars
probing at the same time for the same data needs to be avoided.
Therefore, the following requirement is imposed on any mDNS registrant using TSR:
the mDNS registrant (out of multiple) that first registers a set of records to an mDNS registrar <bcp14>MUST</bcp14> wait until the
records are successfully registered at this mDNS registrar, before it can trigger a registration at another mDNS registrar.
This makes it likely that any probing, if needed, is performed by the first mDNS registrar only and not by others.</t>
        <t>For example, if multiple mDNS registrants are peers in a replication protocol, then the replication of records from
the first (origin) peer to a second peer can only be confirmed to the second peer once the local registration to
the mDNS registrar on the first peer's host returns 'success' which implies the probing was done and the mDNS announce
message for the new records is either already sent on the link, or is pending transmission (i.e. queued
for Layer 2 multicast).
It is perfectly fine if the first peer sends the record data to the second peer earlier than that (for example, while
probing is ongoing) but the second peer's mDNS registrant must not register this data yet to its local mDNS registrar
before the first peer confirms its local registration was successful.</t>
        <t>Due to the above requirement, it will often be the case that one or more other mDNS registrars on the same link
already have the replicated records in their cache at the time that they receive the registration request
from a local mDNS registrant.
This cached data will then also have matching (equal) TSR times to the data being registered.
In such cases, these mDNS registrars apply the second case in <xref target="locval"/> ("Both TSR times are the same")
and no probing or announcing is performed for the data by these mDNS registrars.</t>
        <t>If an update by an mDNS registrant causes some RRsets to be removed on the mDNS registrar, then a goodbye
announcement is sent for those RRsets, but no probe is sent for RRs that are not removed.
If some new RRs are added in an update on a name the mDNS registrar already owns, probing can be skipped because
the mDNS registrar already knows it has ownership of the name.
So the new RRs can simply be announced immediately.</t>
        <t>Note that if the TSR time for a set of records is updated by an mDNS registrant, but nothing else changes,
the mDNS registrar does not re-probe those records as defined in <xref target="probing-tsr-change-only"/>.</t>
      </section>
      <section anchor="handling-multi-packet-mdns-advertisements">
        <name>Handling multi-packet mDNS advertisements</name>
        <t>It can happen, particularly when some sort of synchronization event occurs, such as the announcement of a new IPv6 prefix that
triggers many SRP registrations, that the mDNS records on a particular name do not all fit in the remaining space
in an mDNS packet during packet construction (see <xref target="construct"/>).
The mDNS protocol does not require that such records all be sent in the same mDNS message.
With mDNS probes and announcements that do not use TSR, this can result in conflicts when the information being announced
or probed is advertised by more than one mDNS proxy.</t>
        <t>In the case of mDNS proxies using TSR, if the TSR key checksums are the same, there is no possibility of a conflict,
and so this processing, including the simultaneous probe tiebreaking of <xref section="8.2.1" sectionFormat="of" target="RFC6762"/> and the conflict
detection of <xref section="9" sectionFormat="of" target="RFC6762"/>, need not be performed.
The TSR stale data processing defined by this document does not rely on all the records being present in a single mDNS message,
and so the stale data evaluations described in previous subsections are all that is needed to handle this case.</t>
        <t>Because of this, when an mDNS registrar is processing received mDNS records on a name with TSR data where the local and
received key checksums are identical, it <bcp14>MUST NOT</bcp14> treat a partial set of records in the received mDNS message
as a conflict or an indication of staleness.
Only the TSR time can be an indication of staleness in this case.</t>
      </section>
      <section anchor="construct">
        <name>Constructing an mDNS message with TSR options</name>
        <t>For each non-question record that is added to the mDNS message, one of three things must be true:</t>
        <ul spacing="normal">
          <li>
            <t>The mDNS registrar has locally-registered resource record(s) on that owner name, which may or may not be in the probing
state.</t>
          </li>
          <li>
            <t>It is sending an answer which is either an announcement or a response containing data it has already validated and for
which it is authoritative.</t>
          </li>
          <li>
            <t>The message is a query (QR bit is '0') and the record is in the answer section, and is therefore a "known answer."</t>
          </li>
        </ul>
        <t>As described in <xref section="7.1" sectionFormat="of" target="RFC6762"/>, an mDNS registrar asking a question about one
or more RRs on a particular name populates the answer section of its mDNS message with the answers it already knows, to
avoid unnecessary responses. However, in this case it can't also be probing for records on the same name, because probes
are only done for unique (non-shared) records.</t>
        <t>The requirements in <xref target="locval"/> mean that there can never be an mDNS probe message that contains known answer records on an
owner name for which any RR is being probed to which TSR data applies.</t>
        <t>This means that for any particular owner name that might be represented in an mDNS packet, it must be the case either that
it is not a known answer, or that it is a known answer and no other records exist in the mDNS packet with the same owner
name to which a TSR option would apply.  That is, one of two things must be true about the set of all records with a
particular owner name being added to the mDNS packet: either a TSR option applies to all these records, or it applies to
none of the records. Furthermore, either a record is a known answer from cache, or it is a locally-registered record.</t>
        <t>When constructing an mDNS message, the mDNS registrar maintains a set of names and associated TSR data. Initially this set is
empty. When the registrar adds a record to the mDNS message, if that record is locally registered, and if the registrar
has TSR data for that name, it first checks to see if it has already added TSR data for that name to the set. If not, then
it adds a new entry to the set containing the TSR data for the owner name of the RR. The data added consists of the
owner name, the index of the record being added (since it is the first), the key checksum, and the time offset.</t>
        <t>Once the mDNS registrar has finished adding resource records to the mDNS message,
it adds an OPT record in the additional section. In this OPT record it adds a TSR option for every name in the set that
was generated when adding resource records to the message. The time of receipt is subtracted from the current time to
produce the value for the 'Time Offset' field (as specified in <xref target="internal-tsr"/>).
This value is clamped to a maximum of seven days (604,800 seconds) <xref target="tsrrr"/>.</t>
        <t>Note that "goodbye" announcements for an owner name that has TSR data associated are also covered by the second bullet
above and therefore <bcp14>MUST</bcp14> have an associated TSR option in the mDNS message.</t>
      </section>
    </section>
    <section anchor="tolerance">
      <name>The Effect of Network Latency on Time Computations</name>
      <t>Because TSR time computations are affected by network latency as well as rounding effects (when computing the
'Time Offset' value in a TSR option), comparisons can’t be considered accurate.
It is therefore necessary to tolerate some amount of error or uncertainty when comparing two TSR times.</t>
      <t>This document defines a tolerance of 2 seconds for comparing two TSR times:
given two TSR times t1, t2 to compare, t1 equals t2 iff <tt>| t1 - t2 | &lt;= 2</tt>.</t>
      <t>In practice, however, it should generally not be the case that two mDNS registrars receive a registration from
a single source with different sets of records at nearly the same time.
For example, two SRP registrars acting as advertising proxy that both receive an SRP update from the same SRP
requester at nearly the same time with different data would be unlikely for a well-behaved SRP requester.
So it should always be the case that either there is a clear ordering to the TSR 'Time Offset' values as advertised
by the two mDNS registrars, or that there is no conflict in the two sets of data.
In the latter case, the above equality definition with tolerance holds true.</t>
      <t>For example, when sending SRP Updates with IP anycast, an SRP Update UDP retransmission triggered by a lost SRP
Update response could be routed to a different SRP registrar.
In this case both SRP registrars would receive identical data with a small time difference of at least
the minimum DNS over UDP retransmission interval (2-5 seconds per <xref section="4.2.1" sectionFormat="of" target="RFC1035"/>).
Depending on rounding effects and network delays, the resulting difference in the TSR 'Time Offset' value advertised
by the mDNS registrars could be 2 seconds, in which case the set of records would be (correctly) treated as being
identical and having no conflict, or it could be 3 seconds or higher, in which case there is a clear ordering to
the data with the latest registration "winning", which is also correct.</t>
    </section>
    <section anchor="internal-tsr">
      <name>Internal Handling of TSR Data</name>
      <t>The TSR 'Time Offset' value that is sent on the wire is expressed in seconds relative to the time of receipt of the
registration. In order to derive this value, the mDNS registrar must remember the (local) time at
which the registration occurred. This time is recorded as an absolute time, not a relative time. We refer to this as the
time of receipt or 'TSR time'.</t>
      <t>The resolution of the internal TSR time is implementation-specific. Typically it is stored in a higher resolution
than seconds, for example milliseconds or units of 10 milliseconds, to mitigate rounding errors as much as possible.</t>
      <t>When constructing a TSR option, the registrar computes the difference between the current time and the TSR time,
which must always be in the past. This difference, which should be a positive integer, is converted to
seconds, and that unsigned value is then used to synthesize the 'Time Offset' value in the TSR option.
The conversion to seconds <bcp14>MUST</bcp14> use a rounding operation (i.e. not use a 'floor' or 'ceil' operation).
Note that a 'Time Offset' value can be 0.</t>
    </section>
    <section anchor="timeliness-of-conflict-resolution">
      <name>Timeliness of Conflict Resolution</name>
      <t>If a conflict exists in which some mDNS registrant(s) store stale data, it is expected that the conflict is recent,
and that it will be resolved quickly since mDNS message exchanges with TSR options cause removal of the stale data.
Different hosts may be able to record shorter or longer time offsets, depending on their implementation.
However, because of this expectation of recentness, mDNS
registrars should never need to report a TSR option 'Time Offset' value of longer than seven days.
It’s reasonable to expect that every mDNS implementation should be able to remember time intervals of at least seven days.</t>
      <t>This maximum time interval is normatively defined in <xref target="tsrrr"/>.</t>
    </section>
    <section anchor="legacy-behavior">
      <name>Legacy Behavior</name>
      <t>mDNS registrars and queriers that do not support the TSR option are expected to ignore the option, so they will behave
as if no TSR option was sent. This may result in such registrars temporarily caching stale data. However, in the
normal course of processing, more recent data will win. In cases where it does not, the Reconfirm process which
is part of <xref target="RFC6762"/> already works to clear stale data: since SRP registrars are expected to implement
TSR, by the time a Reconfirm is attempted, all authoritative stale data should have been cleared.</t>
    </section>
    <section anchor="when-to-use-tsr">
      <name>When to Use TSR</name>
      <t>There are no cases where using TSR is harmful, but in the case of individual devices advertising individual services
with mDNS, it may be of little benefit. The reason for this is that when two devices both claim the same name to
use for advertising services, their advertisements will be seen as in conflict whether or not TSR is present. In
this case, TSR does no harm, but most likely does not help.</t>
      <section anchor="use-of-tsr-with-redundant-proxies">
        <name>Use of TSR with redundant proxies</name>
        <t>Use of TSR is most beneficial in the case of redundant mDNS proxies. The reason for this is that such proxies tend
to publish data that could potentially produce name conflicts as a result of updates: when one proxy is publishing
an old version of the data and another proxy is publishing a new version of the data, and these data differ,
this can appear as a name conflict and result in renaming. So for this use case, the use of TSR is very beneficial.</t>
      </section>
      <section anchor="use-of-tsr-with-multihomed-devices">
        <name>Use of TSR with multihomed devices</name>
        <t>It can also happen that a multihomed device uses SRP to register when connected to one sort of network, and uses
mDNS to advertise the same service when connected to another sort of network. For example, the device may have
capabilities to connect to a constrained network to reduce power use, but also to occasionally connect to a WiFi
network either for backup or for bulk data transfers. In this situation we have two potentially competing mDNS
advertisements.  The first is that of the mDNS registrar on the multihomed device, which is directly advertising
its own service using mDNS. The second is the one or more advertising proxies that are advertising services
registered via SRP using mDNS. Both datasets are coming from the same source, and the advertising proxy will use TSR
to identify the source. To avoid spurious conflicts, a device that sometimes registers with SRP and sometimes
advertises with mDNS <bcp14>SHOULD</bcp14> use TSR when advertising with mDNS.</t>
      </section>
      <section anchor="tsr-in-networks-with-non-compliant-mdns-caches">
        <name>TSR in networks with non-compliant mDNS caches</name>
        <t>Some network infrastructure devices available commercially provide "mDNS cache" services or "mDNS proxy" services
that purport to allow mDNS discovery across links that are separate at the IP layer and do not share a multicast
domain. These services generally cause mDNS to become unreliable in various ways, and it would be helpful to be
able to use TSR to distinguish between stale data advertised by such devices, and fresh data advertised directly
from the device that is authoritative for that data.</t>
        <t>Unfortunately, for the most part these devices do not cache mDNS packets, but rather cache data advertised using
mDNS. As a result, if such devices do not support TSR, we get no benefit from TSR.</t>
        <t>That said, such devices <bcp14>SHOULD</bcp14> support TSR, and if they do this might prevent some of their failure modes. What
this would mean would be that any DNS RRs cached or forwarded by such devices would be accompanied by any TSR
data applicable to them. When forwarded with no time delay, the TSR data could be copied verbatim (following
the rules for generating packets with TSR given in <xref target="construct"/>).</t>
        <t>When such RRs are cached and later resent, they would also be accompanied by their TSR data. The mDNS cache service
would need to record the time at which they were received. When retransmitting such cached data, the cache
service would need to adjust the time offset in the TSR option, by first subtracting the time
at which the cached RRs were received from the current time, and then increasing the offset in the applicable
TSR option by that amount, up to the limit of 7 days.</t>
        <t>The use of such caches and forwarders is <bcp14>NOT RECOMMENDED</bcp14>. We mention the use of TSR for such use cases because
it can mitigate some of the failure modes of such caches and forwarders. However, the use of Discovery Proxy
<xref target="RFC8766"/> in such instances is preferred: as the size of the network covered by such caching and forwarding
services increases, the amount of mDNS traffic they create increases, and this is often addressed by limiting which
services are available for discovery. Discovery Proxy uses unicast DNS, and therefore does not suffer from
these limitations.</t>
      </section>
    </section>
    <section anchor="registrant-api-considerations">
      <name>Registrant API Considerations</name>
      <t>When a registrant registers a service at its mDNS registrar and requests the use of a time of receipt, the registrant <bcp14>MUST</bcp14> also specify when it
received the original registration. In order to support this, the API is required not only to allow the registrant to specify
that TSR conflict resolution is wanted, but also to provide a way for the registrant to specify an absolute time at
which the original registration was received, and the key checksum used to identify the entity that's actually authoritative
for the data.</t>
      <t>This is important, for example, in the case of SRP Replication <xref target="I-D.ietf-dnssd-srp-replication"/>, where an
SRP registrar may receive a registration from a peer during startup synchronization. This registration will have
occurred at some significant amount of time in the past, and so it would be incorrect for the mDNS registrar receiving
the registration to use the time that the registrant registers the service as the time of receipt.</t>
      <section anchor="removing-data-that-is-still-valid">
        <name>Removing data that is still valid</name>
        <t>In some cases, a proxy may need to stop being a proxy, but may be proxying RRs that are also being proxied by one or
more other proxies. In this case, if the proxy sends a "goodbye" announcement for such RRs, they will be removed
from the caches of mDNS registrars that receive such announcements.</t>
        <t>To prevent this, an mDNS registrar implementation that implements TSR <bcp14>MUST</bcp14> provide a way for an mDNS registrant to indicate
that such data is being withdrawn from publication by that registrant, but is still valid. When the registrant indicates that
this is the case, the mDNS registrar <bcp14>MUST NOT</bcp14> send "goodbye" announcements for such data.</t>
      </section>
      <section anchor="primarysecondary-indication">
        <name>Primary/Secondary indication</name>
        <t>When more than one proxy is authoritative for a particular RR, this can generate excessive answer traffic, and also
redundant "goodbye" announcements. mDNS registrar implementations that support TSR <bcp14>MUST</bcp14> provide a way for a new proxy mDNS
registrant to indicate that it is primary or secondary. When an RRset registered by a secondary proxy is later removed, the
mDNS registrar <bcp14>MUST NOT</bcp14> send a "goodbye" announcement for that RRset.</t>
        <t>Similarly, when an RR is registered by a registrant that indicates that it is secondary, the mDNS registrar <bcp14>MUST NOT</bcp14>
respond to the initial mDNS query for that RR. Only if a second mDNS query retransmission is received, within 5 seconds
of the initial query reception, should it respond.</t>
        <t>Note that any change of indication from primary to secondary, or vice versa, while an mDNS registrant already has
records registered on the mDNS registrar is out of scope of this specification and an API to indicate such changes
is not required on the mDNS registrar.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The TSR option is an optimization: it ameliorates an edge case for mDNS proxies. A malicious host on the same link could
use the TSR option to win conflict resolution processes. However, because TSR is only used by proxies, this technique
will not work for normal mDNS service registrations: in that case, normal mDNS conflict resolution is done, and the
attacker gains no benefit from using TSR.</t>
      <t>Whether or not an mDNS registration has a recorded time of receipt, an attacker can deny service by announcing its
own conflicting data and then answering the subsequent probe as described in <xref section="9" sectionFormat="of" target="RFC6762"/>.
Because it does not include a TSR option in its authority section, it can win the simultaneous conflict resolution
process that follows its bogus announcement.</t>
      <t>So the TSR-based conflict resolution process creates no new vulnerability. Addressing the existing vulnerability is
out of scope for this document. Protocols that rely on mDNS <bcp14>MUST NOT</bcp14> assume that mDNS service is secure or
private. If security (authentication, authorization and/or secrecy) is needed, these must be provided at the
application layer, or by using DNSSEC rather than mDNS for service discovery.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is requested to allocate a new OPT RR option code from the DNS EDNS0 Option Codes (OPT) registry, in the
Domain Name System (DNS) Parameters registry group, for the 'Time Since Received' Option.</t>
      <artwork><![CDATA[
Value:     TBD1 - allocated by IANA
Name:      mDNS-TSR
Status:    Standard
Reference: [THIS-RFC]
]]></artwork>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1034" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml">
          <front>
            <title>Domain names - concepts and facilities</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised basic definition of The Domain Name System. It obsoletes RFC-882. This memo describes the domain style names and their used for host address look up and electronic mail forwarding. It discusses the clients and servers in the domain name system and the protocol used between them.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1034"/>
          <seriesInfo name="DOI" value="10.17487/RFC1034"/>
        </reference>
        <reference anchor="RFC1035" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
          <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="RFC6762" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6762.xml">
          <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="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="RFC8766" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8766.xml">
          <front>
            <title>Discovery Proxy for Multicast DNS-Based Service Discovery</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>This document specifies a network proxy that uses Multicast DNS to automatically populate the wide-area unicast Domain Name System namespace with records describing devices and services found on the local link.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8766"/>
          <seriesInfo name="DOI" value="10.17487/RFC8766"/>
        </reference>
        <reference anchor="RFC9499" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml">
          <front>
            <title>DNS Terminology</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="K. Fujiwara" initials="K." surname="Fujiwara"/>
            <date month="March" year="2024"/>
            <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 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 updates RFC 2308 by clarifying the definitions of "forwarder" and "QNAME". It obsoletes RFC 8499 by adding multiple terms and clarifications. Comprehensive lists of changed and new definitions can be found in Appendices A and B.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="219"/>
          <seriesInfo name="RFC" value="9499"/>
          <seriesInfo name="DOI" value="10.17487/RFC9499"/>
        </reference>
        <reference anchor="RFC9665" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9665.xml">
          <front>
            <title>Service Registration Protocol for DNS-Based Service Discovery</title>
            <author fullname="T. Lemon" initials="T." surname="Lemon"/>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <date month="June" year="2025"/>
            <abstract>
              <t>The Service Registration Protocol (SRP) for DNS-based Service Discovery (DNS-SD) uses the standard DNS Update mechanism to enable DNS-SD using only unicast packets. This makes it possible to deploy DNS-SD without multicast, which greatly improves scalability and improves performance on networks where multicast service is not an optimal choice, particularly IEEE 802.11 (Wi-Fi) and IEEE 802.15.4 networks. DNS-SD Service registration uses public keys and SIG(0) to allow services to defend their registrations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9665"/>
          <seriesInfo name="DOI" value="10.17487/RFC9665"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-dnssd-advertising-proxy">
          <front>
            <title>Advertising Proxy for DNS-SD Service Registration Protocol</title>
            <author fullname="Stuart Cheshire" initials="S." surname="Cheshire">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Ted Lemon" initials="T." surname="Lemon">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Esko Dijk" initials="E." surname="Dijk">
              <organization>IoTconsultancy.nl</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   An Advertising Proxy advertises the contents of a DNS zone, for
   example maintained using the DNS-SD Service Registration Protocol
   (SRP), using Multicast DNS.  This allows legacy clients to discover
   services registered with SRP using Multicast DNS.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-advertising-proxy-06"/>
        </reference>
        <reference anchor="I-D.ietf-dnssd-srp-replication">
          <front>
            <title>Automatic Replication of DNS-SD Service Registration Protocol Zones</title>
            <author fullname="Ted Lemon" initials="T." surname="Lemon">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Abtin Keshavarzian" initials="A." surname="Keshavarzian">
              <organization>Google</organization>
            </author>
            <author fullname="Jonathan Hui" initials="J." surname="Hui">
              <organization>Google</organization>
            </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document describes a protocol that can be used for ad-hoc
   replication of a DNS zone by multiple servers where a single primary
   DNS authoritative server is not available and the use of stable
   storage is not desirable.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dnssd-srp-replication-02"/>
        </reference>
      </references>
    </references>
    <?line 785?>

<section anchor="dupasexample">
      <name>Duplicate Answer Suppression Example</name>
      <t>As described in <xref target="dupans"/>, it is possible that two proxies may respond to an mDNS query with answers to the same question,
where the data for a particular owner name in both answers is authoritative and unique, but where the TSR time in the
earlier message is earlier than the TSR time in the later message. In this case, we will see the data from the earlier
message added and then removed, followed by the data in the later message being added. Consider the following example
using Apple's mDNSResponder implementation.</t>
      <ol spacing="normal" type="1"><li>
          <t>mDNS requester A sends a multicast query for AAAA records on the name "example.local"</t>
        </li>
        <li>
          <t>mDNS registrar for proxy B sends a multicast response of 2001:db8:0:42::1 with TSR time T</t>
        </li>
        <li>
          <t>mDNS registrar for proxy C sends a multicast response of 2001:db8:0:17::1 with TSR time T+300</t>
        </li>
      </ol>
      <t>Note that TSR times are absolute times, but these are represented in the mDNS message as relative times, so for example
"TSR time T+300" when sent at time T+400 would be represented in the mDNS message as a time offset of 100 seconds, and
if the message in (2) were sent at nearly the same time, it would have a time offset of about 400 seconds.</t>
      <t>In between (2) and (3) we would expect mDNS requester A to see a callback to its DNSServiceQueryRecord call, providing a
AAAA record of 2001:db8:0:42::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing bit clear.</t>
      <t>After (3) we would expect mDNS requester A to see two callbacks to its DNSServiceQueryRecord call. The first would provide
a AAAA record of 2001:db8:0:42::1 with the kDNSServiceFlagsAdd bit clear and the kDNSServiceFlagsMoreComing bit set. The
second would provide a AAAA record of 2001:db8:0:17::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing
bit clear.</t>
      <t>Note that we would not normally see the reverse sequence:</t>
      <ol spacing="normal" type="1"><li>
          <t>mDNS requester A sends a multicast query for AAAA records on the name "example.local"</t>
        </li>
        <li>
          <t>mDNS registrar for proxy C sends a multicast response of 2001:db8:0:17::1 with TSR time T+300</t>
        </li>
        <li>
          <t>mDNS registrar for proxy B sends a multicast response of 2001:db8:0:42::1 with TSR time T</t>
        </li>
      </ol>
      <t>This is because in this case we would expect duplicate answer suppression to result in the mDNS registrar for proxy B suppressing
its response. However, it is possible that B might not see the response from C. In that situation, A would receive both
responses, but since the TSR time on the second response is earlier than the TSR time on the first response, we would see
only one callback, providing an AAAA record of 2001:db8:0:17::1 with the kDNSServiceFlagsAdd bit set and the kDNSServiceFlagsMoreComing
bit clear.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge reviewers and contributors.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V923LcVnbo+/4KHPpBpNNsS7LGFyaThJbkMSu2pCGp+KRS
qQTdjSYxQgM9AJpUj0en8ht5O99yPiVfctZ9rw2gKTmZqqhqxs1uYF/WXvfb
Pj09DX3ZV8VZdvTTrurLZd712YtXV9myqddVueyztuiaateXTZ3turK+yfrb
IrsuN0V2VdbLIrsslkV5V6yy4+ury5PsJb7cbPH5o5AvFm1xB2PDT/6XbN20
2Qb+PgrLvC9umnZ/lnX9KoRVs6zzDSxn1ebr/rQs+vXpqu661WnftaePn4Vu
t9iUXQeD9PstPHfx8vr7LPssy6uugYnKelVsC/i/uj+aZUfFquybtswr/OPi
/Dv4D8x8dHF5/f1RqHebRdGehRUs4SzAhrui7nbdWda3uyLAsr8MeVvkZ1lZ
9+G+ad/dtM1uC0vD9YR3xR6+W52F7JS2gv+FbeJ/JmCHX7+Up/A/d0W9g0mz
TMb8+XfwmXf0M8yEcP4d/gLfbvKykkn/HuExb9ob+Dpvl7dn2W3fb7uzL77A
h/AbOIm5PvQFfvHFom3uu+ILev8LnLDsb3cLGfD0/uaLKUjDcxVApevjDACl
vG/z5buijTPAcX1x22+q6UFCvutvmxZBBANm2XpXVXy614AvPxYbhAv8g5Hy
uvxTjoA6y86326rILurlnH4seP+boqqa+u/Xu5tdMV82G/qt69uigDW+rgt5
7U3evst+zvf087LsAa+e77ZF25d1w981K5j/eV6VgIN1mWff/ubxk2fy067u
ERPf1mUPC7zqEQRZs87ON0ULpBHGG3nZvWuyF+Uf3k1s5KK5RqQCssrr5X5e
V34/Bbw4X8GLf182/cRjvPa3sMHlbZ8u71UBJNhWeb3qQqibdgPz3REyXX7/
/MnjL5/Fj7+Rj199/dVT/fjNt0/k4zdff/WVfPz22bff6sevvoLXQlmv/dAX
py/m7njz1R0CFRnC6bZt3u8nnuna7WlbbIESGCAhhNPT0yxfdIhHfQjXt2WX
AQrtNkCuWbctluW6BIjnWV3cT3KgDUADINxtiIOkHOsYqfBkRr/sugKoNoPf
YLh7gFZBbEtXXdCEZRcWBVIabqAsVrOszRGy8Ghex2dX2aqEU+ir/Swr5jdz
HE95YQ6r3CzKGh6CyU+vXmQOMDTuPoNzyq4u34S2uClx5+08O6cNeoZ4mKEi
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
mQogDELeZZYUjurLhH+HYxQ70LQrVR+1/h37x+0ZlVYTmtShmne2X4d0MOjg
pRAnPaC5wfIhyk2TugUrGtUyQclDhxHPGA88ZwwDCPm2XbzGRDl7OlTO2sKS
dCLZIgGZZ54UbVIRCBUk+Z6KE4KTDVO9zHDLA89bCIehZ1DusJHVBO+RxgMY
Hqu7XVuYL4rENNar+dJyc5U8hETs/LcaTv+4lWZMIh83FLGTxVWJTuC0BYvo
tdhUEJRIYLNSIRazmlnH8P6ZkV7kBZr1hlk85MZTluMjn8R+MI2GSJE5wAi1
Od/mAxHXL7+gVdq3u2UPuJ39AN9VnGIfLHrCeUBDO2MJEOEUH4ciJJ0Mg02k
I2vVPkxRV8BuovztKb7yQSO0PICWG0oYkmVKksmZpvznrv1A9Nx06UI4RjcL
A1tIW2zsJY0tc0XuIxQd6k9svuUdO2KKqtxg0XrBYzClaQkwBoDvmnKFWBLn
3FhjPRh/vS6XZ0GXYIFWR7aUhUkaqwS0ZhiIX1JwjTLXsdEY1h+ht95DXs3i
Yb8V7OkmDGuqMsE7EvioceHahSD7owX4IzIb/Nm7J47RbXwzt9fcW8y//dmJ
bDwcknG+85EPWlsAkLMbA2Del5cELYzeKGV9NR84QhakKWVGKLwBJY/DBBoz
uPFs6lPb8pBbUaaInmIfM/WlbB7DYtGTwYtdVztUTebuOELiBpr0DRjNcrMY
Ko+dWFcUkgaTSXvF1VOgDI6YEIs0wmTy/kSMUUxRcYNJ2ou6KtIiHaqWwEoW
5U+5P52JUsiUyREWc26hIXEiCikJVTMjHHcNIT1lebrbbakYF5/UynaJ94+L
0sytl/swqdgXmyJX4LlJcEysD0fIOJuMkIa0DSvDxZ6mOXVXSgtRNuXNbS8N
I02g8vz2l4xHLpZ8hesiW6qsUWMDiIO2IhVFaTeGCiPqRY0V/L4NBaIOJupj
DLa3dlu32gSEKmMKEMjVHjAkR18ZF5YMlueC08OgtecmLVZHtrIMkMhY04en
QKFfVpoorzPnWq5A5FRzovV1wzw5cz1Kh0fMLcm4oML6Z+AMN4UUPXBvvYmA
eq6QlSZSmL6EkeRANgSMDWNyt82k2P7q9b9eX/z08ur6/Kc3//r89avri1dv
X7+9yrqGBnNpsLYc+PtH0CrfE6S+u3qBLZTfYzPSHllCNwvRX/lTvnx9JVX5
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
UcHUAAA=

-->

</rfc>
