Add new CAPIs and unittest to create/destroy onmesh prefix 72/276672/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Tue, 14 Jun 2022 06:00:29 +0000 (15:00 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 23 Jun 2022 02:22:32 +0000 (11:22 +0900)
Change-Id: I2bf6b08ce39ce7765cbcf9e9dc40f7b83f0e6882
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
include/thread.h
src/thread-br.c
tests/unittest/thread-unittest-br.cpp

index 1f9cb15..7c6a811 100644 (file)
@@ -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
  *
index 588c3b9..f587f7b 100644 (file)
@@ -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,
index 4e0cdca..3e7dbc7 100644 (file)
@@ -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));