diff options
Diffstat (limited to 'net/ieee80211/ieee80211_wx.c')
-rw-r--r-- | net/ieee80211/ieee80211_wx.c | 68 |
1 files changed, 32 insertions, 36 deletions
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c index 510a1716a4f0..94882f39b072 100644 --- a/net/ieee80211/ieee80211_wx.c +++ b/net/ieee80211/ieee80211_wx.c | |||
@@ -42,7 +42,7 @@ static const char *ieee80211_modes[] = { | |||
42 | 42 | ||
43 | #define MAX_CUSTOM_LEN 64 | 43 | #define MAX_CUSTOM_LEN 64 |
44 | static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | 44 | static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, |
45 | char *start, char *stop, | 45 | char *start, char *stop, |
46 | struct ieee80211_network *network) | 46 | struct ieee80211_network *network) |
47 | { | 47 | { |
48 | char custom[MAX_CUSTOM_LEN]; | 48 | char custom[MAX_CUSTOM_LEN]; |
@@ -66,29 +66,28 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
66 | iwe.u.data.length = sizeof("<hidden>"); | 66 | iwe.u.data.length = sizeof("<hidden>"); |
67 | start = iwe_stream_add_point(start, stop, &iwe, "<hidden>"); | 67 | start = iwe_stream_add_point(start, stop, &iwe, "<hidden>"); |
68 | } else { | 68 | } else { |
69 | iwe.u.data.length = min(network->ssid_len, (u8)32); | 69 | iwe.u.data.length = min(network->ssid_len, (u8) 32); |
70 | start = iwe_stream_add_point(start, stop, &iwe, network->ssid); | 70 | start = iwe_stream_add_point(start, stop, &iwe, network->ssid); |
71 | } | 71 | } |
72 | 72 | ||
73 | /* Add the protocol name */ | 73 | /* Add the protocol name */ |
74 | iwe.cmd = SIOCGIWNAME; | 74 | iwe.cmd = SIOCGIWNAME; |
75 | snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11%s", ieee80211_modes[network->mode]); | 75 | snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11%s", |
76 | ieee80211_modes[network->mode]); | ||
76 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_CHAR_LEN); | 77 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_CHAR_LEN); |
77 | 78 | ||
78 | /* Add mode */ | 79 | /* Add mode */ |
79 | iwe.cmd = SIOCGIWMODE; | 80 | iwe.cmd = SIOCGIWMODE; |
80 | if (network->capability & | 81 | if (network->capability & (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) { |
81 | (WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) { | ||
82 | if (network->capability & WLAN_CAPABILITY_ESS) | 82 | if (network->capability & WLAN_CAPABILITY_ESS) |
83 | iwe.u.mode = IW_MODE_MASTER; | 83 | iwe.u.mode = IW_MODE_MASTER; |
84 | else | 84 | else |
85 | iwe.u.mode = IW_MODE_ADHOC; | 85 | iwe.u.mode = IW_MODE_ADHOC; |
86 | 86 | ||
87 | start = iwe_stream_add_event(start, stop, &iwe, | 87 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_UINT_LEN); |
88 | IW_EV_UINT_LEN); | ||
89 | } | 88 | } |
90 | 89 | ||
91 | /* Add frequency/channel */ | 90 | /* Add frequency/channel */ |
92 | iwe.cmd = SIOCGIWFREQ; | 91 | iwe.cmd = SIOCGIWFREQ; |
93 | /* iwe.u.freq.m = ieee80211_frequency(network->channel, network->mode); | 92 | /* iwe.u.freq.m = ieee80211_frequency(network->channel, network->mode); |
94 | iwe.u.freq.e = 3; */ | 93 | iwe.u.freq.e = 3; */ |
@@ -110,7 +109,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
110 | max_rate = 0; | 109 | max_rate = 0; |
111 | p = custom; | 110 | p = custom; |
112 | p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): "); | 111 | p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): "); |
113 | for (i = 0, j = 0; i < network->rates_len; ) { | 112 | for (i = 0, j = 0; i < network->rates_len;) { |
114 | if (j < network->rates_ex_len && | 113 | if (j < network->rates_ex_len && |
115 | ((network->rates_ex[j] & 0x7F) < | 114 | ((network->rates_ex[j] & 0x7F) < |
116 | (network->rates[i] & 0x7F))) | 115 | (network->rates[i] & 0x7F))) |
@@ -133,8 +132,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
133 | iwe.cmd = SIOCGIWRATE; | 132 | iwe.cmd = SIOCGIWRATE; |
134 | iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; | 133 | iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0; |
135 | iwe.u.bitrate.value = max_rate * 500000; | 134 | iwe.u.bitrate.value = max_rate * 500000; |
136 | start = iwe_stream_add_event(start, stop, &iwe, | 135 | start = iwe_stream_add_event(start, stop, &iwe, IW_EV_PARAM_LEN); |
137 | IW_EV_PARAM_LEN); | ||
138 | 136 | ||
139 | iwe.cmd = IWEVCUSTOM; | 137 | iwe.cmd = IWEVCUSTOM; |
140 | iwe.u.data.length = p - custom; | 138 | iwe.u.data.length = p - custom; |
@@ -164,7 +162,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
164 | if (iwe.u.data.length) | 162 | if (iwe.u.data.length) |
165 | start = iwe_stream_add_point(start, stop, &iwe, custom); | 163 | start = iwe_stream_add_point(start, stop, &iwe, custom); |
166 | 164 | ||
167 | if (ieee->wpa_enabled && network->wpa_ie_len){ | 165 | if (ieee->wpa_enabled && network->wpa_ie_len) { |
168 | char buf[MAX_WPA_IE_LEN * 2 + 30]; | 166 | char buf[MAX_WPA_IE_LEN * 2 + 30]; |
169 | 167 | ||
170 | u8 *p = buf; | 168 | u8 *p = buf; |
@@ -179,7 +177,7 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
179 | start = iwe_stream_add_point(start, stop, &iwe, buf); | 177 | start = iwe_stream_add_point(start, stop, &iwe, buf); |
180 | } | 178 | } |
181 | 179 | ||
182 | if (ieee->wpa_enabled && network->rsn_ie_len){ | 180 | if (ieee->wpa_enabled && network->rsn_ie_len) { |
183 | char buf[MAX_WPA_IE_LEN * 2 + 30]; | 181 | char buf[MAX_WPA_IE_LEN * 2 + 30]; |
184 | 182 | ||
185 | u8 *p = buf; | 183 | u8 *p = buf; |
@@ -199,12 +197,12 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, | |||
199 | iwe.cmd = IWEVCUSTOM; | 197 | iwe.cmd = IWEVCUSTOM; |
200 | p = custom; | 198 | p = custom; |
201 | p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), | 199 | p += snprintf(p, MAX_CUSTOM_LEN - (p - custom), |
202 | " Last beacon: %lums ago", (jiffies - network->last_scanned) / (HZ / 100)); | 200 | " Last beacon: %lums ago", |
201 | (jiffies - network->last_scanned) / (HZ / 100)); | ||
203 | iwe.u.data.length = p - custom; | 202 | iwe.u.data.length = p - custom; |
204 | if (iwe.u.data.length) | 203 | if (iwe.u.data.length) |
205 | start = iwe_stream_add_point(start, stop, &iwe, custom); | 204 | start = iwe_stream_add_point(start, stop, &iwe, custom); |
206 | 205 | ||
207 | |||
208 | return start; | 206 | return start; |
209 | } | 207 | } |
210 | 208 | ||
@@ -229,18 +227,19 @@ int ieee80211_wx_get_scan(struct ieee80211_device *ieee, | |||
229 | time_after(network->last_scanned + ieee->scan_age, jiffies)) | 227 | time_after(network->last_scanned + ieee->scan_age, jiffies)) |
230 | ev = ipw2100_translate_scan(ieee, ev, stop, network); | 228 | ev = ipw2100_translate_scan(ieee, ev, stop, network); |
231 | else | 229 | else |
232 | IEEE80211_DEBUG_SCAN( | 230 | IEEE80211_DEBUG_SCAN("Not showing network '%s (" |
233 | "Not showing network '%s (" | 231 | MAC_FMT ")' due to age (%lums).\n", |
234 | MAC_FMT ")' due to age (%lums).\n", | 232 | escape_essid(network->ssid, |
235 | escape_essid(network->ssid, | 233 | network->ssid_len), |
236 | network->ssid_len), | 234 | MAC_ARG(network->bssid), |
237 | MAC_ARG(network->bssid), | 235 | (jiffies - |
238 | (jiffies - network->last_scanned) / (HZ / 100)); | 236 | network->last_scanned) / (HZ / |
237 | 100)); | ||
239 | } | 238 | } |
240 | 239 | ||
241 | spin_unlock_irqrestore(&ieee->lock, flags); | 240 | spin_unlock_irqrestore(&ieee->lock, flags); |
242 | 241 | ||
243 | wrqu->data.length = ev - extra; | 242 | wrqu->data.length = ev - extra; |
244 | wrqu->data.flags = 0; | 243 | wrqu->data.flags = 0; |
245 | 244 | ||
246 | IEEE80211_DEBUG_WX("exit: %d networks returned.\n", i); | 245 | IEEE80211_DEBUG_WX("exit: %d networks returned.\n", i); |
@@ -292,8 +291,8 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
292 | if (ieee->crypt[i] != NULL) { | 291 | if (ieee->crypt[i] != NULL) { |
293 | if (key_provided) | 292 | if (key_provided) |
294 | break; | 293 | break; |
295 | ieee80211_crypt_delayed_deinit( | 294 | ieee80211_crypt_delayed_deinit(ieee, |
296 | ieee, &ieee->crypt[i]); | 295 | &ieee->crypt[i]); |
297 | } | 296 | } |
298 | } | 297 | } |
299 | 298 | ||
@@ -306,8 +305,6 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
306 | goto done; | 305 | goto done; |
307 | } | 306 | } |
308 | 307 | ||
309 | |||
310 | |||
311 | sec.enabled = 1; | 308 | sec.enabled = 1; |
312 | sec.flags |= SEC_ENABLED; | 309 | sec.flags |= SEC_ENABLED; |
313 | 310 | ||
@@ -341,8 +338,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
341 | new_crypt = NULL; | 338 | new_crypt = NULL; |
342 | 339 | ||
343 | printk(KERN_WARNING "%s: could not initialize WEP: " | 340 | printk(KERN_WARNING "%s: could not initialize WEP: " |
344 | "load module ieee80211_crypt_wep\n", | 341 | "load module ieee80211_crypt_wep\n", dev->name); |
345 | dev->name); | ||
346 | return -EOPNOTSUPP; | 342 | return -EOPNOTSUPP; |
347 | } | 343 | } |
348 | *crypt = new_crypt; | 344 | *crypt = new_crypt; |
@@ -359,7 +355,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
359 | key, escape_essid(sec.keys[key], len), | 355 | key, escape_essid(sec.keys[key], len), |
360 | erq->length, len); | 356 | erq->length, len); |
361 | sec.key_sizes[key] = len; | 357 | sec.key_sizes[key] = len; |
362 | (*crypt)->ops->set_key(sec.keys[key], len, NULL, | 358 | (*crypt)->ops->set_key(sec.keys[key], len, NULL, |
363 | (*crypt)->priv); | 359 | (*crypt)->priv); |
364 | sec.flags |= (1 << key); | 360 | sec.flags |= (1 << key); |
365 | /* This ensures a key will be activated if no key is | 361 | /* This ensures a key will be activated if no key is |
@@ -382,15 +378,15 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
382 | 378 | ||
383 | /* No key data - just set the default TX key index */ | 379 | /* No key data - just set the default TX key index */ |
384 | if (key_provided) { | 380 | if (key_provided) { |
385 | IEEE80211_DEBUG_WX( | 381 | IEEE80211_DEBUG_WX |
386 | "Setting key %d to default Tx key.\n", key); | 382 | ("Setting key %d to default Tx key.\n", key); |
387 | ieee->tx_keyidx = key; | 383 | ieee->tx_keyidx = key; |
388 | sec.active_key = key; | 384 | sec.active_key = key; |
389 | sec.flags |= SEC_ACTIVE_KEY; | 385 | sec.flags |= SEC_ACTIVE_KEY; |
390 | } | 386 | } |
391 | } | 387 | } |
392 | 388 | ||
393 | done: | 389 | done: |
394 | ieee->open_wep = !(erq->flags & IW_ENCODE_RESTRICTED); | 390 | ieee->open_wep = !(erq->flags & IW_ENCODE_RESTRICTED); |
395 | sec.auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY; | 391 | sec.auth_mode = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY; |
396 | sec.flags |= SEC_AUTH_MODE; | 392 | sec.flags |= SEC_AUTH_MODE; |
@@ -400,7 +396,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, | |||
400 | /* For now we just support WEP, so only set that security level... | 396 | /* For now we just support WEP, so only set that security level... |
401 | * TODO: When WPA is added this is one place that needs to change */ | 397 | * TODO: When WPA is added this is one place that needs to change */ |
402 | sec.flags |= SEC_LEVEL; | 398 | sec.flags |= SEC_LEVEL; |
403 | sec.level = SEC_LEVEL_1; /* 40 and 104 bit WEP */ | 399 | sec.level = SEC_LEVEL_1; /* 40 and 104 bit WEP */ |
404 | 400 | ||
405 | if (ieee->set_security) | 401 | if (ieee->set_security) |
406 | ieee->set_security(dev, &sec); | 402 | ieee->set_security(dev, &sec); |