2007-08-28 17:01:53 -04:00
|
|
|
/*
|
|
|
|
* Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* mac80211 - events
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/netdevice.h>
|
|
|
|
#include <net/iw_handler.h>
|
|
|
|
#include "ieee80211_i.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* indicate a failed Michael MIC to userspace; the passed packet
|
|
|
|
* (in the variable hdr) must be long enough to extract the TKIP
|
|
|
|
* fields like TSC
|
|
|
|
*/
|
|
|
|
void mac80211_ev_michael_mic_failure(struct net_device *dev, int keyidx,
|
|
|
|
struct ieee80211_hdr *hdr)
|
|
|
|
{
|
|
|
|
union iwreq_data wrqu;
|
|
|
|
char *buf = kmalloc(128, GFP_ATOMIC);
|
2007-10-03 20:59:30 -04:00
|
|
|
DECLARE_MAC_BUF(mac);
|
2007-08-28 17:01:53 -04:00
|
|
|
|
|
|
|
if (buf) {
|
|
|
|
/* TODO: needed parameters: count, key type, TSC */
|
|
|
|
sprintf(buf, "MLME-MICHAELMICFAILURE.indication("
|
2007-10-03 20:59:30 -04:00
|
|
|
"keyid=%d %scast addr=%s)",
|
2007-08-28 17:01:53 -04:00
|
|
|
keyidx, hdr->addr1[0] & 0x01 ? "broad" : "uni",
|
2007-10-03 20:59:30 -04:00
|
|
|
print_mac(mac, hdr->addr2));
|
2007-08-28 17:01:53 -04:00
|
|
|
memset(&wrqu, 0, sizeof(wrqu));
|
|
|
|
wrqu.data.length = strlen(buf);
|
|
|
|
wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
|
|
|
|
kfree(buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* TODO: re-add support for sending MIC failure indication
|
|
|
|
* with all info via nl80211
|
|
|
|
*/
|
|
|
|
}
|