From 2de898415cb276a101212afe95e5b98bba061696 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Tue, 14 Jun 2022 17:34:33 +0900 Subject: [PATCH] Add new CAPIs and unittest to get/set preference for onmesh Change-Id: I39d67a63b775f855b8f1ebef5197a356020cd7e4 Signed-off-by: hyunuk.tak --- include/thread.h | 38 +++++++++++++++++++++++++++++++++++ src/thread-br.c | 32 +++++++++++++++++++++++++++++ tests/unittest/thread-unittest-br.cpp | 22 +++++++++++++++++++- 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/include/thread.h b/include/thread.h index 7b0bee3..b4a92b7 100644 --- a/include/thread.h +++ b/include/thread.h @@ -675,6 +675,44 @@ int thread_onmesh_prefix_get_ipv6_prefix(thread_onmesh_prefix_info_h onmesh_pref /** * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE + * @brief Set preference to 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() + * @see thread_onmesh_prefix_destroy() + */ +int thread_onmesh_prefix_set_preference(thread_onmesh_prefix_info_h onmesh_prefix, + uint8_t preference); + +/** + * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE + * @brief Get preference to 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() + * @see thread_onmesh_prefix_destroy() + */ +int thread_onmesh_prefix_get_preference(thread_onmesh_prefix_info_h onmesh_prefix, + uint8_t *preference); + +/** + * @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 94a0ce1..38d74ae 100644 --- a/src/thread-br.c +++ b/src/thread-br.c @@ -534,6 +534,38 @@ int thread_onmesh_prefix_get_ipv6_prefix(thread_onmesh_prefix_info_h onmesh_pref return THREAD_ERROR_NONE; } +int thread_onmesh_prefix_set_preference(thread_onmesh_prefix_info_h onmesh_prefix, + uint8_t preference) +{ + FUNC_ENTRY; + THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); + THREAD_CHECK_INIT_STATUS(); + THREAD_VALIDATE_INPUT_PARAMETER(onmesh_prefix); + + thread_onmesh_prefix_info_s *onmesh_prefix_info = + (thread_onmesh_prefix_info_s *)onmesh_prefix; + onmesh_prefix_info->preference = preference; + + FUNC_EXIT; + return THREAD_ERROR_NONE; +} + +int thread_onmesh_prefix_get_preference(thread_onmesh_prefix_info_h onmesh_prefix, + uint8_t *preference) +{ + FUNC_ENTRY; + THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON); + THREAD_CHECK_INIT_STATUS(); + THREAD_VALIDATE_INPUT_PARAMETER(onmesh_prefix); + + thread_onmesh_prefix_info_s *onmesh_prefix_info = + (thread_onmesh_prefix_info_s *)onmesh_prefix; + *preference = onmesh_prefix_info->preference; + + 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 dfb76c7..a37237e 100644 --- a/tests/unittest/thread-unittest-br.cpp +++ b/tests/unittest/thread-unittest-br.cpp @@ -34,7 +34,7 @@ public: uint8_t ipv6Prefix[THREAD_IPV6_PREFIX_SIZE]; uint8_t ipv6PrefixLen; uint16_t rloc16; - int8_t preference; + uint8_t preference; bool isStable; bool isDeviceNextHop; @@ -378,6 +378,26 @@ TEST_F(ThreadBRTest, BRGetOnmeshIpv6PrefixErrorNone) g_free(ipv6Prefix); } +TEST_F(ThreadBRTest, BRSetOnmeshPreferenceErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_create(instance, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_set_preference(onmeshPrefix, preference)); +} + +TEST_F(ThreadBRTest, BRGetOnmeshPreferenceErrorNone) +{ + EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_create(instance, &onmeshPrefix)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_set_preference(onmeshPrefix, preference)); + EXPECT_EQ(THREAD_ERROR_NONE, + thread_onmesh_prefix_get_preference(onmeshPrefix, &preference)); +} + TEST_F(ThreadBRTest, BRAddOnmeshPrefixNotEnabled) { EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance)); -- 2.7.4