From 1cd973d5015bfe97c2752b3d2fff7765b6cc350c Mon Sep 17 00:00:00 2001
From: Jouni Malinen <j@w1.fi>
Date: Sun, 13 Dec 2009 21:17:11 +0200
Subject: [PATCH] Replace hostapd_michael_mic_failure() with generic driver
 event

---
 hostapd/drv_callbacks.c      | 6 ------
 src/drivers/driver.h         | 1 -
 src/drivers/driver_atheros.c | 7 ++++++-
 src/drivers/driver_bsd.c     | 8 ++++++--
 src/drivers/driver_hostap.c  | 7 ++++++-
 src/drivers/driver_madwifi.c | 7 ++++++-
 6 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/hostapd/drv_callbacks.c b/hostapd/drv_callbacks.c
index 5fde2496b..f8f768ef2 100644
--- a/hostapd/drv_callbacks.c
+++ b/hostapd/drv_callbacks.c
@@ -427,12 +427,6 @@ void hostapd_mgmt_tx_cb(struct hostapd_data *hapd, u8 *buf, size_t len,
 #endif /* NEED_AP_MLME */
 
 
-void hostapd_michael_mic_failure(struct hostapd_data *hapd, const u8 *addr)
-{
-	michael_mic_failure(hapd, addr, 1);
-}
-
-
 struct hostapd_data * hostapd_sta_get_bss(struct hostapd_data *hapd,
 					  const u8 *addr)
 {
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f1b86a6f4..228ce6bf0 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1969,7 +1969,6 @@ void hostapd_mgmt_rx(struct hostapd_data *hapd, u8 *buf, size_t len,
 		     u16 stype, struct hostapd_frame_info *fi);
 void hostapd_mgmt_tx_cb(struct hostapd_data *hapd, u8 *buf, size_t len,
 			u16 stype, int ok);
-void hostapd_michael_mic_failure(struct hostapd_data *hapd, const u8 *addr);
 struct hostapd_data * hostapd_sta_get_bss(struct hostapd_data *hapd,
 					  const u8 *addr);
 void hostapd_probe_req_rx(struct hostapd_data *hapd, const u8 *sa,
diff --git a/src/drivers/driver_atheros.c b/src/drivers/driver_atheros.c
index 0db58e2b2..8759b0138 100644
--- a/src/drivers/driver_atheros.c
+++ b/src/drivers/driver_atheros.c
@@ -807,7 +807,12 @@ madwifi_wireless_event_wireless_custom(struct madwifi_driver_data *drv,
 		}
 		pos += 5;
 		if (hwaddr_aton(pos, addr) == 0) {
-			hostapd_michael_mic_failure(drv->hapd, addr);
+			union wpa_event_data data;
+			os_memset(&data, 0, sizeof(data));
+			data.michael_mic_failure.unicast = 1;
+			data.michael_mic_failure.src = addr;
+			wpa_supplicant_event(drv->hapd,
+					     EVENT_MICHAEL_MIC_FAILURE, &data);
 		} else {
 			wpa_printf(MSG_DEBUG,
 				   "MLME-MICHAELMICFAILURE.indication "
diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c
index aa523d675..c3cbd096c 100644
--- a/src/drivers/driver_bsd.c
+++ b/src/drivers/driver_bsd.c
@@ -601,7 +601,6 @@ static void
 bsd_wireless_event_receive(int sock, void *ctx, void *sock_ctx)
 {
 	struct bsd_driver_data *drv = ctx;
-	struct hostapd_data *hapd = drv->hapd;
 	char buf[2048];
 	struct if_announcemsghdr *ifan;
 	struct rt_msghdr *rtm;
@@ -609,6 +608,7 @@ bsd_wireless_event_receive(int sock, void *ctx, void *sock_ctx)
 	struct ieee80211_join_event *join;
 	struct ieee80211_leave_event *leave;
 	int n;
+	union wpa_event_data data;
 
 	n = read(sock, buf, sizeof(buf));
 	if (n < 0) {
@@ -652,7 +652,11 @@ bsd_wireless_event_receive(int sock, void *ctx, void *sock_ctx)
 				"Michael MIC failure wireless event: "
 				"keyix=%u src_addr=" MACSTR, mic->iev_keyix,
 				MAC2STR(mic->iev_src));
-			hostapd_michael_mic_failure(hapd, mic->iev_src);
+			os_memset(&data, 0, sizeof(data));
+			data.michael_mic_failure.unicast = 1;
+			data.michael_mic_failure.src = mic->iev_src;
+			wpa_supplicant_event(drv->hapd,
+					     EVENT_MICHAEL_MIC_FAILURE, &data);
 			break;
 		}
 		break;
diff --git a/src/drivers/driver_hostap.c b/src/drivers/driver_hostap.c
index b49f1df11..3e376589f 100644
--- a/src/drivers/driver_hostap.c
+++ b/src/drivers/driver_hostap.c
@@ -846,7 +846,12 @@ hostapd_wireless_event_wireless_custom(struct hostap_driver_data *drv,
 		}
 		pos += 5;
 		if (hwaddr_aton(pos, addr) == 0) {
-			hostapd_michael_mic_failure(drv->hapd, addr);
+			union wpa_event_data data;
+			os_memset(&data, 0, sizeof(data));
+			data.michael_mic_failure.unicast = 1;
+			data.michael_mic_failure.src = addr;
+			wpa_supplicant_event(drv->hapd,
+					     EVENT_MICHAEL_MIC_FAILURE, &data);
 		} else {
 			wpa_printf(MSG_DEBUG,
 				   "MLME-MICHAELMICFAILURE.indication "
diff --git a/src/drivers/driver_madwifi.c b/src/drivers/driver_madwifi.c
index 3dc46eca2..f1c14743d 100644
--- a/src/drivers/driver_madwifi.c
+++ b/src/drivers/driver_madwifi.c
@@ -908,7 +908,12 @@ madwifi_wireless_event_wireless_custom(struct madwifi_driver_data *drv,
 		}
 		pos += 5;
 		if (hwaddr_aton(pos, addr) == 0) {
-			hostapd_michael_mic_failure(drv->hapd, addr);
+			union wpa_event_data data;
+			os_memset(&data, 0, sizeof(data));
+			data.michael_mic_failure.unicast = 1;
+			data.michael_mic_failure.src = addr;
+			wpa_supplicant_event(drv->hapd,
+					     EVENT_MICHAEL_MIC_FAILURE, &data);
 		} else {
 			wpa_printf(MSG_DEBUG,
 				   "MLME-MICHAELMICFAILURE.indication "