Lines Matching +full:pin +full:- +full:ctrl +full:- +full:enable
2 * WPA Supplicant - command line interface for wpa_supplicant daemon
3 * Copyright (c) 2004-2022, Jouni Malinen <j@w1.fi>
32 "Copyright (c) 2004-2024, Jouni Malinen <j@w1.fi> and contributors";
44 static int wpa_cli_connected = -1;
76 static void update_creds(struct wpa_ctrl *ctrl);
77 static void update_networks(struct wpa_ctrl *ctrl);
78 static void update_stations(struct wpa_ctrl *ctrl);
79 static void update_ifnames(struct wpa_ctrl *ctrl);
84 printf("wpa_cli [-p<path to ctrl sockets>] [-i<ifname>] [-hvBr] "
85 "[-a<action file>] \\\n"
86 " [-P<pid file>] [-g<global ctrl>] [-G<ping interval>] "
88 " [-s<wpa_client_socket_file_path>] "
90 " -h = help (show this usage text)\n"
91 " -v = shown version information\n"
92 " -a = run in daemon mode executing the action file based on "
95 " -r = try to reconnect when client socket is disconnected.\n"
96 " This is useful only when used with -a.\n"
97 " -B = run a daemon in the background\n"
130 return -1;
141 return -1;
147 return -1;
155 return -1;
162 return -1;
167 return -1;
174 return -1;
195 return -1;
228 static int _wpa_ctrl_command(struct wpa_ctrl *ctrl, const char *cmd, int print)
235 printf("Not connected to wpa_supplicant - command dropped.\n");
236 return -1;
241 buf[sizeof(buf) - 1] = '\0';
244 len = sizeof(buf) - 1;
245 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len,
247 if (ret == -2) {
249 return -2;
252 return -1;
257 if (interactive && len > 0 && buf[len - 1] != '\n')
264 static int wpa_ctrl_command(struct wpa_ctrl *ctrl, const char *cmd)
266 return _wpa_ctrl_command(ctrl, cmd, 1);
270 static int wpa_cli_cmd(struct wpa_ctrl *ctrl, const char *cmd, int min_args,
275 printf("Invalid %s command - at least %d argument%s "
278 return -1;
281 return -1;
282 return wpa_ctrl_command(ctrl, buf);
286 static int wpa_cli_cmd_ifname(struct wpa_ctrl *ctrl, int argc, char *argv[])
288 return wpa_ctrl_command(ctrl, "IFNAME");
292 static int wpa_cli_cmd_status(struct wpa_ctrl *ctrl, int argc, char *argv[])
295 return wpa_ctrl_command(ctrl, "STATUS-VERBOSE");
297 return wpa_ctrl_command(ctrl, "STATUS-WPS");
299 return wpa_ctrl_command(ctrl, "STATUS-DRIVER");
302 return wpa_ctrl_command(ctrl, "STATUS-NO_EVENTS");
304 return wpa_ctrl_command(ctrl, "STATUS");
308 static int wpa_cli_cmd_ping(struct wpa_ctrl *ctrl, int argc, char *argv[])
310 return wpa_ctrl_command(ctrl, "PING");
314 static int wpa_cli_cmd_relog(struct wpa_ctrl *ctrl, int argc, char *argv[])
316 return wpa_ctrl_command(ctrl, "RELOG");
320 static int wpa_cli_cmd_note(struct wpa_ctrl *ctrl, int argc, char *argv[])
322 return wpa_cli_cmd(ctrl, "NOTE", 1, argc, argv);
326 static int wpa_cli_cmd_mib(struct wpa_ctrl *ctrl, int argc, char *argv[])
328 return wpa_ctrl_command(ctrl, "MIB");
332 static int wpa_cli_cmd_pmksa(struct wpa_ctrl *ctrl, int argc, char *argv[])
334 return wpa_ctrl_command(ctrl, "PMKSA");
338 static int wpa_cli_cmd_pmksa_flush(struct wpa_ctrl *ctrl, int argc,
341 return wpa_ctrl_command(ctrl, "PMKSA_FLUSH");
347 static int wpa_cli_cmd_pmksa_get(struct wpa_ctrl *ctrl, int argc, char *argv[])
349 return wpa_cli_cmd(ctrl, "PMKSA_GET", 1, argc, argv);
353 static int wpa_cli_cmd_pmksa_add(struct wpa_ctrl *ctrl, int argc, char *argv[])
355 return wpa_cli_cmd(ctrl, "PMKSA_ADD", 8, argc, argv);
361 static int wpa_cli_mesh_cmd_pmksa_get(struct wpa_ctrl *ctrl, int argc,
364 return wpa_cli_cmd(ctrl, "MESH_PMKSA_GET", 1, argc, argv);
368 static int wpa_cli_mesh_cmd_pmksa_add(struct wpa_ctrl *ctrl, int argc,
371 return wpa_cli_cmd(ctrl, "MESH_PMKSA_ADD", 4, argc, argv);
378 static int wpa_cli_cmd_help(struct wpa_ctrl *ctrl, int argc, char *argv[])
400 static int wpa_cli_cmd_license(struct wpa_ctrl *ctrl, int argc, char *argv[])
407 static int wpa_cli_cmd_quit(struct wpa_ctrl *ctrl, int argc, char *argv[])
416 static int wpa_cli_cmd_mlo_status(struct wpa_ctrl *ctrl, int argc, char *argv[])
418 return wpa_ctrl_command(ctrl, "MLO_STATUS");
422 static int wpa_cli_cmd_mlo_signal_poll(struct wpa_ctrl *ctrl, int argc, char *argv[])
424 return wpa_ctrl_command(ctrl, "MLO_SIGNAL_POLL");
428 static int wpa_cli_cmd_set(struct wpa_ctrl *ctrl, int argc, char *argv[])
437 return -1;
439 return wpa_ctrl_command(ctrl, cmd);
442 return wpa_cli_cmd(ctrl, "SET", 2, argc, argv);
541 static int wpa_cli_cmd_dump(struct wpa_ctrl *ctrl, int argc, char *argv[])
543 return wpa_ctrl_command(ctrl, "DUMP");
547 static int wpa_cli_cmd_driver_flags(struct wpa_ctrl *ctrl, int argc,
550 return wpa_ctrl_command(ctrl, "DRIVER_FLAGS");
554 static int wpa_cli_cmd_driver_flags2(struct wpa_ctrl *ctrl, int argc,
557 return wpa_ctrl_command(ctrl, "DRIVER_FLAGS2");
561 static int wpa_cli_cmd_get(struct wpa_ctrl *ctrl, int argc, char *argv[])
563 return wpa_cli_cmd(ctrl, "GET", 1, argc, argv);
640 static int wpa_cli_cmd_logoff(struct wpa_ctrl *ctrl, int argc, char *argv[])
642 return wpa_ctrl_command(ctrl, "LOGOFF");
646 static int wpa_cli_cmd_logon(struct wpa_ctrl *ctrl, int argc, char *argv[])
648 return wpa_ctrl_command(ctrl, "LOGON");
652 static int wpa_cli_cmd_reassociate(struct wpa_ctrl *ctrl, int argc,
655 return wpa_ctrl_command(ctrl, "REASSOCIATE");
659 static int wpa_cli_cmd_reattach(struct wpa_ctrl *ctrl, int argc, char *argv[])
661 return wpa_ctrl_command(ctrl, "REATTACH");
665 static int wpa_cli_cmd_preauthenticate(struct wpa_ctrl *ctrl, int argc,
668 return wpa_cli_cmd(ctrl, "PREAUTH", 1, argc, argv);
672 static int wpa_cli_cmd_ap_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
674 return wpa_cli_cmd(ctrl, "AP_SCAN", 1, argc, argv);
678 static int wpa_cli_cmd_scan_interval(struct wpa_ctrl *ctrl, int argc,
681 return wpa_cli_cmd(ctrl, "SCAN_INTERVAL", 1, argc, argv);
685 static int wpa_cli_cmd_bss_expire_age(struct wpa_ctrl *ctrl, int argc,
688 return wpa_cli_cmd(ctrl, "BSS_EXPIRE_AGE", 1, argc, argv);
692 static int wpa_cli_cmd_bss_expire_count(struct wpa_ctrl *ctrl, int argc,
695 return wpa_cli_cmd(ctrl, "BSS_EXPIRE_COUNT", 1, argc, argv);
699 static int wpa_cli_cmd_bss_flush(struct wpa_ctrl *ctrl, int argc, char *argv[])
710 return -1;
712 return wpa_ctrl_command(ctrl, cmd);
716 static int wpa_cli_cmd_ft_ds(struct wpa_ctrl *ctrl, int argc, char *argv[])
718 return wpa_cli_cmd(ctrl, "FT_DS", 1, argc, argv);
722 static int wpa_cli_cmd_wps_pbc(struct wpa_ctrl *ctrl, int argc, char *argv[])
724 return wpa_cli_cmd(ctrl, "WPS_PBC", 0, argc, argv);
728 static int wpa_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc, char *argv[])
732 "- BSSID: use 'any' to select any\n"
733 "- PIN: optional, used only with devices that have no "
735 return -1;
738 return wpa_cli_cmd(ctrl, "WPS_PIN", 1, argc, argv);
742 static int wpa_cli_cmd_wps_check_pin(struct wpa_ctrl *ctrl, int argc,
745 return wpa_cli_cmd(ctrl, "WPS_CHECK_PIN", 1, argc, argv);
749 static int wpa_cli_cmd_wps_cancel(struct wpa_ctrl *ctrl, int argc,
752 return wpa_ctrl_command(ctrl, "WPS_CANCEL");
758 static int wpa_cli_cmd_wps_nfc(struct wpa_ctrl *ctrl, int argc, char *argv[])
760 return wpa_cli_cmd(ctrl, "WPS_NFC", 0, argc, argv);
764 static int wpa_cli_cmd_wps_nfc_config_token(struct wpa_ctrl *ctrl, int argc,
767 return wpa_cli_cmd(ctrl, "WPS_NFC_CONFIG_TOKEN", 1, argc, argv);
771 static int wpa_cli_cmd_wps_nfc_token(struct wpa_ctrl *ctrl, int argc,
774 return wpa_cli_cmd(ctrl, "WPS_NFC_TOKEN", 1, argc, argv);
778 static int wpa_cli_cmd_wps_nfc_tag_read(struct wpa_ctrl *ctrl, int argc,
786 printf("Invalid 'wps_nfc_tag_read' command - one argument "
788 return -1;
794 return -1;
797 ret = wpa_ctrl_command(ctrl, buf);
804 static int wpa_cli_cmd_nfc_get_handover_req(struct wpa_ctrl *ctrl, int argc,
807 return wpa_cli_cmd(ctrl, "NFC_GET_HANDOVER_REQ", 2, argc, argv);
811 static int wpa_cli_cmd_nfc_get_handover_sel(struct wpa_ctrl *ctrl, int argc,
814 return wpa_cli_cmd(ctrl, "NFC_GET_HANDOVER_SEL", 2, argc, argv);
818 static int wpa_cli_cmd_nfc_report_handover(struct wpa_ctrl *ctrl, int argc,
821 return wpa_cli_cmd(ctrl, "NFC_REPORT_HANDOVER", 4, argc, argv);
827 static int wpa_cli_cmd_wps_reg(struct wpa_ctrl *ctrl, int argc, char *argv[])
863 "- BSSID of the target AP\n"
864 "- AP PIN\n");
867 "- BSSID of the target AP\n"
868 "- AP PIN\n"
869 "- new SSID\n"
870 "- new auth (OPEN, WPAPSK, WPA2PSK)\n"
871 "- new encr (NONE, WEP, TKIP, CCMP)\n"
872 "- new key\n");
873 return -1;
878 return -1;
880 return wpa_ctrl_command(ctrl, cmd);
884 static int wpa_cli_cmd_wps_ap_pin(struct wpa_ctrl *ctrl, int argc,
887 return wpa_cli_cmd(ctrl, "WPS_AP_PIN", 1, argc, argv);
891 static int wpa_cli_cmd_wps_er_start(struct wpa_ctrl *ctrl, int argc,
894 return wpa_cli_cmd(ctrl, "WPS_ER_START", 0, argc, argv);
898 static int wpa_cli_cmd_wps_er_stop(struct wpa_ctrl *ctrl, int argc,
901 return wpa_ctrl_command(ctrl, "WPS_ER_STOP");
906 static int wpa_cli_cmd_wps_er_pin(struct wpa_ctrl *ctrl, int argc,
912 "- UUID: use 'any' to select any\n"
913 "- PIN: Enrollee PIN\n"
914 "optional: - Enrollee MAC address\n");
915 return -1;
918 return wpa_cli_cmd(ctrl, "WPS_ER_PIN", 2, argc, argv);
922 static int wpa_cli_cmd_wps_er_pbc(struct wpa_ctrl *ctrl, int argc,
925 return wpa_cli_cmd(ctrl, "WPS_ER_PBC", 1, argc, argv);
929 static int wpa_cli_cmd_wps_er_learn(struct wpa_ctrl *ctrl, int argc,
934 "- UUID: specify which AP to use\n"
935 "- PIN: AP PIN\n");
936 return -1;
939 return wpa_cli_cmd(ctrl, "WPS_ER_LEARN", 2, argc, argv);
943 static int wpa_cli_cmd_wps_er_set_config(struct wpa_ctrl *ctrl, int argc,
949 "- UUID: specify which AP to use\n"
950 "- Network configuration id\n");
951 return -1;
954 return wpa_cli_cmd(ctrl, "WPS_ER_SET_CONFIG", 2, argc, argv);
958 static int wpa_cli_cmd_wps_er_config(struct wpa_ctrl *ctrl, int argc,
992 "- AP UUID\n"
993 "- AP PIN\n"
994 "- new SSID\n"
995 "- new auth (OPEN, WPAPSK, WPA2PSK)\n"
996 "- new encr (NONE, WEP, TKIP, CCMP)\n"
997 "- new key\n");
998 return -1;
1003 return -1;
1005 return wpa_ctrl_command(ctrl, cmd);
1010 static int wpa_cli_cmd_wps_er_nfc_config_token(struct wpa_ctrl *ctrl, int argc,
1016 "- WPS/NDEF: token format\n"
1017 "- UUID: specify which AP to use\n");
1018 return -1;
1021 return wpa_cli_cmd(ctrl, "WPS_ER_NFC_CONFIG_TOKEN", 2, argc, argv);
1026 static int wpa_cli_cmd_ibss_rsn(struct wpa_ctrl *ctrl, int argc, char *argv[])
1028 return wpa_cli_cmd(ctrl, "IBSS_RSN", 1, argc, argv);
1032 static int wpa_cli_cmd_level(struct wpa_ctrl *ctrl, int argc, char *argv[])
1034 return wpa_cli_cmd(ctrl, "LEVEL", 1, argc, argv);
1038 static int wpa_cli_cmd_identity(struct wpa_ctrl *ctrl, int argc, char *argv[])
1046 return -1;
1051 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "IDENTITY-%s:%s",
1053 if (os_snprintf_error(end - pos, ret)) {
1055 return -1;
1059 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1060 if (os_snprintf_error(end - pos, ret)) {
1062 return -1;
1067 return wpa_ctrl_command(ctrl, cmd);
1071 static int wpa_cli_cmd_password(struct wpa_ctrl *ctrl, int argc, char *argv[])
1079 return -1;
1084 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PASSWORD-%s:%s",
1086 if (os_snprintf_error(end - pos, ret)) {
1088 return -1;
1092 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1093 if (os_snprintf_error(end - pos, ret)) {
1095 return -1;
1100 return wpa_ctrl_command(ctrl, cmd);
1104 static int wpa_cli_cmd_new_password(struct wpa_ctrl *ctrl, int argc,
1113 return -1;
1118 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "NEW_PASSWORD-%s:%s",
1120 if (os_snprintf_error(end - pos, ret)) {
1122 return -1;
1126 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1127 if (os_snprintf_error(end - pos, ret)) {
1129 return -1;
1134 return wpa_ctrl_command(ctrl, cmd);
1138 static int wpa_cli_cmd_pin(struct wpa_ctrl *ctrl, int argc, char *argv[])
1144 printf("Invalid PIN command: needs two arguments "
1145 "(network id and pin)\n");
1146 return -1;
1151 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PIN-%s:%s",
1153 if (os_snprintf_error(end - pos, ret)) {
1154 printf("Too long PIN command.\n");
1155 return -1;
1159 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1160 if (os_snprintf_error(end - pos, ret)) {
1161 printf("Too long PIN command.\n");
1162 return -1;
1166 return wpa_ctrl_command(ctrl, cmd);
1170 static int wpa_cli_cmd_otp(struct wpa_ctrl *ctrl, int argc, char *argv[])
1178 return -1;
1183 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "OTP-%s:%s",
1185 if (os_snprintf_error(end - pos, ret)) {
1187 return -1;
1191 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1192 if (os_snprintf_error(end - pos, ret)) {
1194 return -1;
1199 return wpa_ctrl_command(ctrl, cmd);
1203 static int wpa_cli_cmd_sim(struct wpa_ctrl *ctrl, int argc, char *argv[])
1211 return -1;
1216 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "SIM-%s:%s",
1218 if (os_snprintf_error(end - pos, ret)) {
1220 return -1;
1224 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1225 if (os_snprintf_error(end - pos, ret)) {
1227 return -1;
1231 return wpa_ctrl_command(ctrl, cmd);
1235 static int wpa_cli_cmd_psk_passphrase(struct wpa_ctrl *ctrl, int argc,
1243 return -1;
1248 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PSK_PASSPHRASE-%s:%s",
1250 if (os_snprintf_error(end - pos, ret)) {
1252 return -1;
1256 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1257 if (os_snprintf_error(end - pos, ret)) {
1259 return -1;
1264 return wpa_ctrl_command(ctrl, cmd);
1268 static int wpa_cli_cmd_passphrase(struct wpa_ctrl *ctrl, int argc,
1277 return -1;
1282 ret = os_snprintf(pos, end - pos, WPA_CTRL_RSP "PASSPHRASE-%s:%s",
1284 if (os_snprintf_error(end - pos, ret)) {
1286 return -1;
1290 ret = os_snprintf(pos, end - pos, " %s", argv[i]);
1291 if (os_snprintf_error(end - pos, ret)) {
1293 return -1;
1298 return wpa_ctrl_command(ctrl, cmd);
1302 static int wpa_cli_cmd_bssid(struct wpa_ctrl *ctrl, int argc, char *argv[])
1307 return -1;
1310 return wpa_cli_cmd(ctrl, "BSSID", 2, argc, argv);
1314 static int wpa_cli_cmd_bssid_ignore(struct wpa_ctrl *ctrl, int argc,
1317 return wpa_cli_cmd(ctrl, "BSSID_IGNORE", 0, argc, argv);
1321 static int wpa_cli_cmd_log_level(struct wpa_ctrl *ctrl, int argc, char *argv[])
1323 return wpa_cli_cmd(ctrl, "LOG_LEVEL", 0, argc, argv);
1327 static int wpa_cli_cmd_list_networks(struct wpa_ctrl *ctrl, int argc,
1330 return wpa_cli_cmd(ctrl, "LIST_NETWORKS", 0, argc, argv);
1334 static int wpa_cli_cmd_select_network(struct wpa_ctrl *ctrl, int argc,
1337 return wpa_cli_cmd(ctrl, "SELECT_NETWORK", 1, argc, argv);
1341 static int wpa_cli_cmd_enable_network(struct wpa_ctrl *ctrl, int argc,
1344 return wpa_cli_cmd(ctrl, "ENABLE_NETWORK", 1, argc, argv);
1348 static int wpa_cli_cmd_disable_network(struct wpa_ctrl *ctrl, int argc,
1351 return wpa_cli_cmd(ctrl, "DISABLE_NETWORK", 1, argc, argv);
1355 static int wpa_cli_cmd_add_network(struct wpa_ctrl *ctrl, int argc,
1358 int res = wpa_ctrl_command(ctrl, "ADD_NETWORK");
1360 update_networks(ctrl);
1365 static int wpa_cli_cmd_remove_network(struct wpa_ctrl *ctrl, int argc,
1368 int res = wpa_cli_cmd(ctrl, "REMOVE_NETWORK", 1, argc, argv);
1370 update_networks(ctrl);
1379 " psk (WPA passphrase or pre-shared key)\n"
1396 static int wpa_cli_cmd_set_network(struct wpa_ctrl *ctrl, int argc,
1407 return -1;
1410 return wpa_cli_cmd(ctrl, "SET_NETWORK", 3, argc, argv);
1414 static int wpa_cli_cmd_get_network(struct wpa_ctrl *ctrl, int argc,
1425 return -1;
1428 return wpa_cli_cmd(ctrl, "GET_NETWORK", 2, argc, argv);
1448 "pcsc", "pin", "engine_id", "key_id", "cert_id", "ca_cert_id",
1541 static int wpa_cli_cmd_dup_network(struct wpa_ctrl *ctrl, int argc,
1552 return -1;
1555 return wpa_cli_cmd(ctrl, "DUP_NETWORK", 3, argc, argv);
1584 static int wpa_cli_cmd_list_creds(struct wpa_ctrl *ctrl, int argc,
1587 return wpa_ctrl_command(ctrl, "LIST_CREDS");
1591 static int wpa_cli_cmd_add_cred(struct wpa_ctrl *ctrl, int argc, char *argv[])
1593 int res = wpa_ctrl_command(ctrl, "ADD_CRED");
1595 update_creds(ctrl);
1600 static int wpa_cli_cmd_remove_cred(struct wpa_ctrl *ctrl, int argc,
1603 int res = wpa_cli_cmd(ctrl, "REMOVE_CRED", 1, argc, argv);
1605 update_creds(ctrl);
1647 static int wpa_cli_cmd_set_cred(struct wpa_ctrl *ctrl, int argc, char *argv[])
1652 return -1;
1655 return wpa_cli_cmd(ctrl, "SET_CRED", 3, argc, argv);
1659 static int wpa_cli_cmd_get_cred(struct wpa_ctrl *ctrl, int argc, char *argv[])
1664 return -1;
1667 return wpa_cli_cmd(ctrl, "GET_CRED", 2, argc, argv);
1671 static int wpa_cli_cmd_disconnect(struct wpa_ctrl *ctrl, int argc,
1674 return wpa_ctrl_command(ctrl, "DISCONNECT");
1678 static int wpa_cli_cmd_reconnect(struct wpa_ctrl *ctrl, int argc,
1681 return wpa_ctrl_command(ctrl, "RECONNECT");
1685 static int wpa_cli_cmd_save_config(struct wpa_ctrl *ctrl, int argc,
1688 return wpa_ctrl_command(ctrl, "SAVE_CONFIG");
1692 static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
1694 return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv);
1698 static int wpa_cli_cmd_scan_results(struct wpa_ctrl *ctrl, int argc,
1701 return wpa_ctrl_command(ctrl, "SCAN_RESULTS");
1705 static int wpa_cli_cmd_abort_scan(struct wpa_ctrl *ctrl, int argc,
1708 return wpa_ctrl_command(ctrl, "ABORT_SCAN");
1712 static int wpa_cli_cmd_bss(struct wpa_ctrl *ctrl, int argc, char *argv[])
1714 return wpa_cli_cmd(ctrl, "BSS", 1, argc, argv);
1733 static int wpa_cli_cmd_get_capability(struct wpa_ctrl *ctrl, int argc,
1738 return -1;
1744 return -1;
1750 return -1;
1755 return -1;
1758 return wpa_cli_cmd(ctrl, "GET_CAPABILITY", 1, argc, argv);
1825 static int wpa_cli_list_interfaces(struct wpa_ctrl *ctrl)
1828 return wpa_ctrl_command(ctrl, "INTERFACES");
1832 static int wpa_cli_cmd_interface(struct wpa_ctrl *ctrl, int argc, char *argv[])
1835 wpa_cli_list_interfaces(ctrl);
1850 printf("Could not connect to interface '%s' - re-trying\n",
1857 static int wpa_cli_cmd_reconfigure(struct wpa_ctrl *ctrl, int argc,
1860 return wpa_ctrl_command(ctrl, "RECONFIGURE");
1864 static int wpa_cli_cmd_terminate(struct wpa_ctrl *ctrl, int argc,
1867 return wpa_ctrl_command(ctrl, "TERMINATE");
1871 static int wpa_cli_cmd_interface_add(struct wpa_ctrl *ctrl, int argc,
1882 return -1;
1897 return -1;
1898 cmd[sizeof(cmd) - 1] = '\0';
1899 return wpa_ctrl_command(ctrl, cmd);
1903 static int wpa_cli_cmd_interface_remove(struct wpa_ctrl *ctrl, int argc,
1906 return wpa_cli_cmd(ctrl, "INTERFACE_REMOVE", 1, argc, argv);
1910 static int wpa_cli_cmd_interface_list(struct wpa_ctrl *ctrl, int argc,
1913 return wpa_ctrl_command(ctrl, "INTERFACE_LIST");
1918 static int wpa_cli_cmd_sta(struct wpa_ctrl *ctrl, int argc, char *argv[])
1920 return wpa_cli_cmd(ctrl, "STA", 1, argc, argv);
1939 static int wpa_ctrl_command_sta(struct wpa_ctrl *ctrl, const char *cmd,
1947 printf("Not connected to hostapd - command dropped.\n");
1948 return -1;
1953 buf[sizeof(buf) - 1] = '\0';
1956 len = sizeof(buf) - 1;
1957 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len,
1959 if (ret == -2) {
1961 return -2;
1964 return -1;
1970 return -1;
1983 static int wpa_cli_cmd_all_sta(struct wpa_ctrl *ctrl, int argc, char *argv[])
1987 if (wpa_ctrl_command_sta(ctrl, "STA-FIRST", addr, sizeof(addr), 1))
1990 os_snprintf(cmd, sizeof(cmd), "STA-NEXT %s", addr);
1991 } while (wpa_ctrl_command_sta(ctrl, cmd, addr, sizeof(addr), 1) == 0);
1993 return -1;
1997 static int wpa_cli_cmd_list_sta(struct wpa_ctrl *ctrl, int argc,
2002 if (wpa_ctrl_command_sta(ctrl, "STA-FIRST", addr, sizeof(addr), 0))
2007 os_snprintf(cmd, sizeof(cmd), "STA-NEXT %s", addr);
2008 } while (wpa_ctrl_command_sta(ctrl, cmd, addr, sizeof(addr), 0) == 0);
2014 static int wpa_cli_cmd_deauthenticate(struct wpa_ctrl *ctrl, int argc,
2017 return wpa_cli_cmd(ctrl, "DEAUTHENTICATE", 1, argc, argv);
2036 static int wpa_cli_cmd_disassociate(struct wpa_ctrl *ctrl, int argc,
2039 return wpa_cli_cmd(ctrl, "DISASSOCIATE", 1, argc, argv);
2058 static int wpa_cli_cmd_chanswitch(struct wpa_ctrl *ctrl, int argc,
2061 return wpa_cli_cmd(ctrl, "CHAN_SWITCH", 2, argc, argv);
2065 static int wpa_cli_cmd_update_beacon(struct wpa_ctrl *ctrl, int argc,
2068 return wpa_ctrl_command(ctrl, "UPDATE_BEACON");
2072 static int wpa_cli_cmd_accept_macacl(struct wpa_ctrl *ctrl, int argc,
2075 return wpa_cli_cmd(ctrl, "ACCEPT_ACL", 1, argc, argv);
2079 static int wpa_cli_cmd_deny_macacl(struct wpa_ctrl *ctrl, int argc,
2082 return wpa_cli_cmd(ctrl, "DENY_ACL", 1, argc, argv);
2088 static int wpa_cli_cmd_suspend(struct wpa_ctrl *ctrl, int argc, char *argv[])
2090 return wpa_ctrl_command(ctrl, "SUSPEND");
2094 static int wpa_cli_cmd_resume(struct wpa_ctrl *ctrl, int argc, char *argv[])
2096 return wpa_ctrl_command(ctrl, "RESUME");
2102 static int wpa_cli_cmd_drop_sa(struct wpa_ctrl *ctrl, int argc, char *argv[])
2104 return wpa_ctrl_command(ctrl, "DROP_SA");
2108 static int wpa_cli_cmd_ml_probe_req(struct wpa_ctrl *ctrl,
2111 return wpa_cli_cmd(ctrl, "ML_PROBE_REQ", 2, argc, argv);
2117 static int wpa_cli_cmd_roam(struct wpa_ctrl *ctrl, int argc, char *argv[])
2119 return wpa_cli_cmd(ctrl, "ROAM", 1, argc, argv);
2125 static int wpa_cli_cmd_mesh_interface_add(struct wpa_ctrl *ctrl, int argc,
2128 return wpa_cli_cmd(ctrl, "MESH_INTERFACE_ADD", 0, argc, argv);
2132 static int wpa_cli_cmd_mesh_group_add(struct wpa_ctrl *ctrl, int argc,
2135 return wpa_cli_cmd(ctrl, "MESH_GROUP_ADD", 1, argc, argv);
2139 static int wpa_cli_cmd_mesh_group_remove(struct wpa_ctrl *ctrl, int argc,
2142 return wpa_cli_cmd(ctrl, "MESH_GROUP_REMOVE", 1, argc, argv);
2146 static int wpa_cli_cmd_mesh_peer_remove(struct wpa_ctrl *ctrl, int argc,
2149 return wpa_cli_cmd(ctrl, "MESH_PEER_REMOVE", 1, argc, argv);
2153 static int wpa_cli_cmd_mesh_peer_add(struct wpa_ctrl *ctrl, int argc,
2156 return wpa_cli_cmd(ctrl, "MESH_PEER_ADD", 1, argc, argv);
2160 static int wpa_cli_cmd_mesh_link_probe(struct wpa_ctrl *ctrl, int argc,
2163 return wpa_cli_cmd(ctrl, "MESH_LINK_PROBE", 1, argc, argv);
2171 static int wpa_cli_cmd_p2p_find(struct wpa_ctrl *ctrl, int argc, char *argv[])
2173 return wpa_cli_cmd(ctrl, "P2P_FIND", 0, argc, argv);
2206 static int wpa_cli_cmd_p2p_stop_find(struct wpa_ctrl *ctrl, int argc,
2209 return wpa_ctrl_command(ctrl, "P2P_STOP_FIND");
2213 static int wpa_cli_cmd_p2p_asp_provision(struct wpa_ctrl *ctrl, int argc,
2216 return wpa_cli_cmd(ctrl, "P2P_ASP_PROVISION", 3, argc, argv);
2220 static int wpa_cli_cmd_p2p_asp_provision_resp(struct wpa_ctrl *ctrl, int argc,
2223 return wpa_cli_cmd(ctrl, "P2P_ASP_PROVISION_RESP", 2, argc, argv);
2227 static int wpa_cli_cmd_p2p_connect(struct wpa_ctrl *ctrl, int argc,
2230 return wpa_cli_cmd(ctrl, "P2P_CONNECT", 2, argc, argv);
2249 static int wpa_cli_cmd_p2p_listen(struct wpa_ctrl *ctrl, int argc,
2252 return wpa_cli_cmd(ctrl, "P2P_LISTEN", 0, argc, argv);
2256 static int wpa_cli_cmd_p2p_group_remove(struct wpa_ctrl *ctrl, int argc,
2259 return wpa_cli_cmd(ctrl, "P2P_GROUP_REMOVE", 1, argc, argv);
2278 static int wpa_cli_cmd_p2p_group_add(struct wpa_ctrl *ctrl, int argc,
2281 return wpa_cli_cmd(ctrl, "P2P_GROUP_ADD", 0, argc, argv);
2285 static int wpa_cli_cmd_p2p_group_member(struct wpa_ctrl *ctrl, int argc,
2288 return wpa_cli_cmd(ctrl, "P2P_GROUP_MEMBER", 1, argc, argv);
2292 static int wpa_cli_cmd_p2p_prov_disc(struct wpa_ctrl *ctrl, int argc,
2299 return -1;
2302 return wpa_cli_cmd(ctrl, "P2P_PROV_DISC", 2, argc, argv);
2306 static int wpa_cli_cmd_p2p_get_passphrase(struct wpa_ctrl *ctrl, int argc,
2309 return wpa_ctrl_command(ctrl, "P2P_GET_PASSPHRASE");
2313 static int wpa_cli_cmd_p2p_serv_disc_req(struct wpa_ctrl *ctrl, int argc,
2321 return -1;
2325 return -1;
2326 return wpa_ctrl_command(ctrl, cmd);
2330 static int wpa_cli_cmd_p2p_serv_disc_cancel_req(struct wpa_ctrl *ctrl,
2333 return wpa_cli_cmd(ctrl, "P2P_SERV_DISC_CANCEL_REQ", 1, argc, argv);
2337 static int wpa_cli_cmd_p2p_serv_disc_resp(struct wpa_ctrl *ctrl, int argc,
2346 return -1;
2352 return -1;
2353 cmd[sizeof(cmd) - 1] = '\0';
2354 return wpa_ctrl_command(ctrl, cmd);
2358 static int wpa_cli_cmd_p2p_service_update(struct wpa_ctrl *ctrl, int argc,
2361 return wpa_ctrl_command(ctrl, "P2P_SERVICE_UPDATE");
2365 static int wpa_cli_cmd_p2p_serv_disc_external(struct wpa_ctrl *ctrl,
2368 return wpa_cli_cmd(ctrl, "P2P_SERV_DISC_EXTERNAL", 1, argc, argv);
2372 static int wpa_cli_cmd_p2p_service_flush(struct wpa_ctrl *ctrl, int argc,
2375 return wpa_ctrl_command(ctrl, "P2P_SERVICE_FLUSH");
2379 static int wpa_cli_cmd_p2p_service_add(struct wpa_ctrl *ctrl, int argc,
2383 printf("Invalid P2P_SERVICE_ADD command: needs 3-6 arguments\n");
2384 return -1;
2387 return wpa_cli_cmd(ctrl, "P2P_SERVICE_ADD", 3, argc, argv);
2391 static int wpa_cli_cmd_p2p_service_rep(struct wpa_ctrl *ctrl, int argc,
2395 printf("Invalid P2P_SERVICE_REP command: needs 5-6 "
2397 return -1;
2400 return wpa_cli_cmd(ctrl, "P2P_SERVICE_REP", 5, argc, argv);
2404 static int wpa_cli_cmd_p2p_service_del(struct wpa_ctrl *ctrl, int argc,
2413 return -1;
2425 return -1;
2426 cmd[sizeof(cmd) - 1] = '\0';
2427 return wpa_ctrl_command(ctrl, cmd);
2431 static int wpa_cli_cmd_p2p_reject(struct wpa_ctrl *ctrl,
2434 return wpa_cli_cmd(ctrl, "P2P_REJECT", 1, argc, argv);
2438 static int wpa_cli_cmd_p2p_invite(struct wpa_ctrl *ctrl,
2441 return wpa_cli_cmd(ctrl, "P2P_INVITE", 1, argc, argv);
2445 static int wpa_cli_cmd_p2p_peer(struct wpa_ctrl *ctrl, int argc, char *argv[])
2447 return wpa_cli_cmd(ctrl, "P2P_PEER", 1, argc, argv);
2466 static int wpa_ctrl_command_p2p_peer(struct wpa_ctrl *ctrl, const char *cmd,
2475 return -1;
2476 len = sizeof(buf) - 1;
2477 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len,
2479 if (ret == -2) {
2481 return -2;
2484 return -1;
2489 return -1;
2502 static int wpa_cli_cmd_p2p_peers(struct wpa_ctrl *ctrl, int argc, char *argv[])
2509 if (wpa_ctrl_command_p2p_peer(ctrl, "P2P_PEER FIRST",
2511 return -1;
2513 os_snprintf(cmd, sizeof(cmd), "P2P_PEER NEXT-%s", addr);
2514 } while (wpa_ctrl_command_p2p_peer(ctrl, cmd, addr, sizeof(addr),
2521 static int wpa_cli_cmd_p2p_set(struct wpa_ctrl *ctrl, int argc, char *argv[])
2523 return wpa_cli_cmd(ctrl, "P2P_SET", 2, argc, argv);
2571 static int wpa_cli_cmd_p2p_flush(struct wpa_ctrl *ctrl, int argc, char *argv[])
2573 return wpa_ctrl_command(ctrl, "P2P_FLUSH");
2577 static int wpa_cli_cmd_p2p_cancel(struct wpa_ctrl *ctrl, int argc,
2580 return wpa_ctrl_command(ctrl, "P2P_CANCEL");
2584 static int wpa_cli_cmd_p2p_unauthorize(struct wpa_ctrl *ctrl, int argc,
2587 return wpa_cli_cmd(ctrl, "P2P_UNAUTHORIZE", 1, argc, argv);
2591 static int wpa_cli_cmd_p2p_presence_req(struct wpa_ctrl *ctrl, int argc,
2599 return -1;
2602 return wpa_cli_cmd(ctrl, "P2P_PRESENCE_REQ", 0, argc, argv);
2606 static int wpa_cli_cmd_p2p_ext_listen(struct wpa_ctrl *ctrl, int argc,
2615 return -1;
2618 return wpa_cli_cmd(ctrl, "P2P_EXT_LISTEN", 0, argc, argv);
2622 static int wpa_cli_cmd_p2p_remove_client(struct wpa_ctrl *ctrl, int argc,
2625 return wpa_cli_cmd(ctrl, "P2P_REMOVE_CLIENT", 1, argc, argv);
2631 static int wpa_cli_cmd_vendor_elem_add(struct wpa_ctrl *ctrl, int argc,
2634 return wpa_cli_cmd(ctrl, "VENDOR_ELEM_ADD", 2, argc, argv);
2638 static int wpa_cli_cmd_vendor_elem_get(struct wpa_ctrl *ctrl, int argc,
2641 return wpa_cli_cmd(ctrl, "VENDOR_ELEM_GET", 1, argc, argv);
2645 static int wpa_cli_cmd_vendor_elem_remove(struct wpa_ctrl *ctrl, int argc,
2648 return wpa_cli_cmd(ctrl, "VENDOR_ELEM_REMOVE", 2, argc, argv);
2654 static int wpa_cli_cmd_wfd_subelem_set(struct wpa_ctrl *ctrl, int argc,
2663 return -1;
2669 return -1;
2670 cmd[sizeof(cmd) - 1] = '\0';
2671 return wpa_ctrl_command(ctrl, cmd);
2675 static int wpa_cli_cmd_wfd_subelem_get(struct wpa_ctrl *ctrl, int argc,
2684 return -1;
2690 return -1;
2691 cmd[sizeof(cmd) - 1] = '\0';
2692 return wpa_ctrl_command(ctrl, cmd);
2698 static int wpa_cli_cmd_fetch_anqp(struct wpa_ctrl *ctrl, int argc,
2701 return wpa_ctrl_command(ctrl, "FETCH_ANQP");
2705 static int wpa_cli_cmd_stop_fetch_anqp(struct wpa_ctrl *ctrl, int argc,
2708 return wpa_ctrl_command(ctrl, "STOP_FETCH_ANQP");
2712 static int wpa_cli_cmd_interworking_select(struct wpa_ctrl *ctrl, int argc,
2715 return wpa_cli_cmd(ctrl, "INTERWORKING_SELECT", 0, argc, argv);
2719 static int wpa_cli_cmd_interworking_connect(struct wpa_ctrl *ctrl, int argc,
2722 return wpa_cli_cmd(ctrl, "INTERWORKING_CONNECT", 1, argc, argv);
2726 static int wpa_cli_cmd_interworking_add_network(struct wpa_ctrl *ctrl, int argc,
2729 return wpa_cli_cmd(ctrl, "INTERWORKING_ADD_NETWORK", 1, argc, argv);
2733 static int wpa_cli_cmd_anqp_get(struct wpa_ctrl *ctrl, int argc, char *argv[])
2735 return wpa_cli_cmd(ctrl, "ANQP_GET", 2, argc, argv);
2739 static int wpa_cli_cmd_gas_request(struct wpa_ctrl *ctrl, int argc,
2742 return wpa_cli_cmd(ctrl, "GAS_REQUEST", 2, argc, argv);
2746 static int wpa_cli_cmd_gas_response_get(struct wpa_ctrl *ctrl, int argc,
2749 return wpa_cli_cmd(ctrl, "GAS_RESPONSE_GET", 2, argc, argv);
2756 static int wpa_cli_cmd_hs20_anqp_get(struct wpa_ctrl *ctrl, int argc,
2759 return wpa_cli_cmd(ctrl, "HS20_ANQP_GET", 2, argc, argv);
2763 static int wpa_cli_cmd_get_nai_home_realm_list(struct wpa_ctrl *ctrl, int argc,
2771 return -1;
2776 return -1;
2778 return wpa_ctrl_command(ctrl, cmd);
2782 static int wpa_cli_cmd_hs20_icon_request(struct wpa_ctrl *ctrl, int argc,
2790 return -1;
2794 return -1;
2796 return wpa_ctrl_command(ctrl, cmd);
2800 static int wpa_cli_cmd_fetch_osu(struct wpa_ctrl *ctrl, int argc, char *argv[])
2802 return wpa_ctrl_command(ctrl, "FETCH_OSU");
2806 static int wpa_cli_cmd_cancel_fetch_osu(struct wpa_ctrl *ctrl, int argc,
2809 return wpa_ctrl_command(ctrl, "CANCEL_FETCH_OSU");
2815 static int wpa_cli_cmd_sta_autoconnect(struct wpa_ctrl *ctrl, int argc,
2818 return wpa_cli_cmd(ctrl, "STA_AUTOCONNECT", 1, argc, argv);
2822 static int wpa_cli_cmd_tdls_discover(struct wpa_ctrl *ctrl, int argc,
2825 return wpa_cli_cmd(ctrl, "TDLS_DISCOVER", 1, argc, argv);
2829 static int wpa_cli_cmd_tdls_setup(struct wpa_ctrl *ctrl, int argc,
2832 return wpa_cli_cmd(ctrl, "TDLS_SETUP", 1, argc, argv);
2836 static int wpa_cli_cmd_tdls_teardown(struct wpa_ctrl *ctrl, int argc,
2839 return wpa_cli_cmd(ctrl, "TDLS_TEARDOWN", 1, argc, argv);
2843 static int wpa_cli_cmd_tdls_link_status(struct wpa_ctrl *ctrl, int argc,
2846 return wpa_cli_cmd(ctrl, "TDLS_LINK_STATUS", 1, argc, argv);
2852 static int wpa_cli_cmd_wmm_ac_addts(struct wpa_ctrl *ctrl, int argc,
2855 return wpa_cli_cmd(ctrl, "WMM_AC_ADDTS", 3, argc, argv);
2859 static int wpa_cli_cmd_wmm_ac_delts(struct wpa_ctrl *ctrl, int argc,
2862 return wpa_cli_cmd(ctrl, "WMM_AC_DELTS", 1, argc, argv);
2866 static int wpa_cli_cmd_wmm_ac_status(struct wpa_ctrl *ctrl, int argc,
2869 return wpa_ctrl_command(ctrl, "WMM_AC_STATUS");
2875 static int wpa_cli_cmd_tdls_chan_switch(struct wpa_ctrl *ctrl, int argc,
2878 return wpa_cli_cmd(ctrl, "TDLS_CHAN_SWITCH", 2, argc, argv);
2882 static int wpa_cli_cmd_tdls_cancel_chan_switch(struct wpa_ctrl *ctrl, int argc,
2885 return wpa_cli_cmd(ctrl, "TDLS_CANCEL_CHAN_SWITCH", 1, argc, argv);
2889 static int wpa_cli_cmd_signal_poll(struct wpa_ctrl *ctrl, int argc,
2892 return wpa_ctrl_command(ctrl, "SIGNAL_POLL");
2896 static int wpa_cli_cmd_signal_monitor(struct wpa_ctrl *ctrl, int argc,
2899 return wpa_cli_cmd(ctrl, "SIGNAL_MONITOR", 0, argc, argv);
2903 static int wpa_cli_cmd_pktcnt_poll(struct wpa_ctrl *ctrl, int argc,
2906 return wpa_ctrl_command(ctrl, "PKTCNT_POLL");
2910 static int wpa_cli_cmd_reauthenticate(struct wpa_ctrl *ctrl, int argc,
2913 return wpa_ctrl_command(ctrl, "REAUTHENTICATE");
2919 static int wpa_cli_cmd_autoscan(struct wpa_ctrl *ctrl, int argc, char *argv[])
2922 return wpa_ctrl_command(ctrl, "AUTOSCAN ");
2924 return wpa_cli_cmd(ctrl, "AUTOSCAN", 0, argc, argv);
2932 static int wpa_cli_cmd_wnm_sleep(struct wpa_ctrl *ctrl, int argc, char *argv[])
2934 return wpa_cli_cmd(ctrl, "WNM_SLEEP", 0, argc, argv);
2938 static int wpa_cli_cmd_wnm_bss_query(struct wpa_ctrl *ctrl, int argc, char *argv[])
2940 return wpa_cli_cmd(ctrl, "WNM_BSS_QUERY", 1, argc, argv);
2948 static int wpa_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc,
2951 return wpa_cli_cmd(ctrl, "DISASSOC_IMMINENT", 2, argc, argv);
2955 static int wpa_cli_cmd_ess_disassoc(struct wpa_ctrl *ctrl, int argc,
2958 return wpa_cli_cmd(ctrl, "ESS_DISASSOC", 3, argc, argv);
2962 static int wpa_cli_cmd_bss_tm_req(struct wpa_ctrl *ctrl, int argc,
2965 return wpa_cli_cmd(ctrl, "BSS_TM_REQ", 1, argc, argv);
2971 static int wpa_cli_cmd_raw(struct wpa_ctrl *ctrl, int argc, char *argv[])
2974 return -1;
2975 return wpa_cli_cmd(ctrl, argv[0], 0, argc - 1, &argv[1]);
2980 static int wpa_cli_cmd_driver(struct wpa_ctrl *ctrl, int argc, char *argv[])
2982 return wpa_cli_cmd(ctrl, "DRIVER", 1, argc, argv);
2987 static int wpa_cli_cmd_vendor(struct wpa_ctrl *ctrl, int argc, char *argv[])
2989 return wpa_cli_cmd(ctrl, "VENDOR", 1, argc, argv);
2993 static int wpa_cli_cmd_flush(struct wpa_ctrl *ctrl, int argc, char *argv[])
2995 return wpa_ctrl_command(ctrl, "FLUSH");
2999 static int wpa_cli_cmd_radio_work(struct wpa_ctrl *ctrl, int argc, char *argv[])
3001 return wpa_cli_cmd(ctrl, "RADIO_WORK", 1, argc, argv);
3005 static int wpa_cli_cmd_neighbor_rep_request(struct wpa_ctrl *ctrl, int argc,
3008 return wpa_cli_cmd(ctrl, "NEIGHBOR_REP_REQUEST", 0, argc, argv);
3012 static int wpa_cli_cmd_twt_setup(struct wpa_ctrl *ctrl, int argc,
3015 return wpa_cli_cmd(ctrl, "TWT_SETUP", 0, argc, argv);
3019 static int wpa_cli_cmd_twt_teardown(struct wpa_ctrl *ctrl, int argc,
3022 return wpa_cli_cmd(ctrl, "TWT_TEARDOWN", 0, argc, argv);
3026 static int wpa_cli_cmd_erp_flush(struct wpa_ctrl *ctrl, int argc, char *argv[])
3028 return wpa_ctrl_command(ctrl, "ERP_FLUSH");
3032 static int wpa_cli_cmd_mac_rand_scan(struct wpa_ctrl *ctrl, int argc,
3035 return wpa_cli_cmd(ctrl, "MAC_RAND_SCAN", 1, argc, argv);
3039 static int wpa_cli_cmd_get_pref_freq_list(struct wpa_ctrl *ctrl, int argc,
3042 return wpa_cli_cmd(ctrl, "GET_PREF_FREQ_LIST", 1, argc, argv);
3046 static int wpa_cli_cmd_p2p_lo_start(struct wpa_ctrl *ctrl, int argc,
3049 return wpa_cli_cmd(ctrl, "P2P_LO_START", 4, argc, argv);
3053 static int wpa_cli_cmd_p2p_lo_stop(struct wpa_ctrl *ctrl, int argc,
3056 return wpa_cli_cmd(ctrl, "P2P_LO_STOP", 0, argc, argv);
3062 static int wpa_cli_cmd_dpp_qr_code(struct wpa_ctrl *ctrl, int argc,
3065 return wpa_cli_cmd(ctrl, "DPP_QR_CODE", 1, argc, argv);
3069 static int wpa_cli_cmd_dpp_bootstrap_gen(struct wpa_ctrl *ctrl, int argc,
3072 return wpa_cli_cmd(ctrl, "DPP_BOOTSTRAP_GEN", 1, argc, argv);
3076 static int wpa_cli_cmd_dpp_bootstrap_remove(struct wpa_ctrl *ctrl, int argc,
3079 return wpa_cli_cmd(ctrl, "DPP_BOOTSTRAP_REMOVE", 1, argc, argv);
3083 static int wpa_cli_cmd_dpp_bootstrap_get_uri(struct wpa_ctrl *ctrl, int argc,
3086 return wpa_cli_cmd(ctrl, "DPP_BOOTSTRAP_GET_URI", 1, argc, argv);
3090 static int wpa_cli_cmd_dpp_bootstrap_info(struct wpa_ctrl *ctrl, int argc,
3093 return wpa_cli_cmd(ctrl, "DPP_BOOTSTRAP_INFO", 1, argc, argv);
3097 static int wpa_cli_cmd_dpp_bootstrap_set(struct wpa_ctrl *ctrl, int argc,
3100 return wpa_cli_cmd(ctrl, "DPP_BOOTSTRAP_SET", 1, argc, argv);
3104 static int wpa_cli_cmd_dpp_auth_init(struct wpa_ctrl *ctrl, int argc,
3107 return wpa_cli_cmd(ctrl, "DPP_AUTH_INIT", 1, argc, argv);
3111 static int wpa_cli_cmd_dpp_listen(struct wpa_ctrl *ctrl, int argc,
3114 return wpa_cli_cmd(ctrl, "DPP_LISTEN", 1, argc, argv);
3118 static int wpa_cli_cmd_dpp_stop_listen(struct wpa_ctrl *ctrl, int argc,
3121 return wpa_ctrl_command(ctrl, "DPP_STOP_LISTEN");
3125 static int wpa_cli_cmd_dpp_configurator_add(struct wpa_ctrl *ctrl, int argc,
3128 return wpa_cli_cmd(ctrl, "DPP_CONFIGURATOR_ADD", 0, argc, argv);
3132 static int wpa_cli_cmd_dpp_configurator_remove(struct wpa_ctrl *ctrl, int argc,
3135 return wpa_cli_cmd(ctrl, "DPP_CONFIGURATOR_REMOVE", 1, argc, argv);
3139 static int wpa_cli_cmd_dpp_configurator_get_key(struct wpa_ctrl *ctrl, int argc,
3142 return wpa_cli_cmd(ctrl, "DPP_CONFIGURATOR_GET_KEY", 1, argc, argv);
3146 static int wpa_cli_cmd_dpp_configurator_sign(struct wpa_ctrl *ctrl, int argc,
3149 return wpa_cli_cmd(ctrl, "DPP_CONFIGURATOR_SIGN", 1, argc, argv);
3153 static int wpa_cli_cmd_dpp_pkex_add(struct wpa_ctrl *ctrl, int argc,
3156 return wpa_cli_cmd(ctrl, "DPP_PKEX_ADD", 1, argc, argv);
3160 static int wpa_cli_cmd_dpp_pkex_remove(struct wpa_ctrl *ctrl, int argc,
3163 return wpa_cli_cmd(ctrl, "DPP_PKEX_REMOVE", 1, argc, argv);
3169 static int wpa_cli_cmd_dpp_controller_start(struct wpa_ctrl *ctrl, int argc,
3172 return wpa_cli_cmd(ctrl, "DPP_CONTROLLER_START", 0, argc, argv);
3176 static int wpa_cli_cmd_dpp_controller_stop(struct wpa_ctrl *ctrl, int argc,
3179 return wpa_ctrl_command(ctrl, "DPP_CONTROLLER_STOP");
3183 static int wpa_cli_cmd_dpp_chirp(struct wpa_ctrl *ctrl, int argc,
3186 return wpa_cli_cmd(ctrl, "DPP_CHIRP", 1, argc, argv);
3190 static int wpa_cli_cmd_dpp_stop_chirp(struct wpa_ctrl *ctrl, int argc,
3193 return wpa_ctrl_command(ctrl, "DPP_STOP_CHIRP");
3200 static int wpa_cli_cmd_dpp_push_button(struct wpa_ctrl *ctrl, int argc,
3203 return wpa_cli_cmd(ctrl, "DPP_PUSH_BUTTON", 0, argc, argv);
3209 static int wpa_ctrl_command_bss(struct wpa_ctrl *ctrl, const char *cmd)
3214 int ret, id = -1;
3217 return -1;
3218 len = sizeof(buf) - 1;
3219 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len,
3221 if (ret == -2) {
3223 return -2;
3226 return -1;
3231 return -1;
3252 if (id != -1)
3260 static int wpa_cli_cmd_all_bss(struct wpa_ctrl *ctrl, int argc, char *argv[])
3263 int id = -1;
3275 os_snprintf(cmd, sizeof(cmd), "BSS NEXT-%d MASK=0x%x",
3277 id = wpa_ctrl_command_bss(ctrl, cmd);
3286 static int wpa_cli_cmd_pasn_start(struct wpa_ctrl *ctrl, int argc, char *argv[])
3288 return wpa_cli_cmd(ctrl, "PASN_START", 4, argc, argv);
3292 static int wpa_cli_cmd_pasn_stop(struct wpa_ctrl *ctrl, int argc, char *argv[])
3294 return wpa_cli_cmd(ctrl, "PASN_STOP", 0, argc, argv);
3298 static int wpa_cli_cmd_ptksa_cache_list(struct wpa_ctrl *ctrl, int argc,
3301 return wpa_cli_cmd(ctrl, "PTKSA_CACHE_LIST", 0, argc, argv);
3305 static int wpa_cli_cmd_pasn_deauth(struct wpa_ctrl *ctrl, int argc,
3308 return wpa_cli_cmd(ctrl, "PASN_DEAUTH", 1, argc, argv);
3314 static int wpa_cli_cmd_mscs(struct wpa_ctrl *ctrl, int argc, char *argv[])
3316 return wpa_cli_cmd(ctrl, "MSCS", 1, argc, argv);
3320 static int wpa_cli_cmd_scs(struct wpa_ctrl *ctrl, int argc, char *argv[])
3322 return wpa_cli_cmd(ctrl, "SCS", 2, argc, argv);
3326 static int wpa_cli_cmd_dscp_resp(struct wpa_ctrl *ctrl, int argc, char *argv[])
3328 return wpa_cli_cmd(ctrl, "DSCP_RESP", 1, argc, argv);
3332 static int wpa_cli_cmd_dscp_query(struct wpa_ctrl *ctrl, int argc, char *argv[])
3334 return wpa_cli_cmd(ctrl, "DSCP_QUERY", 1, argc, argv);
3345 int (*handler)(struct wpa_ctrl *ctrl, int argc, char *argv[]);
3363 "= re-open log-file (allow rolling logs)" },
3447 { "pin", wpa_cli_cmd_pin, wpa_cli_complete_network_id,
3449 "<network id> <pin> = configure pin for an SSID" },
3452 "<network id> <password> = configure one-time-password for an SSID"
3463 "<network id> <pin> = report SIM operation result" },
3490 "<network id> = enable a network" },
3557 "= force wpa_supplicant to re-read its configuration file" },
3591 "<addr> = request over-the-DS FT with <addr>" },
3594 "[BSSID] = start Wi-Fi Protected Setup: Push Button Configuration" },
3597 "<BSSID> [PIN] = start WPS PIN method (returns PIN, if not "
3601 "<PIN> = verify PIN checksum" },
3607 "[BSSID] = start Wi-Fi Protected Setup: NFC" },
3630 "<BSSID> <AP PIN> = start WPS Registrar to configure an AP" },
3633 "[params..] = enable/disable AP PIN" },
3636 "[IP address] = start Wi-Fi Protected Setup External Registrar" },
3639 "= stop Wi-Fi Protected Setup External Registrar" },
3642 "<UUID> <PIN> = add an Enrollee PIN to External Registrar" },
3648 "<UUID> <PIN> = learn AP configuration" },
3654 "<UUID> <PIN> <SSID> <auth> <encr> <key> = configure AP" },
3700 "= send Multi-Link Probe request <bssid=addr> <mld_id=id> [link_id=id] (test command)" },
3728 "[timeout] [type=*] = find P2P Devices for up-to timeout seconds" },
3739 "<addr> <\"pbc\"|PIN> [ht40] = connect to a P2P Device" },
3741 "[timeout] = listen for P2P Devices for up-to timeout seconds" },
3834 "<subelem> [contents] = set Wi-Fi Display subelement" },
3837 "<subelem> = get Wi-Fi Display subelement" },
3883 "<0/1> = disable/enable automatic reconnection" },
3901 "= add WMM-AC traffic stream" },
3904 "<tsid> = delete WMM-AC traffic stream" },
3907 "= show status for Wireless Multi-Media Admission-Control" },
3912 "[center_freq2=] [bandwidth=] [ht|vht] = enable channel switching "
3935 "<enter/exit> [interval=#] = enter/exit WNM-Sleep mode" },
3968 "[dialog=<token>] [exponent=<exponent>] [mantissa=<mantissa>] [min_twt=<Min TWT>] [setup_cmd=<setup-cmd>] [twt=<u64>] [requestor=0|1] [trigger=0|1] [implicit=0|1] [flow_type=0|1] [flow_id=<3-bit-id>] [protection=0|1] [twt_channel=<twt chanel id>] [control=<control-u8>] = Send TWT Setup frame"
3978 "<scan|sched|pno|all> enable=<0/1> [addr=mac-address "
3979 "mask=mac-address-mask] = scan MAC randomization"
4074 "[scs_id=<decimal number>] <add|remove|change> [scs_up=<0-7>] [classifier_type=<4|10>] [classifier params based on classifier type] [tclas_processing=<0|1>] [scs_id=<decimal number>] ... = Send SCS request" },
4099 printf("%s%s ", pad, cmd->cmd);
4100 for (n = 0; (c = cmd->usage[n]); n++) {
4128 len = delim - cmd;
4161 size_t len = 8 + os_strlen(e->txt);
4165 os_snprintf(res[i], len, "ifname=%s", e->txt);
4170 res[i] = os_strdup(e->txt);
4209 if (end && pos > end - str) {
4210 pos -= end - str + 1;
4223 cmd[end - str] = '\0';
4230 static int wpa_request(struct wpa_ctrl *ctrl, int argc, char *argv[])
4239 argc--;
4244 return -1;
4248 while (cmd->cmd) {
4249 if (os_strncasecmp(cmd->cmd, argv[0], os_strlen(argv[0])) == 0)
4252 if (os_strcasecmp(cmd->cmd, argv[0]) == 0) {
4265 while (cmd->cmd) {
4266 if (os_strncasecmp(cmd->cmd, argv[0],
4268 printf(" %s", cmd->cmd);
4278 ret = match->handler(ctrl, argc - 1, &argv[1]);
4299 return -1;
4322 if (end && (unsigned int) (end - pos) < sizeof(ifname_buf)) {
4324 os_memcpy(ifname_buf, pos, end - pos);
4325 ifname_buf[end - pos] = '\0';
4341 int new_id = -1;
4452 printf("wpa_supplicant is terminating - stop monitoring\n");
4478 return -1;
4511 printf("\rConnection to wpa_supplicant re-established\n");
4601 printf("\rConnection to wpa_supplicant lost - trying to "
4613 static void wpa_cli_recv_pending(struct wpa_ctrl *ctrl, int action_monitor)
4619 while (wpa_ctrl_pending(ctrl) > 0) {
4621 size_t len = sizeof(buf) - 1;
4622 if (wpa_ctrl_recv(ctrl, buf, &len) == 0) {
4643 if (wpa_ctrl_pending(ctrl) < 0) {
4644 printf("Connection to wpa_supplicant lost - trying to "
4665 printf("Connection to wpa_supplicant lost - trying to "
4735 static void update_bssid_list(struct wpa_ctrl *ctrl)
4743 if (ctrl == NULL)
4745 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len, NULL);
4766 static void update_ifnames(struct wpa_ctrl *ctrl)
4777 if (ctrl == NULL)
4779 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len, NULL);
4798 static void update_creds(struct wpa_ctrl *ctrl)
4809 if (ctrl == NULL)
4811 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len, NULL);
4830 static void update_networks(struct wpa_ctrl *ctrl)
4841 if (ctrl == NULL)
4843 ret = wpa_ctrl_request(ctrl, cmd, os_strlen(cmd), buf, &len, NULL);
4862 static void update_stations(struct wpa_ctrl *ctrl)
4867 if (!ctrl || !interactive)
4872 if (wpa_ctrl_command_sta(ctrl, "STA-FIRST", addr, sizeof(addr), 0))
4877 os_snprintf(cmd, sizeof(cmd), "STA-NEXT %s", addr);
4878 } while (wpa_ctrl_command_sta(ctrl, cmd, addr, sizeof(addr), 0) == 0);
4894 "%s - re-trying\n",
4939 struct wpa_ctrl *ctrl = eloop_ctx;
4944 len = sizeof(buf) - 1;
4945 if (wpa_ctrl_request(ctrl, "PING", 4, buf, &len,
4948 printf("wpa_supplicant did not reply to PING command - exiting\n");
4953 ctrl, NULL);
4959 struct wpa_ctrl *ctrl = eloop_ctx;
4961 wpa_cli_recv_pending(ctrl, 1);
4965 static void wpa_cli_action(struct wpa_ctrl *ctrl)
4973 fd = wpa_ctrl_get_fd(ctrl);
4975 ctrl, NULL);
4976 eloop_register_read_sock(fd, wpa_cli_action_receive, ctrl, NULL);
4978 eloop_cancel_timeout(wpa_cli_action_ping, ctrl, NULL);
5026 if (dent->d_type != DT_SOCK && dent->d_type != DT_UNKNOWN)
5031 if (os_strcmp(dent->d_name, ".") == 0 ||
5032 os_strcmp(dent->d_name, "..") == 0 ||
5033 os_strncmp(dent->d_name, "p2p-dev-", 8) == 0)
5035 printf("Selected interface '%s'\n", dent->d_name);
5036 ifname = os_strdup(dent->d_name);
5045 struct wpa_ctrl *ctrl;
5048 ctrl = wpa_ctrl_open(NULL);
5049 if (ctrl == NULL)
5052 len = sizeof(buf) - 1;
5053 ret = wpa_ctrl_request(ctrl, "INTERFACES", 10, buf, &len, NULL);
5061 wpa_ctrl_close(ctrl);
5076 return -1;
5119 return -1;
5129 return -1;
5132 return -1;
5159 fprintf(stderr, "Failed to connect to non-global "
5163 return -1;
5172 return -1;
5177 return -1;
5182 ret = wpa_request(ctrl_conn, argc - optind,
5196 printf("CONFIG_CTRL_IFACE not defined - wpa_cli disabled\n");
5197 return -1;