diff --git a/.travis/script.sh b/.travis/script.sh index c531cffcf..5cee330a0 100755 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -64,13 +64,13 @@ python --version || die -DOPENTHREAD_CONFIG_COAP_API_ENABLE=1 \ -DOPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE=1 \ -DOPENTHREAD_CONFIG_COMMISSIONER_ENABLE=1 \ - -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1" + -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1 \ + -DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1" scan-build ./configure \ --enable-builtin-mbedtls=no \ --enable-cert-log \ --enable-cli \ - --enable-dhcp6-server \ --enable-diag \ --enable-dns-client \ --enable-ecdsa \ @@ -98,7 +98,6 @@ python --version || die --enable-builtin-mbedtls=no \ --enable-cert-log \ --enable-cli \ - --enable-dhcp6-server \ --enable-diag \ --enable-dns-client \ --enable-ecdsa \ diff --git a/Android.mk b/Android.mk index 6e3d72811..f067e0e2e 100644 --- a/Android.mk +++ b/Android.mk @@ -56,7 +56,7 @@ OPENTHREAD_COMMON_FLAGS += \ -DOPENTHREAD_CONFIG_COAP_API_ENABLE=1 \ -DOPENTHREAD_CONFIG_COMMISSIONER_ENABLE=1 \ -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1 \ - -DOPENTHREAD_ENABLE_DHCP6_SERVER=1 \ + -DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1 \ -DOPENTHREAD_ENABLE_DNS_CLIENT=1 \ -DOPENTHREAD_ENABLE_MTD_NETWORK_DIAGNOSTIC=1 \ -DOPENTHREAD_ENABLE_REFERENCE_DEVICE=0 \ diff --git a/Makefile.am b/Makefile.am index 701819953..789773a6f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,7 +34,6 @@ AM_DISTCHECK_CONFIGURE_FLAGS = \ --enable-address-sanitizer \ --enable-cert-log \ --enable-cli \ - --enable-dhcp6-server \ --enable-diag \ --enable-dns-client \ --enable-ftd \ diff --git a/configure.ac b/configure.ac index 81b4ad2b1..5ed9afb22 100644 --- a/configure.ac +++ b/configure.ac @@ -1143,36 +1143,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"]) -# -# DHCPv6 Server -# - -AC_ARG_ENABLE(dhcp6_server, - [AS_HELP_STRING([--enable-dhcp6-server],[Enable DHCPv6 server support @<:@default=no@:>@.])], - [ - case "${enableval}" in - - no|yes) - enable_dhcp6_server=${enableval} - ;; - - *) - AC_MSG_ERROR([Invalid value ${enable_dhcp6_server} for --enable-dhcp6-server]) - ;; - esac - ], - [enable_dhcp6_server=no]) - -if test "$enable_dhcp6_server" = "yes"; then - OPENTHREAD_ENABLE_DHCP6_SERVER=1 -else - OPENTHREAD_ENABLE_DHCP6_SERVER=0 -fi - -AC_SUBST(OPENTHREAD_ENABLE_DHCP6_SERVER) -AM_CONDITIONAL([OPENTHREAD_ENABLE_DHCP6_SERVER], [test "${enable_dhcp6_server}" = "yes"]) -AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_DHCP6_SERVER],[${OPENTHREAD_ENABLE_DHCP6_SERVER}],[Define to 1 if you want to enable DHCPv6 Server]) - # # DNS Client # @@ -1757,7 +1727,6 @@ AC_MSG_NOTICE([ OpenThread MAC Filter support : ${enable_mac_filter} OpenThread Factory Diagnostics support : ${enable_diag} OpenThread Legacy network support : ${enable_legacy} - OpenThread DHCPv6 Server support : ${enable_dhcp6_server} OpenThread DNS Client support : ${enable_dns_client} OpenThread SNTP Client support : ${enable_sntp_client} OpenThread Raw Link-Layer support : ${enable_raw_link_api} diff --git a/examples/common-switches.mk b/examples/common-switches.mk index 24f61d7b0..03e952f64 100644 --- a/examples/common-switches.mk +++ b/examples/common-switches.mk @@ -111,7 +111,7 @@ COMMONCFLAGS += -DOPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE=1 endif ifeq ($(DHCP6_SERVER),1) -configure_OPTIONS += --enable-dhcp6-server +COMMONCFLAGS += -DOPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE=1 endif ifeq ($(DIAGNOSTIC),1) diff --git a/src/core/Makefile.am b/src/core/Makefile.am index f1f155cb7..a0eee88e4 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -326,6 +326,7 @@ HEADERS_COMMON = \ config/coap.h \ config/commissioner.h \ config/dhcp6_client.h \ + config/dhcp6_server.h \ config/openthread-core-config-check.h \ config/openthread-core-default-config.h \ crypto/aes_ccm.hpp \ diff --git a/src/core/common/instance.hpp b/src/core/common/instance.hpp index 6778c4951..0ad13a9ec 100644 --- a/src/core/common/instance.hpp +++ b/src/core/common/instance.hpp @@ -605,7 +605,7 @@ template <> inline Dhcp6::Dhcp6Client &Instance::Get(void) } #endif -#if OPENTHREAD_ENABLE_DHCP6_SERVER +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE template <> inline Dhcp6::Dhcp6Server &Instance::Get(void) { return mThreadNetif.mDhcp6Server; diff --git a/src/core/config/dhcp6_server.h b/src/core/config/dhcp6_server.h new file mode 100644 index 000000000..7606afe9f --- /dev/null +++ b/src/core/config/dhcp6_server.h @@ -0,0 +1,58 @@ +/* + * 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 DHCPv6 Server. + * + */ + +#ifndef CONFIG_DHCP6_SERVER_H_ +#define CONFIG_DHCP6_SERVER_H_ + +/** + * @def OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE + * + * Define to 1 to enable DHCPv6 Server support. + * + */ +#ifndef OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE +#define OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE 0 +#endif + +/** + * @def OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES + * + * The number of dhcp prefixes. + * + */ +#ifndef OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES +#define OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES 4 +#endif + +#endif // CONFIG_DHCP6_SERVER_H_ diff --git a/src/core/config/openthread-core-default-config.h b/src/core/config/openthread-core-default-config.h index 370a7c3a5..df5a4760d 100644 --- a/src/core/config/openthread-core-default-config.h +++ b/src/core/config/openthread-core-default-config.h @@ -813,16 +813,6 @@ #define OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION otPlatLog #endif -/** - * @def OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES - * - * The number of dhcp prefixes. - * - */ -#ifndef OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES -#define OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES 4 -#endif - /** * @def OPENTHREAD_CONFIG_ENABLE_SLAAC * diff --git a/src/core/net/dhcp6_server.cpp b/src/core/net/dhcp6_server.cpp index c0a02824d..83cebe775 100644 --- a/src/core/net/dhcp6_server.cpp +++ b/src/core/net/dhcp6_server.cpp @@ -41,7 +41,7 @@ #include "thread/mle.hpp" #include "thread/thread_netif.hpp" -#if OPENTHREAD_ENABLE_DHCP6_SERVER +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE namespace ot { namespace Dhcp6 { @@ -64,7 +64,7 @@ otError Dhcp6Server::UpdateService(void) Lowpan::Context lowpanContext; // remove dhcp agent aloc and prefix delegation - for (int i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (int i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { bool found = false; @@ -149,7 +149,7 @@ otError Dhcp6Server::AddPrefixAgent(const otIp6Prefix &aIp6Prefix, const Lowpan: otError error = OT_ERROR_NONE; PrefixAgent *newEntry = NULL; - for (int i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (int i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { if (!mPrefixAgents[i].IsValid()) { @@ -312,7 +312,7 @@ otError Dhcp6Server::ProcessIaAddress(Message &aMessage, uint16_t aOffset) error = OT_ERROR_PARSE); // mask matching prefix - for (uint8_t i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (uint8_t i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { if (mPrefixAgents[i].IsValid() && mPrefixAgents[i].IsPrefixMatch(option.GetAddress())) { @@ -394,7 +394,7 @@ otError Dhcp6Server::AppendIaNa(Message &aMessage, IaNa &aIaNa) if (mPrefixAgentsMask) { - for (uint8_t i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (uint8_t i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { if ((mPrefixAgentsMask & (1 << i))) { @@ -434,7 +434,7 @@ otError Dhcp6Server::AppendIaAddress(Message &aMessage, ClientIdentifier &aClien if (mPrefixAgentsMask) { // if specified, only apply specified prefixes - for (uint8_t i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (uint8_t i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { if (mPrefixAgentsMask & (1 << i)) { @@ -445,7 +445,7 @@ otError Dhcp6Server::AppendIaAddress(Message &aMessage, ClientIdentifier &aClien else { // if not specified, apply all configured prefixes - for (uint8_t i = 0; i < OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES; i++) + for (uint8_t i = 0; i < OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES; i++) { if (mPrefixAgents[i].IsValid()) { @@ -485,4 +485,4 @@ otError Dhcp6Server::AppendRapidCommit(Message &aMessage) } // namespace Dhcp6 } // namespace ot -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE diff --git a/src/core/net/dhcp6_server.hpp b/src/core/net/dhcp6_server.hpp index e712ec792..baa2c59cd 100644 --- a/src/core/net/dhcp6_server.hpp +++ b/src/core/net/dhcp6_server.hpp @@ -214,7 +214,7 @@ private: Ip6::UdpSocket mSocket; - PrefixAgent mPrefixAgents[OPENTHREAD_CONFIG_NUM_DHCP_PREFIXES]; + PrefixAgent mPrefixAgents[OPENTHREAD_CONFIG_DHCP6_SERVER_NUM_PREFIXES]; uint8_t mPrefixAgentsCount; uint8_t mPrefixAgentsMask; }; diff --git a/src/core/openthread-core-config.h b/src/core/openthread-core-config.h index 0fbf20653..2301d79a0 100644 --- a/src/core/openthread-core-config.h +++ b/src/core/openthread-core-config.h @@ -52,6 +52,7 @@ #include "config/coap.h" #include "config/commissioner.h" #include "config/dhcp6_client.h" +#include "config/dhcp6_server.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/mesh_forwarder_ftd.cpp b/src/core/thread/mesh_forwarder_ftd.cpp index f91f8be8d..56b006134 100644 --- a/src/core/thread/mesh_forwarder_ftd.cpp +++ b/src/core/thread/mesh_forwarder_ftd.cpp @@ -396,7 +396,7 @@ otError MeshForwarder::UpdateIp6RouteFtd(Ip6::Header &ip6Header) SuccessOrExit(error = MeshCoP::GetBorderAgentRloc(Get(), mMeshDest)); } -#if OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE else if (aloc16 <= Mle::kAloc16DhcpAgentEnd) { uint16_t agentRloc16; @@ -419,7 +419,7 @@ otError MeshForwarder::UpdateIp6RouteFtd(Ip6::Header &ip6Header) } } -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE #if OPENTHREAD_ENABLE_SERVICE else if ((aloc16 >= Mle::kAloc16ServiceStart) && (aloc16 <= Mle::kAloc16ServiceEnd)) { diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index fc3b6cd1f..e50a9c1d4 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -1555,9 +1555,9 @@ void Mle::HandleStateChanged(otChangedFlags aFlags) #endif #endif -#if OPENTHREAD_ENABLE_DHCP6_SERVER +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE Get().UpdateService(); -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE #if OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE Get().UpdateAddresses(); diff --git a/src/core/thread/network_data_leader.cpp b/src/core/thread/network_data_leader.cpp index fcf5dcade..710625488 100644 --- a/src/core/thread/network_data_leader.cpp +++ b/src/core/thread/network_data_leader.cpp @@ -163,7 +163,7 @@ exit: return error; } -#if OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE otError LeaderBase::GetRlocByContextId(uint8_t aContextId, uint16_t &aRloc16) { otError error = OT_ERROR_NOT_FOUND; @@ -188,7 +188,7 @@ otError LeaderBase::GetRlocByContextId(uint8_t aContextId, uint16_t &aRloc16) exit: return error; } -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE bool LeaderBase::IsOnMesh(const Ip6::Address &aAddress) { diff --git a/src/core/thread/network_data_leader.hpp b/src/core/thread/network_data_leader.hpp index 5eb3921d5..61399f34a 100644 --- a/src/core/thread/network_data_leader.hpp +++ b/src/core/thread/network_data_leader.hpp @@ -217,7 +217,7 @@ public: */ otError SetCommissioningData(const uint8_t *aValue, uint8_t aValueLength); -#if OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE /** * This method gets the Rloc of Dhcp Agent of specified contextId. * @@ -229,7 +229,7 @@ public: * */ otError GetRlocByContextId(uint8_t aContextId, uint16_t &aRloc16); -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE || OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE protected: uint8_t mStableVersion; diff --git a/src/core/thread/thread_netif.cpp b/src/core/thread/thread_netif.cpp index 2ca6dd973..9e4c7d998 100644 --- a/src/core/thread/thread_netif.cpp +++ b/src/core/thread/thread_netif.cpp @@ -53,9 +53,9 @@ ThreadNetif::ThreadNetif(Instance &aInstance) #if OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE , mDhcp6Client(aInstance) #endif // OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE -#if OPENTHREAD_ENABLE_DHCP6_SERVER +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE , mDhcp6Server(aInstance) -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE #if OPENTHREAD_CONFIG_ENABLE_SLAAC , mSlaac(aInstance) #endif diff --git a/src/core/thread/thread_netif.hpp b/src/core/thread/thread_netif.hpp index 8d3023cbc..095ba7b7d 100644 --- a/src/core/thread/thread_netif.hpp +++ b/src/core/thread/thread_netif.hpp @@ -167,9 +167,9 @@ private: #if OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE Dhcp6::Dhcp6Client mDhcp6Client; #endif // OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE -#if OPENTHREAD_ENABLE_DHCP6_SERVER +#if OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE Dhcp6::Dhcp6Server mDhcp6Server; -#endif // OPENTHREAD_ENABLE_DHCP6_SERVER +#endif // OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE #if OPENTHREAD_CONFIG_ENABLE_SLAAC Utils::Slaac mSlaac; #endif