diff --git a/src/posix/platform/backbone.cpp b/src/posix/platform/backbone.cpp index f96fbec5e..1fb8b8d03 100644 --- a/src/posix/platform/backbone.cpp +++ b/src/posix/platform/backbone.cpp @@ -69,6 +69,17 @@ exit: return; } +void platformBackboneDeinit(void) +{ +#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE + sMulticastRoutingManager.Deinit(); +#endif + + gBackboneNetifIndex = 0; + + memset(gBackboneNetifName, 0, sizeof(gBackboneNetifName)); +} + void platformBackboneStateChange(otInstance *aInstance, otChangedFlags aFlags) { OT_UNUSED_VARIABLE(aInstance); diff --git a/src/posix/platform/multicast_routing.cpp b/src/posix/platform/multicast_routing.cpp index 78ee55420..4b4ed686c 100644 --- a/src/posix/platform/multicast_routing.cpp +++ b/src/posix/platform/multicast_routing.cpp @@ -60,6 +60,12 @@ void MulticastRoutingManager::Init(otInstance *aInstance) Mainloop::Manager::Get().Add(*this); } +void MulticastRoutingManager::Deinit(void) +{ + Mainloop::Manager::Get().Remove(*this); + otBackboneRouterSetMulticastListenerCallback(mInstance, nullptr, nullptr); +} + void MulticastRoutingManager::HandleBackboneMulticastListenerEvent(void * aContext, otBackboneRouterMulticastListenerEvent aEvent, const otIp6Address * aAddress) diff --git a/src/posix/platform/multicast_routing.hpp b/src/posix/platform/multicast_routing.hpp index 1407bd433..a419d2643 100644 --- a/src/posix/platform/multicast_routing.hpp +++ b/src/posix/platform/multicast_routing.hpp @@ -48,17 +48,9 @@ namespace ot { namespace Posix { -/** - * This class implements Multicast Routing management. - * - */ class MulticastRoutingManager : public Mainloop::Source, private NonCopyable { public: - /** - * This constructor initializes a Multicast Routing manager instance. - * - */ explicit MulticastRoutingManager() : mLastExpireTime(0) @@ -66,37 +58,10 @@ public: { } - /** - * This method initializes the Multicast Routing manager. - * - * @param[in] aInstance A pointer to an OpenThread instance. - * - */ void Init(otInstance *aInstance); - - /** - * This method updates the fd_set and timeout for mainloop. - * - * @param[inout] aContext A reference to the mainloop context. - * - */ + void Deinit(void); void Update(otSysMainloopContext &aContext) override; - - /** - * This method performs Multicast Routing processing. - * - * @param[in] aContext A reference to the mainloop context. - * - */ void Process(const otSysMainloopContext &aContext) override; - - /** - * This method handles Thread state changes. - * - * @param[in] aInstance A pointer to an OpenThread instance. - * @param[in] aFlags Flags that denote the state change events. - * - */ void HandleStateChange(otInstance *aInstance, otChangedFlags aFlags); private: diff --git a/src/posix/platform/platform-posix.h b/src/posix/platform/platform-posix.h index dbd067f58..022790ae2 100644 --- a/src/posix/platform/platform-posix.h +++ b/src/posix/platform/platform-posix.h @@ -436,6 +436,12 @@ extern unsigned int gNetifIndex; */ void platformBackboneInit(otInstance *aInstance, const char *aInterfaceName); +/** + * This function shuts down the platform Backbone network. + * + */ +void platformBackboneDeinit(void); + /** * This function performs notifies state changes to platform Backbone network. * diff --git a/src/posix/platform/system.cpp b/src/posix/platform/system.cpp index 83d31463f..d7ca3002f 100644 --- a/src/posix/platform/system.cpp +++ b/src/posix/platform/system.cpp @@ -177,6 +177,10 @@ void otSysDeinit(void) #if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE ot::Posix::InfraNetif::Get().Deinit(); #endif + +#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE + platformBackboneDeinit(); +#endif } #if OPENTHREAD_POSIX_VIRTUAL_TIME