From e91d181c4518ced58d074312df8fbfb29cca51e4 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Wed, 15 Jun 2022 10:45:00 +0900 Subject: [PATCH] Refactor a CAPI for adding onmesh prefix for br Change-Id: I741f90ef854510aa097e1b58ccd0bda469c1b131 Signed-off-by: hyunuk.tak --- include/thread.h | 7 ++-- src/thread-br.c | 65 ++++++++++------------------------- tests/thread-test/thread-br.c | 20 ++++++++--- tests/unittest/thread-unittest-br.cpp | 48 ++++++++++++-------------- 4 files changed, 59 insertions(+), 81 deletions(-) diff --git a/include/thread.h b/include/thread.h index 65ac690..1da04a3 100644 --- a/include/thread.h +++ b/include/thread.h @@ -993,9 +993,7 @@ int thread_onmesh_prefix_get_default_route(thread_onmesh_prefix_info_h onmesh_pr * @see thread_remove_onmesh_prefix() */ int thread_br_add_onmesh_prefix(thread_instance_h instance, - const uint8_t *ipv6_prefix, int ipv6_prefix_len, int8_t preference, - bool preferred, bool slaac, bool dhcp, bool configure, bool default_route, - bool on_mesh, bool stable, thread_onmesh_prefix_info_h *onmesh_prefix); + thread_onmesh_prefix_info_h onmesh_prefix); /** * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE @@ -1012,7 +1010,8 @@ int thread_br_add_onmesh_prefix(thread_instance_h instance, * * @see thread_add_onmesh_prefix() */ -int thread_br_remove_onmesh_prefix(thread_instance_h instance, thread_onmesh_prefix_info_h prefix_info); +int thread_br_remove_onmesh_prefix(thread_instance_h instance, + thread_onmesh_prefix_info_h onmesh_prefix); /** * @ingroup CAPI_NETWORK_THREAD_NETWORK_MODULE diff --git a/src/thread-br.c b/src/thread-br.c index ca5e108..6d5ac3a 100644 --- a/src/thread-br.c +++ b/src/thread-br.c @@ -791,22 +791,21 @@ int thread_onmesh_prefix_get_stable(thread_onmesh_prefix_info_h onmesh_prefix, } int thread_br_add_onmesh_prefix(thread_instance_h instance, - const uint8_t *ipv6_prefix, int ipv6_prefix_len, int8_t preference, - bool preferred, bool slaac, bool dhcp, bool configure, bool default_route, - bool on_mesh, bool stable, thread_onmesh_prefix_info_h *onmesh_prefix) + thread_onmesh_prefix_info_h onmesh_prefix) { FUNC_ENTRY; THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); THREAD_CHECK_INIT_STATUS(); THREAD_VALIDATE_INPUT_PARAMETER(instance); - THREAD_VALIDATE_INPUT_PARAMETER(ipv6_prefix); THREAD_VALIDATE_INPUT_PARAMETER(onmesh_prefix); thread_instance_s *current_instance = instance; retv_if(!current_instance->is_br_enabled, THREAD_ERROR_NOT_ENABLED); - retv_if(ipv6_prefix_len > THREAD_IPV6_PREFIX_LEN, - THREAD_ERROR_INVALID_PARAMETER); + thread_onmesh_prefix_info_s* onmesh_prefix_info = + (thread_onmesh_prefix_info_s*)onmesh_prefix; + uint8_t *ipv6_prefix = (onmesh_prefix_info->prefix).ipv6.fields.m8; + uint8_t ipv6_prefix_len = (onmesh_prefix_info->prefix).length; char msg[THREAD_BORDER_ROUTER_BUFFER_MAX]; snprintf(msg, THREAD_BORDER_ROUTER_BUFFER_MAX, @@ -815,24 +814,24 @@ int thread_br_add_onmesh_prefix(thread_instance_h instance, ipv6_prefix[4], ipv6_prefix[5], ipv6_prefix[6], ipv6_prefix[7], ipv6_prefix_len); - if (preference == 0) + if (onmesh_prefix_info->preference == 0) strncat(msg, " low ", 6); - else if (preference == 1) + else if (onmesh_prefix_info->preference == 1) strncat(msg, " med ", 6); - else if (preference == 2) + else if (onmesh_prefix_info->preference == 2) strncat(msg, " high ", 7); - if (preferred) + if (onmesh_prefix_info->preferred) strncat(msg, "p", 2); - if (slaac) + if (onmesh_prefix_info->slaac) strncat(msg, "a", 2); - if (configure) + if (onmesh_prefix_info->configure) strncat(msg, "c", 2); - if (default_route) + if (onmesh_prefix_info->default_route) strncat(msg, "r", 2); - if (on_mesh) + if (onmesh_prefix_info->on_mesh) strncat(msg, "o", 2); - if (stable) + if (onmesh_prefix_info->stable) strncat(msg, "s", 2); THREAD_DBG("DEBUG: BORDER ROUTER MESSAGE -> [%s]", msg); @@ -848,46 +847,25 @@ int thread_br_add_onmesh_prefix(thread_instance_h instance, retv_if(ret != THREAD_ERROR_NONE, ret); THREAD_DBG("Successfully registered netdata"); - thread_onmesh_prefix_info_s* new_onmesh_prefix = - _create_new_onmesh_prefix(); - memcpy((new_onmesh_prefix->prefix).ipv6.fields.m8, ipv6_prefix, - THREAD_IPV6_PREFIX_SIZE*sizeof(uint8_t)); - (new_onmesh_prefix->prefix).length = ipv6_prefix_len; - new_onmesh_prefix->preference = preference; - new_onmesh_prefix->preferred = preferred; - new_onmesh_prefix->slaac = slaac; - new_onmesh_prefix->dhcp = dhcp; - new_onmesh_prefix->configure = configure; - new_onmesh_prefix->default_route = default_route; - new_onmesh_prefix->on_mesh = on_mesh; - new_onmesh_prefix->stable = stable; - - current_instance->onmesh_prefix_list = g_slist_append( - current_instance->onmesh_prefix_list, - new_onmesh_prefix); - - *onmesh_prefix = (thread_onmesh_prefix_info_h)new_onmesh_prefix; - FUNC_EXIT; return THREAD_ERROR_NONE; } int thread_br_remove_onmesh_prefix(thread_instance_h instance, - thread_onmesh_prefix_info_h prefix_info) + thread_onmesh_prefix_info_h onmesh_prefix) { FUNC_ENTRY; THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); THREAD_CHECK_INIT_STATUS(); THREAD_VALIDATE_INPUT_PARAMETER(instance); - THREAD_VALIDATE_INPUT_PARAMETER(prefix_info); thread_instance_s *current_instance = instance; retv_if(!current_instance->is_br_enabled, THREAD_ERROR_NOT_ENABLED); - thread_onmesh_prefix_info_s* onmesh_prefix = - (thread_onmesh_prefix_info_s*)prefix_info; - uint8_t *ipv6_prefix = (onmesh_prefix->prefix).ipv6.fields.m8; - uint8_t ipv6_prefix_len = (onmesh_prefix->prefix).length; + thread_onmesh_prefix_info_s* onmesh_prefix_info = + (thread_onmesh_prefix_info_s*)onmesh_prefix; + uint8_t *ipv6_prefix = (onmesh_prefix_info->prefix).ipv6.fields.m8; + uint8_t ipv6_prefix_len = (onmesh_prefix_info->prefix).length; retv_if(ipv6_prefix_len > THREAD_IPV6_PREFIX_LEN, THREAD_ERROR_INVALID_PARAMETER); @@ -915,11 +893,6 @@ int thread_br_remove_onmesh_prefix(thread_instance_h instance, return ret; } - current_instance->onmesh_prefix_list = g_slist_remove( - current_instance->onmesh_prefix_list, - onmesh_prefix); - g_free(onmesh_prefix); - FUNC_EXIT; return THREAD_ERROR_NONE; } diff --git a/tests/thread-test/thread-br.c b/tests/thread-test/thread-br.c index a91e85e..d00c75d 100644 --- a/tests/thread-test/thread-br.c +++ b/tests/thread-test/thread-br.c @@ -379,12 +379,22 @@ static int run_thread_br_add_onmesh_prefix(MManager *mm, struct menu_data *menu) if (!new_onmesh_prefix) goto OUT; - ret = thread_br_add_onmesh_prefix(g_instance, g_onmesh_ipv6_prefix, - g_onmesh_ipv6_prefix_len, g_onmesh_preference, - g_preferred, g_slaac, g_dhcp, g_configure, - g_default_route, g_on_mesh, g_stable, - &(new_onmesh_prefix->handle)); + ret = thread_onmesh_prefix_create(g_instance, &(new_onmesh_prefix->handle)); + if (ret != THREAD_ERROR_NONE) + goto OUT; + thread_onmesh_prefix_set_ipv6_prefix(new_onmesh_prefix->handle, + g_onmesh_ipv6_prefix, g_onmesh_ipv6_prefix_len); + thread_onmesh_prefix_set_preference(new_onmesh_prefix->handle, g_onmesh_preference); + thread_onmesh_prefix_set_preferred(new_onmesh_prefix->handle, g_preferred); + thread_onmesh_prefix_set_slaac(new_onmesh_prefix->handle, g_slaac); + thread_onmesh_prefix_set_dhcp(new_onmesh_prefix->handle, g_dhcp); + thread_onmesh_prefix_set_configure(new_onmesh_prefix->handle, g_configure); + thread_onmesh_prefix_set_default_route(new_onmesh_prefix->handle, g_default_route); + thread_onmesh_prefix_set_on_mesh(new_onmesh_prefix->handle, g_on_mesh); + thread_onmesh_prefix_set_stable(new_onmesh_prefix->handle, g_stable); + + ret = thread_br_add_onmesh_prefix(g_instance, new_onmesh_prefix->handle); if (ret == THREAD_ERROR_NONE) { msg("thread_br_add_onmesh_prefix success"); memcpy(new_onmesh_prefix->prefix_address, prefix_address, diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index cc88dd2..21514d1 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -123,6 +123,8 @@ protected: { if (instance) { + if (onmeshPrefix) + thread_onmesh_prefix_destroy(instance, onmeshPrefix); thread_br_disable(instance); thread_disable(instance); } @@ -318,23 +320,6 @@ TEST_F(ThreadBRTest, BRRemoveExternalRouteErrorNone) thread_br_remove_external_route(instance, routeInfo)); } -TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotInitialized) -{ - EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); - EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, - thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, - onmeshIpv6PrefixLen, preference, preferred, slaac, - dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); -} - -TEST_F(ThreadBRTest, BRAddOnmeshPrefixInvalidParameter) -{ - EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, - thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, - onmeshIpv6PrefixLen, preference, preferred, slaac, - dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); -} - TEST_F(ThreadBRTest, BRCreateOnmeshPrefixErrorNone) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); @@ -538,13 +523,24 @@ TEST_F(ThreadBRTest, BRGetOnmeshStableErrorNone) thread_onmesh_prefix_get_stable(onmeshPrefix, &stable)); } +TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotInitialized) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize()); + EXPECT_EQ(THREAD_ERROR_NOT_INITIALIZED, + thread_br_add_onmesh_prefix(instance, onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRAddOnmeshPrefixInvalidParameter) +{ + EXPECT_EQ(THREAD_ERROR_INVALID_PARAMETER, + thread_br_add_onmesh_prefix(instance, onmeshPrefix)); +} + TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotEnabled) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, - thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, - onmeshIpv6PrefixLen, preference, preferred, slaac, - dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); + thread_br_add_onmesh_prefix(instance, onmeshPrefix)); } TEST_F(ThreadBRTest, BRAddOnmeshPrefixErrorNone) @@ -552,9 +548,9 @@ TEST_F(ThreadBRTest, BRAddOnmeshPrefixErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); EXPECT_EQ(THREAD_ERROR_NONE, - thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, - onmeshIpv6PrefixLen, preference, preferred, slaac, - dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); + thread_onmesh_prefix_create(instance, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_onmesh_prefix(instance, onmeshPrefix)); } TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixNotInitialized) @@ -582,9 +578,9 @@ TEST_F(ThreadBRTest, BRRemoveOnmeshPrefixErrorNone) EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); EXPECT_EQ(THREAD_ERROR_NONE, - thread_br_add_onmesh_prefix(instance, onmeshIpv6Prefix, - onmeshIpv6PrefixLen, preference, preferred, slaac, - dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); + thread_onmesh_prefix_create(instance, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_br_add_onmesh_prefix(instance, onmeshPrefix)); EXPECT_EQ(THREAD_ERROR_NONE, thread_br_remove_onmesh_prefix(instance, onmeshPrefix)); } \ No newline at end of file -- 2.7.4