Commit | Line | Data |
---|---|---|
876c9d3a MT |
1 | /* Copyright (C) 2006, Red Hat, Inc. */ |
2 | ||
10078321 HS |
3 | #ifndef _LBS_ASSOC_H_ |
4 | #define _LBS_ASSOC_H_ | |
876c9d3a | 5 | |
2d46502d HS |
6 | |
7 | #include "defs.h" | |
8 | #include "host.h" | |
9 | ||
10 | ||
11 | struct lbs_private; | |
12 | ||
13 | /* | |
14 | * In theory, the IE is limited to the IE length, 255, | |
15 | * but in practice 64 bytes are enough. | |
16 | */ | |
17 | #define MAX_WPA_IE_LEN 64 | |
18 | ||
19 | ||
20 | ||
21 | struct lbs_802_11_security { | |
22 | u8 WPAenabled; | |
23 | u8 WPA2enabled; | |
24 | u8 wep_enabled; | |
25 | u8 auth_mode; | |
26 | u32 key_mgmt; | |
27 | }; | |
28 | ||
29 | /** Current Basic Service Set State Structure */ | |
30 | struct current_bss_params { | |
31 | /** bssid */ | |
32 | u8 bssid[ETH_ALEN]; | |
33 | /** ssid */ | |
34 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | |
35 | u8 ssid_len; | |
36 | ||
37 | /** band */ | |
38 | u8 band; | |
c14951fe | 39 | /** channel is directly in priv->channel */ |
2d46502d HS |
40 | /** zero-terminated array of supported data rates */ |
41 | u8 rates[MAX_RATES + 1]; | |
42 | }; | |
43 | ||
44 | /** | |
45 | * @brief Structure used to store information for each beacon/probe response | |
46 | */ | |
47 | struct bss_descriptor { | |
48 | u8 bssid[ETH_ALEN]; | |
49 | ||
50 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | |
51 | u8 ssid_len; | |
52 | ||
53 | u16 capability; | |
54 | u32 rssi; | |
55 | u32 channel; | |
56 | u16 beaconperiod; | |
57 | __le16 atimwindow; | |
58 | ||
59 | /* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */ | |
60 | u8 mode; | |
61 | ||
62 | /* zero-terminated array of supported data rates */ | |
63 | u8 rates[MAX_RATES + 1]; | |
64 | ||
65 | unsigned long last_scanned; | |
66 | ||
67 | union ieee_phy_param_set phy; | |
68 | union ieee_ss_param_set ss; | |
69 | ||
70 | u8 wpa_ie[MAX_WPA_IE_LEN]; | |
71 | size_t wpa_ie_len; | |
72 | u8 rsn_ie[MAX_WPA_IE_LEN]; | |
73 | size_t rsn_ie_len; | |
74 | ||
75 | u8 mesh; | |
76 | ||
77 | struct list_head list; | |
78 | }; | |
79 | ||
80 | /** Association request | |
81 | * | |
82 | * Encapsulates all the options that describe a specific assocation request | |
83 | * or configuration of the wireless card's radio, mode, and security settings. | |
84 | */ | |
85 | struct assoc_request { | |
86 | #define ASSOC_FLAG_SSID 1 | |
87 | #define ASSOC_FLAG_CHANNEL 2 | |
88 | #define ASSOC_FLAG_BAND 3 | |
89 | #define ASSOC_FLAG_MODE 4 | |
90 | #define ASSOC_FLAG_BSSID 5 | |
91 | #define ASSOC_FLAG_WEP_KEYS 6 | |
92 | #define ASSOC_FLAG_WEP_TX_KEYIDX 7 | |
93 | #define ASSOC_FLAG_WPA_MCAST_KEY 8 | |
94 | #define ASSOC_FLAG_WPA_UCAST_KEY 9 | |
95 | #define ASSOC_FLAG_SECINFO 10 | |
96 | #define ASSOC_FLAG_WPA_IE 11 | |
97 | unsigned long flags; | |
98 | ||
99 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | |
100 | u8 ssid_len; | |
101 | u8 channel; | |
102 | u8 band; | |
103 | u8 mode; | |
104 | u8 bssid[ETH_ALEN] __attribute__ ((aligned (2))); | |
105 | ||
106 | /** WEP keys */ | |
107 | struct enc_key wep_keys[4]; | |
108 | u16 wep_tx_keyidx; | |
109 | ||
110 | /** WPA keys */ | |
111 | struct enc_key wpa_mcast_key; | |
112 | struct enc_key wpa_unicast_key; | |
113 | ||
114 | struct lbs_802_11_security secinfo; | |
115 | ||
116 | /** WPA Information Elements*/ | |
117 | u8 wpa_ie[MAX_WPA_IE_LEN]; | |
118 | u8 wpa_ie_len; | |
119 | ||
120 | /* BSS to associate with for infrastructure of Ad-Hoc join */ | |
121 | struct bss_descriptor bss; | |
122 | }; | |
123 | ||
124 | ||
125 | extern u8 lbs_bg_rates[MAX_RATES]; | |
876c9d3a | 126 | |
10078321 | 127 | void lbs_association_worker(struct work_struct *work); |
aa21c004 | 128 | struct assoc_request *lbs_get_association_request(struct lbs_private *priv); |
b8bedefd | 129 | |
f5fe1fda DW |
130 | int lbs_adhoc_stop(struct lbs_private *priv); |
131 | ||
697900ac | 132 | int lbs_cmd_80211_deauthenticate(struct lbs_private *priv, |
191bb40e | 133 | u8 bssid[ETH_ALEN], u16 reason); |
697900ac | 134 | |
d0de3741 HS |
135 | int lbs_cmd_802_11_rssi(struct lbs_private *priv, |
136 | struct cmd_ds_command *cmd); | |
137 | int lbs_ret_802_11_rssi(struct lbs_private *priv, | |
138 | struct cmd_ds_command *resp); | |
139 | ||
140 | int lbs_cmd_bcn_ctrl(struct lbs_private *priv, | |
141 | struct cmd_ds_command *cmd, | |
142 | u16 cmd_action); | |
143 | int lbs_ret_802_11_bcn_ctrl(struct lbs_private *priv, | |
144 | struct cmd_ds_command *resp); | |
145 | ||
146 | int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action, | |
147 | struct assoc_request *assoc); | |
148 | ||
149 | int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, uint16_t cmd_action, | |
150 | uint16_t *enable); | |
151 | ||
152 | int lbs_cmd_802_11_key_material(struct lbs_private *priv, uint16_t cmd_action, | |
153 | struct assoc_request *assoc); | |
154 | ||
10078321 | 155 | #endif /* _LBS_ASSOC_H */ |