Add setter/getter APIs for MAC randomization policies 95/255595/7 accepted/tizen/unified/20210506.103539 submit/tizen/20210421.161229 submit/tizen/20210427.065300 submit/tizen/20210503.112345
authorNishant Chaprana <n.chaprana@samsung.com>
Wed, 21 Apr 2021 08:43:15 +0000 (14:13 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Wed, 21 Apr 2021 12:13:20 +0000 (17:43 +0530)
Change-Id: I4837e743419be60f427f88ec44624ff166403748
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
include/network_dbus.h
include/network_interface.h
include/wifi-manager-extension.h
include/wifi_internal.h
packaging/capi-network-wifi-manager.spec
src/network_dbus.c
src/network_interface.c
src/wifi_internal.c
src/wifi_manager.c
tests/gtest-wifi-manager-info.cpp
tool/wifi_manager_test.c

index f6db86f..38d80ba 100755 (executable)
@@ -220,6 +220,9 @@ int _net_dbus_dpp_start_enrollee_responder(network_info_s *network_info,
 int _net_dbus_dpp_stop(network_info_s *network_info,
                guint32 peer_id, guint32 own_id, gboolean is_initiator);
 
+int _net_dbus_set_mac_policy(network_info_s *network_info, unsigned int policy);
+int _net_dbus_set_preassoc_mac_policy(network_info_s *network_info, unsigned int policy);
+int _net_dbus_set_random_mac_lifetime(network_info_s *network_info, unsigned int lifetime);
 
 #ifdef __cplusplus
 }
index 8ed508d..beca6fd 100755 (executable)
@@ -377,6 +377,11 @@ int net_dpp_start(void *dpp_handle, const char *auth_key,
                const char *configurator_key, const char *pass);
 int net_dpp_stop(network_info_s *network_info,
                guint32 peer_id, guint32 own_id, gboolean is_initiator);
+
+int net_wifi_set_mac_policy(network_info_s *network_info, unsigned int policy);
+int net_wifi_set_preassoc_mac_policy(network_info_s *network_info, unsigned int policy);
+int net_wifi_set_random_mac_lifetime(network_info_s *network_info, unsigned int lifetime);
+
 /**
  * \}
  */
index 10219e7..e8e810e 100755 (executable)
@@ -58,6 +58,16 @@ typedef enum {
 } wifi_manager_connection_mode_e;
 
 /**
+ * @brief Enumeration for the Wi-Fi Mac Address Policy.
+ * @since_tizen 6.5
+ */
+typedef enum {
+       WIFI_MANAGER_MAC_POLICY_FIXED_MAC,              /**< Fixed Mac */
+       WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC,  /**< Random OUI random Mac */
+       WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC,   /**< Fixed OUI random Mac */
+} wifi_manager_mac_policy_e;
+
+/**
  * @brief The Wi-Fi netlink scan handle.
  * @since_tizen 5.0
  */
@@ -615,8 +625,104 @@ int wifi_manager_get_connection_mode(wifi_manager_h wifi,
 int wifi_manager_ap_get_connection_mode(wifi_manager_ap_h ap, wifi_manager_connection_mode_e *mode);
 
 /**
-* @}
-*/
+ * @brief Sets MAC address policy for connection operations.
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[in] policy The mac address policy.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_set_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e policy);
+
+/**
+ * @brief Gets MAC address policy for connection operations.
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.get
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[out] policy The mac address policy.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_get_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e *policy);
+
+/**
+ * @brief Sets MAC address policy for pre-association operations (scanning, ANQP).
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[in] policy The mac address policy.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_set_preassoc_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e policy);
+
+/**
+ * @brief Gets MAC address policy for pre-association operations (scanning, ANQP).
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.get
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[out] policy The mac address policy.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_get_preassoc_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e *policy);
+
+/**
+ * @brief Sets lifetime of random mac_address after which new random mac is used.
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[in] lifetime The lifetime of random mac address.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_set_random_mac_lifetime(wifi_manager_h wifi, unsigned int lifetime);
+
+/**
+ * @brief Gets lifetime of random mac_address after which new random mac is used.
+ * @since_tizen 6.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.get
+ * @param[in] wifi The Wi-Fi handle.
+ * @param[out] lifetime The lifetime of random mac address.
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE                 Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER    Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED                Operation Failed
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED        Not supported
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED    Permission Denied
+ */
+int wifi_manager_get_random_mac_lifetime(wifi_manager_h wifi, unsigned int *lifetime);
+
+/**
+ * @}
+ */
 
 
 /**
index 1e96bdf..f3649b3 100755 (executable)
@@ -41,8 +41,8 @@ extern "C" {
 #define WIFI_ERROR     2
 #define WIFI_WARN      3
 
-#define WIFI_FEATURE           "http://tizen.org/feature/network.wifi"
-#define WIFI_TDLS_FEATURE      "http://tizen.org/feature/network.wifi.tdls"
+#define WIFI_FEATURE                    "http://tizen.org/feature/network.wifi"
+#define WIFI_TDLS_FEATURE               "http://tizen.org/feature/network.wifi.tdls"
 
 #define WIFI_CONFIG_NAME                                       "Name"
 #define WIFI_CONFIG_SSID                                       "SSID"
@@ -274,6 +274,10 @@ typedef struct {
        GSList *specific_profile_iterator;
        GSList *bss_profile_iterator;
        GSList *config_iterator;
+
+       unsigned int mac_policy;
+       unsigned int preassoc_mac_policy;
+       unsigned int random_mac_lifetime;
 } wifi_manager_handle_s;
 
 typedef struct {
@@ -570,6 +574,14 @@ int _wifi_dpp_start(wifi_dpp_s *p_dpp, const char *auth_key,
 int _wifi_dpp_stop(wifi_dpp_s *p_dpp);
 void _wifi_lock(void);
 void _wifi_unlock(void);
+
+int _wifi_set_mac_policy(wifi_manager_h wifi, unsigned int policy);
+int _wifi_get_mac_policy(wifi_manager_h wifi, unsigned int *policy);
+int _wifi_set_preassoc_mac_policy(wifi_manager_h wifi, unsigned int policy);
+int _wifi_get_preassoc_mac_policy(wifi_manager_h wifi, unsigned int *policy);
+int _wifi_set_random_mac_lifetime(wifi_manager_h wifi, unsigned int lifetime);
+int _wifi_get_random_mac_lifetime(wifi_manager_h wifi, unsigned int *lifetime);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 1158151..f1c2729 100755 (executable)
@@ -1,6 +1,6 @@
 Name:          capi-network-wifi-manager
 Summary:       Network Wi-Fi library in TIZEN C API
-Version:       1.3.7
+Version:       1.3.8
 Release:       1
 Group:         System/Network
 License:       Apache-2.0
index 572fd13..99bdf5d 100755 (executable)
@@ -4033,3 +4033,99 @@ int _net_dbus_get_max_scan_ssids(network_info_s *network_info, int *max_scan_ssi
        return Error;
 }
 //LCOV_EXCL_STOP
+
+int _net_dbus_set_mac_policy(network_info_s *network_info, unsigned int policy)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+       GVariant *message = NULL;
+
+       const char *prop_key = "MacPolicy";
+       const char *method = "SetProperty";
+       GVariant *params = NULL;
+
+       WIFI_LOG(WIFI_INFO, "MacPolicy [%u]", policy);
+
+       params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(policy));
+
+       message = _net_invoke_dbus_method(network_info,
+                       CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
+                       CONNMAN_TECHNOLOGY_INTERFACE,
+                       method, params, &Error);
+
+       if (message == NULL) {
+               WIFI_LOG(WIFI_ERROR, "Failed to set mac policy");
+               __NETWORK_FUNC_EXIT__;
+               return Error;
+       }
+
+       g_variant_unref(message);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
+
+int _net_dbus_set_preassoc_mac_policy(network_info_s *network_info, unsigned int policy)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+       GVariant *message = NULL;
+
+       const char *prop_key = "PreassocMacPolicy";
+       const char *method = "SetProperty";
+       GVariant *params = NULL;
+
+       WIFI_LOG(WIFI_INFO, "PreassocMacPolicy [%u]", policy);
+
+       params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(policy));
+
+       message = _net_invoke_dbus_method(network_info,
+                       CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
+                       CONNMAN_TECHNOLOGY_INTERFACE,
+                       method, params, &Error);
+
+       if (message == NULL) {
+               WIFI_LOG(WIFI_ERROR, "Failed to set preassoc mac policy");
+               __NETWORK_FUNC_EXIT__;
+               return Error;
+       }
+
+       g_variant_unref(message);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
+
+int _net_dbus_set_random_mac_lifetime(network_info_s *network_info, unsigned int lifetime)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+       GVariant *message = NULL;
+
+       const char *prop_key = "RandomMacLifetime";
+       const char *method = "SetProperty";
+       GVariant *params = NULL;
+
+       WIFI_LOG(WIFI_INFO, "RandomMacLifetime [%u]", lifetime);
+
+       params = g_variant_new("(sv)", prop_key, g_variant_new_uint32(lifetime));
+
+       message = _net_invoke_dbus_method(network_info,
+                       CONNMAN_SERVICE, CONNMAN_WIFI_TECHNOLOGY_PREFIX,
+                       CONNMAN_TECHNOLOGY_INTERFACE,
+                       method, params, &Error);
+
+       if (message == NULL) {
+               WIFI_LOG(WIFI_ERROR, "Failed to set random mac lifetime");
+               __NETWORK_FUNC_EXIT__;
+               return Error;
+       }
+
+       g_variant_unref(message);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
index 7ea71ae..a1deb5b 100755 (executable)
@@ -3932,3 +3932,39 @@ int net_dpp_stop(network_info_s *network_info,
        return Error;
 }
 //LCOV_EXCL_STOP
+
+int net_wifi_set_mac_policy(network_info_s *network_info, unsigned int policy)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+
+       Error =  _net_dbus_set_mac_policy(network_info, policy);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
+
+int net_wifi_set_preassoc_mac_policy(network_info_s *network_info, unsigned int policy)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+
+       Error = _net_dbus_set_preassoc_mac_policy(network_info, policy);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
+
+int net_wifi_set_random_mac_lifetime(network_info_s *network_info, unsigned int lifetime)
+{
+       __NETWORK_FUNC_ENTER__;
+
+       net_err_e Error = NET_ERR_NONE;
+
+       Error = _net_dbus_set_random_mac_lifetime(network_info, lifetime);
+
+       __NETWORK_FUNC_EXIT__;
+       return Error;
+}
index 246daef..0d7559c 100755 (executable)
@@ -1526,6 +1526,8 @@ int _wifi_create_handle(wifi_manager_h *wifi)
        }
 
        pthread_mutex_init(&(wifi_handle->mutex_ap_handle_list), NULL);
+       wifi_handle->random_mac_lifetime = 60; /* default value */
+
        *wifi = wifi_handle;
 
        WIFI_LOG(WIFI_INFO, "New handle create[%p]", *wifi);
@@ -1643,7 +1645,7 @@ static void _wifi_ap_handle_list_unlock(wifi_manager_handle_s *wifi)
 
        int ret = pthread_mutex_unlock(&(wifi->mutex_ap_handle_list));
        if (ret < 0)
-               WIFI_LOG(WIFI_ERROR, "Failed to lock the ap_handle_list[%d]", ret);
+               WIFI_LOG(WIFI_ERROR, "Failed to unlock the ap_handle_list[%d]", ret);
 }
 
 void _wifi_deinit(wifi_manager_h wifi)
@@ -3990,3 +3992,81 @@ void _wifi_unlock(void)
 {
        pthread_mutex_unlock(&g_wifi_thread_mutex);
 }
+
+int _wifi_set_mac_policy(wifi_manager_h wifi, unsigned int policy)
+{
+       int rv;
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       rv = net_wifi_set_mac_policy(wifi_handle->network_info, policy);
+       if (rv == NET_ERR_ACCESS_DENIED) {
+               WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
+               return WIFI_MANAGER_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
+       } else if (rv != NET_ERR_NONE)
+               return WIFI_MANAGER_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
+
+       wifi_handle->mac_policy = policy;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
+int _wifi_get_mac_policy(wifi_manager_h wifi, unsigned int *policy)
+{
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       *policy = wifi_handle->mac_policy;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
+int _wifi_set_preassoc_mac_policy(wifi_manager_h wifi, unsigned int policy)
+{
+       int rv;
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       rv = net_wifi_set_preassoc_mac_policy(wifi_handle->network_info, policy);
+       if (rv == NET_ERR_ACCESS_DENIED) {
+               WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
+               return WIFI_MANAGER_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
+       } else if (rv != NET_ERR_NONE)
+               return WIFI_MANAGER_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
+
+       wifi_handle->preassoc_mac_policy = policy;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
+int _wifi_get_preassoc_mac_policy(wifi_manager_h wifi, unsigned int *policy)
+{
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       *policy = wifi_handle->preassoc_mac_policy;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
+int _wifi_set_random_mac_lifetime(wifi_manager_h wifi, unsigned int lifetime)
+{
+       int rv;
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       rv = net_wifi_set_random_mac_lifetime(wifi_handle->network_info, lifetime);
+       if (rv == NET_ERR_ACCESS_DENIED) {
+               WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
+               return WIFI_MANAGER_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
+       } else if (rv != NET_ERR_NONE)
+               return WIFI_MANAGER_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
+
+       wifi_handle->random_mac_lifetime = lifetime;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
+
+int _wifi_get_random_mac_lifetime(wifi_manager_h wifi, unsigned int *lifetime)
+{
+       wifi_manager_handle_s *wifi_handle = wifi;
+
+       *lifetime = wifi_handle->random_mac_lifetime;
+
+       return WIFI_MANAGER_ERROR_NONE;
+}
index 9d241df..af81966 100755 (executable)
@@ -1994,3 +1994,135 @@ EXPORT_API int wifi_manager_get_connection_mode(wifi_manager_h wifi,
        return rv;
 }
 //LCOV_EXCL_STOP
+
+EXPORT_API int wifi_manager_set_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e policy)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (policy < WIFI_MANAGER_MAC_POLICY_FIXED_MAC || policy > WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC) {
+               WIFI_LOG(WIFI_ERROR, "Invalid policy parameter, value [%d]", policy);
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       WIFI_LOG(WIFI_INFO, "Mac policy %d", policy);
+       rv = _wifi_set_mac_policy(wifi, policy);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
+
+EXPORT_API int wifi_manager_get_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e *policy)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (policy == NULL) {
+               WIFI_LOG(WIFI_ERROR, "policy parameter is NULL");
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       rv = _wifi_get_mac_policy(wifi, policy);
+       WIFI_LOG(WIFI_INFO, "Mac policy %d", *policy);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
+
+EXPORT_API int wifi_manager_set_preassoc_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e policy)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (policy < WIFI_MANAGER_MAC_POLICY_FIXED_MAC || policy > WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC) {
+               WIFI_LOG(WIFI_ERROR, "Invalid policy parameter, value [%d]", policy);
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       WIFI_LOG(WIFI_INFO, "Preassoc mac policy %d", policy);
+       rv = _wifi_set_preassoc_mac_policy(wifi, policy);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
+
+EXPORT_API int wifi_manager_get_preassoc_mac_policy(wifi_manager_h wifi, wifi_manager_mac_policy_e *policy)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (policy == NULL) {
+               WIFI_LOG(WIFI_ERROR, "policy parameter is NULL");
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       rv = _wifi_get_preassoc_mac_policy(wifi, policy);
+       WIFI_LOG(WIFI_INFO, "Preassoc mac policy %d", *policy);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
+
+EXPORT_API int wifi_manager_set_random_mac_lifetime(wifi_manager_h wifi, unsigned int lifetime)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (lifetime == 0) {
+               WIFI_LOG(WIFI_ERROR, "Invalid lifetime parameter, value [%u]", lifetime);
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       WIFI_LOG(WIFI_INFO, "Random mac lifetime %u", lifetime);
+       rv = _wifi_set_random_mac_lifetime(wifi, lifetime);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
+
+EXPORT_API int wifi_manager_get_random_mac_lifetime(wifi_manager_h wifi, unsigned int *lifetime)
+{
+       __NETWORK_CAPI_FUNC_ENTER__;
+
+       int rv = WIFI_MANAGER_ERROR_NONE;
+
+       CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+       if (lifetime == NULL) {
+               WIFI_LOG(WIFI_ERROR, "lifetime parameter is NULL");
+               return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+       }
+
+       RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+       rv = _wifi_get_random_mac_lifetime(wifi, lifetime);
+       WIFI_LOG(WIFI_INFO, "Random mac lifetime %u", *lifetime);
+
+       __NETWORK_CAPI_FUNC_EXIT__;
+       return rv;
+}
index 74a6b57..f06ce9a 100755 (executable)
@@ -18,6 +18,7 @@
 #include <gtest/gtest.h>
 
 #include "wifi-manager.h"
+#include "wifi-manager-extension.h"
 extern "C" {
 #include "mocks/mock_system_info.h"
 #include "mocks/mock_memory.h"
@@ -174,3 +175,162 @@ TEST_F(UtcWifiManagerInfo, Is5GhzSupportedN3)
        EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
         EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_is_5ghz_band_supported(handle, nullptr));
 }
+
+TEST_F(UtcWifiManagerInfo, SetMacPolicyP1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+}
+
+TEST_F(UtcWifiManagerInfo, SetMacPolicyN1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(handle, (wifi_manager_mac_policy_e)-1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(handle, (wifi_manager_mac_policy_e)3));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(handle, (wifi_manager_mac_policy_e)-1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_mac_policy(handle, (wifi_manager_mac_policy_e)3));
+}
+
+TEST_F(UtcWifiManagerInfo, SetMacPolicyN2)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+}
+
+TEST_F(UtcWifiManagerInfo, GetMacPolicyP1)
+{
+       wifi_manager_mac_policy_e mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_get_mac_policy(handle, &mac_policy));
+}
+
+TEST_F(UtcWifiManagerInfo, GetMacPolicyN1)
+{
+       wifi_manager_mac_policy_e mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(nullptr, &mac_policy));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(nullptr, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(nullptr, &mac_policy));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_mac_policy(nullptr, nullptr));
+}
+
+TEST_F(UtcWifiManagerInfo, GetMacPolicyN2)
+{
+       wifi_manager_mac_policy_e mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_get_mac_policy(handle, &mac_policy));
+}
+
+TEST_F(UtcWifiManagerInfo, SetPreassocMacPolicyP1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+}
+
+TEST_F(UtcWifiManagerInfo, SetPreassocMacPolicyN1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(handle, (wifi_manager_mac_policy_e)-1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(handle, (wifi_manager_mac_policy_e)3));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(nullptr, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(handle, (wifi_manager_mac_policy_e)-1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_preassoc_mac_policy(handle, (wifi_manager_mac_policy_e)3));
+}
+
+TEST_F(UtcWifiManagerInfo, SetPreassocMacPolicyN2)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_RANDOM_OUI_RANDOM_MAC));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_preassoc_mac_policy(handle, WIFI_MANAGER_MAC_POLICY_FIXED_OUI_RANDOM_MAC));
+}
+
+TEST_F(UtcWifiManagerInfo, GetPreassocMacPolicyP1)
+{
+       wifi_manager_mac_policy_e preassoc_mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_get_preassoc_mac_policy(handle, &preassoc_mac_policy));
+}
+
+TEST_F(UtcWifiManagerInfo, GetPreassocMacPolicyN1)
+{
+       wifi_manager_mac_policy_e preassoc_mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(nullptr, &preassoc_mac_policy));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(nullptr, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(nullptr, &preassoc_mac_policy));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_preassoc_mac_policy(nullptr, nullptr));
+}
+
+TEST_F(UtcWifiManagerInfo, GetPreassocMacPolicyN2)
+{
+       wifi_manager_mac_policy_e preassoc_mac_policy = WIFI_MANAGER_MAC_POLICY_FIXED_MAC;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_get_preassoc_mac_policy(handle, &preassoc_mac_policy));
+}
+
+TEST_F(UtcWifiManagerInfo, SetRandomMacLifetimeP1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_random_mac_lifetime(handle, 1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_random_mac_lifetime(handle, 60));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_set_random_mac_lifetime(handle, 3600));
+}
+
+TEST_F(UtcWifiManagerInfo, SetRandomMacLifetimeN1)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(nullptr, 1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(nullptr, 0));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(handle, 0));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(nullptr, 1));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(nullptr, 0));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_set_random_mac_lifetime(handle, 0));
+}
+
+TEST_F(UtcWifiManagerInfo, SetRandomMacLifetimeN2)
+{
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_set_random_mac_lifetime(handle, 1));
+}
+
+TEST_F(UtcWifiManagerInfo, GetRandomMacLifetimeP1)
+{
+       unsigned int lifetime = 0;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_get_random_mac_lifetime(handle, &lifetime));
+}
+
+TEST_F(UtcWifiManagerInfo, GetRandomMacLifetimeN1)
+{
+       unsigned int lifetime = 0;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(nullptr, &lifetime));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(nullptr, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(nullptr, &lifetime));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(handle, nullptr));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_INVALID_PARAMETER, wifi_manager_get_random_mac_lifetime(nullptr, nullptr));
+}
+
+TEST_F(UtcWifiManagerInfo, GetRandomMacLifetimeN2)
+{
+       unsigned int lifetime = 0;
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NONE, wifi_manager_deinitialize(handle));
+       EXPECT_EQ(WIFI_MANAGER_ERROR_NOT_INITIALIZED, wifi_manager_get_random_mac_lifetime(handle, &lifetime));
+}
index b11205c..9ff85dd 100755 (executable)
@@ -3443,6 +3443,85 @@ int test_wifi_manager_get_5ghz_band_supported(void)
        return 1;
 }
 
+int test_wifi_manager_set_mac_policy(void)
+{
+       int rv;
+       unsigned int policy = 0;
+
+       printf("Enter mac policy (0/1/2): ");
+       rv = scanf(" %u", &policy);
+
+       rv = wifi_manager_set_mac_policy(wifi, policy);
+       if (rv != WIFI_MANAGER_ERROR_NONE) {
+               printf("Fail to set mac policy, rv = %d\n", rv);
+               return 1;
+       }
+
+       printf("Success to set mac policy\n");
+       return 1;
+}
+
+int test_wifi_manager_set_preassoc_mac_policy(void)
+{
+       int rv;
+       unsigned int policy = 0;
+
+       printf("Enter mac policy (0/1/2): ");
+       rv = scanf(" %u", &policy);
+
+       rv = wifi_manager_set_preassoc_mac_policy(wifi, policy);
+       if (rv != WIFI_MANAGER_ERROR_NONE) {
+               printf("Fail to set preassoc mac policy, rv = %d\n", rv);
+               return 1;
+       }
+
+       printf("Success to set preassoc mac policy\n");
+       return 1;
+}
+
+int test_wifi_manager_set_random_mac_lifetime(void)
+{
+       int rv;
+       unsigned int lifetime = 0;
+
+       printf("Enter mac policy (> 0): ");
+       rv = scanf(" %u", &lifetime);
+
+       rv = wifi_manager_set_random_mac_lifetime(wifi, lifetime);
+       if (rv != WIFI_MANAGER_ERROR_NONE) {
+               printf("Fail to set random mac lifetime, rv = %d\n", rv);
+               return 1;
+       }
+
+       printf("Success to set random mac lifetime\n");
+       return 1;
+}
+
+int test_wifi_manager_get_mac_policies(void)
+{
+       int rv;
+       unsigned int mac_policy = 0;
+       unsigned int preassoc_mac_policy = 0;
+       unsigned int random_mac_lifetime = 0;
+
+       rv = wifi_manager_get_mac_policy(wifi, &mac_policy);
+       if (rv != WIFI_MANAGER_ERROR_NONE)
+               printf("Fail to get mac policy, rv = %d\n", rv);
+
+       rv = wifi_manager_get_preassoc_mac_policy(wifi, &preassoc_mac_policy);
+       if (rv != WIFI_MANAGER_ERROR_NONE)
+               printf("Fail to get preassoc mac policy, rv = %d\n", rv);
+
+       rv = wifi_manager_get_random_mac_lifetime(wifi, &random_mac_lifetime);
+       if (rv != WIFI_MANAGER_ERROR_NONE)
+               printf("Fail to get random mac lifetime, rv = %d\n", rv);
+
+       printf("Success to get mac policies: "
+                       "[Mac Policy : %u], [Preassoc Mac Policy : %u], [Random Mac lifetime : %u]\n",
+                       mac_policy, preassoc_mac_policy, random_mac_lifetime);
+       return 1;
+}
+
 int test_wifi_manager_get_connection_mode(void)
 {
        int rv, int_value;
@@ -3591,6 +3670,10 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
                printf("X   - Set passpoint on/off\n");
                printf("Y   - Get Access Point Hardware Mode\n");
                printf("Z   - Get 5Ghz supported\n");
+               printf("!   - Set mac policy\n");
+               printf("@   - Set preassoc mac policy\n");
+               printf("#   - Set random mac lifetime\n");
+               printf("$   - Get mac policies\n");
                printf(LOG_RED "0   - Exit \n" LOG_END);
 
                printf("ENTER  - Show options menu.......\n");
@@ -3783,6 +3866,18 @@ gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
        case 'Z':
                rv = test_wifi_manager_get_5ghz_band_supported();
                break;
+       case '!':
+               rv = test_wifi_manager_set_mac_policy();
+               break;
+       case '@':
+               rv = test_wifi_manager_set_preassoc_mac_policy();
+               break;
+       case '#':
+               rv = test_wifi_manager_set_random_mac_lifetime();
+               break;
+       case '$':
+               rv = test_wifi_manager_get_mac_policies();
+               break;
        default:
                break;
        }