From 84ea5ae516ab92731f1a8475a0e7a47266a36f29 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 14 Jun 2022 15:00:29 +0900 Subject: [PATCH] Add new CAPIs and unittest to create/destroy onmesh prefix Change-Id: I2bf6b08ce39ce7765cbcf9e9dc40f7b83f0e6882 Signed-off-by: hyunuk.tak --- include/thread.h | 36 +++++++++++++++++++++++++ src/thread-br.c | 49 +++++++++++++++++++++++++++++++++++ tests/unittest/thread-unittest-br.cpp | 32 +++++++++++++++++++++++ 3 files changed, 117 insertions(+) diff --git a/include/thread.h b/include/thread.h index 1f9cb15..7c6a811 100644 --- a/include/thread.h +++ b/include/thread.h @@ -601,6 +601,42 @@ int thread_br_remove_external_route(thread_instance_h instance, thread_route_inf /** * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE + * @brief Create an on-mesh prefix info + * @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_onmesh_prefix_destroy() + */ +int thread_onmesh_prefix_create(thread_instance_h instance, + thread_onmesh_prefix_info_h *onmesh_prefix); + +/** + * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE + * @brief Destroy on-mesh prefix info + * @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_onmesh_prefix_create() + */ +int thread_onmesh_prefix_destroy(thread_instance_h instance, + thread_onmesh_prefix_info_h onmesh_prefix); + +/** + * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE * @brief Add an on-mesh prefix to the network * @since_tizen 7.0 * diff --git a/src/thread-br.c b/src/thread-br.c index 588c3b9..f587f7b 100644 --- a/src/thread-br.c +++ b/src/thread-br.c @@ -446,6 +446,55 @@ int thread_br_remove_external_route(thread_instance_h instance, return THREAD_ERROR_NONE; } +int thread_onmesh_prefix_create(thread_instance_h instance, + 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(onmesh_prefix); + + thread_instance_s *current_instance = instance; + retv_if(!current_instance->is_br_enabled, THREAD_ERROR_NOT_ENABLED); + + thread_onmesh_prefix_info_s* new_onmesh_prefix = + _create_new_onmesh_prefix(); + retv_if (!new_onmesh_prefix, THREAD_ERROR_OUT_OF_MEMORY); + + 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_onmesh_prefix_destroy(thread_instance_h instance, + 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(onmesh_prefix); + + thread_instance_s *current_instance = instance; + retv_if(!current_instance->is_br_enabled, THREAD_ERROR_NOT_ENABLED); + + if (g_slist_find(current_instance->onmesh_prefix_list, onmesh_prefix)) { + 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; +} + 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, diff --git a/tests/unittest/thread-unittest-br.cpp b/tests/unittest/thread-unittest-br.cpp index 4e0cdca..3e7dbc7 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -335,6 +335,38 @@ TEST_F(ThreadBRTest, BRAddOnmeshPrefixInvalidParameter) dhcp, configure, defaultRoute, onMesh, stable, &onmeshPrefix)); } +TEST_F(ThreadBRTest, BRCreateOnmeshPrefixNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_onmesh_prefix_create(instance, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRCreateOnmeshPrefixErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_create(instance, &onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRDestroyOnmeshPrefixNotEnabled) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NOT_ENABLED, + thread_onmesh_prefix_destroy(instance, onmeshPrefix)); +} + +TEST_F(ThreadBRTest, BRDestroyOnmeshPrefixErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_create(instance, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_destroy(instance, onmeshPrefix)); +} + TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotEnabled) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); -- 2.7.4