aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-11-19 13:00:30 +0200
committerJouni Malinen <j@w1.fi>2011-11-19 13:00:30 +0200
commitdd840f793c69a12027601aacf770a5b33f33440e (patch)
treec1ba7a642c3863415066164e5ba3eb9abb23d8b0 /wpa_supplicant
parent65897747469537db3ef316174ab082f3aeae5cbd (diff)
downloadexternal_wpa_supplicant_8_ti-dd840f793c69a12027601aacf770a5b33f33440e.zip
external_wpa_supplicant_8_ti-dd840f793c69a12027601aacf770a5b33f33440e.tar.gz
external_wpa_supplicant_8_ti-dd840f793c69a12027601aacf770a5b33f33440e.tar.bz2
AP: Add explicit EAPOL TX status event
The new event can be used when EAPOL TX status can't be reported as a complete 802.11 frame but is instead reported as just the EAPOL data as originally passed to hapd_send_eapol(). Signed-hostap: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'wpa_supplicant')
-rw-r--r--wpa_supplicant/ap.c10
-rw-r--r--wpa_supplicant/ap.h2
-rw-r--r--wpa_supplicant/events.c6
3 files changed, 18 insertions, 0 deletions
diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
index 91c9126..7acbefe 100644
--- a/wpa_supplicant/ap.c
+++ b/wpa_supplicant/ap.c
@@ -564,6 +564,16 @@ void ap_tx_status(void *ctx, const u8 *addr,
}
+void ap_eapol_tx_status(void *ctx, const u8 *dst,
+ const u8 *data, size_t len, int ack)
+{
+#ifdef NEED_AP_MLME
+ struct wpa_supplicant *wpa_s = ctx;
+ hostapd_tx_status(wpa_s->ap_iface->bss[0], dst, data, len, ack);
+#endif /* NEED_AP_MLME */
+}
+
+
void ap_client_poll_ok(void *ctx, const u8 *addr)
{
#ifdef NEED_AP_MLME
diff --git a/wpa_supplicant/ap.h b/wpa_supplicant/ap.h
index 567e784..aa4c362 100644
--- a/wpa_supplicant/ap.h
+++ b/wpa_supplicant/ap.h
@@ -41,6 +41,8 @@ int ap_ctrl_iface_wpa_get_status(struct wpa_supplicant *wpa_s, char *buf,
size_t buflen, int verbose);
void ap_tx_status(void *ctx, const u8 *addr,
const u8 *buf, size_t len, int ack);
+void ap_eapol_tx_status(void *ctx, const u8 *dst,
+ const u8 *data, size_t len, int ack);
void ap_client_poll_ok(void *ctx, const u8 *addr);
void ap_rx_from_unknown_sta(void *ctx, const u8 *addr, int wds);
void ap_mgmt_rx(void *ctx, struct rx_mgmt *rx_mgmt);
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index b2e95ee..7010600 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2158,6 +2158,12 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
#endif /* CONFIG_AP */
break;
#ifdef CONFIG_AP
+ case EVENT_EAPOL_TX_STATUS:
+ ap_eapol_tx_status(wpa_s, data->eapol_tx_status.dst,
+ data->eapol_tx_status.data,
+ data->eapol_tx_status.data_len,
+ data->eapol_tx_status.ack);
+ break;
case EVENT_DRIVER_CLIENT_POLL_OK:
ap_client_poll_ok(wpa_s, data->client_poll.addr);
break;