static int hostapd_cli_cmd_ess_disassoc(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[300]; int res; if (argc < 3) { printf("Invalid 'ess_disassoc' command - three arguments (STA " "addr, disassoc timer, and URL) are needed\n"); return -1; } res = os_snprintf(buf, sizeof(buf), "ESS_DISASSOC %s %s %s", argv[0], argv[1], argv[2]); if (os_snprintf_error(sizeof(buf), res)) return -1; return wpa_ctrl_command(ctrl, buf); }
static int hostapd_cli_cmd_hs20_wnm_notif(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[300]; int res; if (argc < 2) { printf("Invalid 'hs20_wnm_notif' command - two arguments (STA " "addr and URL) are needed\n"); return -1; } res = os_snprintf(buf, sizeof(buf), "HS20_WNM_NOTIF %s %s", argv[0], argv[1]); if (os_snprintf_error(sizeof(buf), res)) return -1; return wpa_ctrl_command(ctrl, buf); }
static int wpa_cli_cmd_ft_ds(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 1) { printf("Invalid FT_DS command: needs one argument " "(Target AP MAC address)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "FT_DS %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long FT_DS command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_disassoc_imminent(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[300]; int res; if (argc < 2) { printf("Invalid 'disassoc_imminent' command - two arguments " "(STA addr and Disassociation Timer) are needed\n"); return -1; } res = os_snprintf(buf, sizeof(buf), "DISASSOC_IMMINENT %s %s", argv[0], argv[1]); if (os_snprintf_error(sizeof(buf), res)) return -1; return wpa_ctrl_command(ctrl, buf); }
static int wpa_cli_cmd_bss(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[64]; int res; if (argc != 1) { printf("Invalid BSS command: need one argument (index or " "BSSID)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "BSS %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd)) return -1; cmd[sizeof(cmd) - 1] = '\0'; return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_driver(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[32]; if (argc < 1) { printf("Invalid DRIVER command: needs one argument (cmd)\n"); return -1; } if (argc > 1) os_snprintf(cmd, sizeof(cmd), "DRIVER %s %s", argv[0], argv[1]); else os_snprintf(cmd, sizeof(cmd), "DRIVER %s", argv[0]); cmd[sizeof(cmd) - 1] = '\0'; return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_get(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 1) { printf("Invalid GET command: needs one argument (variable " "name)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "GET %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long GET command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_ess_disassoc(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[300]; int res; if (argc < 2) { printf("Invalid 'ess_disassoc' command - two arguments (STA " "addr and URL) are needed\n"); return -1; } res = os_snprintf(buf, sizeof(buf), "ESS_DISASSOC %s %s", argv[0], argv[1]); if (res < 0 || res >= (int) sizeof(buf)) return -1; return wpa_ctrl_command(ctrl, buf); }
static int hostapd_cli_cmd_set(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 2) { printf("Invalid SET command: needs two arguments (variable " "name and value)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "SET %s %s", argv[0], argv[1]); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long SET command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_req_lci(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 1) { printf("Invalid req_lci command - requires destination address\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "REQ_LCI %s", argv[0]); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long REQ_LCI command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_set_qos_map_set(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[200]; int res; if (argc != 1) { printf("Invalid 'set_qos_map_set' command - " "one argument (comma delimited QoS map set) " "is needed\n"); return -1; } res = os_snprintf(buf, sizeof(buf), "SET_QOS_MAP_SET %s", argv[0]); if (os_snprintf_error(sizeof(buf), res)) return -1; return wpa_ctrl_command(ctrl, buf); }
static int hostapd_cli_cmd_wps_ap_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[64]; if (argc < 1) { printf("Invalid 'wps_ap_pin' command - at least one argument " "is required.\n"); return -1; } if (argc > 2) snprintf(buf, sizeof(buf), "WPS_AP_PIN %s %s %s", argv[0], argv[1], argv[2]); else if (argc > 1) snprintf(buf, sizeof(buf), "WPS_AP_PIN %s %s", argv[0], argv[1]); else snprintf(buf, sizeof(buf), "WPS_AP_PIN %s", argv[0]); return wpa_ctrl_command(ctrl, buf); }
static int wpa_cli_cmd_remove_network(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[32]; int res; if (argc < 1) { printf("Invalid REMOVE_NETWORK command: needs one argument " "(network id)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "REMOVE_NETWORK %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd)) return -1; cmd[sizeof(cmd) - 1] = '\0'; return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_wps_reg(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 2) { printf("Invalid WPS_REG command: need two arguments:\n" "- BSSID: use 'any' to select any\n" "- AP PIN\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "WPS_REG %s %s", argv[0], argv[1]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long WPS_REG command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_bssid(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256], *pos, *end; int i; if (argc < 2) { printf("Invalid BSSID command: needs two arguments (network " "id and BSSID)\n"); return 0; } end = cmd + sizeof(cmd); pos = cmd; pos += snprintf(pos, end - pos, "BSSID"); for (i = 0; i < argc; i++) pos += snprintf(pos, end - pos, " %s", argv[i]); return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_wps_nfc_token(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[64]; int res; if (argc != 1) { printf("Invalid 'wps_nfc_token' command - one argument is " "required.\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "WPS_NFC_TOKEN %s", argv[0]); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long WPS_NFC_TOKEN command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_remove_neighbor(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[400]; int res; if (argc != 2) { printf("Invalid remove_neighbor command: needs 2 arguments\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "REMOVE_NEIGHBOR %s %s", argv[0], argv[1]); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long REMOVE_NEIGHBOR command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[256]; if (argc < 2) { printf("Invalid 'wps_pin' command - at least two arguments, " "UUID and PIN, are required.\n"); return -1; } if (argc > 3) snprintf(buf, sizeof(buf), "WPS_PIN %s %s %s %s", argv[0], argv[1], argv[2], argv[3]); else if (argc > 2) snprintf(buf, sizeof(buf), "WPS_PIN %s %s %s", argv[0], argv[1], argv[2]); else snprintf(buf, sizeof(buf), "WPS_PIN %s %s", argv[0], argv[1]); return wpa_ctrl_command(ctrl, buf); }
static int hostapd_cli_cmd_vendor(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc < 2 || argc > 3) { printf("Invalid vendor command\n" "usage: <vendor id> <command id> [<hex formatted command argument>]\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "VENDOR %s %s %s", argv[0], argv[1], argc == 3 ? argv[2] : ""); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long VENDOR command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_stkstart(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 1) { printf("Invalid STKSTART command: needs one argument " "(Peer STA MAC address)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "STKSTART %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long STKSTART command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_preauthenticate(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256]; int res; if (argc != 1) { printf("Invalid PREAUTH command: needs one argument " "(BSSID)\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "PREAUTH %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long PREAUTH command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_wps_config(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[256]; char ssid_hex[2 * SSID_MAX_LEN + 1]; char key_hex[2 * 64 + 1]; int i; if (argc < 1) { printf("Invalid 'wps_config' command - at least two arguments " "are required.\n"); return -1; } ssid_hex[0] = '\0'; for (i = 0; i < SSID_MAX_LEN; i++) { if (argv[0][i] == '\0') break; os_snprintf(&ssid_hex[i * 2], 3, "%02x", argv[0][i]); } key_hex[0] = '\0'; if (argc > 3) { for (i = 0; i < 64; i++) { if (argv[3][i] == '\0') break; os_snprintf(&key_hex[i * 2], 3, "%02x", argv[3][i]); } } if (argc > 3) snprintf(buf, sizeof(buf), "WPS_CONFIG %s %s %s %s", ssid_hex, argv[1], argv[2], key_hex); else if (argc > 2) snprintf(buf, sizeof(buf), "WPS_CONFIG %s %s %s", ssid_hex, argv[1], argv[2]); else snprintf(buf, sizeof(buf), "WPS_CONFIG %s %s", ssid_hex, argv[1]); return wpa_ctrl_command(ctrl, buf); }
static int hostapd_cli_cmd_nfc_get_handover_sel(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[64]; int res; if (argc != 2) { printf("Invalid 'nfc_get_handover_sel' command - two arguments " "are required.\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "NFC_GET_HANDOVER_SEL %s %s", argv[0], argv[1]); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long NFC_GET_HANDOVER_SEL command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_set_neighbor(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[2048]; int res; if (argc < 3 || argc > 5) { printf("Invalid set_neighbor command: needs 3-5 arguments\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "SET_NEIGHBOR %s %s %s %s %s", argv[0], argv[1], argv[2], argc >= 4 ? argv[3] : "", argc == 5 ? argv[4] : ""); if (os_snprintf_error(sizeof(cmd), res)) { printf("Too long SET_NEIGHBOR command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_wps_nfc_config_token(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[64]; int res; if (argc != 1) { printf("Invalid 'wps_nfc_config_token' command - one argument " "is required.\n"); return -1; } res = os_snprintf(cmd, sizeof(cmd), "WPS_NFC_CONFIG_TOKEN %s", argv[0]); if (res < 0 || (size_t) res >= sizeof(cmd) - 1) { printf("Too long WPS_NFC_CONFIG_TOKEN command.\n"); return -1; } return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_otp(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256], *pos, *end; int i; if (argc < 2) { printf("Invalid OTP command: needs two arguments (network " "id and password)\n"); return 0; } end = cmd + sizeof(cmd); pos = cmd; pos += snprintf(pos, end - pos, WPA_CTRL_RSP "OTP-%s:%s", argv[0], argv[1]); for (i = 2; i < argc; i++) pos += snprintf(pos, end - pos, " %s", argv[i]); return wpa_ctrl_command(ctrl, cmd); }
static int wpa_cli_cmd_identity(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char cmd[256], *pos, *end; int i; if (argc < 2) { printf("Invalid IDENTITY command: needs two arguments " "(network id and identity)\n"); return 0; } end = cmd + sizeof(cmd); pos = cmd; pos += snprintf(pos, end - pos, WPA_CTRL_RSP "IDENTITY-%s:%s", argv[0], argv[1]); for (i = 2; i < argc; i++) pos += snprintf(pos, end - pos, " %s", argv[i]); return wpa_ctrl_command(ctrl, cmd); }
static int hostapd_cli_cmd_wps_pin(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[64]; if (argc < 2) { printf("Invalid 'wps_pin' command - at least two arguments, " "UUID and PIN, are required.\n"); return -1; } if (argc > 2) snprintf(buf, sizeof(buf), "WPS_PIN %s %s %s", argv[0], argv[1], argv[2]); else snprintf(buf, sizeof(buf), "WPS_PIN %s %s", argv[0], argv[1]); if(!hostapd_validate_checksum(argv[1])) { printf("PIN Checksum failed. Please enter a valid PIN.\n"); return -1; } return wpa_ctrl_command(ctrl, buf); }
/* configthem_ap -- builtin command to configure "them" when we are an AP. */ static void configthem_ap(const char *cmd_in) { char *rawcmd; if (! is_ap) { wpatalk_error("This command valid for AP only."); return; } /* Rename cmd to it's upper case equivalent, and pass all to * wpa_supplicant. */ rawcmd = strdup(cmd_in); memcpy(rawcmd, "CONFIGTHEM", 10); if (wpa_ctrl_command(ctrl_conn, rawcmd)) { wpatalk_error("Raw command failed: %s", rawcmd); free(rawcmd); return; } wpatalk_wps_pending = 1; wpatalk_configme = 0; wpatalk_configthem = 1; if (interactive) { wpatalk_info("--> WAIT FOR WPS TO BE DONE <--"); return; } wpatalk_info("Waiting for WPS TO BE DONE"); while (wpatalk_wps_pending) { if (wpatalk_recv_pending(1/*block*/) < 0) { wpatalk_error("Wait for WPS aborted due to error"); break; } } return; }
static int hostapd_cli_cmd_hs20_deauth_req(struct wpa_ctrl *ctrl, int argc, char *argv[]) { char buf[300]; int res; if (argc < 3) { printf("Invalid 'hs20_deauth_req' command - at least three arguments (STA addr, Code, Re-auth Delay) are needed\n"); return -1; } if (argc > 3) res = os_snprintf(buf, sizeof(buf), "HS20_DEAUTH_REQ %s %s %s %s", argv[0], argv[1], argv[2], argv[3]); else res = os_snprintf(buf, sizeof(buf), "HS20_DEAUTH_REQ %s %s %s", argv[0], argv[1], argv[2]); if (os_snprintf_error(sizeof(buf), res)) return -1; return wpa_ctrl_command(ctrl, buf); }