-
|
On the device we're developing (small battery powered nRF52840 sensor tag, Thread Sleepy End Device usinc NCS v2.7.0), when trying to discover DNS services using the I setup a sniffer, and the border router only returns one entry per request. (Unsure how to attach a packet capture here, refer to the thread on Nordic's devzone if you want to see it: https://devzone.nordicsemi.com/f/nordic-q-a/127157/openthread-dns-service-discovery-only-every-returns-one-result-how-to-get-all-results-on-the-network/562085) This can be worked around by calling |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
|
@kkufalk1, thanks for the detailed question. The behavior you are seeing is actually the expected behavior. The key point to understand here is the difference between how When you use Because standard unicast DNS is a request/response protocol (unlike mDNS, which is a continuous multicast subscription model), the Border Router's Discovery Proxy issues the mDNS query on the infrastructure link on the node's behalf. As soon as the proxy discovers the first result, the Border Router packages that into a unicast DNS response and sends it back to the Thread device to resolve the query. It does not hold the connection open to wait for all possible slow-responders on the network. In contrast, Avahi uses multicast DNS directly. References for this behavior: This is covered in the Thread Specification. Section 14.3.4 ("Requirements for Servers hosting a Service Registry") states:
Here is the relevant excerpt from RFC 8766 (Discovery Proxy for Multicast DNS-Based Service Discovery) Section 5.6:
Another place to look is the Thread Specification, Section 14.3.5.3 ("Discovering Services"):
Please note that the DNS Push mechanism is not supported/implemented in OpenThread for either device side or on Border Routers (although an implementation of DSO (DNS Stateful Operations) does exist - intended for another use-case). Contributions from interested parties are always welcome! |
Beta Was this translation helpful? Give feedback.


@kkufalk1, thanks for the detailed question.
The behavior you are seeing is actually the expected behavior. The key point to understand here is the difference between how
otDnsClientBrowse()operates on a Thread node (using a unicast DNS query) versus how multicast DNS (mDNS) tools like Avahi operate.When you use
otDnsClientBrowse(), the device sends a standard unicast DNS query to a DNS server/resolver (which is typically a Thread Border Router on the mesh acting as a Discovery Proxy). It is important to note that this API does not perform a continuous Multicast DNS (mDNS) query.Because standard unicast DNS is a request/response protocol (unlike mDNS, which is a continuous multicast su…