/**
* @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE
+ * @brief Get ipv6 prefix for route
+ * @since_tizen 7.0
+ *
+ * @return 0 on success, otherwise a negative error value.
+ * @retval #THREAD_ERROR_NONE Successful
+ * @retval #THREAD_ERROR_NOT_INITIALIZED Not initialized
+ * @retval #THREAD_ERROR_OPERATION_FAILED Operation failed
+ * @retval #THREAD_ERROR_NOT_SUPPORTED Not supported
+ *
+ * @pre thread API must be initialized with thread_initialize().
+ *
+ * @see thread_external_route_foreach_cb()
+ */
+int thread_br_get_ipv6_prefix(thread_route_info_h route,
+ uint8_t *ipv6_prefix, uint8_t *ipv6_prefix_len);
+
+/**
+ * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE
* @brief Add an external border routing rule to the network.
* @since_tizen 7.0
*
}
int thread_br_get_ipv6_prefix(thread_route_info_h route,
- uint8_t *ipv6_prefix)
+ uint8_t *ipv6_prefix, uint8_t *ipv6_prefix_len)
{
FUNC_ENTRY;
THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON);
THREAD_CHECK_INIT_STATUS();
THREAD_VALIDATE_INPUT_PARAMETER(route);
THREAD_VALIDATE_INPUT_PARAMETER(ipv6_prefix);
+ THREAD_VALIDATE_INPUT_PARAMETER(ipv6_prefix_len);
thread_route_info_s *route_info = (thread_route_info_s*)route;
memcpy(ipv6_prefix, (route_info->prefix).ipv6.fields.m8,
THREAD_IPV6_PREFIX_SIZE*sizeof(uint8_t));
+ *ipv6_prefix_len = (route_info->prefix).length;
FUNC_EXIT;
return THREAD_ERROR_NONE;
class ThreadBRTest : public ::testing::Test
{
public:
+ enum class RouteInfo {
+ kIpv6Prefix,
+ };
+
uint8_t ipv6Prefix[THREAD_IPV6_PREFIX_SIZE];
uint8_t ipv6PrefixLen;
uint16_t rloc16;
static bool GetExternalRoutesCallback(int total,
thread_route_info_h route_info, void *user_data)
{
+ RouteInfo routeInfo = static_cast<RouteInfo>(GPOINTER_TO_UINT(user_data));
+
+ switch (routeInfo) {
+ case RouteInfo::kIpv6Prefix:
+ {
+ uint8_t ipv6Prefix[THREAD_IPV6_ADDRESS_SIZE];
+ uint8_t ipv6PrefixLen;
+ EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_ipv6_prefix(route_info, ipv6Prefix, &ipv6PrefixLen));
+ }
+ break;
+ default:
+ break;
+ }
+
return true;
};
thread_br_get_external_routes(instance, GetExternalRoutesCallback, nullptr));
}
+TEST_F(ThreadBRTest, BRGetIpv6PrefixErrorNone)
+{
+ EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
+ EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
+ EXPECT_EQ(THREAD_ERROR_NONE,
+ thread_br_get_external_routes(instance, GetExternalRoutesCallback,
+ GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kIpv6Prefix))));
+}
+
TEST_F(ThreadBRTest, BRAddExternalRouteNotInitialized)
{
EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());