[backbone-router] simplify TMF URI resource handling (#8265)

This commit updates `BackboneTmfAgent` to handle TMF URI resources
(similar to the model used by `Tmf::Agent` added in #8233).
This commit is contained in:
Abtin Keshavarzian
2022-10-11 09:11:20 -07:00
committed by GitHub
parent 76010bc9ad
commit ee83b1cb5d
4 changed files with 90 additions and 53 deletions
+47
View File
@@ -43,6 +43,13 @@ namespace BackboneRouter {
RegisterLogModule("Bbr"); RegisterLogModule("Bbr");
BackboneTmfAgent::BackboneTmfAgent(Instance &aInstance)
: Coap::Coap(aInstance)
{
SetInterceptor(&Filter, this);
SetResourceHandler(&HandleResource);
}
Error BackboneTmfAgent::Start(void) Error BackboneTmfAgent::Start(void)
{ {
Error error = kErrorNone; Error error = kErrorNone;
@@ -54,6 +61,46 @@ exit:
return error; return error;
} }
bool BackboneTmfAgent::HandleResource(CoapBase & aCoapBase,
const char * aUriPath,
ot::Coap::Message & aMessage,
const Ip6::MessageInfo &aMessageInfo)
{
return static_cast<BackboneTmfAgent &>(aCoapBase).HandleResource(aUriPath, aMessage, aMessageInfo);
}
bool BackboneTmfAgent::HandleResource(const char * aUriPath,
ot::Coap::Message & aMessage,
const Ip6::MessageInfo &aMessageInfo)
{
OT_UNUSED_VARIABLE(aMessage);
OT_UNUSED_VARIABLE(aMessageInfo);
bool didHandle = true;
Uri uri = UriFromPath(aUriPath);
#define Case(kUri, Type) \
case kUri: \
Get<Type>().HandleTmf<kUri>(aMessage, aMessageInfo); \
break
switch (uri)
{
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
Case(kUriBackboneQuery, Manager);
Case(kUriBackboneAnswer, Manager);
#endif
default:
didHandle = false;
break;
}
#undef Case
return didHandle;
}
Error BackboneTmfAgent::Filter(const ot::Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, void *aContext) Error BackboneTmfAgent::Filter(const ot::Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, void *aContext)
{ {
OT_UNUSED_VARIABLE(aMessage); OT_UNUSED_VARIABLE(aMessage);
+8 -6
View File
@@ -39,6 +39,7 @@
#if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE #if OPENTHREAD_FTD && OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
#include "coap/coap.hpp" #include "coap/coap.hpp"
#include "thread/tmf.hpp"
namespace ot { namespace ot {
namespace BackboneRouter { namespace BackboneRouter {
@@ -58,11 +59,7 @@ public:
* @param[in] aInstance A reference to the OpenThread instance. * @param[in] aInstance A reference to the OpenThread instance.
* *
*/ */
explicit BackboneTmfAgent(Instance &aInstance) explicit BackboneTmfAgent(Instance &aInstance);
: Coap::Coap(aInstance)
{
SetInterceptor(&Filter, this);
}
/** /**
* This method starts the Backbone TMF agent. * This method starts the Backbone TMF agent.
@@ -99,7 +96,12 @@ public:
void UnsubscribeMulticast(const Ip6::Address &aAddress); void UnsubscribeMulticast(const Ip6::Address &aAddress);
private: private:
void LogError(const char *aText, const Ip6::Address &aAddress, Error aError) const; static bool HandleResource(CoapBase & aCoapBase,
const char * aUriPath,
ot::Coap::Message & aMessage,
const Ip6::MessageInfo &aMessageInfo);
bool HandleResource(const char *aUriPath, ot::Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
void LogError(const char *aText, const Ip6::Address &aAddress, Error aError) const;
static Error Filter(const ot::Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, void *aContext); static Error Filter(const ot::Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo, void *aContext);
}; };
+2 -18
View File
@@ -56,8 +56,6 @@ RegisterLogModule("BbrManager");
Manager::Manager(Instance &aInstance) Manager::Manager(Instance &aInstance)
: InstanceLocator(aInstance) : InstanceLocator(aInstance)
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
, mBackboneQuery(kUriBackboneQuery, Manager::HandleBackboneQuery, this)
, mBackboneAnswer(kUriBackboneAnswer, Manager::HandleBackboneAnswer, this)
, mNdProxyTable(aInstance) , mNdProxyTable(aInstance)
#endif #endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
@@ -80,10 +78,6 @@ Manager::Manager(Instance &aInstance)
#endif #endif
#endif #endif
{ {
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
mBackboneTmfAgent.AddResource(mBackboneQuery);
mBackboneTmfAgent.AddResource(mBackboneAnswer);
#endif
} }
void Manager::HandleNotifierEvents(Events aEvents) void Manager::HandleNotifierEvents(Events aEvents)
@@ -555,12 +549,7 @@ exit:
return error; return error;
} }
void Manager::HandleBackboneQuery(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo) template <> void Manager::HandleTmf<kUriBackboneQuery>(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{
static_cast<Manager *>(aContext)->HandleBackboneQuery(AsCoapMessage(aMessage), AsCoreType(aMessageInfo));
}
void Manager::HandleBackboneQuery(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{ {
Error error = kErrorNone; Error error = kErrorNone;
Ip6::Address dua; Ip6::Address dua;
@@ -589,12 +578,7 @@ exit:
LogInfo("HandleBackboneQuery: %s", ErrorToString(error)); LogInfo("HandleBackboneQuery: %s", ErrorToString(error));
} }
void Manager::HandleBackboneAnswer(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo) template <> void Manager::HandleTmf<kUriBackboneAnswer>(Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{
static_cast<Manager *>(aContext)->HandleBackboneAnswer(AsCoapMessage(aMessage), AsCoreType(aMessageInfo));
}
void Manager::HandleBackboneAnswer(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
{ {
Error error = kErrorNone; Error error = kErrorNone;
bool proactive; bool proactive;
+33 -29
View File
@@ -63,6 +63,7 @@ class Manager : public InstanceLocator, private NonCopyable
{ {
friend class ot::Notifier; friend class ot::Notifier;
friend class Tmf::Agent; friend class Tmf::Agent;
friend class BackboneTmfAgent;
public: public:
/** /**
@@ -189,32 +190,28 @@ private:
#endif #endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
void HandleDuaRegistration(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); void HandleDuaRegistration(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
static void HandleBackboneQuery(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); Error SendBackboneAnswer(const Ip6::MessageInfo & aQueryMessageInfo,
void HandleBackboneQuery(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); const Ip6::Address & aDua,
static void HandleBackboneAnswer(void *aContext, otMessage *aMessage, const otMessageInfo *aMessageInfo); uint16_t aSrcRloc16,
void HandleBackboneAnswer(const Coap::Message &aMessage, const Ip6::MessageInfo &aMessageInfo); const NdProxyTable::NdProxy &aNdProxy);
Error SendBackboneAnswer(const Ip6::MessageInfo & aQueryMessageInfo, Error SendBackboneAnswer(const Ip6::Address & aDstAddr,
const Ip6::Address & aDua, const Ip6::Address & aDua,
uint16_t aSrcRloc16, const Ip6::InterfaceIdentifier &aMeshLocalIid,
const NdProxyTable::NdProxy &aNdProxy); uint32_t aTimeSinceLastTransaction,
Error SendBackboneAnswer(const Ip6::Address & aDstAddr, uint16_t aSrcRloc16);
const Ip6::Address & aDua, void HandleDadBackboneAnswer(const Ip6::Address &aDua, const Ip6::InterfaceIdentifier &aMeshLocalIid);
const Ip6::InterfaceIdentifier &aMeshLocalIid, void HandleExtendedBackboneAnswer(const Ip6::Address & aDua,
uint32_t aTimeSinceLastTransaction, const Ip6::InterfaceIdentifier &aMeshLocalIid,
uint16_t aSrcRloc16); uint32_t aTimeSinceLastTransaction,
void HandleDadBackboneAnswer(const Ip6::Address &aDua, const Ip6::InterfaceIdentifier &aMeshLocalIid); uint16_t aSrcRloc16);
void HandleExtendedBackboneAnswer(const Ip6::Address & aDua, void HandleProactiveBackboneNotification(const Ip6::Address & aDua,
const Ip6::InterfaceIdentifier &aMeshLocalIid, const Ip6::InterfaceIdentifier &aMeshLocalIid,
uint32_t aTimeSinceLastTransaction, uint32_t aTimeSinceLastTransaction);
uint16_t aSrcRloc16); void SendDuaRegistrationResponse(const Coap::Message & aMessage,
void HandleProactiveBackboneNotification(const Ip6::Address & aDua, const Ip6::MessageInfo & aMessageInfo,
const Ip6::InterfaceIdentifier &aMeshLocalIid, const Ip6::Address & aTarget,
uint32_t aTimeSinceLastTransaction); ThreadStatusTlv::DuaStatus aStatus);
void SendDuaRegistrationResponse(const Coap::Message & aMessage,
const Ip6::MessageInfo & aMessageInfo,
const Ip6::Address & aTarget,
ThreadStatusTlv::DuaStatus aStatus);
#endif #endif
void HandleNotifierEvents(Events aEvents); void HandleNotifierEvents(Events aEvents);
@@ -225,9 +222,7 @@ private:
using BbrTimer = TimerMilliIn<Manager, &Manager::HandleTimer>; using BbrTimer = TimerMilliIn<Manager, &Manager::HandleTimer>;
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
Coap::Resource mBackboneQuery; NdProxyTable mNdProxyTable;
Coap::Resource mBackboneAnswer;
NdProxyTable mNdProxyTable;
#endif #endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE #if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
@@ -254,6 +249,15 @@ private:
#endif #endif
}; };
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
DeclareTmfHandler(Manager, kUriMlr);
#endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_DUA_NDPROXYING_ENABLE
DeclareTmfHandler(Manager, kUriDuaRegistrationRequest);
DeclareTmfHandler(Manager, kUriBackboneQuery);
DeclareTmfHandler(Manager, kUriBackboneAnswer);
#endif
} // namespace BackboneRouter } // namespace BackboneRouter
/** /**