2 * Copyright (c) 2012-2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <wifi-manager.h>
21 #include <wifi-manager-extension.h>
23 #include "wman_test_common.h"
24 #include "wman_test_ap.h"
25 #include "wman_test_misc.h"
26 #include "wman_test_config.h"
27 #include "wman_test_extension.h"
29 #define LOG_RED "\033[0;31m"
30 #define LOG_GREEN "\033[0;32m"
31 #define LOG_BROWN "\033[0;33m"
32 #define LOG_BLUE "\033[0;34m"
33 #define LOG_END "\033[0;m"
35 static wifi_manager_h wifi = NULL;
36 static wifi_manager_h wifi2 = NULL;
38 static void __test_device_state_callback(wifi_manager_device_state_e state, void* user_data)
40 printf("[%s] Device state changed callback", (char *)user_data);
42 if (state == WIFI_MANAGER_DEVICE_STATE_ACTIVATED)
43 printf(", state : Activated\n");
45 printf(", state : Deactivated\n");
48 static void __test_scan_changed_callback(wifi_manager_scan_state_e state, void* user_data)
50 printf("Scan changed, scan state : %d\n", state);
53 static void __test_bg_scan_completed_callback(wifi_manager_error_e error_code, void* user_data)
55 printf("[%s] Background Scan Completed, error code : %s\n",
56 (char *)user_data, wman_test_strerror(error_code));
59 static void __test_ip_conflict_callback(char *mac, wifi_manager_ip_conflict_state_e state, void *user_data)
61 if (state == WIFI_MANAGER_IP_CONFLICT_STATE_CONFLICT_DETECTED)
62 printf("[%s] Ip conflict detected : %s\n", (char *)user_data, mac);
63 else if (state == WIFI_MANAGER_IP_CONFLICT_STATE_CONFLICT_NOT_DETECTED)
64 printf("Ip conflict removed\n");
66 printf("Ip conflict state unknown\n");
69 static void __test_connection_state_callback(wifi_manager_connection_state_e state, wifi_manager_ap_h ap, void* user_data)
74 printf("[%s] Connection state changed callback", (char *)user_data);
77 case WIFI_MANAGER_CONNECTION_STATE_CONNECTED:
78 printf(", state : Connected");
80 case WIFI_MANAGER_CONNECTION_STATE_ASSOCIATION:
81 printf(", state : Association");
83 case WIFI_MANAGER_CONNECTION_STATE_CONFIGURATION:
84 printf(", state : Configuration");
86 case WIFI_MANAGER_CONNECTION_STATE_DISCONNECTED:
87 printf(", state : Disconnected");
90 printf(", state : Unknown");
93 rv = wifi_manager_ap_get_essid(ap, &ap_name);
94 if (rv != WIFI_MANAGER_ERROR_NONE)
95 printf(", Fail to get AP name [%s]\n", wman_test_strerror(rv));
97 printf(", AP name : %s\n", ap_name);
102 static void __test_rssi_level_callback(wifi_manager_rssi_level_e rssi_level, void* user_data)
104 printf("[%s] RSSI level changed callback, level = %d\n", (char *)user_data, rssi_level);
107 static void __test_tdls_discover_callback(wifi_manager_tdls_discovery_state_e state, char *peer_mac_add, void *user_data)
109 printf("[%s] TDLS discover callback", (char *)user_data);
111 printf(", Peer Mac Address [%s], state :%d\n", peer_mac_add, state);
112 if (state == WIFI_MANAGER_TDLS_DISCOVERY_STATE_ONGOING)
113 printf(", Discovery is ongoing");
115 printf(", Discovery is finished");
118 static void __test_get_wifi_module_state_callback(wifi_manager_module_state_e state, void *user_data)
120 printf("Wi-Fi Module State Changed callback : %d", state);
122 if (state == WIFI_MANAGER_MODULE_STATE_ATTACHED)
123 printf(", Wi-Fi Module Attached\n");
125 printf(", Wi-Fi Module Detached\n");
128 static void __test_tdls_state_callback(wifi_manager_tdls_state_e state, char *peer_mac_add, void *user_data)
130 printf("[%s] TDLS state changed callback", (char *)user_data);
132 if (state == WIFI_MANAGER_TDLS_STATE_CONNECTED)
133 printf(", state : TDLS Connected, Peer Mac Address [%s]\n", peer_mac_add);
135 printf(", state : TDLS Disconnected, Peer Mac Address [%s]\n", peer_mac_add);
138 static void __test_roaming_state_changed_callback(wifi_manager_roam_e state,
139 char *cur_bssid, char *dst_bssid, void *user_data)
141 printf("[%s] Wi-Fi Roaming state changed callback", (char *)user_data);
144 case WIFI_MANAGER_ROAM_SCAN_REQUIRED:
145 printf(", state : Scan Required");
147 case WIFI_MANAGER_ROAM_STARTED:
148 printf(", state : Roaming Started");
150 case WIFI_MANAGER_ROAM_FAILURE:
151 printf(", state : Romaing Failure");
153 case WIFI_MANAGER_ROAM_SUCCESS:
154 printf(", state : Romaing Success");
156 case WIFI_MANAGER_ROAM_UNKNOWN:
159 printf(", state : Unknown");
162 printf(", cur_bssid: %s, dst_bssid: %s\n", cur_bssid, dst_bssid);
165 static void __test_dhcp_changed_callback(wifi_manager_dhcp_state_e state, wifi_manager_error_e error_code, void *user_data)
167 printf("[%s] DHCP state changed callback, state : %d, error : %s\n",
168 (char *)user_data, state, wman_test_strerror(error_code));
171 int wman_test_init(const char *ifname)
176 printf("Already initialized\n");
181 rv = wifi_manager_initialize(&wifi);
183 rv = wifi_manager_initialize_with_interface_name(&wifi, ifname);
185 if (rv == WIFI_MANAGER_ERROR_NONE) {
186 wifi_manager_set_device_state_changed_cb(wifi, __test_device_state_callback, "1");
187 wifi_manager_set_scan_state_changed_cb(wifi, __test_scan_changed_callback, "1");
188 wifi_manager_set_background_scan_cb(wifi, __test_bg_scan_completed_callback, "1");
189 wifi_manager_set_ip_conflict_cb(wifi, __test_ip_conflict_callback, "1");
190 wifi_manager_set_connection_state_changed_cb(wifi, __test_connection_state_callback, "1");
191 wifi_manager_set_rssi_level_changed_cb(wifi, __test_rssi_level_callback, "1");
192 wifi_manager_tdls_set_state_changed_cb(wifi, __test_tdls_state_callback, "1");
193 wifi_manager_tdls_set_discovered_cb(wifi, __test_tdls_discover_callback, "1");
194 wifi_manager_set_module_state_changed_cb(wifi, __test_get_wifi_module_state_callback, "1");
195 wifi_manager_set_roaming_cb(wifi, __test_roaming_state_changed_callback, "1");
196 wifi_manager_set_dhcp_state_changed_cb(wifi, __test_dhcp_changed_callback, "1");
199 printf("[1] Wifi init failed [%s]\n", wman_test_strerror(rv));
204 rv = wifi_manager_initialize(&wifi2);
206 rv = wifi_manager_initialize_with_interface_name(&wifi2, ifname);
208 if (rv == WIFI_MANAGER_ERROR_NONE) {
209 wifi_manager_set_device_state_changed_cb(wifi2, __test_device_state_callback, "2");
210 wifi_manager_set_background_scan_cb(wifi2, __test_bg_scan_completed_callback, "2");
211 wifi_manager_set_connection_state_changed_cb(wifi2, __test_connection_state_callback, "2");
212 wifi_manager_set_rssi_level_changed_cb(wifi2, __test_rssi_level_callback, "2");
213 wifi_manager_tdls_set_state_changed_cb(wifi2, __test_tdls_state_callback, "2");
214 wifi_manager_tdls_set_discovered_cb(wifi, __test_tdls_discover_callback, "2");
215 wifi_manager_set_module_state_changed_cb(wifi, __test_get_wifi_module_state_callback, "2");
216 wifi_manager_set_dhcp_state_changed_cb(wifi2, __test_dhcp_changed_callback, "2");
218 printf("[2] Wifi init failed [%s]\n", wman_test_strerror(rv));
219 wifi_manager_deinitialize(wifi);
224 printf("Wifi init succeeded\n");
228 int wman_test_deinit(void)
230 int rv = wifi_manager_deinitialize(wifi);
232 if (rv != WIFI_MANAGER_ERROR_NONE) {
233 printf("[1] Wifi deinit failed [%s]\n", wman_test_strerror(rv));
239 rv = wifi_manager_deinitialize(wifi2);
241 if (rv != WIFI_MANAGER_ERROR_NONE) {
242 printf("[2] Wifi deinit failed [%s]\n", wman_test_strerror(rv));
248 printf("Wifi deinit succeeded\n");
252 int wman_test_init_with_ifname(void)
255 char ifname[33] = { 0, };
257 printf("Input interface name: ");
258 rv = scanf(" %32[^\n]s", ifname);
262 rv = wman_test_init(ifname);
267 gboolean test_thread(GIOChannel *source, GIOCondition condition, gpointer data)
272 printf("Event received from stdin\n");
276 if (rv <= 0 || a[0] == '0') {
277 rv = wifi_manager_deinitialize(wifi);
279 if (rv != WIFI_MANAGER_ERROR_NONE)
280 printf("Fail to deinitialize.\n");
285 if (a[0] == '\n' || a[0] == '\r') {
287 printf("\n\n Network Connection API Test App\n\n");
288 printf("Options..\n");
289 printf(LOG_BLUE "[Public APIs]\n" LOG_END);
290 printf(LOG_GREEN "1 - Wi-Fi init and set callbacks\n" LOG_END);
291 printf(": - Wi-Fi init and set callbacks with interface name\n");
292 printf("2 - Wi-Fi deinit(unset callbacks automatically)\n");
293 printf(LOG_GREEN "3 - Activate Wi-Fi device\n" LOG_END);
294 printf("4 - Deactivate Wi-Fi device\n");
295 printf("5 - Is Wi-Fi activated?\n");
296 printf("6 - Get connection state\n");
297 printf("7 - Get MAC address\n");
298 printf("8 - Get Wi-Fi interface name\n");
299 printf(LOG_GREEN "9 - Scan request\n" LOG_END);
300 printf("a - Get Connected AP\n");
301 printf("b - Get AP list\n");
302 printf(LOG_GREEN "c - Connect\n" LOG_END);
303 printf("d - Disconnect\n");
304 printf("e - Connect by wps pbc\n");
305 printf("f - Forget an AP\n");
306 printf("g - Set & connect EAP\n");
307 printf("h - Set IP method type\n");
308 printf("i - Set Proxy method type\n");
309 printf("j - Get Ap info\n");
310 printf("k - Connect Specific AP\n");
311 printf("l - Load configuration\n");
312 printf("m - Save configuration\n");
313 printf("n - Remove configuration\n");
314 printf("o - TDLS Discover\n");
315 printf("p - TDLS Connect\n");
316 printf("q - TDLS Connected peer\n");
317 printf("r - TDLS Disconnect\n");
318 printf("s - Connect Hidden AP\n");
319 printf("t - Connect WPS PBC without SSID\n");
320 printf("u - Connect WPS PIN without SSID\n");
321 printf("v - Cancel WPS Request\n");
322 printf("w - Get wifi scanning state\n");
323 printf("x - Enable TDLS Channel Switch Request\n");
324 printf("y - Disable TDLS Channel Switch Request\n");
325 printf("z - Get Wi-Fi Module State\n");
326 printf("A - BSSID Scan (Wi-Fi Position System Scan)\n");
327 printf("B - Multi Scan (Multi Frequency & Multi SSID)\n");
328 printf("C - Add VSIE\n");
329 printf("D - Get VSIE\n");
330 printf("E - Remove VSIE\n");
331 printf("F - Set IP conflict detection mode\n");
332 printf("G - Get IP conflict detection mode\n");
333 printf("H - Get IP conflict state\n");
334 printf("I - Get generated PIN number\n");
335 printf("J - Forget an AP(async)\n");
337 printf(LOG_BLUE "[Extension API]\n" LOG_END);
338 printf("K - Set Enable or Disable Auto Scan\n");
339 printf("L - Set Mode of Auto Scan\n");
340 printf("M - Get Enable or Disable Auto Scan\n");
341 printf("N - Get Mode of Auto Scan\n");
342 printf("O - Flush BSS\n");
343 printf("P - Set enable or disable auto connect\n");
344 printf("Q - Get enable or disable auto connect\n");
345 printf("R - Set enable or disable of Wi-Fi profile auto-connect\n");
346 printf("S - Get enable or disable of Wi-Fi profile auto-connect\n");
347 printf("T - Set the IP conflict detection period\n");
348 printf("U - Get the IP conflict detection period\n");
349 printf("V - Netlink Scan Normal/Specific-AP\n");
350 printf("W - Get passpoint state\n");
351 printf("X - Set passpoint on/off\n");
352 printf("Y - Get Access Point Hardware Mode\n");
353 printf("Z - Get 5Ghz supported\n");
354 printf("! - Set mac policy\n");
355 printf("@ - Set preassoc mac policy\n");
356 printf("# - Set random mac lifetime\n");
357 printf("$ - Get mac policies\n");
358 printf("^ - Set country code\n");
359 printf("& - Get country code\n");
360 printf("* - Check available security type\n");
361 printf("( - Get power-save state\n");
362 printf(") - Set power-save state\n");
363 printf("- - Get power-save mode\n");
364 printf("= - Set power-save mode\n");
365 printf("[ - Get Interval of Auto Scan\n");
366 printf("] - Set Interval of Auto Scan\n");
367 printf("; - Remove All Wi-Fi configurations\n");
368 printf(LOG_RED "0 - Exit \n" LOG_END);
370 printf("ENTER - Show options menu.......\n");
376 rv = wman_test_init(NULL);
379 rv = wman_test_init_with_ifname();
382 rv = wman_test_deinit();
385 rv = wman_test_activate(wifi);
388 rv = wman_test_deactivate(wifi);
391 rv = wman_test_is_activated(wifi);
394 rv = wman_test_get_connection_state(wifi);
397 rv = wman_test_get_mac_address(wifi);
400 rv = wman_test_get_interface_name(wifi);
403 rv = wman_test_scan(wifi);
406 rv = wman_test_get_connected_ap(wifi);
409 rv = wman_test_foreach_found_ap(wifi);
412 rv = wman_test_connect(wifi);
415 rv = wman_test_disconnect(wifi);
418 rv = wman_test_connect_wps(wifi);
421 rv = wman_test_forget_ap(wifi);
424 rv = wman_test_connect_eap_ap(wifi);
427 rv = wman_test_set_ip_method(wifi);
430 rv = wman_test_set_proxy_method(wifi);
433 rv = wman_test_get_ap_info(wifi);
436 rv = wman_test_connect_specific_ap(wifi);
439 rv = wman_test_config_load_configuration(wifi);
442 rv = wman_test_config_save(wifi);
445 rv = wman_test_config_remove(wifi);
448 rv = wman_test_tdls_discover(wifi);
451 rv = wman_test_tdls_connect(wifi);
454 rv = wman_test_tdls_get_connected_peer(wifi);
457 rv = wman_test_tdls_disconnect(wifi);
460 rv = wman_test_connect_hidden_ap(wifi);
463 rv = wman_test_connect_wps_pbc_without_ssid(wifi);
466 rv = wman_test_connect_wps_pin_without_ssid(wifi);
469 rv = wman_test_cancel_wps(wifi);
472 rv = wman_test_get_scan_state(wifi);
475 rv = wman_test_tdls_enable_channel_switch(wifi);
478 rv = wman_test_tdls_disable_channel_switch(wifi);
481 rv = wman_test_get_module_state(wifi);
484 rv = wman_test_bssid_scan(wifi);
487 rv = wman_test_specific_ap_start_multi_scan(wifi);
490 rv = wman_test_add_vsie(wifi);
493 rv = wman_test_get_vsie(wifi);
496 rv = wman_test_remove_vsie(wifi);
499 rv = wman_test_set_ip_conflict_detect_enable(wifi);
502 rv = wman_test_ip_conflict_detect_is_enabled(wifi);
505 rv = wman_test_get_ip_conflict_state(wifi);
508 rv = wman_test_get_wps_generated_pin(wifi);
511 rv = wman_test_forget_ap_async(wifi);
516 rv = wman_test_set_autoscan_state(wifi);
519 rv = wman_test_set_autoscan_mode(wifi);
522 rv = wman_test_get_autoscan_state(wifi);
525 rv = wman_test_get_autoscan_mode(wifi);
528 rv = wman_test_flush_bss(wifi);
531 rv = wman_test_set_auto_connect(wifi);
534 rv = wman_test_get_auto_connect(wifi);
537 rv = wman_test_set_ap_auto_connect(wifi);
540 rv = wman_test_get_ap_auto_connect(wifi);
543 rv = wman_test_set_ip_conflict_period(wifi);
546 rv = wman_test_get_ip_conflict_period(wifi);
549 rv = wman_test_netlink_scan(wifi);
552 rv = wman_test_get_passpoint_state(wifi);
555 rv = wman_test_set_passpoint_enable(wifi);
558 rv = wman_test_get_connection_mode(wifi);
561 rv = wman_test_get_5ghz_band_supported(wifi);
564 rv = wman_test_set_mac_policy(wifi);
567 rv = wman_test_set_preassoc_mac_policy(wifi);
570 rv = wman_test_set_random_mac_lifetime(wifi);
573 rv = wman_test_get_mac_policies(wifi);
576 rv = wman_test_set_country_code(wifi);
579 rv = wman_test_get_country_code(wifi);
582 rv = wman_test_check_supported_security_type(wifi);
585 rv = wman_test_get_power_save_state(wifi);
588 rv = wman_test_set_power_save_state(wifi);
591 rv = wman_test_get_power_save_mode(wifi);
594 rv = wman_test_set_power_save_mode(wifi);
597 rv = wman_test_get_autoscan_interval(wifi);
600 rv = wman_test_set_autoscan_interval(wifi);
603 rv = wman_test_reset_wifi_configurations(wifi);
610 printf("Operation succeeded!\n");
612 printf("Operation failed!\n");
617 int main(int argc, char **argv)
620 #if !GLIB_CHECK_VERSION(2, 36, 0)
623 mainloop = g_main_loop_new(NULL, FALSE);
625 GIOChannel *channel = g_io_channel_unix_new(0);
626 g_io_add_watch(channel, (G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL), test_thread, NULL);
628 printf("Test Thread created...\n");
630 g_main_loop_run(mainloop);