[posix] unify the infra netif and backbone netif (#9638)

This commit refactors the code to unify the concept of 'Infrastructure
network interface' (which is for border routing) and 'backbone network
interface' (which is for backbone router). From now on they will both
be referred as 'infrastructure network interface'. In general border
routing and backbone router should be using the same infrastructure
network interface so I made this change.

This commit removes the `posix/platform/backbone.cpp` source file and
put its functionality in `posix/platform/infra_if.cpp`. Previously
`backbone.cpp` maintained its own variables `gBackboneNetifName` and
`gBackboneNetifIndex` which are redundant compared to the ones
maintained at `infra_if.cpp`. I removed these variables and changed
the references to use `otSysGetInfraNetifName` and
`otSysGetInfraNetifIndex` accordingly.
This commit is contained in:
whd
2023-11-28 20:50:26 -08:00
committed by GitHub
parent 319112b406
commit af36786f04
11 changed files with 141 additions and 209 deletions
-1
View File
@@ -124,7 +124,6 @@ endif()
add_library(openthread-posix
alarm.cpp
backbone.cpp
backtrace.cpp
configuration.cpp
config_file.cpp
-101
View File
@@ -1,101 +0,0 @@
/*
* Copyright (c) 2020, 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 implements the platform Backbone interface management on Linux.
*/
#include "openthread-posix-config.h"
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
#include "multicast_routing.hpp"
#include "platform-posix.h"
#include "common/code_utils.hpp"
#include "posix/platform/mainloop.hpp"
char gBackboneNetifName[IFNAMSIZ] = "";
unsigned int gBackboneNetifIndex = 0;
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
static ot::Posix::MulticastRoutingManager sMulticastRoutingManager;
#endif
void platformBackboneInit(const char *aInterfaceName)
{
if (aInterfaceName == nullptr || aInterfaceName[0] == '\0')
{
otLogWarnPlat("Backbone Router feature is disabled: infra/backbone interface is missing");
ExitNow();
}
VerifyOrDie(strnlen(aInterfaceName, sizeof(gBackboneNetifName)) < sizeof(gBackboneNetifName),
OT_EXIT_INVALID_ARGUMENTS);
strcpy(gBackboneNetifName, aInterfaceName);
gBackboneNetifIndex = if_nametoindex(gBackboneNetifName);
VerifyOrDie(gBackboneNetifIndex > 0, OT_EXIT_FAILURE);
otLogInfoPlat("Backbone interface is configured to %s (%d)", gBackboneNetifName, gBackboneNetifIndex);
exit:
return;
}
void platformBackboneSetUp(void)
{
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
sMulticastRoutingManager.SetUp();
#endif
}
void platformBackboneTearDown(void)
{
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
sMulticastRoutingManager.TearDown();
#endif
}
void platformBackboneDeinit(void)
{
gBackboneNetifIndex = 0;
memset(gBackboneNetifName, 0, sizeof(gBackboneNetifName));
}
void platformBackboneStateChange(otInstance *aInstance, otChangedFlags aFlags)
{
OT_UNUSED_VARIABLE(aInstance);
OT_UNUSED_VARIABLE(aFlags);
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
sMulticastRoutingManager.HandleStateChange(aInstance, aFlags);
#endif
}
#endif
@@ -187,6 +187,14 @@ unsigned int otSysGetThreadNetifIndex(void);
*/
const char *otSysGetInfraNetifName(void);
/**
* Returns the infrastructure network interface index.
*
* @returns The infrastructure network interface index.
*
*/
uint32_t otSysGetInfraNetifIndex(void);
/**
* Returns the radio spinel metrics.
*
+79 -14
View File
@@ -91,6 +91,7 @@ exit:
return ret;
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
otError otPlatInfraIfSendIcmp6Nd(uint32_t aInfraIfIndex,
const otIp6Address *aDestAddress,
const uint8_t *aBuffer,
@@ -98,6 +99,7 @@ otError otPlatInfraIfSendIcmp6Nd(uint32_t aInfraIfIndex,
{
return ot::Posix::InfraNetif::Get().SendIcmp6Nd(aInfraIfIndex, *aDestAddress, aBuffer, aBufferLength);
}
#endif
otError otPlatInfraIfDiscoverNat64Prefix(uint32_t aInfraIfIndex)
{
@@ -114,6 +116,8 @@ bool platformInfraIfIsRunning(void) { return ot::Posix::InfraNetif::Get().IsRunn
const char *otSysGetInfraNetifName(void) { return ot::Posix::InfraNetif::Get().GetNetifName(); }
uint32_t otSysGetInfraNetifIndex(void) { return ot::Posix::InfraNetif::Get().GetNetifIndex(); }
uint32_t otSysGetInfraNetifFlags(void) { return ot::Posix::InfraNetif::Get().GetFlags(); }
void otSysCountInfraNetifAddresses(otSysInfraNetIfAddressCounters *aAddressCounters)
@@ -206,6 +210,7 @@ int CreateNetLinkSocket(void)
return sock;
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
otError InfraNetif::SendIcmp6Nd(uint32_t aInfraIfIndex,
const otIp6Address &aDestAddress,
const uint8_t *aBuffer,
@@ -279,6 +284,7 @@ otError InfraNetif::SendIcmp6Nd(uint32_t aInfraIfIndex,
exit:
return error;
}
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
bool InfraNetif::IsRunning(void) const
{
@@ -352,6 +358,20 @@ exit:
return;
}
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
void InfraNetif::HandleBackboneStateChange(otInstance *aInstance, otChangedFlags aFlags)
{
OT_ASSERT(gInstance == aInstance);
OT_UNUSED_VARIABLE(aInstance);
OT_UNUSED_VARIABLE(aFlags);
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
mMulticastRoutingManager.HandleStateChange(aInstance, aFlags);
#endif
}
#endif
bool InfraNetif::HasLinkLocalAddress(void) const
{
bool hasLla = false;
@@ -389,18 +409,23 @@ void InfraNetif::Init(void) { mNetLinkSocket = CreateNetLinkSocket(); }
void InfraNetif::SetInfraNetif(const char *aIfName, int aIcmp6Socket)
{
uint32_t ifIndex = 0;
otBorderRoutingState state = otBorderRoutingGetState(gInstance);
uint32_t ifIndex = 0;
OT_UNUSED_VARIABLE(aIcmp6Socket);
OT_ASSERT(gInstance != nullptr);
VerifyOrDie(mNetLinkSocket != -1, OT_EXIT_INVALID_STATE);
VerifyOrDie(state == OT_BORDER_ROUTING_STATE_UNINITIALIZED || state == OT_BORDER_ROUTING_STATE_DISABLED,
OT_EXIT_INVALID_STATE);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
SetInfraNetifIcmp6SocketForBorderRouting(aIcmp6Socket);
#endif
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
VerifyOrDie(!mMulticastRoutingManager.IsEnabled(), OT_EXIT_INVALID_STATE);
#endif
if (aIfName == nullptr || aIfName[0] == '\0')
{
otLogWarnPlat("Border Routing feature is disabled: infra/backbone interface is missing");
otLogWarnPlat("Border Routing/Backbone Router feature is disabled: infra interface is missing");
ExitNow();
}
@@ -417,12 +442,6 @@ void InfraNetif::SetInfraNetif(const char *aIfName, int aIcmp6Socket)
mInfraIfIndex = ifIndex;
if (mInfraIfIcmp6Socket != -1)
{
close(mInfraIfIcmp6Socket);
}
mInfraIfIcmp6Socket = aIcmp6Socket;
exit:
return;
}
@@ -432,8 +451,15 @@ void InfraNetif::SetUp(void)
OT_ASSERT(gInstance != nullptr);
VerifyOrExit(mNetLinkSocket != -1);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
SuccessOrDie(otBorderRoutingInit(gInstance, mInfraIfIndex, platformInfraIfIsRunning()));
SuccessOrDie(otBorderRoutingSetEnabled(gInstance, /* aEnabled */ true));
#endif
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
mMulticastRoutingManager.SetUp();
#endif
Mainloop::Manager::Get().Add(*this);
exit:
return;
@@ -441,17 +467,26 @@ exit:
void InfraNetif::TearDown(void)
{
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
IgnoreError(otBorderRoutingSetEnabled(gInstance, false));
#endif
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
mMulticastRoutingManager.TearDown();
#endif
Mainloop::Manager::Get().Remove(*this);
}
void InfraNetif::Deinit(void)
{
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
if (mInfraIfIcmp6Socket != -1)
{
close(mInfraIfIcmp6Socket);
mInfraIfIcmp6Socket = -1;
}
#endif
if (mNetLinkSocket != -1)
{
@@ -459,16 +494,20 @@ void InfraNetif::Deinit(void)
mNetLinkSocket = -1;
}
mInfraIfIndex = 0;
mInfraIfName[0] = '\0';
mInfraIfIndex = 0;
}
void InfraNetif::Update(otSysMainloopContext &aContext)
{
VerifyOrExit(mInfraIfIcmp6Socket != -1);
VerifyOrExit(mNetLinkSocket != -1);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
VerifyOrExit(mInfraIfIcmp6Socket != -1);
FD_SET(mInfraIfIcmp6Socket, &aContext.mReadFdSet);
aContext.mMaxFd = OT_MAX(aContext.mMaxFd, mInfraIfIcmp6Socket);
#endif
FD_SET(mNetLinkSocket, &aContext.mReadFdSet);
aContext.mMaxFd = OT_MAX(aContext.mMaxFd, mNetLinkSocket);
@@ -506,7 +545,9 @@ void InfraNetif::ReceiveNetLinkMessage(void)
case RTM_DELADDR:
case RTM_NEWLINK:
case RTM_DELLINK:
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
SuccessOrDie(otPlatInfraIfStateChanged(gInstance, mInfraIfIndex, platformInfraIfIsRunning()));
#endif
break;
case NLMSG_ERROR:
{
@@ -525,6 +566,7 @@ exit:
return;
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
void InfraNetif::ReceiveIcmp6Message(void)
{
otError error = OT_ERROR_NONE;
@@ -596,6 +638,7 @@ exit:
otLogDebgPlat("Failed to handle ICMPv6 message: %s", otThreadErrorToString(error));
}
}
#endif // OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
#if OPENTHREAD_POSIX_CONFIG_NAT64_AIL_PREFIX_ENABLE
const char InfraNetif::kWellKnownIpv4OnlyName[] = "ipv4only.arpa";
@@ -671,7 +714,9 @@ void InfraNetif::DiscoverNat64PrefixDone(union sigval sv)
}
}
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
otPlatInfraIfDiscoverNat64PrefixDone(gInstance, Get().mInfraIfIndex, &prefix);
#endif
exit:
freeaddrinfo(res);
@@ -726,15 +771,35 @@ exit:
}
#endif // OPENTHREAD_POSIX_CONFIG_NAT64_AIL_PREFIX_ENABLE
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
void InfraNetif::SetInfraNetifIcmp6SocketForBorderRouting(int aIcmp6Socket)
{
otBorderRoutingState state = otBorderRoutingGetState(gInstance);
VerifyOrDie(state == OT_BORDER_ROUTING_STATE_UNINITIALIZED || state == OT_BORDER_ROUTING_STATE_DISABLED,
OT_EXIT_INVALID_STATE);
if (mInfraIfIcmp6Socket != -1)
{
close(mInfraIfIcmp6Socket);
}
mInfraIfIcmp6Socket = aIcmp6Socket;
}
#endif
void InfraNetif::Process(const otSysMainloopContext &aContext)
{
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
VerifyOrExit(mInfraIfIcmp6Socket != -1);
#endif
VerifyOrExit(mNetLinkSocket != -1);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
if (FD_ISSET(mInfraIfIcmp6Socket, &aContext.mReadFdSet))
{
ReceiveIcmp6Message();
}
#endif
if (FD_ISSET(mNetLinkSocket, &aContext.mReadFdSet))
{
+32 -5
View File
@@ -37,6 +37,7 @@
#include <openthread/nat64.h>
#include <openthread/openthread-system.h>
#include "multicast_routing.hpp"
#include "core/common/non_copyable.hpp"
#include "posix/platform/mainloop.hpp"
@@ -82,7 +83,8 @@ public:
* Sets the infrastructure network interface.
*
* @param[in] aIfName A pointer to infrastructure network interface name.
* @param[in] aIcmp6Socket A SOCK_RAW socket for sending/receiving ICMPv6 messages.
* @param[in] aIcmp6Socket A SOCK_RAW socket for sending/receiving ICMPv6 messages. If you don't need border
* routing feature, you can pass in -1.
*
*/
void SetInfraNetif(const char *aIfName, int aIcmp6Socket);
@@ -133,6 +135,15 @@ public:
*/
void CountAddresses(otSysInfraNetIfAddressCounters &aAddressCounters) const;
/**
* Handles the backbone state change events.
*
* @param[in] aInstance A pointer to the OpenThread instance.
* @param[in] aFlags Flags that denote the state change events.
*
*/
void HandleBackboneStateChange(otInstance *aInstance, otChangedFlags aFlags);
/**
* Sends an ICMPv6 Neighbor Discovery message on given infrastructure interface.
*
@@ -176,6 +187,14 @@ public:
*/
const char *GetNetifName(void) const { return (mInfraIfIndex != 0) ? mInfraIfName : nullptr; }
/**
* Gets the infrastructure network interface index.
*
* @returns The infrastructure network interface index.
*
*/
uint32_t GetNetifIndex(void) const { return mInfraIfIndex; }
/**
* Gets the infrastructure network interface singleton.
*
@@ -201,14 +220,22 @@ private:
static const uint8_t kValidNat64PrefixLength[];
char mInfraIfName[IFNAMSIZ];
uint32_t mInfraIfIndex = 0;
int mInfraIfIcmp6Socket = -1;
int mNetLinkSocket = -1;
uint32_t mInfraIfIndex = 0;
int mNetLinkSocket = -1;
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
int mInfraIfIcmp6Socket = -1;
#endif
#if OPENTHREAD_POSIX_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE
MulticastRoutingManager mMulticastRoutingManager;
#endif
void ReceiveNetLinkMessage(void);
void ReceiveIcmp6Message(void);
bool HasLinkLocalAddress(void) const;
static void DiscoverNat64PrefixDone(union sigval sv);
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
void SetInfraNetifIcmp6SocketForBorderRouting(int aIcmp6Socket);
void ReceiveIcmp6Message(void);
#endif
};
} // namespace Posix
+2 -2
View File
@@ -159,7 +159,7 @@ void MulticastRoutingManager::UpdateMldReport(const Ip6::Address &aAddress, bool
struct ipv6_mreq ipv6mr;
otError error = OT_ERROR_NONE;
ipv6mr.ipv6mr_interface = if_nametoindex(gBackboneNetifName);
ipv6mr.ipv6mr_interface = if_nametoindex(otSysGetInfraNetifName());
memcpy(&ipv6mr.ipv6mr_multiaddr, aAddress.GetBytes(), sizeof(ipv6mr.ipv6mr_multiaddr));
error = (setsockopt(mMulticastRouterSock, IPPROTO_IPV6, (isAdd ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP),
(void *)&ipv6mr, sizeof(ipv6mr))
@@ -243,7 +243,7 @@ void MulticastRoutingManager::InitMulticastRouterSock(void)
// Add Backbone network interface to MIF
mif6ctl.mif6c_mifi = kMifIndexBackbone;
mif6ctl.mif6c_pifi = if_nametoindex(gBackboneNetifName);
mif6ctl.mif6c_pifi = otSysGetInfraNetifIndex();
VerifyOrDie(mif6ctl.mif6c_pifi > 0, OT_EXIT_ERROR_ERRNO);
VerifyOrDie(0 == setsockopt(mMulticastRouterSock, IPPROTO_IPV6, MRT6_ADD_MIF, &mif6ctl, sizeof(mif6ctl)),
OT_EXIT_ERROR_ERRNO);
+1 -1
View File
@@ -58,6 +58,7 @@ public:
{
}
bool IsEnabled(void) const { return mMulticastRouterSock >= 0; }
void SetUp(void);
void TearDown(void);
void Update(otSysMainloopContext &aContext) override;
@@ -110,7 +111,6 @@ private:
void Remove(const Ip6::Address &aAddress);
void UpdateMldReport(const Ip6::Address &aAddress, bool isAdd);
bool HasMulticastListener(const Ip6::Address &aAddress) const;
bool IsEnabled(void) const { return mMulticastRouterSock >= 0; }
void InitMulticastRouterSock(void);
void FinalizeMulticastRouterSock(void);
void ProcessMulticastRouterMessages(void);
+2 -1
View File
@@ -394,7 +394,8 @@
* not explicit defined.
*/
#ifndef OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE
#define OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
#define OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE \
(OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE || OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE)
#endif
/**
-57
View File
@@ -409,69 +409,12 @@ extern char gNetifName[IFNAMSIZ];
*/
extern unsigned int gNetifIndex;
/**
* Initializes platform Backbone network.
*
* @note This function is called before OpenThread instance is created.
*
* @param[in] aInterfaceName A pointer to Thread network interface name.
*
*/
void platformBackboneInit(const char *aInterfaceName);
/**
* Sets up platform Backbone network.
*
* @note This function is called after OpenThread instance is created.
*
* @param[in] aInstance A pointer to the OpenThread instance.
*
*/
void platformBackboneSetUp(void);
/**
* Tears down platform Backbone network.
*
* @note This function is called before OpenThread instance is destructed.
*
*/
void platformBackboneTearDown(void);
/**
* Shuts down the platform Backbone network.
*
* @note This function is called after OpenThread instance is destructed.
*
*/
void platformBackboneDeinit(void);
/**
* Performs notifies state changes to platform Backbone network.
*
* @param[in] aInstance A pointer to the OpenThread instance.
* @param[in] aFlags Flags that denote the state change events.
*
*/
void platformBackboneStateChange(otInstance *aInstance, otChangedFlags aFlags);
/**
* A pointer to the OpenThread instance.
*
*/
extern otInstance *gInstance;
/**
* The name of Backbone network interface.
*
*/
extern char gBackboneNetifName[IFNAMSIZ];
/**
* The index of Backbone network interface.
*
*/
extern unsigned int gBackboneNetifIndex;
/**
* Tells if the infrastructure interface is running.
*
+11 -22
View File
@@ -72,10 +72,7 @@ static void processStateChange(otChangedFlags aFlags, void *aContext)
#endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
if (gBackboneNetifIndex != 0)
{
platformBackboneStateChange(instance, aFlags);
}
ot::Posix::InfraNetif::Get().HandleBackboneStateChange(instance, aFlags);
#endif
}
#endif
@@ -145,10 +142,6 @@ void platformInit(otPlatformConfig *aPlatformConfig)
#endif
platformRandomInit();
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
platformBackboneInit(aPlatformConfig->mBackboneInterfaceName);
#endif
#if OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE
ot::Posix::InfraNetif::Get().Init();
@@ -178,16 +171,20 @@ void platformSetUp(otPlatformConfig *aPlatformConfig)
VerifyOrExit(!gDryRun);
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
platformBackboneSetUp();
#endif
#if OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE
if (aPlatformConfig->mBackboneInterfaceName != nullptr && strlen(aPlatformConfig->mBackboneInterfaceName) > 0)
{
otSysSetInfraNetif(aPlatformConfig->mBackboneInterfaceName,
ot::Posix::InfraNetif::CreateIcmp6Socket(aPlatformConfig->mBackboneInterfaceName));
int icmp6Sock = -1;
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE
icmp6Sock = ot::Posix::InfraNetif::CreateIcmp6Socket(aPlatformConfig->mBackboneInterfaceName);
#endif
otSysSetInfraNetif(aPlatformConfig->mBackboneInterfaceName, icmp6Sock);
}
#endif
#if OPENTHREAD_POSIX_CONFIG_INFRA_IF_ENABLE
ot::Posix::InfraNetif::Get().SetUp();
#endif
@@ -246,10 +243,6 @@ void platformTearDown(void)
ot::Posix::InfraNetif::Get().TearDown();
#endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
platformBackboneTearDown();
#endif
exit:
return;
}
@@ -278,10 +271,6 @@ void platformDeinit(void)
ot::Posix::InfraNetif::Get().Deinit();
#endif
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
platformBackboneDeinit();
#endif
exit:
return;
}
+6 -5
View File
@@ -324,11 +324,12 @@ otError otPlatUdpBindToNetif(otUdpSocket *aUdpSocket, otNetifIdentifier aNetifId
{
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
#if __linux__
VerifyOrExit(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, gBackboneNetifName, strlen(gBackboneNetifName)) == 0,
VerifyOrExit(setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, otSysGetInfraNetifName(),
strlen(otSysGetInfraNetifName())) == 0,
error = OT_ERROR_FAILED);
#else // __NetBSD__ || __FreeBSD__ || __APPLE__
VerifyOrExit(setsockopt(fd, IPPROTO_IPV6, IPV6_BOUND_IF, &gBackboneNetifIndex, sizeof(gBackboneNetifIndex)) ==
0,
uint32_t backboneNetifIndex = otSysGetInfraNetifIndex();
VerifyOrExit(setsockopt(fd, IPPROTO_IPV6, IPV6_BOUND_IF, &backboneNetifIndex, sizeof(backboneNetifIndex)) == 0,
error = OT_ERROR_FAILED);
#endif // __linux__
#else
@@ -473,7 +474,7 @@ otError otPlatUdpJoinMulticastGroup(otUdpSocket *aUdpSocket,
break;
case OT_NETIF_BACKBONE:
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
mreq.ipv6mr_interface = gBackboneNetifIndex;
mreq.ipv6mr_interface = otSysGetInfraNetifIndex();
#else
ExitNow(error = OT_ERROR_NOT_IMPLEMENTED);
#endif
@@ -513,7 +514,7 @@ otError otPlatUdpLeaveMulticastGroup(otUdpSocket *aUdpSocket,
break;
case OT_NETIF_BACKBONE:
#if OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE
mreq.ipv6mr_interface = gBackboneNetifIndex;
mreq.ipv6mr_interface = otSysGetInfraNetifIndex();
#else
ExitNow(error = OT_ERROR_NOT_IMPLEMENTED);
#endif