diff --git a/.travis/script.sh b/.travis/script.sh index 1b2236251..dd71d6fd7 100755 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -66,13 +66,13 @@ python --version || die -DOPENTHREAD_CONFIG_COMMISSIONER_ENABLE=1 \ -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1 \ -DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1 \ - -DOPENTHREAD_CONFIG_DIAG_ENABLE=1" + -DOPENTHREAD_CONFIG_DIAG_ENABLE=1 \ + -DOPENTHREAD_CONFIG_DNS_CLIENT_ENABLE=1" scan-build ./configure \ --enable-builtin-mbedtls=no \ --enable-cert-log \ --enable-cli \ - --enable-dns-client \ --enable-ecdsa \ --enable-executable=no \ --enable-ftd \ @@ -98,7 +98,6 @@ python --version || die --enable-builtin-mbedtls=no \ --enable-cert-log \ --enable-cli \ - --enable-dns-client \ --enable-ecdsa \ --enable-executable=no \ --enable-ftd \ diff --git a/Android.mk b/Android.mk index a1b5adea8..44c4c9895 100644 --- a/Android.mk +++ b/Android.mk @@ -57,7 +57,7 @@ OPENTHREAD_COMMON_FLAGS += \ -DOPENTHREAD_CONFIG_COMMISSIONER_ENABLE=1 \ -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1 \ -DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1 \ - -DOPENTHREAD_ENABLE_DNS_CLIENT=1 \ + -DOPENTHREAD_CONFIG_DNS_CLIENT_ENABLE=1 \ -DOPENTHREAD_ENABLE_MTD_NETWORK_DIAGNOSTIC=1 \ -DOPENTHREAD_ENABLE_REFERENCE_DEVICE=0 \ $(NULL) diff --git a/Makefile.am b/Makefile.am index 3d58c80a6..b76c0a012 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,7 +34,6 @@ AM_DISTCHECK_CONFIGURE_FLAGS = \ --enable-address-sanitizer \ --enable-cert-log \ --enable-cli \ - --enable-dns-client \ --enable-ftd \ --enable-joiner \ --enable-mac-filter \ diff --git a/configure.ac b/configure.ac index 10c39d981..2b7d7afa8 100644 --- a/configure.ac +++ b/configure.ac @@ -1111,36 +1111,6 @@ AC_SUBST(OPENTHREAD_NCP_SPINEL_ENCRYPTER_LIBS) AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER],[${OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER}],[Define to 1 if using NCP Spinel Encrypter]) AM_CONDITIONAL([OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER], [test "${OPENTHREAD_ENABLE_NCP_SPINEL_ENCRYPTER}" = "1"]) -# -# DNS Client -# - -AC_ARG_ENABLE(dns_client, - [AS_HELP_STRING([--enable-dns-client],[Enable DNS client support @<:@default=no@:>@.])], - [ - case "${enableval}" in - - no|yes) - enable_dns_client=${enableval} - ;; - - *) - AC_MSG_ERROR([Invalid value ${enable_dns_client} for --enable-dns-client]) - ;; - esac - ], - [enable_dns_client=no]) - -if test "$enable_dns_client" = "yes"; then - OPENTHREAD_ENABLE_DNS_CLIENT=1 -else - OPENTHREAD_ENABLE_DNS_CLIENT=0 -fi - -AC_SUBST(OPENTHREAD_ENABLE_DNS_CLIENT) -AM_CONDITIONAL([OPENTHREAD_ENABLE_DNS_CLIENT], [test "${enable_dns_client}" = "yes"]) -AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_DNS_CLIENT],[${OPENTHREAD_ENABLE_DNS_CLIENT}],[Define to 1 if you want to enable DNS Client]) - # # SNTP Client # @@ -1694,7 +1664,6 @@ AC_MSG_NOTICE([ OpenThread Jam Detection support : ${enable_jam_detection} OpenThread MAC Filter support : ${enable_mac_filter} OpenThread Legacy network support : ${enable_legacy} - OpenThread DNS Client support : ${enable_dns_client} OpenThread SNTP Client support : ${enable_sntp_client} OpenThread Raw Link-Layer support : ${enable_raw_link_api} OpenThread Service support : ${enable_service} diff --git a/examples/common-switches.mk b/examples/common-switches.mk index b5b8ba80e..d32694c1e 100644 --- a/examples/common-switches.mk +++ b/examples/common-switches.mk @@ -123,7 +123,7 @@ configure_OPTIONS += --disable-docs endif ifeq ($(DNS_CLIENT),1) -configure_OPTIONS += --enable-dns-client +COMMONCFLAGS += -DOPENTHREAD_CONFIG_DNS_CLIENT_ENABLE=1 endif ifeq ($(ECDSA),1) diff --git a/include/openthread/dns.h b/include/openthread/dns.h index f1008f6a4..f38ca9ba8 100644 --- a/include/openthread/dns.h +++ b/include/openthread/dns.h @@ -94,7 +94,7 @@ typedef void (*otDnsResponseHandler)(void * aContext, /** * This function sends a DNS query for AAAA (IPv6) record. * - * This function is available only if feature `OPENTHREAD_ENABLE_DNS_CLIENT` is enabled. + * This function is available only if feature `OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE` is enabled. * * @param[in] aInstance A pointer to an OpenThread instance. * @param[in] aQuery A pointer to specify DNS query parameters. diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 26d3d57b5..41cfec7bb 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -121,7 +121,7 @@ const struct Command Interpreter::sCommands[] = { {"diag", &Interpreter::ProcessDiag}, #endif {"discover", &Interpreter::ProcessDiscover}, -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE {"dns", &Interpreter::ProcessDns}, #endif #if OPENTHREAD_FTD @@ -226,7 +226,7 @@ Interpreter::Interpreter(Instance *aInstance) , mCount(1) , mInterval(1000) , mPingTimer(*aInstance, &Interpreter::HandlePingTimer, this) -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE , mResolvingInProgress(0) #endif , mUdp(*this) @@ -253,9 +253,9 @@ Interpreter::Interpreter(Instance *aInstance) mIcmpHandler.mContext = this; otIcmp6RegisterHandler(mInstance, &mIcmpHandler); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE memset(mResolvingHostname, 0, sizeof(mResolvingHostname)); -#endif // OPENTHREAD_ENABLE_DNS_CLIENT +#endif // OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE } int Interpreter::Hex2Bin(const char *aHex, uint8_t *aBin, uint16_t aBinLength) @@ -928,7 +928,7 @@ exit: AppendResult(error); } -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE void Interpreter::ProcessDns(int argc, char *argv[]) { otError error = OT_ERROR_NONE; diff --git a/src/cli/cli.hpp b/src/cli/cli.hpp index bfaa9334e..6db03fccd 100644 --- a/src/cli/cli.hpp +++ b/src/cli/cli.hpp @@ -222,7 +222,7 @@ private: void ProcessDiag(int argc, char *argv[]); #endif // OPENTHREAD_CONFIG_DIAG_ENABLE void ProcessDiscover(int argc, char *argv[]); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE void ProcessDns(int argc, char *argv[]); #endif #if OPENTHREAD_FTD @@ -341,7 +341,7 @@ private: static void HandleLinkPcapReceive(const otRadioFrame *aFrame, bool aIsTx, void *aContext); static void HandleDiagnosticGetResponse(otMessage *aMessage, const otMessageInfo *aMessageInfo, void *aContext); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE static void HandleDnsResponse(void * aContext, const char * aHostname, otIp6Address *aAddress, @@ -359,7 +359,7 @@ private: void HandleEnergyScanResult(otEnergyScanResult *aResult); void HandleLinkPcapReceive(const otRadioFrame *aFrame, bool aIsTx); void HandleDiagnosticGetResponse(Message &aMessage, const Ip6::MessageInfo &aMessageInfo); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE void HandleDnsResponse(const char *aHostname, Ip6::Address &aAddress, uint32_t aTtl, otError aResult); #endif #if OPENTHREAD_ENABLE_SNTP_CLIENT @@ -377,7 +377,7 @@ private: uint32_t mInterval; TimerMilli mPingTimer; otIcmp6Handler mIcmpHandler; -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE bool mResolvingInProgress; char mResolvingHostname[OT_DNS_MAX_HOSTNAME_LENGTH]; #endif diff --git a/src/core/Makefile.am b/src/core/Makefile.am index b37afaa4b..1bcf863e5 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -328,6 +328,7 @@ HEADERS_COMMON = \ config/dhcp6_client.h \ config/dhcp6_server.h \ config/diag.h \ + config/dns_client.h \ config/openthread-core-config-check.h \ config/openthread-core-default-config.h \ crypto/aes_ccm.hpp \ diff --git a/src/core/api/dns_api.cpp b/src/core/api/dns_api.cpp index 256f9db82..4f379c901 100644 --- a/src/core/api/dns_api.cpp +++ b/src/core/api/dns_api.cpp @@ -40,7 +40,7 @@ using namespace ot; -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE otError otDnsClientQuery(otInstance *aInstance, const otDnsQuery *aQuery, otDnsResponseHandler aHandler, void *aContext) { Instance &instance = *static_cast(aInstance); diff --git a/src/core/common/instance.hpp b/src/core/common/instance.hpp index 5b1979ed0..47f31e7d1 100644 --- a/src/core/common/instance.hpp +++ b/src/core/common/instance.hpp @@ -584,7 +584,7 @@ template <> inline MeshCoP::Joiner &Instance::Get(void) } #endif -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE template <> inline Dns::Client &Instance::Get(void) { return mThreadNetif.mDnsClient; diff --git a/src/core/config/dns_client.h b/src/core/config/dns_client.h new file mode 100644 index 000000000..914bc84ca --- /dev/null +++ b/src/core/config/dns_client.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2019, The OpenThread Authors. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the copyright holder nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * This file includes compile-time configurations for the DNS Client. + * + */ + +#ifndef CONFIG_DNS_CLIENT_H_ +#define CONFIG_DNS_CLIENT_H_ + +/** + * @def OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE + * + * Define to 1 to enable DNS Client support. + * + */ +#ifndef OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE +#define OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE 0 +#endif + +/** + * @def OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT + * + * Maximum time that DNS Client waits for response in milliseconds. + * + */ +#ifndef OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT +#define OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT 3000 +#endif + +/** + * @def OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT + * + * Maximum number of retransmissions for DNS client. + * + */ +#ifndef OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT +#define OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT 2 +#endif + +#endif // CONFIG_DNS_CLIENT_H_ diff --git a/src/core/config/openthread-core-default-config.h b/src/core/config/openthread-core-default-config.h index 92b858451..43eb1e4fe 100644 --- a/src/core/config/openthread-core-default-config.h +++ b/src/core/config/openthread-core-default-config.h @@ -419,26 +419,6 @@ #define OPENTHREAD_CONFIG_MAX_STATECHANGE_HANDLERS 1 #endif -/** - * @def OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT - * - * Maximum time that DNS Client waits for response in milliseconds. - * - */ -#ifndef OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT -#define OPENTHREAD_CONFIG_DNS_RESPONSE_TIMEOUT 3000 -#endif - -/** - * @def OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT - * - * Maximum number of retransmissions for DNS client. - * - */ -#ifndef OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT -#define OPENTHREAD_CONFIG_DNS_MAX_RETRANSMIT 2 -#endif - /** * @def OPENTHREAD_CONFIG_SNTP_RESPONSE_TIMEOUT * diff --git a/src/core/net/dns_client.cpp b/src/core/net/dns_client.cpp index c7fda7ac2..31df6a611 100644 --- a/src/core/net/dns_client.cpp +++ b/src/core/net/dns_client.cpp @@ -37,7 +37,7 @@ #include "net/udp6.hpp" #include "thread/thread_netif.hpp" -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE /** * @file @@ -526,4 +526,4 @@ exit: } // namespace Dns } // namespace ot -#endif // OPENTHREAD_ENABLE_DNS_CLIENT +#endif // OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE diff --git a/src/core/openthread-core-config.h b/src/core/openthread-core-config.h index eee0c85ca..ecc588119 100644 --- a/src/core/openthread-core-config.h +++ b/src/core/openthread-core-config.h @@ -54,6 +54,7 @@ #include "config/dhcp6_client.h" #include "config/dhcp6_server.h" #include "config/diag.h" +#include "config/dns_client.h" #if OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE || OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE || \ OPENTHREAD_CONFIG_COMMISSIONER_ENABLE || OPENTHREAD_ENABLE_JOINER diff --git a/src/core/thread/thread_netif.cpp b/src/core/thread/thread_netif.cpp index 9e4c7d998..5c2e587de 100644 --- a/src/core/thread/thread_netif.cpp +++ b/src/core/thread/thread_netif.cpp @@ -59,9 +59,9 @@ ThreadNetif::ThreadNetif(Instance &aInstance) #if OPENTHREAD_CONFIG_ENABLE_SLAAC , mSlaac(aInstance) #endif -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE , mDnsClient(Get()) -#endif // OPENTHREAD_ENABLE_DNS_CLIENT +#endif // OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE #if OPENTHREAD_ENABLE_SNTP_CLIENT , mSntpClient(Get()) #endif // OPENTHREAD_ENABLE_SNTP_CLIENT @@ -128,7 +128,7 @@ void ThreadNetif::Up(void) SubscribeAllNodesMulticast(); Get().Enable(); Get().Start(kCoapUdpPort); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE Get().Start(); #endif #if OPENTHREAD_ENABLE_SNTP_CLIENT @@ -144,7 +144,7 @@ void ThreadNetif::Down(void) { VerifyOrExit(mIsUp); -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE Get().Stop(); #endif #if OPENTHREAD_ENABLE_SNTP_CLIENT diff --git a/src/core/thread/thread_netif.hpp b/src/core/thread/thread_netif.hpp index 095ba7b7d..d9aef0418 100644 --- a/src/core/thread/thread_netif.hpp +++ b/src/core/thread/thread_netif.hpp @@ -173,9 +173,9 @@ private: #if OPENTHREAD_CONFIG_ENABLE_SLAAC Utils::Slaac mSlaac; #endif -#if OPENTHREAD_ENABLE_DNS_CLIENT +#if OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE Dns::Client mDnsClient; -#endif // OPENTHREAD_ENABLE_DNS_CLIENT +#endif // OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE #if OPENTHREAD_ENABLE_SNTP_CLIENT Sntp::Client mSntpClient; #endif // OPENTHREAD_ENABLE_SNTP_CLIENT