| 
									
										
										
										
											2007-02-10 12:25:27 -02:00
										 |  |  | /* Copyright (C) 2006, Red Hat, Inc. */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-15 18:05:47 -05:00
										 |  |  | #ifndef _LBS_ASSOC_H_
 | 
					
						
							|  |  |  | #define _LBS_ASSOC_H_
 | 
					
						
							| 
									
										
										
										
											2007-02-10 12:25:27 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-22 15:30:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "defs.h"
 | 
					
						
							|  |  |  | #include "host.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct lbs_private; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * In theory, the IE is limited to the IE length, 255, | 
					
						
							|  |  |  |  * but in practice 64 bytes are enough. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define MAX_WPA_IE_LEN 64
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct lbs_802_11_security { | 
					
						
							|  |  |  | 	u8 WPAenabled; | 
					
						
							|  |  |  | 	u8 WPA2enabled; | 
					
						
							|  |  |  | 	u8 wep_enabled; | 
					
						
							|  |  |  | 	u8 auth_mode; | 
					
						
							|  |  |  | 	u32 key_mgmt; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Current Basic Service Set State Structure */ | 
					
						
							|  |  |  | struct current_bss_params { | 
					
						
							|  |  |  | 	/** bssid */ | 
					
						
							|  |  |  | 	u8 bssid[ETH_ALEN]; | 
					
						
							|  |  |  | 	/** ssid */ | 
					
						
							|  |  |  | 	u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | 
					
						
							|  |  |  | 	u8 ssid_len; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** band */ | 
					
						
							|  |  |  | 	u8 band; | 
					
						
							| 
									
										
										
										
											2009-10-22 15:30:50 +02:00
										 |  |  | 	/** channel is directly in priv->channel */ | 
					
						
							| 
									
										
										
										
											2009-10-22 15:30:48 +02:00
										 |  |  | 	/** zero-terminated array of supported data rates */ | 
					
						
							|  |  |  | 	u8 rates[MAX_RATES + 1]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  *  @brief Structure used to store information for each beacon/probe response | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct bss_descriptor { | 
					
						
							|  |  |  | 	u8 bssid[ETH_ALEN]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | 
					
						
							|  |  |  | 	u8 ssid_len; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u16 capability; | 
					
						
							|  |  |  | 	u32 rssi; | 
					
						
							|  |  |  | 	u32 channel; | 
					
						
							|  |  |  | 	u16 beaconperiod; | 
					
						
							|  |  |  | 	__le16 atimwindow; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ | 
					
						
							|  |  |  | 	u8 mode; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* zero-terminated array of supported data rates */ | 
					
						
							|  |  |  | 	u8 rates[MAX_RATES + 1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	unsigned long last_scanned; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	union ieee_phy_param_set phy; | 
					
						
							|  |  |  | 	union ieee_ss_param_set ss; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 wpa_ie[MAX_WPA_IE_LEN]; | 
					
						
							|  |  |  | 	size_t wpa_ie_len; | 
					
						
							|  |  |  | 	u8 rsn_ie[MAX_WPA_IE_LEN]; | 
					
						
							|  |  |  | 	size_t rsn_ie_len; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 mesh; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct list_head list; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Association request
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Encapsulates all the options that describe a specific assocation request | 
					
						
							|  |  |  |  * or configuration of the wireless card's radio, mode, and security settings. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | struct assoc_request { | 
					
						
							|  |  |  | #define ASSOC_FLAG_SSID			1
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_CHANNEL		2
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_BAND			3
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_MODE			4
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_BSSID		5
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_WEP_KEYS		6
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_WEP_TX_KEYIDX	7
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_WPA_MCAST_KEY	8
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_WPA_UCAST_KEY	9
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_SECINFO		10
 | 
					
						
							|  |  |  | #define ASSOC_FLAG_WPA_IE		11
 | 
					
						
							|  |  |  | 	unsigned long flags; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | 
					
						
							|  |  |  | 	u8 ssid_len; | 
					
						
							|  |  |  | 	u8 channel; | 
					
						
							|  |  |  | 	u8 band; | 
					
						
							|  |  |  | 	u8 mode; | 
					
						
							|  |  |  | 	u8 bssid[ETH_ALEN] __attribute__ ((aligned (2))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** WEP keys */ | 
					
						
							|  |  |  | 	struct enc_key wep_keys[4]; | 
					
						
							|  |  |  | 	u16 wep_tx_keyidx; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** WPA keys */ | 
					
						
							|  |  |  | 	struct enc_key wpa_mcast_key; | 
					
						
							|  |  |  | 	struct enc_key wpa_unicast_key; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct lbs_802_11_security secinfo; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** WPA Information Elements*/ | 
					
						
							|  |  |  | 	u8 wpa_ie[MAX_WPA_IE_LEN]; | 
					
						
							|  |  |  | 	u8 wpa_ie_len; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/* BSS to associate with for infrastructure of Ad-Hoc join */ | 
					
						
							|  |  |  | 	struct bss_descriptor bss; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern u8 lbs_bg_rates[MAX_RATES]; | 
					
						
							| 
									
										
										
										
											2007-02-10 12:25:27 -02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-15 18:05:47 -05:00
										 |  |  | void lbs_association_worker(struct work_struct *work); | 
					
						
							| 
									
										
										
										
											2007-12-08 20:04:36 +00:00
										 |  |  | struct assoc_request *lbs_get_association_request(struct lbs_private *priv); | 
					
						
							| 
									
										
										
										
											2007-05-30 12:14:34 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-21 21:46:59 -04:00
										 |  |  | int lbs_adhoc_stop(struct lbs_private *priv); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-02 16:27:10 +02:00
										 |  |  | int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, | 
					
						
							| 
									
										
										
										
											2008-08-21 17:46:18 -04:00
										 |  |  | 				 u8 bssid[ETH_ALEN], u16 reason); | 
					
						
							| 
									
										
										
										
											2008-04-02 16:27:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-22 15:30:51 +02:00
										 |  |  | int lbs_cmd_802_11_rssi(struct lbs_private *priv, | 
					
						
							|  |  |  | 				struct cmd_ds_command *cmd); | 
					
						
							|  |  |  | int lbs_ret_802_11_rssi(struct lbs_private *priv, | 
					
						
							|  |  |  | 				struct cmd_ds_command *resp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int lbs_cmd_bcn_ctrl(struct lbs_private *priv, | 
					
						
							|  |  |  | 				struct cmd_ds_command *cmd, | 
					
						
							|  |  |  | 				u16 cmd_action); | 
					
						
							|  |  |  | int lbs_ret_802_11_bcn_ctrl(struct lbs_private *priv, | 
					
						
							|  |  |  | 					struct cmd_ds_command *resp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action, | 
					
						
							|  |  |  | 			   struct assoc_request *assoc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, uint16_t cmd_action, | 
					
						
							|  |  |  | 			      uint16_t *enable); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int lbs_cmd_802_11_key_material(struct lbs_private *priv, uint16_t cmd_action, | 
					
						
							|  |  |  | 				struct assoc_request *assoc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-15 18:05:47 -05:00
										 |  |  | #endif /* _LBS_ASSOC_H */
 |