On Wed, Jan 20, 2021, at 09:17, Ben Schwartz wrote:
> As I noted in that discussion, the client generally doesn't know in 
> advance that they aren't needed.  

I am asserting that the client very much knows.  Indeed, it has to know.  If we 
define a new protocol that relies on SVCB and that protocol is able to use SVCB 
exclusively (which would be a good thing in my view, all this parallel DNS 
querying is unnecessary, even if the DNS protocol is pretty good at it), then a 
client can very much know.

> Another thing I like about the arrangement in #288 is that it 
> simplifies a protocol-independent app/library boundary.  The app can 
> say "SVCBQuery(hostname, prefixes)" and get back a fully resolved 
> object like {svcbEntries: [{...}, ...], hostIPs: [...]}.  

I'm suggesting that the interface might be a little wider.  If the interface is 
provided with a scheme, them the library might be able to lookup the scheme and 
know whether A/AAAA is needed, but it might be better to have a very different 
interface for those protocols that might need fallback as opposed to those that 
don't.

A protocol might genuinely need SVCB.  If additional SVCB information is 
critical to the operation of the protocol (think ECH here, but there might be 
other reasons for this), then the API might look like (eliding the attr-leaf 
and prefixing stuff):

svcb.query(name) -> svcbEntry[] // where the API fills in an address (or 
addresses) for each svcbEntry

This is far more ergonomic for something that doesn't care about A/AAAA.  And 
less wasteful.  If a fallback is possible, then you get something very 
different, which requires additional logic to handle:

svcb.query_with_fallback(name) -> Either<svcbEntry[], address[]>

_______________________________________________
DNSOP mailing list
DNSOP@ietf.org
https://www.ietf.org/mailman/listinfo/dnsop

Reply via email to