mirror of
https://github.com/espressif/openthread.git
synced 2026-08-16 23:57:46 +00:00
[backbone-router] add build options for Backbone Router features (#5891)
This commit introduces two configurations for Backbone Router to turn off corresponding features: - OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE: 1 by default, set to 0 to disable Backbone Router DUA ND Proxying - OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE: 1 by default, set to 0 to disable Backbone Router Multicast Routing Both configuration requires OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE. NOTE: At least one of these two configurations must be ON if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE=1(otherwise it's meaningless to turn on OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE).
This commit is contained in:
@@ -44,6 +44,22 @@ endif()
|
||||
option(OT_BACKBONE_ROUTER "enable backbone router functionality")
|
||||
if(OT_BACKBONE_ROUTER)
|
||||
target_compile_definitions(ot-config INTERFACE "OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE=1")
|
||||
set(OT_BACKBONE_ROUTER_DUA_NDPROXYING ON CACHE BOOL "Enable DUA NDProxying by default")
|
||||
set(OT_BACKBONE_ROUTER_MULTICAST_ROUTING ON CACHE BOOL "Enable Multicast Routing by default")
|
||||
endif()
|
||||
|
||||
option(OT_BACKBONE_ROUTER_DUA_NDPROXYING "enable Backbone Router DUA ND Proxying functionality" OFF)
|
||||
if(OT_BACKBONE_ROUTER_DUA_NDPROXYING)
|
||||
target_compile_definitions(ot-config INTERFACE "OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE=1")
|
||||
else()
|
||||
target_compile_definitions(ot-config INTERFACE "OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE=0")
|
||||
endif()
|
||||
|
||||
option(OT_BACKBONE_ROUTER_MULTICAST_ROUTING "enable Backbone Router Multicast Routing functionality" OFF)
|
||||
if(OT_BACKBONE_ROUTER_MULTICAST_ROUTING)
|
||||
target_compile_definitions(ot-config INTERFACE "OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE=1")
|
||||
else()
|
||||
target_compile_definitions(ot-config INTERFACE "OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE=0")
|
||||
endif()
|
||||
|
||||
option(OT_BORDER_AGENT "enable border agent support")
|
||||
|
||||
@@ -46,6 +46,14 @@ build_all_features()
|
||||
reset_source
|
||||
"$(dirname "$0")"/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_THREAD_VERSION=1.2 -DOT_DUA=ON -DOT_MLR=ON -DOT_BACKBONE_ROUTER=ON -DOT_CSL_RECEIVER=ON
|
||||
|
||||
# Build Thread 1.2 Backbone Router without DUA ND Proxying
|
||||
reset_source
|
||||
"$(dirname "$0")"/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_THREAD_VERSION=1.2 -DOT_MLR=ON -DOT_BACKBONE_ROUTER=ON -DOT_CSL_RECEIVER=ON -DOT_BACKBONE_ROUTER_DUA_NDPROXYING=OFF
|
||||
|
||||
# Build Thread 1.2 Backbone Router without Multicast Routing
|
||||
reset_source
|
||||
"$(dirname "$0")"/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_THREAD_VERSION=1.2 -DOT_MLR=ON -DOT_BACKBONE_ROUTER=ON -DOT_CSL_RECEIVER=ON -DOT_BACKBONE_ROUTER_MULTICAST_ROUTING=OFF
|
||||
|
||||
# Build with Vendor Extension
|
||||
reset_source
|
||||
"$(dirname "$0")"/cmake-build simulation -DOT_VENDOR_EXTENSION=../../src/core/common/extension_example.cpp
|
||||
|
||||
+13
-8
@@ -300,12 +300,14 @@ otError Interpreter::ProcessBackboneRouter(uint8_t aArgsLength, char *aArgs[])
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
if (strcmp(aArgs[0], "mgmt") == 0)
|
||||
{
|
||||
uint8_t status;
|
||||
|
||||
VerifyOrExit(aArgsLength >= 2, error = OT_ERROR_INVALID_COMMAND);
|
||||
|
||||
if (strcmp(aArgs[1], "dua") == 0)
|
||||
if (aArgsLength < 2)
|
||||
{
|
||||
ExitNow(error = OT_ERROR_INVALID_COMMAND);
|
||||
}
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
else if (strcmp(aArgs[1], "dua") == 0)
|
||||
{
|
||||
uint8_t status;
|
||||
otIp6InterfaceIdentifier *mlIid = nullptr;
|
||||
otIp6InterfaceIdentifier iid;
|
||||
|
||||
@@ -322,11 +324,14 @@ otError Interpreter::ProcessBackboneRouter(uint8_t aArgsLength, char *aArgs[])
|
||||
otBackboneRouterConfigNextDuaRegistrationResponse(mInstance, mlIid, status);
|
||||
ExitNow();
|
||||
}
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
else if (strcmp(aArgs[1], "mlr") == 0)
|
||||
{
|
||||
error = ProcessBackboneRouterMgmtMlr(aArgsLength - 2, aArgs + 2);
|
||||
ExitNow();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
SuccessOrExit(error = ProcessBackboneRouterLocal(aArgsLength, aArgs));
|
||||
@@ -339,7 +344,7 @@ exit:
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
otError Interpreter::ProcessBackboneRouterMgmtMlr(uint8_t aArgsLength, char *aArgs[])
|
||||
{
|
||||
otError error = OT_ERROR_INVALID_COMMAND;
|
||||
@@ -405,7 +410,7 @@ void Interpreter::PrintMulticastListenersTable(void)
|
||||
}
|
||||
}
|
||||
|
||||
#endif // OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#endif // OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
otError Interpreter::ProcessBackboneRouterLocal(uint8_t aArgsLength, char *aArgs[])
|
||||
{
|
||||
@@ -1547,7 +1552,7 @@ otError Interpreter::ProcessFake(uint8_t aArgsLength, char *aArgs[])
|
||||
SuccessOrExit(error = ParseAsHexString(aArgs[3], mlIid.mFields.m8));
|
||||
otThreadSendAddressNotification(mInstance, &destination, &target, &mlIid);
|
||||
}
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
else if (strcmp(aArgs[0], "/b/ba") == 0)
|
||||
{
|
||||
otIp6Address target;
|
||||
|
||||
+1
-1
@@ -299,7 +299,7 @@ private:
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
otError ProcessBackboneRouterLocal(uint8_t aArgsLength, char *aArgs[]);
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
otError ProcessBackboneRouterMgmtMlr(uint8_t aArgsLength, char *aArgs[]);
|
||||
void PrintMulticastListenersTable(void);
|
||||
#endif
|
||||
|
||||
@@ -111,6 +111,37 @@ otError otBackboneRouterGetDomainPrefix(otInstance *aInstance, otBorderRouterCon
|
||||
*static_cast<NetworkData::OnMeshPrefixConfig *>(aConfig));
|
||||
}
|
||||
|
||||
void otBackboneRouterSetDomainPrefixCallback(otInstance * aInstance,
|
||||
otBackboneRouterDomainPrefixCallback aCallback,
|
||||
void * aContext)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
return instance.Get<BackboneRouter::Local>().SetDomainPrefixCallback(aCallback, aContext);
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
void otBackboneRouterSetNdProxyCallback(otInstance * aInstance,
|
||||
otBackboneRouterNdProxyCallback aCallback,
|
||||
void * aContext)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
instance.Get<BackboneRouter::NdProxyTable>().SetCallback(aCallback, aContext);
|
||||
}
|
||||
|
||||
otError otBackboneRouterGetNdProxyInfo(otInstance * aInstance,
|
||||
const otIp6Address * aDua,
|
||||
otBackboneRouterNdProxyInfo *aNdProxyInfo)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
return instance.Get<BackboneRouter::NdProxyTable>().GetInfo(reinterpret_cast<const Ip6::Address &>(*aDua),
|
||||
*aNdProxyInfo);
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
void otBackboneRouterSetMulticastListenerCallback(otInstance * aInstance,
|
||||
otBackboneRouterMulticastListenerCallback aCallback,
|
||||
void * aContext)
|
||||
@@ -131,8 +162,10 @@ otError otBackboneRouterMulticastListenerGetNext(otInstance *
|
||||
|
||||
return instance.Get<BackboneRouter::MulticastListenersTable>().GetNext(*aIterator, *aListenerInfo);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
void otBackboneRouterConfigNextDuaRegistrationResponse(otInstance * aInstance,
|
||||
const otIp6InterfaceIdentifier *aMlIid,
|
||||
uint8_t aStatus)
|
||||
@@ -142,7 +175,9 @@ void otBackboneRouterConfigNextDuaRegistrationResponse(otInstance *
|
||||
instance.Get<BackboneRouter::Manager>().ConfigNextDuaRegistrationResponse(
|
||||
static_cast<const Ip6::InterfaceIdentifier *>(aMlIid), aStatus);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
void otBackboneRouterConfigNextMulticastListenerRegistrationResponse(otInstance *aInstance, uint8_t aStatus)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
@@ -180,34 +215,7 @@ otError otBackboneRouterMulticastListenerAdd(otInstance *aInstance, const otIp6A
|
||||
return instance.Get<BackboneRouter::MulticastListenersTable>().Add(static_cast<const Ip6::Address &>(*aAddress),
|
||||
TimerMilli::GetNow() + aTimeout);
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
#endif // OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
|
||||
void otBackboneRouterSetNdProxyCallback(otInstance * aInstance,
|
||||
otBackboneRouterNdProxyCallback aCallback,
|
||||
void * aContext)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
instance.Get<BackboneRouter::NdProxyTable>().SetCallback(aCallback, aContext);
|
||||
}
|
||||
|
||||
otError otBackboneRouterGetNdProxyInfo(otInstance * aInstance,
|
||||
const otIp6Address * aDua,
|
||||
otBackboneRouterNdProxyInfo *aNdProxyInfo)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
return instance.Get<BackboneRouter::NdProxyTable>().GetInfo(reinterpret_cast<const Ip6::Address &>(*aDua),
|
||||
*aNdProxyInfo);
|
||||
}
|
||||
|
||||
void otBackboneRouterSetDomainPrefixCallback(otInstance * aInstance,
|
||||
otBackboneRouterDomainPrefixCallback aCallback,
|
||||
void * aContext)
|
||||
{
|
||||
Instance &instance = *static_cast<Instance *>(aInstance);
|
||||
|
||||
return instance.Get<BackboneRouter::Local>().SetDomainPrefixCallback(aCallback, aContext);
|
||||
}
|
||||
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
|
||||
@@ -408,7 +408,7 @@ void otThreadSendAddressNotification(otInstance * aInstance,
|
||||
static_cast<Ip6::Address &>(*aDestination));
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
otError otThreadSendProactiveBackboneNotification(otInstance * aInstance,
|
||||
otIp6Address * aTarget,
|
||||
otIp6InterfaceIdentifier *aMlIid,
|
||||
|
||||
@@ -302,8 +302,10 @@ void Leader::UpdateDomainPrefixConfig(void)
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
Get<Local>().HandleDomainPrefixUpdate(state);
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
Get<NdProxyTable>().HandleDomainPrefixUpdate(state);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_DUA_ENABLE || OPENTHREAD_CONFIG_TMF_PROXY_DUA_ENABLE
|
||||
Get<DuaManager>().HandleDomainPrefixUpdate(state);
|
||||
|
||||
@@ -51,23 +51,39 @@ namespace BackboneRouter {
|
||||
|
||||
Manager::Manager(Instance &aInstance)
|
||||
: InstanceLocator(aInstance)
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
, mMulticastListenerRegistration(UriPath::kMlr, Manager::HandleMulticastListenerRegistration, this)
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
, mDuaRegistration(UriPath::kDuaRegistrationRequest, Manager::HandleDuaRegistration, this)
|
||||
, mBackboneQuery(UriPath::kBackboneQuery, Manager::HandleBackboneQuery, this)
|
||||
, mBackboneAnswer(UriPath::kBackboneAnswer, Manager::HandleBackboneAnswer, this)
|
||||
, mNdProxyTable(aInstance)
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
, mMulticastListenersTable(aInstance)
|
||||
#endif
|
||||
, mTimer(aInstance, Manager::HandleTimer, this)
|
||||
, mBackboneTmfAgent(aInstance)
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
, mDuaResponseStatus(ThreadStatusTlv::kDuaSuccess)
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
, mMlrResponseStatus(ThreadStatusTlv::kMlrSuccess)
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
, mDuaResponseIsSpecified(false)
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
, mMlrResponseIsSpecified(false)
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
mBackboneTmfAgent.AddResource(mBackboneQuery);
|
||||
mBackboneTmfAgent.AddResource(mBackboneAnswer);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Manager::HandleNotifierEvents(Events aEvents)
|
||||
@@ -78,10 +94,14 @@ void Manager::HandleNotifierEvents(Events aEvents)
|
||||
{
|
||||
if (Get<BackboneRouter::Local>().GetState() == OT_BACKBONE_ROUTER_STATE_DISABLED)
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
Get<Tmf::TmfAgent>().RemoveResource(mMulticastListenerRegistration);
|
||||
Get<Tmf::TmfAgent>().RemoveResource(mDuaRegistration);
|
||||
mTimer.Stop();
|
||||
mMulticastListenersTable.Clear();
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
Get<Tmf::TmfAgent>().RemoveResource(mDuaRegistration);
|
||||
#endif
|
||||
mTimer.Stop();
|
||||
|
||||
error = mBackboneTmfAgent.Stop();
|
||||
|
||||
@@ -96,8 +116,12 @@ void Manager::HandleNotifierEvents(Events aEvents)
|
||||
}
|
||||
else
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
Get<Tmf::TmfAgent>().AddResource(mMulticastListenerRegistration);
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
Get<Tmf::TmfAgent>().AddResource(mDuaRegistration);
|
||||
#endif
|
||||
if (!mTimer.IsRunning())
|
||||
{
|
||||
mTimer.Start(kTimerInterval);
|
||||
@@ -119,12 +143,18 @@ void Manager::HandleNotifierEvents(Events aEvents)
|
||||
|
||||
void Manager::HandleTimer(void)
|
||||
{
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
mMulticastListenersTable.Expire();
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
mNdProxyTable.HandleTimer();
|
||||
#endif
|
||||
|
||||
mTimer.Start(kTimerInterval);
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
void Manager::HandleMulticastListenerRegistration(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
@@ -338,7 +368,9 @@ exit:
|
||||
FreeMessageOnError(message, error);
|
||||
otLogInfoBbr("Sent BMLR.ntf: %s", otThreadErrorToString(error));
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
void Manager::HandleDuaRegistration(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||
{
|
||||
otError error = OT_ERROR_NONE;
|
||||
@@ -438,8 +470,10 @@ exit:
|
||||
otLogInfoBbr("Sent DUA.rsp for DUA %s, status %d %s", aTarget.ToString().AsCString(), aStatus,
|
||||
otThreadErrorToString(error));
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
void Manager::ConfigNextDuaRegistrationResponse(const Ip6::InterfaceIdentifier *aMlIid, uint8_t aStatus)
|
||||
{
|
||||
mDuaResponseIsSpecified = true;
|
||||
@@ -455,14 +489,18 @@ void Manager::ConfigNextDuaRegistrationResponse(const Ip6::InterfaceIdentifier *
|
||||
|
||||
mDuaResponseStatus = aStatus;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
void Manager::ConfigNextMulticastListenerRegistrationResponse(ThreadStatusTlv::MlrStatus aStatus)
|
||||
{
|
||||
mMlrResponseIsSpecified = true;
|
||||
mMlrResponseStatus = aStatus;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
NdProxyTable &Manager::GetNdProxyTable(void)
|
||||
{
|
||||
return mNdProxyTable;
|
||||
@@ -758,6 +796,7 @@ exit:
|
||||
otLogInfoBbr("HandleProactiveBackboneNotification: %s, target=%s, mliid=%s, LTT=%lds", otThreadErrorToString(error),
|
||||
aDua.ToString().AsCString(), aMeshLocalIid.ToString().AsCString(), aTimeSinceLastTransaction);
|
||||
}
|
||||
#endif // OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
} // namespace BackboneRouter
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ public:
|
||||
*/
|
||||
explicit Manager(Instance &aInstance);
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
/**
|
||||
* This method returns the NdProxy Table.
|
||||
*
|
||||
@@ -77,6 +78,7 @@ public:
|
||||
*
|
||||
*/
|
||||
NdProxyTable &GetNdProxyTable(void);
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
/**
|
||||
@@ -92,6 +94,7 @@ public:
|
||||
*/
|
||||
void ConfigNextDuaRegistrationResponse(const Ip6::InterfaceIdentifier *aMlIid, uint8_t aStatus);
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
/**
|
||||
* This method configures response status for next Multicast Listener Registration.
|
||||
*
|
||||
@@ -102,9 +105,10 @@ public:
|
||||
*
|
||||
*/
|
||||
void ConfigNextMulticastListenerRegistrationResponse(ThreadStatusTlv::MlrStatus aStatus);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
/**
|
||||
* This method gets the Multicast Listeners Table.
|
||||
*
|
||||
@@ -112,6 +116,7 @@ public:
|
||||
*
|
||||
*/
|
||||
MulticastListenersTable &GetMulticastListenersTable(void) { return mMulticastListenersTable; }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This method returns if messages destined to a given Domain Unicast Address should be forwarded to the Backbone
|
||||
@@ -168,6 +173,7 @@ private:
|
||||
kTimerInterval = 1000,
|
||||
};
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
static void HandleMulticastListenerRegistration(void * aContext,
|
||||
otMessage * aMessage,
|
||||
const otMessageInfo *aMessageInfo)
|
||||
@@ -176,6 +182,7 @@ private:
|
||||
*static_cast<const Coap::Message *>(aMessage), *static_cast<const Ip6::MessageInfo *>(aMessageInfo));
|
||||
}
|
||||
void HandleMulticastListenerRegistration(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
|
||||
void SendMulticastListenerRegistrationResponse(const Coap::Message & aMessage,
|
||||
const Ip6::MessageInfo & aMessageInfo,
|
||||
ThreadStatusTlv::MlrStatus aStatus,
|
||||
@@ -184,7 +191,9 @@ private:
|
||||
void SendBackboneMulticastListenerRegistration(const Ip6::Address *aAddresses,
|
||||
uint8_t aAddressNum,
|
||||
uint32_t aTimeout);
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
static void HandleDuaRegistration(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo)
|
||||
{
|
||||
static_cast<Manager *>(aContext)->HandleDuaRegistration(*static_cast<const Coap::Message *>(aMessage),
|
||||
@@ -217,29 +226,43 @@ private:
|
||||
const Ip6::MessageInfo & aMessageInfo,
|
||||
const Ip6::Address & aTarget,
|
||||
ThreadStatusTlv::DuaStatus aStatus);
|
||||
|
||||
#endif
|
||||
void HandleNotifierEvents(Events aEvents);
|
||||
|
||||
static void HandleTimer(Timer &aTimer) { aTimer.GetOwner<Manager>().HandleTimer(); }
|
||||
void HandleTimer(void);
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
Coap::Resource mMulticastListenerRegistration;
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
Coap::Resource mDuaRegistration;
|
||||
Coap::Resource mBackboneQuery;
|
||||
Coap::Resource mBackboneAnswer;
|
||||
NdProxyTable mNdProxyTable;
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
MulticastListenersTable mMulticastListenersTable;
|
||||
TimerMilli mTimer;
|
||||
#endif
|
||||
TimerMilli mTimer;
|
||||
|
||||
BackboneTmfAgent mBackboneTmfAgent;
|
||||
|
||||
#if OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE
|
||||
Ip6::InterfaceIdentifier mDuaResponseTargetMlIid;
|
||||
uint8_t mDuaResponseStatus;
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
Ip6::InterfaceIdentifier mDuaResponseTargetMlIid;
|
||||
uint8_t mDuaResponseStatus;
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
ThreadStatusTlv::MlrStatus mMlrResponseStatus;
|
||||
bool mDuaResponseIsSpecified : 1;
|
||||
bool mMlrResponseIsSpecified : 1;
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
bool mDuaResponseIsSpecified : 1;
|
||||
#endif
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
bool mMlrResponseIsSpecified : 1;
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
#include "multicast_listeners_table.hpp"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
#include "common/code_utils.hpp"
|
||||
#include "common/instance.hpp"
|
||||
@@ -311,4 +311,4 @@ exit:
|
||||
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
#include "openthread-core-config.h"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
#include <openthread/backbone_router_ftd.h>
|
||||
|
||||
@@ -235,6 +235,6 @@ private:
|
||||
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
#endif // MULTICAST_LISTENERS_TABLE_HPP
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
#include "ndproxy_table.hpp"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#include "common/locator-getters.hpp"
|
||||
#include "common/logging.hpp"
|
||||
@@ -361,4 +361,4 @@ exit:
|
||||
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
#include "openthread-core-config.h"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#include <openthread/backbone_router_ftd.h>
|
||||
|
||||
@@ -311,6 +311,6 @@ private:
|
||||
|
||||
} // namespace ot
|
||||
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#endif // NDPROXY_TABLE_HPP_
|
||||
|
||||
@@ -777,15 +777,20 @@ template <> inline BackboneRouter::Manager &Instance::Get(void)
|
||||
{
|
||||
return mThreadNetif.mBackboneRouterManager;
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
template <> inline BackboneRouter::MulticastListenersTable &Instance::Get(void)
|
||||
{
|
||||
return mThreadNetif.mBackboneRouterManager.GetMulticastListenersTable();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
template <> inline BackboneRouter::NdProxyTable &Instance::Get(void)
|
||||
{
|
||||
return mThreadNetif.mBackboneRouterManager.GetNdProxyTable();
|
||||
}
|
||||
#endif
|
||||
|
||||
template <> inline BackboneRouter::BackboneTmfAgent &Instance::Get(void)
|
||||
{
|
||||
|
||||
@@ -45,6 +45,46 @@
|
||||
#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
*
|
||||
* Define to 1 to enable Backbone Router ND Proxying for Thread 1.2 DUA feature.
|
||||
* It's turned on by default for Thread 1.2 Backbone Router.
|
||||
*
|
||||
*/
|
||||
#ifndef OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE && !OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#error \
|
||||
"OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE is required for OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
*
|
||||
* Define to 1 to enable Backbone Router Multicast Routing for Thread 1.2 MLR feature.
|
||||
* It's turned on by default for Thread 1.2 Backbone Router.
|
||||
*
|
||||
*/
|
||||
#ifndef OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE && !OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#error \
|
||||
"OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE is required for OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE"
|
||||
#endif
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if !OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE && \
|
||||
!OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
#error \
|
||||
"At least one of OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE and OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE must be enabled for OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @def OPENTHREAD_CONFIG_MAX_MULTICAST_LISTENERS
|
||||
*
|
||||
|
||||
@@ -1324,7 +1324,7 @@ bool Ip6::ShouldForwardToThread(const MessageInfo &aMessageInfo, bool aFromNcpHo
|
||||
else if (IsOnLink(aMessageInfo.GetSockAddr()))
|
||||
{
|
||||
// on-link global address
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
ExitNow(rval = (aFromNcpHost ||
|
||||
!Get<BackboneRouter::Manager>().ShouldForwardDuaToBackbone(aMessageInfo.GetSockAddr())));
|
||||
#else
|
||||
|
||||
@@ -545,7 +545,7 @@ exit:
|
||||
Get<TimeTicker>().RegisterReceiver(TimeTicker::kAddressResolver);
|
||||
FreeMessageOnError(message, error);
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
if (Get<BackboneRouter::Local>().IsPrimary() && Get<BackboneRouter::Leader>().IsDomainUnicast(aEid))
|
||||
{
|
||||
uint16_t selfRloc16 = Get<Mle::MleRouter>().GetRloc16();
|
||||
@@ -796,7 +796,7 @@ void AddressResolver::HandleAddressQuery(Coap::Message &aMessage, const Ip6::Mes
|
||||
}
|
||||
}
|
||||
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
if (Get<BackboneRouter::Local>().IsPrimary() && Get<BackboneRouter::Leader>().IsDomainUnicast(target))
|
||||
{
|
||||
uint16_t srcRloc16 = aMessageInfo.GetPeerAddr().GetIid().GetLocator();
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#include "openthread-core-config.h"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
#include "test_platform.h"
|
||||
|
||||
@@ -210,4 +210,4 @@ int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#include "openthread-core-config.h"
|
||||
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
|
||||
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
#include "test_platform.h"
|
||||
|
||||
@@ -120,4 +120,4 @@ int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif // OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
|
||||
|
||||
Reference in New Issue
Block a user