diff options
-rw-r--r-- | src/drivers/driver_nl80211.c | 56 |
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; |