aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/driver_nl80211.c56
1 files changed, 29 insertions, 27 deletions
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 28a9a6d..5c197f5 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -9687,34 +9687,36 @@ static int wpa_driver_nl80211_driver_cmd(void *priv, char *cmd, char *buf,
return nl80211_set_wowlan_triggers(bss, 1);
} else if( os_strcasecmp(cmd, "RXFILTER-STOP") == 0 ) {
return nl80211_set_wowlan_triggers(bss, 0);
- } else { /* Use private command */
- memset(&ifr, 0, sizeof(ifr));
- memset(&priv_cmd, 0, sizeof(priv_cmd));
- os_memcpy(buf, cmd, strlen(cmd) + 1);
- os_strncpy(ifr.ifr_name, bss->ifname, IFNAMSIZ);
-
- priv_cmd.buf = buf;
- priv_cmd.used_len = buf_len;
- priv_cmd.total_len = buf_len;
- ifr.ifr_data = &priv_cmd;
-
- if ((ret = ioctl(drv->global->ioctl_sock, SIOCDEVPRIVATE + 1,
- &ifr)) < 0) {
- wpa_printf(MSG_ERROR, "%s: failed to issue private "
- "commands\n", __func__);
- wpa_driver_send_hang_msg(drv);
- } else {
- drv_errors = 0;
- ret = 0;
- if ((os_strcasecmp(cmd, "LINKSPEED") == 0) ||
- (os_strcasecmp(cmd, "RSSI") == 0) ||
- (os_strcasecmp(cmd, "GETBAND") == 0) ||
- (os_strcasecmp(cmd, "P2P_GET_NOA") == 0))
- ret = strlen(buf);
-
- wpa_printf(MSG_DEBUG, "%s %s len = %d, %d", __func__,
- buf, ret, strlen(buf));
+ } else if( os_strcasecmp(cmd, "LINKSPEED") == 0 ) {
+ struct wpa_signal_info sig;
+ int linkspeed;
+
+ if (!drv->associated)
+ return -1;
+
+ ret = nl80211_get_link_signal(drv, &sig);
+ if (ret == 0) {
+ linkspeed = sig.current_txrate / 1000;
+ ret = os_snprintf(buf, buf_len, "LinkSpeed %d\n",
+ linkspeed);
+ }
+ } else if (os_strcasecmp(cmd, "RSSI") == 0 ||
+ os_strcasecmp(cmd, "RSSI-APPROX") == 0) {
+ struct wpa_signal_info sig;
+ int rssi;
+
+ if (!drv->associated)
+ return -1;
+
+ ret = nl80211_get_link_signal(drv, &sig);
+ if (ret == 0) {
+ rssi = sig.current_signal;
+ ret = os_snprintf(buf, buf_len, "%s rssi %d\n",
+ drv->ssid, rssi);
}
+ } else {
+ wpa_printf(MSG_ERROR, "Unsupported command: %s", cmd);
+ ret = -1;
}
return ret;