wpa_supplicant: Add an option to specify SSID in neighbor report requests
[mech_eap.git] / wpa_supplicant / ctrl_iface.c
index 607a61b..19c0146 100644 (file)
@@ -6823,6 +6823,44 @@ static int wpas_ctrl_vendor_elem_remove(struct wpa_supplicant *wpa_s, char *cmd)
 }
 
 
+static void wpas_ctrl_neighbor_rep_cb(void *ctx, struct wpabuf *neighbor_rep)
+{
+       struct wpa_supplicant *wpa_s = ctx;
+
+       if (neighbor_rep) {
+               wpa_msg_ctrl(wpa_s, MSG_INFO, RRM_EVENT_NEIGHBOR_REP_RXED
+                            "length=%u",
+                            (unsigned int) wpabuf_len(neighbor_rep));
+               wpabuf_free(neighbor_rep);
+       } else {
+               wpa_msg_ctrl(wpa_s, MSG_INFO, RRM_EVENT_NEIGHBOR_REP_FAILED);
+       }
+}
+
+
+static int wpas_ctrl_iface_send_neigbor_rep(struct wpa_supplicant *wpa_s,
+                                           char *cmd)
+{
+       struct wpa_ssid ssid;
+       struct wpa_ssid *ssid_p = NULL;
+       int ret = 0;
+
+       if (os_strncmp(cmd, " ssid=", 6) == 0) {
+               ssid.ssid_len = os_strlen(cmd + 6);
+               if (ssid.ssid_len > 32)
+                       return -1;
+               ssid.ssid = (u8 *) (cmd + 6);
+               ssid_p = &ssid;
+       }
+
+       ret = wpas_rrm_send_neighbor_rep_request(wpa_s, ssid_p,
+                                                wpas_ctrl_neighbor_rep_cb,
+                                                wpa_s);
+
+       return ret;
+}
+
+
 char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                                         char *buf, size_t *resp_len)
 {
@@ -7354,6 +7392,8 @@ 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_strcmp(buf, "WMM_AC_STATUS") == 0) {
+               reply_len = wpas_wmm_ac_status(wpa_s, reply, reply_size);
        } else if (os_strncmp(buf, "WMM_AC_ADDTS ", 13) == 0) {
                if (wmm_ac_ctrl_addts(wpa_s, buf + 13))
                        reply_len = -1;
@@ -7423,6 +7463,9 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
        } else if (os_strncmp(buf, "VENDOR_ELEM_REMOVE ", 19) == 0) {
                if (wpas_ctrl_vendor_elem_remove(wpa_s, buf + 19) < 0)
                        reply_len = -1;
+       } else if (os_strncmp(buf, "NEIGHBOR_REP_REQUEST", 20) == 0) {
+               if (wpas_ctrl_iface_send_neigbor_rep(wpa_s, buf + 20))
+                       reply_len = -1;
        } else {
                os_memcpy(reply, "UNKNOWN COMMAND\n", 16);
                reply_len = 16;