Handle survey event properly in wpa_supplicant
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Fri, 27 Nov 2015 11:40:36 +0000 (12:40 +0100)
committerJouni Malinen <j@w1.fi>
Thu, 24 Dec 2015 19:35:54 +0000 (21:35 +0200)
Let's reuse hostapd code for such handling. This will be useful to get
ACS support into wpa_supplicant where this one needs to handle the
survey event so it fills in the result ACS subsystem will require.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
[u.oelmann@pengutronix.de: rebased series from hostap_2_1~944 to master]
Signed-off-by: Ulrich Ölmann <u.oelmann@pengutronix.de>
src/ap/drv_callbacks.c
src/ap/hostapd.h
wpa_supplicant/events.c

index fd07201..9208569 100644 (file)
@@ -945,6 +945,8 @@ static void hostapd_event_eapol_rx(struct hostapd_data *hapd, const u8 *src,
        ieee802_1x_receive(hapd, src, data, data_len);
 }
 
+#endif /* HOSTAPD */
+
 
 static struct hostapd_channel_data * hostapd_get_mode_channel(
        struct hostapd_iface *iface, unsigned int freq)
@@ -1019,10 +1021,9 @@ static void hostapd_single_channel_get_survey(struct hostapd_iface *iface,
 }
 
 
-static void hostapd_event_get_survey(struct hostapd_data *hapd,
-                                    struct survey_results *survey_results)
+void hostapd_event_get_survey(struct hostapd_iface *iface,
+                             struct survey_results *survey_results)
 {
-       struct hostapd_iface *iface = hapd->iface;
        struct freq_survey *survey, *tmp;
        struct hostapd_channel_data *chan;
 
@@ -1054,6 +1055,7 @@ static void hostapd_event_get_survey(struct hostapd_data *hapd,
 }
 
 
+#ifdef HOSTAPD
 #ifdef NEED_AP_MLME
 
 static void hostapd_event_iface_unavailable(struct hostapd_data *hapd)
@@ -1261,7 +1263,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                        data->connect_failed_reason.code);
                break;
        case EVENT_SURVEY:
-               hostapd_event_get_survey(hapd, &data->survey_results);
+               hostapd_event_get_survey(hapd->iface, &data->survey_results);
                break;
 #ifdef NEED_AP_MLME
        case EVENT_INTERFACE_UNAVAILABLE:
index 8161a59..a664644 100644 (file)
@@ -493,6 +493,9 @@ int hostapd_probe_req_rx(struct hostapd_data *hapd, const u8 *sa, const u8 *da,
                         int ssi_signal);
 void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
                             int offset, int width, int cf1, int cf2);
+struct survey_results;
+void hostapd_event_get_survey(struct hostapd_iface *iface,
+                             struct survey_results *survey_results);
 
 const struct hostapd_eap_user *
 hostapd_get_eap_user(struct hostapd_data *hapd, const u8 *identity,
index 5e8ebad..43f3d9b 100644 (file)
@@ -3938,6 +3938,14 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
                                     data->mesh_peer.ie_len);
 #endif /* CONFIG_MESH */
                break;
+       case EVENT_SURVEY:
+#ifdef CONFIG_AP
+               if (!wpa_s->ap_iface)
+                       break;
+               hostapd_event_get_survey(wpa_s->ap_iface,
+                                        &data->survey_results);
+#endif /* CONFIG_AP */
+               break;
        default:
                wpa_msg(wpa_s, MSG_INFO, "Unknown event %d", event);
                break;