Add a new CAPI and test for thread_br_get_preference 66/276666/1
authorhyunuk.tak <hyunuk.tak@samsung.com>
Mon, 30 May 2022 07:47:14 +0000 (16:47 +0900)
committerhyunuk.tak <hyunuk.tak@samsung.com>
Thu, 23 Jun 2022 02:21:29 +0000 (11:21 +0900)
Change-Id: I6a469b91288a4fb74509024d56423528169ac37f
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
include/thread.h
src/thread-br.c
tests/unittest/thread-unittest-br.cpp

index 67394773c0ddfd1b6671474152761568f4c0d6eb..97f6204e86d6ce94645055653e9aae6676dfb021 100644 (file)
@@ -526,6 +526,24 @@ int thread_br_get_ipv6_prefix(thread_route_info_h route,
 int thread_br_get_rloc16(thread_route_info_h route,
        uint16_t *rloc16);
 
+/**
+ * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE
+ * @brief Get preference for route
+ * @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_external_route_foreach_cb()
+ */
+int thread_br_get_preference(thread_route_info_h route,
+       int8_t *preference);
+
 /**
  * @ingroup CAPI_NETWORK_THREAD_BORDERROUTER_MODULE
  * @brief Add an external border routing rule to the network.
index ed2a6557e65da341dae501a0f8a911dff15f2954..8d8b87de01d6d1e5f2f69fe406f960ae05cb9355 100644 (file)
@@ -311,6 +311,22 @@ int thread_br_get_rloc16(thread_route_info_h route,
        return THREAD_ERROR_NONE;
 }
 
+int thread_br_get_preference(thread_route_info_h route,
+       int8_t *preference)
+{
+       FUNC_ENTRY;
+       THREAD_CHECK_SUPPORTED_FEATURE(THREAD_FEATURE_COMMON);
+       THREAD_CHECK_INIT_STATUS();
+       THREAD_VALIDATE_INPUT_PARAMETER(route);
+       THREAD_VALIDATE_INPUT_PARAMETER(preference);
+
+       thread_route_info_s *route_info = (thread_route_info_s*)route;
+       *preference = route_info->preference;
+
+       FUNC_EXIT;
+       return THREAD_ERROR_NONE;
+}
+
 int thread_br_add_external_route(thread_instance_h instance,
        const uint8_t *ipv6_prefix, uint8_t ipv6_prefix_len,
        uint16_t rloc16, int8_t preference,
index f05843aec3c91835630ddf8c30862aba23abf5fb..bdf1c39d4f7563b2dca508c38c6e79ef040b235a 100644 (file)
@@ -26,6 +26,7 @@ public:
        enum class RouteInfo {
                kIpv6Prefix,
                kRloc16,
+               kPreference,
        };
 
        uint8_t ipv6Prefix[THREAD_IPV6_PREFIX_SIZE];
@@ -69,6 +70,12 @@ public:
                                        EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_rloc16(route_info, &rloc16));
                                }
                                break;
+                       case RouteInfo::kPreference:
+                               {
+                                       int8_t preference;
+                                       EXPECT_EQ(THREAD_ERROR_NONE, thread_br_get_preference(route_info, &preference));
+                               }
+                               break;
                        default:
                                break;
                        }
@@ -207,6 +214,15 @@ TEST_F(ThreadBRTest, BRGetRloc16ErrorNone)
                GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kRloc16))));
 }
 
+TEST_F(ThreadBRTest, BRGetPreferenceErrorNone)
+{
+       EXPECT_EQ(THREAD_ERROR_NONE, thread_enable(&instance));
+       EXPECT_EQ(THREAD_ERROR_NONE, thread_br_enable(instance));
+       EXPECT_EQ(THREAD_ERROR_NONE,
+               thread_br_get_external_routes(instance, GetExternalRoutesCallback,
+               GUINT_TO_POINTER(static_cast<guint>(RouteInfo::kPreference))));
+}
+
 TEST_F(ThreadBRTest, BRAddExternalRouteNotInitialized)
 {
        EXPECT_EQ(THREAD_ERROR_NONE, thread_deinitialize());