From c03edff16b03816ded3cd6916b16636e8ab5a8ab Mon Sep 17 00:00:00 2001 From: Jiacheng Guo Date: Tue, 24 Mar 2020 14:28:54 +0800 Subject: [PATCH] [posix] add platformNetifDeinit (#4726) Close netif file descriptors to re-open after reset. --- src/posix/platform/netif.cpp | 23 +++++++++++++++++++++++ src/posix/platform/platform-posix.h | 6 ++++++ src/posix/platform/system.cpp | 3 +++ 3 files changed, 32 insertions(+) diff --git a/src/posix/platform/netif.cpp b/src/posix/platform/netif.cpp index d88d12bad..1cdbe6d1d 100644 --- a/src/posix/platform/netif.cpp +++ b/src/posix/platform/netif.cpp @@ -384,6 +384,29 @@ exit: return; } +void platformNetifDeinit(void) +{ + if (sTunFd != -1) + { + close(sTunFd); + sTunFd = -1; + } + + if (sIpFd != -1) + { + close(sIpFd); + sIpFd = -1; + } + + if (sNetlinkFd != -1) + { + close(sNetlinkFd); + sNetlinkFd = -1; + } + + sTunIndex = 0; +} + void platformNetifInit(otInstance *aInstance, const char *aInterfaceName) { struct ifreq ifr; diff --git a/src/posix/platform/platform-posix.h b/src/posix/platform/platform-posix.h index 343a9f60d..652c34a8c 100644 --- a/src/posix/platform/platform-posix.h +++ b/src/posix/platform/platform-posix.h @@ -217,6 +217,12 @@ void platformRadioInit(const otPlatformConfig *aPlatformConfig); */ void platformRadioDeinit(void); +/** + * This function shuts down platform network interface. + * + */ +void platformNetifDeinit(void); + /** * This function inputs a received radio frame. * diff --git a/src/posix/platform/system.cpp b/src/posix/platform/system.cpp index 8d85d7cc4..d9ed6888d 100644 --- a/src/posix/platform/system.cpp +++ b/src/posix/platform/system.cpp @@ -73,6 +73,9 @@ void otSysDeinit(void) virtualTimeDeinit(); #endif platformRadioDeinit(); +#if OPENTHREAD_CONFIG_PLATFORM_NETIF_ENABLE + platformNetifDeinit(); +#endif } #if OPENTHREAD_POSIX_VIRTUAL_TIME