From d93521de0674ea857e84e6b1ff1e8b3195e410ea Mon Sep 17 00:00:00 2001 From: Song GUO Date: Thu, 2 Mar 2023 14:42:29 +0800 Subject: [PATCH] [dnssd] add API for getting the upstream query status (#8815) --- include/openthread/dnssd_server.h | 14 +++++++++++ include/openthread/instance.h | 2 +- src/cli/cli.cpp | 42 ++++++++++++++++++++++--------- src/core/api/dns_server_api.cpp | 5 ++++ src/core/net/dnssd_server.hpp | 9 +++++++ 5 files changed, 59 insertions(+), 13 deletions(-) diff --git a/include/openthread/dnssd_server.h b/include/openthread/dnssd_server.h index 8ac14c417..cd6463c23 100644 --- a/include/openthread/dnssd_server.h +++ b/include/openthread/dnssd_server.h @@ -260,6 +260,20 @@ const otDnssdCounters *otDnssdGetCounters(otInstance *aInstance); */ void otDnssdUpstreamQuerySetEnabled(otInstance *aInstance, bool aEnabled); +/** + * Returns whether the DNSSD server will forward DNS queries to the platform DNS upstream API. + * + * Available when `OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE` is enabled. + * + * @param[in] aInstance A pointer to an OpenThread instance. + * @retval TRUE If the DNSSD server will forward DNS queries. + * @retval FALSE If the DNSSD server will not forward DNS queries. + * + * @sa otDnssdUpstreamQuerySetEnabled + * + */ +bool otDnssdUpstreamQueryIsEnabled(otInstance *aInstance); + /** * @} * diff --git a/include/openthread/instance.h b/include/openthread/instance.h index aa4f01c82..42a93095d 100644 --- a/include/openthread/instance.h +++ b/include/openthread/instance.h @@ -53,7 +53,7 @@ extern "C" { * @note This number versions both OpenThread platform and user APIs. * */ -#define OPENTHREAD_API_VERSION (292) +#define OPENTHREAD_API_VERSION (293) /** * @addtogroup api-instance diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 7b2a359f7..018174bc3 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -3166,21 +3166,39 @@ template <> otError Interpreter::Process(Arg aArgs[]) error = OT_ERROR_INVALID_ARGS; } #if OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE - /** - * @cli dns server upstream {enable|disable} - * @code - * Done - * @endcode - * @cparam dns server upstream @ca{enable|disable} - * @par api_copy - * #otDnssdUpstreamQuerySetEnabled - */ else if (aArgs[1] == "upstream") { - bool enable; + /** + * @cli dns server upstream + * @code + * dns server upstream + * Enabled + * Done + * @endcode + * @par api_copy + * #otDnssdUpstreamQueryIsEnabled + */ + if (aArgs[2].IsEmpty()) + { + OutputEnabledDisabledStatus(otDnssdUpstreamQueryIsEnabled(GetInstancePtr())); + } + /** + * @cli dns server upstream {enable|disable} + * @code + * dns server upstream enable + * Done + * @endcode + * @cparam dns server upstream @ca{enable|disable} + * @par api_copy + * #otDnssdUpstreamQuerySetEnabled + */ + else + { + bool enable; - SuccessOrExit(error = ParseEnableOrDisable(aArgs[2], enable)); - otDnssdUpstreamQuerySetEnabled(GetInstancePtr(), enable); + SuccessOrExit(error = ParseEnableOrDisable(aArgs[2], enable)); + otDnssdUpstreamQuerySetEnabled(GetInstancePtr(), enable); + } } #endif // OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE else diff --git a/src/core/api/dns_server_api.cpp b/src/core/api/dns_server_api.cpp index 1bdf4fca2..62e69fc17 100644 --- a/src/core/api/dns_server_api.cpp +++ b/src/core/api/dns_server_api.cpp @@ -87,6 +87,11 @@ const otDnssdCounters *otDnssdGetCounters(otInstance *aInstance) } #if OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE +bool otDnssdUpstreamQueryIsEnabled(otInstance *aInstance) +{ + return AsCoreType(aInstance).Get().IsUpstreamQueryEnabled(); +} + void otDnssdUpstreamQuerySetEnabled(otInstance *aInstance, bool aEnabled) { return AsCoreType(aInstance).Get().SetUpstreamQueryEnabled(aEnabled); diff --git a/src/core/net/dnssd_server.hpp b/src/core/net/dnssd_server.hpp index a71bf8708..cf38ffc4f 100644 --- a/src/core/net/dnssd_server.hpp +++ b/src/core/net/dnssd_server.hpp @@ -206,6 +206,15 @@ public: */ void OnUpstreamQueryDone(UpstreamQueryTransaction &aQueryTransaction, Message *aResponseMessage); + /** + * This method indicates whether the server will forward DNS queries to platform DNS upstream API. + * + * @retval TRUE If the server will forward DNS queries. + * @retval FALSE If the server will not forward DNS queries. + * + */ + bool IsUpstreamQueryEnabled(void) const { return mEnableUpstreamQuery; } + /** * This method enables or disables forwarding DNS queries to platform DNS upstream API. *