[nat64] fix build issues related to NAT64 on POSIX (#8167)

The build might fail when using build systems other than cmake and
NAT64_TRANSLATOR is enabled.
- Reorder the functions in `src/posix/platform/netif.cpp`
- Define a default NAT64 CIDR
- Define `kNat64RoutePriority`
This commit is contained in:
Song GUO
2022-10-11 22:47:50 -07:00
committed by GitHub
parent 131e42c60f
commit 43c66a3d5f
5 changed files with 35 additions and 26 deletions
+1 -1
View File
@@ -1859,7 +1859,7 @@ This command is only available when device enables NAT64 translator.
```bash
> nat64 cidr
192.168.64.0/24
192.168.255.0/24
Done
```
+1 -1
View File
@@ -748,7 +748,7 @@ template <> otError Interpreter::Process<Cmd("nat64")>(Arg aArgs[])
* @cli nat64 cidr
* @code
* nat64 cidr
* 192.168.64.0/24
* 192.168.255.0/24
* Done
* @endcode
* @par api_copy
+1 -1
View File
@@ -84,7 +84,7 @@ if(OT_POSIX_CONFIG_RCP_BUS)
)
endif()
set(OT_POSIX_NAT64_CIDR "192.168.64.0/24" CACHE STRING "NAT64 CIDR for OpenThread NAT64")
set(OT_POSIX_NAT64_CIDR "192.168.255.0/24" CACHE STRING "NAT64 CIDR for OpenThread NAT64")
if(OT_POSIX_NAT64_CIDR)
target_compile_definitions(ot-posix-config
INTERFACE "OPENTHREAD_POSIX_CONFIG_NAT64_CIDR=\"${OT_POSIX_NAT64_CIDR}\""
+22 -23
View File
@@ -210,6 +210,10 @@ static uint8_t sAddedExternalRoutesNum = 0;
static otIp6Prefix sAddedExternalRoutes[kMaxExternalRoutesNum];
#endif
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE
static constexpr uint32_t kNat64RoutePriority = 100; ///< Priority for route to NAT64 CIDR, 100 means a high priority.
#endif
#if defined(RTM_NEWMADDR) || defined(__NetBSD__)
// on some BSDs (mac OS, FreeBSD), we get RTM_NEWMADDR/RTM_DELMADDR messages, so we don't need to monitor using MLD
// on NetBSD, MLD monitoring simply doesn't work
@@ -566,10 +570,8 @@ exit:
}
}
#if __linux__ && \
(OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE || OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE)
template <size_t N> static otError AddRoute(const uint8_t (&aAddress)[N], uint8_t aPrefixLen, uint32_t aPriority)
#if defined(__linux__)
template <size_t N> otError AddRoute(const uint8_t (&aAddress)[N], uint8_t aPrefixLen, uint32_t aPriority)
{
constexpr unsigned int kBufSize = 128;
struct
@@ -616,6 +618,7 @@ exit:
return error;
}
#if OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE || OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE
static otError DeleteRoute(const otIp6Prefix &aPrefix)
{
constexpr unsigned int kBufSize = 512;
@@ -669,19 +672,9 @@ static otError AddRoute(const otIp6Prefix &aPrefix, uint32_t aPriority)
{
return AddRoute(aPrefix.mPrefix.mFields.m8, aPrefix.mLength, aPriority);
}
#endif // OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE || OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE
static otError AddIp4Route(const otIp4Cidr &aCidr, uint32_t aPriority)
{
return AddRoute(aCidr.mAddress.mFields.m8, aCidr.mLength, aPriority);
}
#endif
#endif // __linux__ && (OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE ||
// OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE)
#if OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE && __linux__
#if OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE
static bool HasAddedOmrRoute(const otIp6Prefix &aOmrPrefix)
{
bool found = false;
@@ -760,11 +753,9 @@ static void UpdateOmrRoutes(otInstance *aInstance)
}
}
}
#endif // OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE
#endif // OPENTHREAD_POSIX_CONFIG_INSTALL_OMR_ROUTES_ENABLE && __linux__
#if OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE && __linux__
#if OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE
static otError AddExternalRoute(const otIp6Prefix &aPrefix)
{
otError error;
@@ -861,7 +852,15 @@ static void UpdateExternalRoutes(otInstance *aInstance)
exit:
return;
}
#endif // OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE && __linux__
#endif // OPENTHREAD_POSIX_CONFIG_INSTALL_EXTERNAL_ROUTES_ENABLE
#if OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE && OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE
static otError AddIp4Route(const otIp4Cidr &aCidr, uint32_t aPriority)
{
return AddRoute(aCidr.mAddress.mFields.m8, aCidr.mLength, aPriority);
}
#endif
#endif // defined(__linux__)
static void processAddressChange(const otIp6AddressInfo *aAddressInfo, bool aIsAdded, void *aContext)
{
@@ -1162,7 +1161,7 @@ static void processNetifLinkEvent(otInstance *aInstance, struct nlmsghdr *aNetli
if (isUp && gNat64Cidr.mLength > 0)
{
SuccessOrExit(error = otNat64SetIp4Cidr(gInstance, &gNat64Cidr));
AddIp4Route(gNat64Cidr, kExternalRoutePriority);
AddIp4Route(gNat64Cidr, kNat64RoutePriority);
otLogInfoPlat("[netif] Succeeded to enable NAT64");
}
#endif
@@ -1173,7 +1172,7 @@ exit:
otLogWarnPlat("[netif] Failed to sync netif state with host: %s", otThreadErrorToString(error));
}
}
#endif
#endif // defined(__linux__)
#if defined(__APPLE__) || defined(__NetBSD__) || defined(__FreeBSD__)
@@ -294,4 +294,14 @@
#define OPENTHREAD_POSIX_CONFIG_TREL_UDP_PORT 0
#endif
/**
* @def OPENTHREAD_POSIX_CONFIG_NAT64_CIDR
*
* This setting configures the NAT64 CIDR, used by NAT64 translator.
*
*/
#ifndef OPENTHREAD_POSIX_CONFIG_NAT64_CIDR
#define OPENTHREAD_POSIX_CONFIG_NAT64_CIDR "192.168.255.0/24"
#endif
#endif // OPENTHREAD_PLATFORM_CONFIG_H_