[config] border router (#4020)
diff --git a/.travis/script.sh b/.travis/script.sh
index 6b7e2f2..dc77d05 100755
--- a/.travis/script.sh
+++ b/.travis/script.sh
@@ -55,11 +55,13 @@
     export CPPFLAGS="${CPPFLAGS} -DMBEDTLS_CONFIG_FILE=\\\"mbedtls-config.h\\\""
 
     # UART transport
+    export CPPFLAGS="${CPPFLAGS} \
+        -DOPENTHREAD_CONFIG_BORDER_AGENT_ENABLE=1 \
+        -DOPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE=1"
+
     scan-build ./configure                \
         --enable-application-coap         \
         --enable-application-coap-secure  \
-        --enable-border-agent             \
-        --enable-border-router            \
         --enable-builtin-mbedtls=no       \
         --enable-cert-log                 \
         --enable-channel-manager          \
@@ -95,8 +97,6 @@
     scan-build ./configure                \
         --enable-application-coap         \
         --enable-application-coap-secure  \
-        --enable-border-agent             \
-        --enable-border-router            \
         --enable-builtin-mbedtls=no       \
         --enable-cert-log                 \
         --enable-channel-manager          \
@@ -362,6 +362,9 @@
     ./bootstrap || die
     CPPFLAGS=-DOPENTHREAD_CONFIG_LOG_LEVEL=OT_LOG_LEVEL_DEBG make -f examples/Makefile-posix || die
 
+    export CPPFLAGS=" \
+        -DOPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE=1"
+
     git checkout -- . || die
     git clean -xfd || die
     ./bootstrap || die
@@ -371,7 +374,6 @@
         --enable-mtd                        \
         --with-ncp-bus=spi                  \
         --with-examples=posix               \
-        --enable-border-router              \
         --enable-child-supervision          \
         --enable-diag                       \
         --enable-jam-detection              \
@@ -393,7 +395,6 @@
         --enable-mtd                        \
         --with-ncp-bus=spi                  \
         --with-examples=posix               \
-        --enable-border-router              \
         --enable-child-supervision          \
         --enable-legacy                     \
         --enable-mac-filter                 \
diff --git a/Makefile.am b/Makefile.am
index 840eba4..3700e40 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -34,7 +34,6 @@
     --enable-address-sanitizer        \
     --enable-application-coap         \
     --enable-application-coap-secure  \
-    --enable-border-router            \
     --enable-cert-log                 \
     --enable-cli                      \
     --enable-commissioner             \
diff --git a/configure.ac b/configure.ac
index 581fa4d..e0e5ae8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -808,38 +808,6 @@
 AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_UDP_FORWARD], [${OPENTHREAD_ENABLE_UDP_FORWARD}], [Define to 1 to enable the UDP forward feature.])
 
 #
-# Thread Border Agent
-#
-
-AC_MSG_CHECKING([whether to enable border agent])
-AC_ARG_ENABLE(border_agent,
-    [AS_HELP_STRING([--enable-border-agent], [Enable border agent support @<:@default=no@:>@.])],
-    [
-        case "${enableval}" in
-
-        no|yes)
-            enable_border_agent=${enableval}
-            ;;
-
-        *)
-            AC_MSG_ERROR([Invalid value ${enable_border_agent} for --enable-border-agent])
-            ;;
-        esac
-    ],
-    [enable_border_agent=no])
-
-if test "${enable_border_agent}" = "yes"; then
-    OPENTHREAD_ENABLE_BORDER_AGENT=1
-else
-    OPENTHREAD_ENABLE_BORDER_AGENT=0
-fi
-
-AC_MSG_RESULT(${enable_border_agent})
-AC_SUBST(OPENTHREAD_ENABLE_BORDER_AGENT)
-AM_CONDITIONAL([OPENTHREAD_ENABLE_BORDER_AGENT], [test "${enable_border_agent}" = "yes"])
-AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_BORDER_AGENT], [${OPENTHREAD_ENABLE_BORDER_AGENT}], [Define to 1 to enable the border agent feature.])
-
-#
 # Thread Network Diagnostic for MTD
 #
 
@@ -1514,36 +1482,6 @@
 AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_RAW_LINK_API],[${OPENTHREAD_ENABLE_RAW_LINK_API}],[Define to 1 if you want to enable raw link-layer API])
 
 #
-# Border Router
-#
-
-AC_ARG_ENABLE(border_router,
-    [AS_HELP_STRING([--enable-border-router],[Enable Border Router support @<:@default=no@:>@.])],
-    [
-        case "${enableval}" in
-
-        no|yes)
-            enable_border_router=${enableval}
-            ;;
-
-        *)
-            AC_MSG_ERROR([Invalid value ${enable_border_router} for --enable-border-router])
-            ;;
-        esac
-    ],
-    [enable_border_router=no])
-
-if test "$enable_border_router" = "yes"; then
-    OPENTHREAD_ENABLE_BORDER_ROUTER=1
-else
-    OPENTHREAD_ENABLE_BORDER_ROUTER=0
-fi
-
-AC_SUBST(OPENTHREAD_ENABLE_BORDER_ROUTER)
-AM_CONDITIONAL([OPENTHREAD_ENABLE_BORDER_ROUTER], [test "${enable_border_router}" = "yes"])
-AC_DEFINE_UNQUOTED([OPENTHREAD_ENABLE_BORDER_ROUTER],[${OPENTHREAD_ENABLE_BORDER_ROUTER}],[Define to 1 if you want to enable Border Router])
-
-#
 # Service
 #
 
@@ -2048,8 +1986,6 @@
   OpenThread Application CoAP support       : ${enable_application_coap}
   OpenThread Application CoAP Secure support: ${enable_application_coap_secure}
   OpenThread Raw Link-Layer support         : ${enable_raw_link_api}
-  OpenThread Border Agent support           : ${enable_border_agent}
-  OpenThread Border Router support          : ${enable_border_router}
   OpenThread Service support                : ${enable_service}
   OpenThread ECDSA support                  : ${enable_ecdsa}
   OpenThread Examples                       : ${with_examples}
diff --git a/examples/common-switches.mk b/examples/common-switches.mk
index d7b75ac..f2fdbf9 100644
--- a/examples/common-switches.mk
+++ b/examples/common-switches.mk
@@ -67,11 +67,11 @@
 endif
 
 ifeq ($(BORDER_AGENT),1)
-configure_OPTIONS              += --enable-border-agent
+COMMONCFLAGS                   += -DOPENTHREAD_CONFIG_BORDER_AGENT_ENABLE=1
 endif
 
 ifeq ($(BORDER_ROUTER),1)
-configure_OPTIONS              += --enable-border-router
+COMMONCFLAGS                   += -DOPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE=1
 endif
 
 ifeq ($(COAP),1)
diff --git a/include/openthread-config-android.h b/include/openthread-config-android.h
index c0a093e..deb8e56 100644
--- a/include/openthread-config-android.h
+++ b/include/openthread-config-android.h
@@ -27,10 +27,10 @@
  */
 
 /* Define to 1 to enable the border agent feature. */
-#define OPENTHREAD_ENABLE_BORDER_AGENT 1
+#define OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 1
 
 /* Define to 1 if you want to enable Border Router */
-#define OPENTHREAD_ENABLE_BORDER_ROUTER 1
+#define OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE 1
 
 /* Define to 1 if you want to enable channel manager feature */
 #define OPENTHREAD_ENABLE_CHANNEL_MANAGER 0
diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp
index ff9453d..1a65253 100644
--- a/src/cli/cli.cpp
+++ b/src/cli/cli.cpp
@@ -52,7 +52,7 @@
 #include <openthread/thread_ftd.h>
 #endif
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 #include <openthread/border_router.h>
 #endif
 #if OPENTHREAD_ENABLE_SERVICE
@@ -160,7 +160,7 @@
 #if OPENTHREAD_FTD
     {"neighbor", &Interpreter::ProcessNeighbor},
 #endif
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     {"netdataregister", &Interpreter::ProcessNetworkDataRegister},
 #endif
 #if OPENTHREAD_ENABLE_SERVICE
@@ -184,7 +184,7 @@
     {"ping", &Interpreter::ProcessPing},
     {"pollperiod", &Interpreter::ProcessPollPeriod},
     {"promiscuous", &Interpreter::ProcessPromiscuous},
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     {"prefix", &Interpreter::ProcessPrefix},
 #endif
 #if OPENTHREAD_FTD
@@ -193,7 +193,7 @@
 #endif
     {"reset", &Interpreter::ProcessReset},
     {"rloc16", &Interpreter::ProcessRloc16},
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     {"route", &Interpreter::ProcessRoute},
 #endif
 #if OPENTHREAD_FTD
@@ -1699,14 +1699,14 @@
 }
 #endif
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
 void Interpreter::ProcessNetworkDataRegister(int argc, char *argv[])
 {
     OT_UNUSED_VARIABLE(argc);
     OT_UNUSED_VARIABLE(argv);
 
     otError error = OT_ERROR_NONE;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     SuccessOrExit(error = otBorderRouterRegister(mInstance));
 #else
     SuccessOrExit(error = otServerRegister(mInstance));
@@ -1715,7 +1715,7 @@
 exit:
     AppendResult(error);
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
 
 #if OPENTHREAD_FTD
 void Interpreter::ProcessNetworkIdTimeout(int argc, char *argv[])
@@ -2138,7 +2138,7 @@
     mServer->OutputFormat("\r\n");
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 otError Interpreter::ProcessPrefixAdd(int argc, char *argv[])
 {
     otError              error = OT_ERROR_NONE;
@@ -2358,7 +2358,7 @@
 exit:
     AppendResult(error);
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 #if OPENTHREAD_FTD
 void Interpreter::ProcessReleaseRouterId(int argc, char *argv[])
@@ -2393,7 +2393,7 @@
     mServer->OutputFormat("Done\r\n");
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 otError Interpreter::ProcessRouteAdd(int argc, char *argv[])
 {
     otError               error = OT_ERROR_NONE;
@@ -2549,7 +2549,7 @@
 exit:
     AppendResult(error);
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 #if OPENTHREAD_FTD
 void Interpreter::ProcessRouter(int argc, char *argv[])
diff --git a/src/cli/cli.hpp b/src/cli/cli.hpp
index c27f418..818ebfe 100644
--- a/src/cli/cli.hpp
+++ b/src/cli/cli.hpp
@@ -261,7 +261,7 @@
 #if OPENTHREAD_FTD
     void ProcessNeighbor(int argc, char *argv[]);
 #endif
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     void ProcessNetworkDataRegister(int argc, char *argv[]);
 #endif
 #if OPENTHREAD_ENABLE_SERVICE
@@ -285,7 +285,7 @@
 #endif
     void ProcessPing(int argc, char *argv[]);
     void ProcessPollPeriod(int argc, char *argv[]);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     void    ProcessPrefix(int argc, char *argv[]);
     otError ProcessPrefixAdd(int argc, char *argv[]);
     otError ProcessPrefixRemove(int argc, char *argv[]);
@@ -297,7 +297,7 @@
     void ProcessReleaseRouterId(int argc, char *argv[]);
 #endif
     void ProcessReset(int argc, char *argv[]);
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     void    ProcessRoute(int argc, char *argv[]);
     otError ProcessRouteAdd(int argc, char *argv[]);
     otError ProcessRouteRemove(int argc, char *argv[]);
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index 6561cda..c3cce7f 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -319,6 +319,7 @@
     common/tlvs.hpp                          \
     common/trickle_timer.hpp                 \
     config/announce_sender.h                 \
+    config/border_router.h                   \
     config/openthread-core-config-check.h    \
     config/openthread-core-default-config.h  \
     crypto/aes_ccm.hpp                       \
diff --git a/src/core/api/border_agent_api.cpp b/src/core/api/border_agent_api.cpp
index 641f4e8..7edce84 100644
--- a/src/core/api/border_agent_api.cpp
+++ b/src/core/api/border_agent_api.cpp
@@ -38,7 +38,7 @@
 #include "common/instance.hpp"
 #include "common/locator-getters.hpp"
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
 
 using namespace ot;
 
@@ -49,4 +49,4 @@
     return instance.Get<MeshCoP::BorderAgent>().GetState();
 }
 
-#endif // OPENTHREAD_ENABLE_BORDER_AGENT
+#endif // OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
diff --git a/src/core/api/border_router_api.cpp b/src/core/api/border_router_api.cpp
index 90d0ac5..dd8dd2f 100644
--- a/src/core/api/border_router_api.cpp
+++ b/src/core/api/border_router_api.cpp
@@ -33,7 +33,7 @@
 
 #include "openthread-core-config.h"
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 #include <openthread/border_router.h>
 
@@ -153,4 +153,4 @@
     return instance.Get<NetworkData::Local>().SendServerDataNotification();
 }
 
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
diff --git a/src/core/api/commissioner_api.cpp b/src/core/api/commissioner_api.cpp
index 487fb71..2fd5965 100644
--- a/src/core/api/commissioner_api.cpp
+++ b/src/core/api/commissioner_api.cpp
@@ -50,7 +50,7 @@
 #if OPENTHREAD_FTD && OPENTHREAD_ENABLE_COMMISSIONER
     Instance &instance = *static_cast<Instance *>(aInstance);
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
     SuccessOrExit(error = instance.Get<MeshCoP::BorderAgent>().Stop());
 #endif
     SuccessOrExit(error =
@@ -76,7 +76,7 @@
     Instance &instance = *static_cast<Instance *>(aInstance);
 
     SuccessOrExit(error = instance.Get<MeshCoP::Commissioner>().Stop());
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
     SuccessOrExit(error = instance.Get<MeshCoP::BorderAgent>().Start());
 #endif
 exit:
diff --git a/src/core/common/instance.hpp b/src/core/common/instance.hpp
index 6f9ffc0..89e2f0f 100644
--- a/src/core/common/instance.hpp
+++ b/src/core/common/instance.hpp
@@ -514,7 +514,7 @@
     return mThreadNetif.mPanIdQuery;
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
 template <> inline NetworkData::Local &Instance::Get(void)
 {
     return mThreadNetif.mNetworkDataLocal;
@@ -657,7 +657,7 @@
 }
 #endif
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
 template <> inline MeshCoP::BorderAgent &Instance::Get(void)
 {
     return mThreadNetif.mBorderAgent;
diff --git a/src/core/config/border_router.h b/src/core/config/border_router.h
new file mode 100644
index 0000000..2284367
--- /dev/null
+++ b/src/core/config/border_router.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 Border Router services.
+ *
+ */
+
+#ifndef CONFIG_BORDER_ROUTER_H_
+#define CONFIG_BORDER_ROUTER_H_
+
+/**
+ * @def OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
+ *
+ * Define to 1 to enable Border Agent support.
+ *
+ */
+#ifndef OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
+#define OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 0
+#endif
+
+/**
+ * @def OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
+ *
+ * Define to 1 to enable Border Router support.
+ *
+ */
+#ifndef OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
+#define OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE 0
+#endif
+
+#endif // CONFIG_BORDER_ROUTER_H_
diff --git a/src/core/meshcop/border_agent.cpp b/src/core/meshcop/border_agent.cpp
index 77281d5..6bee30f 100644
--- a/src/core/meshcop/border_agent.cpp
+++ b/src/core/meshcop/border_agent.cpp
@@ -44,7 +44,7 @@
 #include "thread/thread_tlvs.hpp"
 #include "thread/thread_uri_paths.hpp"
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
 
 namespace ot {
 namespace MeshCoP {
@@ -727,4 +727,4 @@
 } // namespace MeshCoP
 } // namespace ot
 
-#endif // OPENTHREAD_ENABLE_BORDER_AGENT
+#endif // OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
diff --git a/src/core/openthread-core-config.h b/src/core/openthread-core-config.h
index 981040d..d0242f0 100644
--- a/src/core/openthread-core-config.h
+++ b/src/core/openthread-core-config.h
@@ -45,9 +45,10 @@
 #include "config/openthread-core-default-config.h"
 
 #include "config/announce_sender.h"
+#include "config/border_router.h"
 
-#if OPENTHREAD_ENABLE_APPLICATION_COAP_SECURE || OPENTHREAD_ENABLE_BORDER_AGENT || OPENTHREAD_ENABLE_COMMISSIONER || \
-    OPENTHREAD_ENABLE_JOINER
+#if OPENTHREAD_ENABLE_APPLICATION_COAP_SECURE || OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE || \
+    OPENTHREAD_ENABLE_COMMISSIONER || OPENTHREAD_ENABLE_JOINER
 #define OPENTHREAD_CONFIG_DTLS_ENABLE 1
 #endif
 
diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp
index 5a5ed5e..35e98f5 100644
--- a/src/core/thread/mle.cpp
+++ b/src/core/thread/mle.cpp
@@ -329,7 +329,7 @@
         break;
     }
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
     if (IsAttached())
     {
         SuccessOrExit(Get<MeshCoP::BorderAgent>().Start());
@@ -760,7 +760,7 @@
         Get<MleRouter>().HandleChildStart(mParentRequestMode);
     }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     Get<NetworkData::Local>().ClearResubmitDelayTimer();
 #endif
     Get<Ip6::Ip6>().SetForwardingEnabled(false);
@@ -1548,7 +1548,7 @@
             ScheduleMessageTransmissionTimer();
         }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
         Get<NetworkData::Local>().SendServerDataNotification();
 #if OPENTHREAD_ENABLE_SERVICE
         this->UpdateServiceAlocs();
diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp
index d9b1cbe..8207e72 100644
--- a/src/core/thread/mle_router.cpp
+++ b/src/core/thread/mle_router.cpp
@@ -1405,7 +1405,7 @@
 
     UpdateRoutes(route, routerId);
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     Get<NetworkData::Local>().SendServerDataNotification();
 #endif
 
diff --git a/src/core/thread/network_data_local.cpp b/src/core/thread/network_data_local.cpp
index dda16e4..87472fd 100644
--- a/src/core/thread/network_data_local.cpp
+++ b/src/core/thread/network_data_local.cpp
@@ -41,7 +41,7 @@
 #include "mac/mac_frame.hpp"
 #include "thread/thread_netif.hpp"
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
 
 namespace ot {
 namespace NetworkData {
@@ -387,4 +387,4 @@
 } // namespace NetworkData
 } // namespace ot
 
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
diff --git a/src/core/thread/thread_netif.cpp b/src/core/thread/thread_netif.cpp
index 7092143..6dc4988 100644
--- a/src/core/thread/thread_netif.cpp
+++ b/src/core/thread/thread_netif.cpp
@@ -72,7 +72,7 @@
     , mMac(aInstance)
     , mMeshForwarder(aInstance)
     , mMleRouter(aInstance)
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     , mNetworkDataLocal(aInstance)
 #endif
     , mNetworkDataLeader(aInstance)
@@ -80,7 +80,7 @@
     , mNetworkDiagnostic(aInstance)
 #endif
     , mIsUp(false)
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
     , mBorderAgent(aInstance)
 #endif
 #if OPENTHREAD_ENABLE_COMMISSIONER && OPENTHREAD_FTD
diff --git a/src/core/thread/thread_netif.hpp b/src/core/thread/thread_netif.hpp
index 48fe47c..f11413d 100644
--- a/src/core/thread/thread_netif.hpp
+++ b/src/core/thread/thread_netif.hpp
@@ -40,7 +40,7 @@
 #include "coap/coap_secure.hpp"
 #include "mac/mac.hpp"
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
 #include "meshcop/border_agent.hpp"
 #endif
 #if OPENTHREAD_ENABLE_COMMISSIONER && OPENTHREAD_FTD
@@ -187,16 +187,16 @@
     Mac::Mac                mMac;
     MeshForwarder           mMeshForwarder;
     Mle::MleRouter          mMleRouter;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     NetworkData::Local mNetworkDataLocal;
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER || OPENTHREAD_ENABLE_SERVICE
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE || OPENTHREAD_ENABLE_SERVICE
     NetworkData::Leader mNetworkDataLeader;
 #if OPENTHREAD_FTD || OPENTHREAD_ENABLE_MTD_NETWORK_DIAGNOSTIC
     NetworkDiagnostic::NetworkDiagnostic mNetworkDiagnostic;
 #endif // OPENTHREAD_FTD || OPENTHREAD_ENABLE_MTD_NETWORK_DIAGNOSTIC
     bool mIsUp;
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE
     MeshCoP::BorderAgent mBorderAgent;
 #endif
 #if OPENTHREAD_ENABLE_COMMISSIONER && OPENTHREAD_FTD
diff --git a/src/ncp/ncp_base.cpp b/src/ncp/ncp_base.cpp
index ccf4982..b766ef1 100644
--- a/src/ncp/ncp_base.cpp
+++ b/src/ncp/ncp_base.cpp
@@ -1815,7 +1815,7 @@
     SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_JOINER));
 #endif
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     SuccessOrExit(error = mEncoder.WriteUintPacked(SPINEL_CAP_THREAD_BORDER_ROUTER));
 #endif
 
diff --git a/src/ncp/ncp_base_dispatcher.cpp b/src/ncp/ncp_base_dispatcher.cpp
index 27b7dc9..f27221b 100644
--- a/src/ncp/ncp_base_dispatcher.cpp
+++ b/src/ncp/ncp_base_dispatcher.cpp
@@ -275,7 +275,7 @@
     case SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION:
         handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION>;
         break;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     case SPINEL_PROP_THREAD_NETWORK_DATA:
         handler = &NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_DATA>;
         break;
@@ -812,7 +812,7 @@
     case SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID:
         handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID>;
         break;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     case SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE:
         handler = &NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE>;
         break;
@@ -1038,7 +1038,7 @@
     case SPINEL_PROP_THREAD_ASSISTING_PORTS:
         handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_ASSISTING_PORTS>;
         break;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
         handler = &NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_OFF_MESH_ROUTES>;
         break;
@@ -1120,7 +1120,7 @@
     case SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE:
         handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_IPV6_MULTICAST_ADDRESS_TABLE>;
         break;
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
     case SPINEL_PROP_THREAD_OFF_MESH_ROUTES:
         handler = &NcpBase::HandlePropertyRemove<SPINEL_PROP_THREAD_OFF_MESH_ROUTES>;
         break;
diff --git a/src/ncp/ncp_base_mtd.cpp b/src/ncp/ncp_base_mtd.cpp
index 20f07b2..c2f8782 100644
--- a/src/ncp/ncp_base_mtd.cpp
+++ b/src/ncp/ncp_base_mtd.cpp
@@ -34,7 +34,7 @@
 
 #include "ncp_base.hpp"
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 #include <openthread/border_router.h>
 #endif
 #if OPENTHREAD_ENABLE_CHANNEL_MONITOR
@@ -485,7 +485,7 @@
     return mEncoder.WriteUint8(otNetDataGetStableVersion(mInstance));
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_NETWORK_DATA>(void)
 {
     uint8_t networkData[255];
@@ -509,7 +509,7 @@
 
     return mEncoder.WriteData(networkData, networkDataLen);
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_LEADER_NETWORK_DATA>(void)
 {
@@ -692,7 +692,7 @@
     return mEncoder.WriteBool(mAllowLocalNetworkDataChange);
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE>(void)
 {
     bool    value                    = false;
@@ -715,7 +715,7 @@
 
     return error;
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 template <> otError NcpBase::HandlePropertyGet<SPINEL_PROP_THREAD_ON_MESH_NETS>(void)
 {
@@ -738,7 +738,7 @@
         SuccessOrExit(error = mEncoder.CloseStruct());
     }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
     iter = OT_NETWORK_DATA_ITERATOR_INIT;
 
@@ -756,13 +756,13 @@
 
         SuccessOrExit(error = mEncoder.CloseStruct());
     }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 exit:
     return error;
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 template <> otError NcpBase::HandlePropertyInsert<SPINEL_PROP_THREAD_ON_MESH_NETS>(void)
 {
     otError              error = OT_ERROR_NONE;
@@ -824,7 +824,7 @@
 exit:
     return error;
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 #if OPENTHREAD_ENABLE_SERVICE
 
@@ -1845,7 +1845,7 @@
         SuccessOrExit(error = mEncoder.CloseStruct());
     }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
     iter = OT_NETWORK_DATA_ITERATOR_INIT;
 
@@ -1863,13 +1863,13 @@
 
         SuccessOrExit(error = mEncoder.CloseStruct());
     }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 exit:
     return error;
 }
 
-#if OPENTHREAD_ENABLE_BORDER_ROUTER
+#if OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 static int FlagByteToExternalRoutePreference(uint8_t aFlags)
 {
     int route_preference = 0;
@@ -1945,7 +1945,7 @@
 exit:
     return error;
 }
-#endif // OPENTHREAD_ENABLE_BORDER_ROUTER
+#endif // OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
 
 template <> otError NcpBase::HandlePropertySet<SPINEL_PROP_STREAM_NET>(void)
 {
diff --git a/tests/toranj/build.sh b/tests/toranj/build.sh
index b3a54ff..dffa43f 100755
--- a/tests/toranj/build.sh
+++ b/tests/toranj/build.sh
@@ -77,7 +77,6 @@
 configure_options="                \
     --disable-docs                 \
     --disable-tests                \
-    --enable-border-router         \
     --enable-channel-manager       \
     --enable-channel-monitor       \
     --enable-child-supervision     \
diff --git a/tests/toranj/openthread-core-toranj-config.h b/tests/toranj/openthread-core-toranj-config.h
index 01d8527..a6ebb9d 100644
--- a/tests/toranj/openthread-core-toranj-config.h
+++ b/tests/toranj/openthread-core-toranj-config.h
@@ -49,6 +49,14 @@
 #endif
 
 /**
+ * @def OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE
+ *
+ * Define to 1 to enable Border Router support.
+ *
+ */
+#define OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE                  1
+
+/**
  * @def OPENTHREAD_CONFIG_NUM_MESSAGE_BUFFERS
  *
  * The number of message buffers in the buffer pool.
diff --git a/third_party/mbedtls/mbedtls-config.h b/third_party/mbedtls/mbedtls-config.h
index c58eef6..96c195f 100644
--- a/third_party/mbedtls/mbedtls-config.h
+++ b/third_party/mbedtls/mbedtls-config.h
@@ -76,7 +76,8 @@
 #define MBEDTLS_SSL_PROTO_DTLS
 #define MBEDTLS_SSL_TLS_C
 
-#if OPENTHREAD_ENABLE_BORDER_AGENT || OPENTHREAD_ENABLE_COMMISSIONER || OPENTHREAD_ENABLE_APPLICATION_COAP_SECURE
+#if OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE || OPENTHREAD_ENABLE_COMMISSIONER || \
+    OPENTHREAD_ENABLE_APPLICATION_COAP_SECURE
 #define MBEDTLS_SSL_COOKIE_C
 #define MBEDTLS_SSL_SRV_C
 #endif