|
@@ -2870,6 +2870,26 @@ static int wpa_supplicant_ctrl_iface_sta_autoconnect(
|
|
|
}
|
|
|
|
|
|
|
|
|
+static int wpa_supplicant_signal_poll(struct wpa_supplicant *wpa_s, char *buf,
|
|
|
+ size_t buflen)
|
|
|
+{
|
|
|
+ struct wpa_signal_info si;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = wpa_drv_signal_poll(wpa_s, &si);
|
|
|
+ if (ret)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ ret = os_snprintf(buf, buflen, "RSSI=%d\nLINKSPEED=%d\n"
|
|
|
+ "NOISE=%d\nFREQUENCY=%u\n",
|
|
|
+ si.current_signal, si.current_txrate / 1000,
|
|
|
+ si.current_noise, si.frequency);
|
|
|
+ if (ret < 0 || (unsigned int) ret > buflen)
|
|
|
+ return -1;
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
|
|
|
char *buf, size_t *resp_len)
|
|
|
{
|
|
@@ -3262,6 +3282,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
|
|
|
if (wpa_supplicant_ctrl_iface_tdls_teardown(wpa_s, buf + 14))
|
|
|
reply_len = -1;
|
|
|
#endif /* CONFIG_TDLS */
|
|
|
+ } else if (os_strncmp(buf, "SIGNAL_POLL", 11) == 0) {
|
|
|
+ reply_len = wpa_supplicant_signal_poll(wpa_s, reply,
|
|
|
+ reply_size);
|
|
|
} else {
|
|
|
os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
|
|
|
reply_len = 16;
|