| /* Copyright (C) 2006, Red Hat, Inc. */ |
| |
| #ifndef _LBS_ASSOC_H_ |
| #define _LBS_ASSOC_H_ |
| |
| |
| #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; |
| /** channel is directly in priv->channel */ |
| /** 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]; |
| |
| void lbs_association_worker(struct work_struct *work); |
| struct assoc_request *lbs_get_association_request(struct lbs_private *priv); |
| |
| int lbs_adhoc_stop(struct lbs_private *priv); |
| |
| int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, |
| u8 bssid[ETH_ALEN], u16 reason); |
| |
| 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); |
| |
| #endif /* _LBS_ASSOC_H */ |