Refactor a CAPI for adding onmesh prefix for br 82/276682/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Wed, 15 Jun 2022 01:45:00 +0000 (10:45 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 23 Jun 2022 02:24:38 +0000 (11:24 +0900)
Change-Id: I741f90ef854510aa097e1b58ccd0bda469c1b131
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
include/thread.h
src/thread-br.c
tests/thread-test/thread-br.c
tests/unittest/thread-unittest-br.cpp

index 65ac690..1da04a3 100644 (file)
@@ -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
index ca5e108..6d5ac3a 100644 (file)
@@ -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;
 }
index a91e85e..d00c75d 100644 (file)
@@ -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,
index cc88dd2..21514d1 100644 (file)
@@ -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