| 
									
										
										
										
											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 <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 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2008-08-03 12:04:37 +12:00
										 |  |  | void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, | 
					
						
							| 
									
										
										
										
											2007-08-28 17:01:53 -04:00
										 |  |  | 				     struct ieee80211_hdr *hdr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	union iwreq_data wrqu; | 
					
						
							|  |  |  | 	char *buf = kmalloc(128, GFP_ATOMIC); | 
					
						
							| 
									
										
										
										
											2007-10-03 17:59:30 -07: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 17:59:30 -07:00
										 |  |  | 			"keyid=%d %scast addr=%s)", | 
					
						
							| 
									
										
										
										
											2007-08-28 17:01:53 -04:00
										 |  |  | 			keyidx, hdr->addr1[0] & 0x01 ? "broad" : "uni", | 
					
						
							| 
									
										
										
										
											2007-10-03 17:59:30 -07:00
										 |  |  | 			print_mac(mac, hdr->addr2)); | 
					
						
							| 
									
										
										
										
											2007-08-28 17:01:53 -04:00
										 |  |  | 		memset(&wrqu, 0, sizeof(wrqu)); | 
					
						
							|  |  |  | 		wrqu.data.length = strlen(buf); | 
					
						
							| 
									
										
										
										
											2008-08-03 12:04:37 +12:00
										 |  |  | 		wireless_send_event(sdata->dev, IWEVCUSTOM, &wrqu, buf); | 
					
						
							| 
									
										
										
										
											2007-08-28 17:01:53 -04:00
										 |  |  | 		kfree(buf); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/*
 | 
					
						
							|  |  |  | 	 * TODO: re-add support for sending MIC failure indication | 
					
						
							|  |  |  | 	 * with all info via nl80211 | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | } |