(I've Bcc'd dnssd, but if you want to join this discussion it's probably
best to do it in one wg, and I think it's most relevant to dnssd, so I put
dnssd in the To: field)

We've been talking elsewhere (Thread) about a small issue that comes up in
constrained networks that if we want to do service discovery, and we get a
PTR record for a service, then the next thing we need is the SRV and TXT
records for the service instance, and that's two queries.

Now, in general although there is no RFC that expressly forbids QDCOUNT > 1
(or if there is, I couldn't find it, please clue me in), we don't generally
support it (my code returns REFUSED, and so does BIND9). This makes sense,
because we don't know how to answer if one query succeeds and the other
fails.

I know Paul Vixie had an idea years back to have an EDNS1 that returns
multiple RCODEs, which might have addressed the problem, but the draft died
before it was published as an RFC.

I have a somewhat less ambitious proposal that I think works and solves the
specific problem we have in DNSSD. The query for the TXT and SRV records
/always/ have the same domain name. So a query for these records can never
return NXDOMAIN for one and not for the other. The other possible errors
that can be returned would most likely be returned for both queries.

That's it, it's that simple: either we return RCODE=0 and zero or more
answers (where ANCOUNT(type)=0 -> no records of that type), or NXDOMAIN,
meaning that there are no records on that name, or some other error,
meaning what that error means.

The downside to this proposal is obviously that supporting it across the
entire great Internet is kind of hard, but we really only need it for
dnssd, and dnssd is very explicitly local, not global. If you are doing
DNSSD through a full-service resolver to a remote domain, that's a weird
configuration.

Also, if your DNSSD resolver /doesn't/ support QDCOUNT==2, you get back a
FORMERR (or maybe it crashes, which is also a good outcome, since it will
lead to them implementing this). In this case you just do the query as two
queries, and you lose in this case, but most of the time you win, so it's
worth making the change.

Thotz?

Note that while it's tempting to think that we might use this in other
cases, where there is more than one name in the query set, in practice I
don't think that would ever make sense for DNSSD. You can't ask for the SRV
and TXT records until you've done a browse, and you don't know the hostname
yet, so really all you can put in the query are the SRV and TXT records.
_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to