diff options
Diffstat (limited to 'net/ieee80211')
-rw-r--r-- | net/ieee80211/ieee80211_crypt_wep.c | 8 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_rx.c | 6 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_tx.c | 6 | ||||
-rw-r--r-- | net/ieee80211/ieee80211_wx.c | 4 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_assoc.c | 20 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_auth.c | 78 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_event.c | 12 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_io.c | 64 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_module.c | 46 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_priv.h | 12 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_scan.c | 14 | ||||
-rw-r--r-- | net/ieee80211/softmac/ieee80211softmac_wx.c | 22 |
12 files changed, 149 insertions, 143 deletions
diff --git a/net/ieee80211/ieee80211_crypt_wep.c b/net/ieee80211/ieee80211_crypt_wep.c index 7a95c3d81314..ec6d8851a061 100644 --- a/net/ieee80211/ieee80211_crypt_wep.c +++ b/net/ieee80211/ieee80211_crypt_wep.c | |||
@@ -97,7 +97,7 @@ static int prism2_wep_build_iv(struct sk_buff *skb, int hdr_len, | |||
97 | struct prism2_wep_data *wep = priv; | 97 | struct prism2_wep_data *wep = priv; |
98 | u32 klen, len; | 98 | u32 klen, len; |
99 | u8 *pos; | 99 | u8 *pos; |
100 | 100 | ||
101 | if (skb_headroom(skb) < 4 || skb->len < hdr_len) | 101 | if (skb_headroom(skb) < 4 || skb->len < hdr_len) |
102 | return -1; | 102 | return -1; |
103 | 103 | ||
@@ -146,17 +146,17 @@ static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) | |||
146 | /* other checks are in prism2_wep_build_iv */ | 146 | /* other checks are in prism2_wep_build_iv */ |
147 | if (skb_tailroom(skb) < 4) | 147 | if (skb_tailroom(skb) < 4) |
148 | return -1; | 148 | return -1; |
149 | 149 | ||
150 | /* add the IV to the frame */ | 150 | /* add the IV to the frame */ |
151 | if (prism2_wep_build_iv(skb, hdr_len, NULL, 0, priv)) | 151 | if (prism2_wep_build_iv(skb, hdr_len, NULL, 0, priv)) |
152 | return -1; | 152 | return -1; |
153 | 153 | ||
154 | /* Copy the IV into the first 3 bytes of the key */ | 154 | /* Copy the IV into the first 3 bytes of the key */ |
155 | memcpy(key, skb->data + hdr_len, 3); | 155 | memcpy(key, skb->data + hdr_len, 3); |
156 | 156 | ||
157 | /* Copy rest of the WEP key (the secret part) */ | 157 | /* Copy rest of the WEP key (the secret part) */ |
158 | memcpy(key + 3, wep->key, wep->key_len); | 158 | memcpy(key + 3, wep->key, wep->key_len); |
159 | 159 | ||
160 | len = skb->len - hdr_len - 4; | 160 | len = skb->len - hdr_len - 4; |
161 | pos = skb->data + hdr_len + 4; | 161 | pos = skb->data + hdr_len + 4; |
162 | klen = 3 + wep->key_len; | 162 | klen = 3 + wep->key_len; |
diff --git a/net/ieee80211/ieee80211_rx.c b/net/ieee80211/ieee80211_rx.c index d97e5412e31b..4084909f6f92 100644 --- a/net/ieee80211/ieee80211_rx.c +++ b/net/ieee80211/ieee80211_rx.c | |||
@@ -663,7 +663,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, | |||
663 | * any security data (IV, ICV, etc) that was left behind */ | 663 | * any security data (IV, ICV, etc) that was left behind */ |
664 | if (!can_be_decrypted && (fc & IEEE80211_FCTL_PROTECTED) && | 664 | if (!can_be_decrypted && (fc & IEEE80211_FCTL_PROTECTED) && |
665 | ieee->host_strip_iv_icv) { | 665 | ieee->host_strip_iv_icv) { |
666 | int trimlen = 0; | 666 | int trimlen = 0; |
667 | 667 | ||
668 | /* Top two-bits of byte 3 are the key index */ | 668 | /* Top two-bits of byte 3 are the key index */ |
669 | if (skb->len >= hdrlen + 3) | 669 | if (skb->len >= hdrlen + 3) |
@@ -852,7 +852,7 @@ void ieee80211_rx_any(struct ieee80211_device *ieee, | |||
852 | 852 | ||
853 | if ((fc & IEEE80211_FCTL_VERS) != 0) | 853 | if ((fc & IEEE80211_FCTL_VERS) != 0) |
854 | goto drop_free; | 854 | goto drop_free; |
855 | 855 | ||
856 | switch (fc & IEEE80211_FCTL_FTYPE) { | 856 | switch (fc & IEEE80211_FCTL_FTYPE) { |
857 | case IEEE80211_FTYPE_MGMT: | 857 | case IEEE80211_FTYPE_MGMT: |
858 | if (skb->len < sizeof(struct ieee80211_hdr_3addr)) | 858 | if (skb->len < sizeof(struct ieee80211_hdr_3addr)) |
@@ -1489,7 +1489,7 @@ static void update_network(struct ieee80211_network *dst, | |||
1489 | 1489 | ||
1490 | /* We only update the statistics if they were created by receiving | 1490 | /* We only update the statistics if they were created by receiving |
1491 | * the network information on the actual channel the network is on. | 1491 | * the network information on the actual channel the network is on. |
1492 | * | 1492 | * |
1493 | * This keeps beacons received on neighbor channels from bringing | 1493 | * This keeps beacons received on neighbor channels from bringing |
1494 | * down the signal level of an AP. */ | 1494 | * down the signal level of an AP. */ |
1495 | if (dst->channel == src->stats.received_channel) | 1495 | if (dst->channel == src->stats.received_channel) |
diff --git a/net/ieee80211/ieee80211_tx.c b/net/ieee80211/ieee80211_tx.c index 54e01160166f..0292d6348e12 100644 --- a/net/ieee80211/ieee80211_tx.c +++ b/net/ieee80211/ieee80211_tx.c | |||
@@ -54,7 +54,7 @@ Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | Frame | fcs | | |||
54 | | | tion | (BSSID) | | | ence | data | | | 54 | | | tion | (BSSID) | | | ence | data | | |
55 | `--------------------------------------------------| |------' | 55 | `--------------------------------------------------| |------' |
56 | Total: 28 non-data bytes `----.----' | 56 | Total: 28 non-data bytes `----.----' |
57 | | | 57 | | |
58 | .- 'Frame data' expands, if WEP enabled, to <----------' | 58 | .- 'Frame data' expands, if WEP enabled, to <----------' |
59 | | | 59 | | |
60 | V | 60 | V |
@@ -64,8 +64,8 @@ Bytes | 4 | 0-2296 | 4 | | |||
64 | Desc. | IV | Encrypted | ICV | | 64 | Desc. | IV | Encrypted | ICV | |
65 | | | Packet | | | 65 | | | Packet | | |
66 | `-----| |-----' | 66 | `-----| |-----' |
67 | `-----.-----' | 67 | `-----.-----' |
68 | | | 68 | | |
69 | .- 'Encrypted Packet' expands to | 69 | .- 'Encrypted Packet' expands to |
70 | | | 70 | | |
71 | V | 71 | V |
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c index 5cb9cfd35397..40d7a55fe03e 100644 --- a/net/ieee80211/ieee80211_wx.c +++ b/net/ieee80211/ieee80211_wx.c | |||
@@ -754,7 +754,7 @@ int ieee80211_wx_set_auth(struct net_device *dev, | |||
754 | int err = 0; | 754 | int err = 0; |
755 | 755 | ||
756 | spin_lock_irqsave(&ieee->lock, flags); | 756 | spin_lock_irqsave(&ieee->lock, flags); |
757 | 757 | ||
758 | switch (wrqu->param.flags & IW_AUTH_INDEX) { | 758 | switch (wrqu->param.flags & IW_AUTH_INDEX) { |
759 | case IW_AUTH_WPA_VERSION: | 759 | case IW_AUTH_WPA_VERSION: |
760 | case IW_AUTH_CIPHER_PAIRWISE: | 760 | case IW_AUTH_CIPHER_PAIRWISE: |
@@ -799,7 +799,7 @@ int ieee80211_wx_get_auth(struct net_device *dev, | |||
799 | int err = 0; | 799 | int err = 0; |
800 | 800 | ||
801 | spin_lock_irqsave(&ieee->lock, flags); | 801 | spin_lock_irqsave(&ieee->lock, flags); |
802 | 802 | ||
803 | switch (wrqu->param.flags & IW_AUTH_INDEX) { | 803 | switch (wrqu->param.flags & IW_AUTH_INDEX) { |
804 | case IW_AUTH_WPA_VERSION: | 804 | case IW_AUTH_WPA_VERSION: |
805 | case IW_AUTH_CIPHER_PAIRWISE: | 805 | case IW_AUTH_CIPHER_PAIRWISE: |
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c index a824852909e4..cc8110bdd579 100644 --- a/net/ieee80211/softmac/ieee80211softmac_assoc.c +++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c | |||
@@ -30,7 +30,7 @@ | |||
30 | * Overview | 30 | * Overview |
31 | * | 31 | * |
32 | * Before you can associate, you have to authenticate. | 32 | * Before you can associate, you have to authenticate. |
33 | * | 33 | * |
34 | */ | 34 | */ |
35 | 35 | ||
36 | /* Sends out an association request to the desired AP */ | 36 | /* Sends out an association request to the desired AP */ |
@@ -41,10 +41,10 @@ ieee80211softmac_assoc(struct ieee80211softmac_device *mac, struct ieee80211soft | |||
41 | 41 | ||
42 | /* Switch to correct channel for this network */ | 42 | /* Switch to correct channel for this network */ |
43 | mac->set_channel(mac->dev, net->channel); | 43 | mac->set_channel(mac->dev, net->channel); |
44 | 44 | ||
45 | /* Send association request */ | 45 | /* Send association request */ |
46 | ieee80211softmac_send_mgt_frame(mac, net, IEEE80211_STYPE_ASSOC_REQ, 0); | 46 | ieee80211softmac_send_mgt_frame(mac, net, IEEE80211_STYPE_ASSOC_REQ, 0); |
47 | 47 | ||
48 | dprintk(KERN_INFO PFX "sent association request!\n"); | 48 | dprintk(KERN_INFO PFX "sent association request!\n"); |
49 | 49 | ||
50 | spin_lock_irqsave(&mac->lock, flags); | 50 | spin_lock_irqsave(&mac->lock, flags); |
@@ -153,7 +153,7 @@ network_matches_request(struct ieee80211softmac_device *mac, struct ieee80211_ne | |||
153 | } | 153 | } |
154 | 154 | ||
155 | /* if 'ANY' network requested, take any that doesn't have privacy enabled */ | 155 | /* if 'ANY' network requested, take any that doesn't have privacy enabled */ |
156 | if (mac->associnfo.req_essid.len == 0 | 156 | if (mac->associnfo.req_essid.len == 0 |
157 | && !(net->capability & WLAN_CAPABILITY_PRIVACY)) | 157 | && !(net->capability & WLAN_CAPABILITY_PRIVACY)) |
158 | return 1; | 158 | return 1; |
159 | if (net->ssid_len != mac->associnfo.req_essid.len) | 159 | if (net->ssid_len != mac->associnfo.req_essid.len) |
@@ -212,8 +212,8 @@ ieee80211softmac_assoc_work(struct work_struct *work) | |||
212 | 212 | ||
213 | /* try to find the requested network in our list, if we found one already */ | 213 | /* try to find the requested network in our list, if we found one already */ |
214 | if (bssvalid || mac->associnfo.bssfixed) | 214 | if (bssvalid || mac->associnfo.bssfixed) |
215 | found = ieee80211softmac_get_network_by_bssid(mac, mac->associnfo.bssid); | 215 | found = ieee80211softmac_get_network_by_bssid(mac, mac->associnfo.bssid); |
216 | 216 | ||
217 | /* Search the ieee80211 networks for this network if we didn't find it by bssid, | 217 | /* Search the ieee80211 networks for this network if we didn't find it by bssid, |
218 | * but only if we've scanned at least once (to get a better list of networks to | 218 | * but only if we've scanned at least once (to get a better list of networks to |
219 | * select from). If we have not scanned before, the !found logic below will be | 219 | * select from). If we have not scanned before, the !found logic below will be |
@@ -265,7 +265,7 @@ ieee80211softmac_assoc_work(struct work_struct *work) | |||
265 | if (mac->associnfo.scan_retry > 0) { | 265 | if (mac->associnfo.scan_retry > 0) { |
266 | mac->associnfo.scan_retry--; | 266 | mac->associnfo.scan_retry--; |
267 | 267 | ||
268 | /* We know of no such network. Let's scan. | 268 | /* We know of no such network. Let's scan. |
269 | * NB: this also happens if we had no memory to copy the network info... | 269 | * NB: this also happens if we had no memory to copy the network info... |
270 | * Maybe we can hope to have more memory after scanning finishes ;) | 270 | * Maybe we can hope to have more memory after scanning finishes ;) |
271 | */ | 271 | */ |
@@ -353,7 +353,7 @@ ieee80211softmac_associated(struct ieee80211softmac_device *mac, | |||
353 | mac->set_bssid_filter(mac->dev, net->bssid); | 353 | mac->set_bssid_filter(mac->dev, net->bssid); |
354 | memcpy(mac->ieee->bssid, net->bssid, ETH_ALEN); | 354 | memcpy(mac->ieee->bssid, net->bssid, ETH_ALEN); |
355 | netif_carrier_on(mac->dev); | 355 | netif_carrier_on(mac->dev); |
356 | 356 | ||
357 | mac->association_id = le16_to_cpup(&resp->aid); | 357 | mac->association_id = le16_to_cpup(&resp->aid); |
358 | } | 358 | } |
359 | 359 | ||
@@ -374,7 +374,7 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev, | |||
374 | 374 | ||
375 | if (unlikely(!mac->running)) | 375 | if (unlikely(!mac->running)) |
376 | return -ENODEV; | 376 | return -ENODEV; |
377 | 377 | ||
378 | spin_lock_irqsave(&mac->lock, flags); | 378 | spin_lock_irqsave(&mac->lock, flags); |
379 | 379 | ||
380 | if (!mac->associnfo.associating) { | 380 | if (!mac->associnfo.associating) { |
@@ -426,7 +426,7 @@ ieee80211softmac_handle_assoc_response(struct net_device * dev, | |||
426 | mac->associnfo.associated = 0; | 426 | mac->associnfo.associated = 0; |
427 | ieee80211softmac_call_events_locked(mac, IEEE80211SOFTMAC_EVENT_ASSOCIATE_FAILED, network); | 427 | ieee80211softmac_call_events_locked(mac, IEEE80211SOFTMAC_EVENT_ASSOCIATE_FAILED, network); |
428 | } | 428 | } |
429 | 429 | ||
430 | spin_unlock_irqrestore(&mac->lock, flags); | 430 | spin_unlock_irqrestore(&mac->lock, flags); |
431 | return 0; | 431 | return 0; |
432 | } | 432 | } |
diff --git a/net/ieee80211/softmac/ieee80211softmac_auth.c b/net/ieee80211/softmac/ieee80211softmac_auth.c index 8ed3e59b8024..826c32d24461 100644 --- a/net/ieee80211/softmac/ieee80211softmac_auth.c +++ b/net/ieee80211/softmac/ieee80211softmac_auth.c | |||
@@ -30,12 +30,12 @@ static void ieee80211softmac_auth_queue(struct work_struct *work); | |||
30 | 30 | ||
31 | /* Queues an auth request to the desired AP */ | 31 | /* Queues an auth request to the desired AP */ |
32 | int | 32 | int |
33 | ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, | 33 | ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, |
34 | struct ieee80211softmac_network *net) | 34 | struct ieee80211softmac_network *net) |
35 | { | 35 | { |
36 | struct ieee80211softmac_auth_queue_item *auth; | 36 | struct ieee80211softmac_auth_queue_item *auth; |
37 | unsigned long flags; | 37 | unsigned long flags; |
38 | 38 | ||
39 | if (net->authenticating || net->authenticated) | 39 | if (net->authenticating || net->authenticated) |
40 | return 0; | 40 | return 0; |
41 | net->authenticating = 1; | 41 | net->authenticating = 1; |
@@ -55,7 +55,7 @@ ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, | |||
55 | auth->retry = IEEE80211SOFTMAC_AUTH_RETRY_LIMIT; | 55 | auth->retry = IEEE80211SOFTMAC_AUTH_RETRY_LIMIT; |
56 | auth->state = IEEE80211SOFTMAC_AUTH_OPEN_REQUEST; | 56 | auth->state = IEEE80211SOFTMAC_AUTH_OPEN_REQUEST; |
57 | INIT_DELAYED_WORK(&auth->work, ieee80211softmac_auth_queue); | 57 | INIT_DELAYED_WORK(&auth->work, ieee80211softmac_auth_queue); |
58 | 58 | ||
59 | /* Lock (for list) */ | 59 | /* Lock (for list) */ |
60 | spin_lock_irqsave(&mac->lock, flags); | 60 | spin_lock_irqsave(&mac->lock, flags); |
61 | 61 | ||
@@ -63,7 +63,7 @@ ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, | |||
63 | list_add_tail(&auth->list, &mac->auth_queue); | 63 | list_add_tail(&auth->list, &mac->auth_queue); |
64 | schedule_delayed_work(&auth->work, 0); | 64 | schedule_delayed_work(&auth->work, 0); |
65 | spin_unlock_irqrestore(&mac->lock, flags); | 65 | spin_unlock_irqrestore(&mac->lock, flags); |
66 | 66 | ||
67 | return 0; | 67 | return 0; |
68 | } | 68 | } |
69 | 69 | ||
@@ -85,7 +85,7 @@ ieee80211softmac_auth_queue(struct work_struct *work) | |||
85 | if(auth->retry > 0) { | 85 | if(auth->retry > 0) { |
86 | /* Switch to correct channel for this network */ | 86 | /* Switch to correct channel for this network */ |
87 | mac->set_channel(mac->dev, net->channel); | 87 | mac->set_channel(mac->dev, net->channel); |
88 | 88 | ||
89 | /* Lock and set flags */ | 89 | /* Lock and set flags */ |
90 | spin_lock_irqsave(&mac->lock, flags); | 90 | spin_lock_irqsave(&mac->lock, flags); |
91 | if (unlikely(!mac->running)) { | 91 | if (unlikely(!mac->running)) { |
@@ -130,11 +130,11 @@ ieee80211softmac_auth_challenge_response(struct work_struct *work) | |||
130 | } | 130 | } |
131 | 131 | ||
132 | /* Handle the auth response from the AP | 132 | /* Handle the auth response from the AP |
133 | * This should be registered with ieee80211 as handle_auth | 133 | * This should be registered with ieee80211 as handle_auth |
134 | */ | 134 | */ |
135 | int | 135 | int |
136 | ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | 136 | ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) |
137 | { | 137 | { |
138 | 138 | ||
139 | struct list_head *list_ptr; | 139 | struct list_head *list_ptr; |
140 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); | 140 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); |
@@ -142,7 +142,7 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
142 | struct ieee80211softmac_network *net = NULL; | 142 | struct ieee80211softmac_network *net = NULL; |
143 | unsigned long flags; | 143 | unsigned long flags; |
144 | u8 * data; | 144 | u8 * data; |
145 | 145 | ||
146 | if (unlikely(!mac->running)) | 146 | if (unlikely(!mac->running)) |
147 | return -ENODEV; | 147 | return -ENODEV; |
148 | 148 | ||
@@ -157,15 +157,15 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
157 | aq = NULL; | 157 | aq = NULL; |
158 | } | 158 | } |
159 | spin_unlock_irqrestore(&mac->lock, flags); | 159 | spin_unlock_irqrestore(&mac->lock, flags); |
160 | 160 | ||
161 | /* Make sure that we've got an auth queue item for this request */ | 161 | /* Make sure that we've got an auth queue item for this request */ |
162 | if(aq == NULL) | 162 | if(aq == NULL) |
163 | { | 163 | { |
164 | dprintkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but no queue item exists.\n", MAC_ARG(auth->header.addr2)); | 164 | dprintkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but no queue item exists.\n", MAC_ARG(auth->header.addr2)); |
165 | /* Error #? */ | 165 | /* Error #? */ |
166 | return -1; | 166 | return -1; |
167 | } | 167 | } |
168 | 168 | ||
169 | /* Check for out of order authentication */ | 169 | /* Check for out of order authentication */ |
170 | if(!net->authenticating) | 170 | if(!net->authenticating) |
171 | { | 171 | { |
@@ -182,10 +182,10 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
182 | case WLAN_STATUS_SUCCESS: | 182 | case WLAN_STATUS_SUCCESS: |
183 | /* Update the status to Authenticated */ | 183 | /* Update the status to Authenticated */ |
184 | spin_lock_irqsave(&mac->lock, flags); | 184 | spin_lock_irqsave(&mac->lock, flags); |
185 | net->authenticating = 0; | 185 | net->authenticating = 0; |
186 | net->authenticated = 1; | 186 | net->authenticated = 1; |
187 | spin_unlock_irqrestore(&mac->lock, flags); | 187 | spin_unlock_irqrestore(&mac->lock, flags); |
188 | 188 | ||
189 | /* Send event */ | 189 | /* Send event */ |
190 | printkl(KERN_NOTICE PFX "Open Authentication completed with "MAC_FMT"\n", MAC_ARG(net->bssid)); | 190 | printkl(KERN_NOTICE PFX "Open Authentication completed with "MAC_FMT"\n", MAC_ARG(net->bssid)); |
191 | ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net); | 191 | ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net); |
@@ -196,8 +196,8 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
196 | net->authenticated = 0; | 196 | net->authenticated = 0; |
197 | net->authenticating = 0; | 197 | net->authenticating = 0; |
198 | spin_unlock_irqrestore(&mac->lock, flags); | 198 | spin_unlock_irqrestore(&mac->lock, flags); |
199 | 199 | ||
200 | printkl(KERN_NOTICE PFX "Open Authentication with "MAC_FMT" failed, error code: %i\n", | 200 | printkl(KERN_NOTICE PFX "Open Authentication with "MAC_FMT" failed, error code: %i\n", |
201 | MAC_ARG(net->bssid), le16_to_cpup(&auth->status)); | 201 | MAC_ARG(net->bssid), le16_to_cpup(&auth->status)); |
202 | /* Count the error? */ | 202 | /* Count the error? */ |
203 | break; | 203 | break; |
@@ -212,11 +212,11 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
212 | data = (u8 *)auth->info_element; | 212 | data = (u8 *)auth->info_element; |
213 | if (*data++ != MFIE_TYPE_CHALLENGE) { | 213 | if (*data++ != MFIE_TYPE_CHALLENGE) { |
214 | printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n"); | 214 | printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n"); |
215 | break; | 215 | break; |
216 | } | 216 | } |
217 | /* Save the challenge */ | 217 | /* Save the challenge */ |
218 | spin_lock_irqsave(&mac->lock, flags); | 218 | spin_lock_irqsave(&mac->lock, flags); |
219 | net->challenge_len = *data++; | 219 | net->challenge_len = *data++; |
220 | if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN) | 220 | if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN) |
221 | net->challenge_len = WLAN_AUTH_CHALLENGE_LEN; | 221 | net->challenge_len = WLAN_AUTH_CHALLENGE_LEN; |
222 | kfree(net->challenge); | 222 | kfree(net->challenge); |
@@ -229,7 +229,7 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
229 | spin_unlock_irqrestore(&mac->lock, flags); | 229 | spin_unlock_irqrestore(&mac->lock, flags); |
230 | break; | 230 | break; |
231 | } | 231 | } |
232 | aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE; | 232 | aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE; |
233 | 233 | ||
234 | /* We reuse the work struct from the auth request here. | 234 | /* We reuse the work struct from the auth request here. |
235 | * It is safe to do so as each one is per-request, and | 235 | * It is safe to do so as each one is per-request, and |
@@ -248,22 +248,22 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
248 | /* Check the status code of the response */ | 248 | /* Check the status code of the response */ |
249 | switch(auth->status) { | 249 | switch(auth->status) { |
250 | case WLAN_STATUS_SUCCESS: | 250 | case WLAN_STATUS_SUCCESS: |
251 | /* Update the status to Authenticated */ | 251 | /* Update the status to Authenticated */ |
252 | spin_lock_irqsave(&mac->lock, flags); | 252 | spin_lock_irqsave(&mac->lock, flags); |
253 | net->authenticating = 0; | 253 | net->authenticating = 0; |
254 | net->authenticated = 1; | 254 | net->authenticated = 1; |
255 | spin_unlock_irqrestore(&mac->lock, flags); | 255 | spin_unlock_irqrestore(&mac->lock, flags); |
256 | printkl(KERN_NOTICE PFX "Shared Key Authentication completed with "MAC_FMT"\n", | 256 | printkl(KERN_NOTICE PFX "Shared Key Authentication completed with "MAC_FMT"\n", |
257 | MAC_ARG(net->bssid)); | 257 | MAC_ARG(net->bssid)); |
258 | ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net); | 258 | ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net); |
259 | break; | 259 | break; |
260 | default: | 260 | default: |
261 | printkl(KERN_NOTICE PFX "Shared Key Authentication with "MAC_FMT" failed, error code: %i\n", | 261 | printkl(KERN_NOTICE PFX "Shared Key Authentication with "MAC_FMT" failed, error code: %i\n", |
262 | MAC_ARG(net->bssid), le16_to_cpup(&auth->status)); | 262 | MAC_ARG(net->bssid), le16_to_cpup(&auth->status)); |
263 | /* Lock and reset flags */ | 263 | /* Lock and reset flags */ |
264 | spin_lock_irqsave(&mac->lock, flags); | 264 | spin_lock_irqsave(&mac->lock, flags); |
265 | net->authenticating = 0; | 265 | net->authenticating = 0; |
266 | net->authenticated = 0; | 266 | net->authenticated = 0; |
267 | spin_unlock_irqrestore(&mac->lock, flags); | 267 | spin_unlock_irqrestore(&mac->lock, flags); |
268 | /* Count the error? */ | 268 | /* Count the error? */ |
269 | break; | 269 | break; |
@@ -277,7 +277,7 @@ ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth) | |||
277 | goto free_aq; | 277 | goto free_aq; |
278 | break; | 278 | break; |
279 | default: | 279 | default: |
280 | /* ERROR */ | 280 | /* ERROR */ |
281 | goto free_aq; | 281 | goto free_aq; |
282 | break; | 282 | break; |
283 | } | 283 | } |
@@ -313,7 +313,7 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, | |||
313 | spin_lock_irqsave(&mac->lock, flags); | 313 | spin_lock_irqsave(&mac->lock, flags); |
314 | net->authenticating = 0; | 314 | net->authenticating = 0; |
315 | net->authenticated = 0; | 315 | net->authenticated = 0; |
316 | 316 | ||
317 | /* Find correct auth queue item, if it exists */ | 317 | /* Find correct auth queue item, if it exists */ |
318 | list_for_each(list_ptr, &mac->auth_queue) { | 318 | list_for_each(list_ptr, &mac->auth_queue) { |
319 | aq = list_entry(list_ptr, struct ieee80211softmac_auth_queue_item, list); | 319 | aq = list_entry(list_ptr, struct ieee80211softmac_auth_queue_item, list); |
@@ -322,7 +322,7 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, | |||
322 | else | 322 | else |
323 | aq = NULL; | 323 | aq = NULL; |
324 | } | 324 | } |
325 | 325 | ||
326 | /* Cancel pending work */ | 326 | /* Cancel pending work */ |
327 | if(aq != NULL) | 327 | if(aq != NULL) |
328 | /* Not entirely safe? What about running work? */ | 328 | /* Not entirely safe? What about running work? */ |
@@ -333,7 +333,7 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, | |||
333 | if(net->challenge != NULL) | 333 | if(net->challenge != NULL) |
334 | kfree(net->challenge); | 334 | kfree(net->challenge); |
335 | kfree(net); | 335 | kfree(net); |
336 | 336 | ||
337 | /* can't transmit data right now... */ | 337 | /* can't transmit data right now... */ |
338 | netif_carrier_off(mac->dev); | 338 | netif_carrier_off(mac->dev); |
339 | spin_unlock_irqrestore(&mac->lock, flags); | 339 | spin_unlock_irqrestore(&mac->lock, flags); |
@@ -341,15 +341,15 @@ ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac, | |||
341 | ieee80211softmac_try_reassoc(mac); | 341 | ieee80211softmac_try_reassoc(mac); |
342 | } | 342 | } |
343 | 343 | ||
344 | /* | 344 | /* |
345 | * Sends a deauth request to the desired AP | 345 | * Sends a deauth request to the desired AP |
346 | */ | 346 | */ |
347 | int | 347 | int |
348 | ieee80211softmac_deauth_req(struct ieee80211softmac_device *mac, | 348 | ieee80211softmac_deauth_req(struct ieee80211softmac_device *mac, |
349 | struct ieee80211softmac_network *net, int reason) | 349 | struct ieee80211softmac_network *net, int reason) |
350 | { | 350 | { |
351 | int ret; | 351 | int ret; |
352 | 352 | ||
353 | /* Make sure the network is authenticated */ | 353 | /* Make sure the network is authenticated */ |
354 | if (!net->authenticated) | 354 | if (!net->authenticated) |
355 | { | 355 | { |
@@ -357,25 +357,25 @@ ieee80211softmac_deauth_req(struct ieee80211softmac_device *mac, | |||
357 | /* Error okay? */ | 357 | /* Error okay? */ |
358 | return -EPERM; | 358 | return -EPERM; |
359 | } | 359 | } |
360 | 360 | ||
361 | /* Send the de-auth packet */ | 361 | /* Send the de-auth packet */ |
362 | if((ret = ieee80211softmac_send_mgt_frame(mac, net, IEEE80211_STYPE_DEAUTH, reason))) | 362 | if((ret = ieee80211softmac_send_mgt_frame(mac, net, IEEE80211_STYPE_DEAUTH, reason))) |
363 | return ret; | 363 | return ret; |
364 | 364 | ||
365 | ieee80211softmac_deauth_from_net(mac, net); | 365 | ieee80211softmac_deauth_from_net(mac, net); |
366 | return 0; | 366 | return 0; |
367 | } | 367 | } |
368 | 368 | ||
369 | /* | 369 | /* |
370 | * This should be registered with ieee80211 as handle_deauth | 370 | * This should be registered with ieee80211 as handle_deauth |
371 | */ | 371 | */ |
372 | int | 372 | int |
373 | ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *deauth) | 373 | ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *deauth) |
374 | { | 374 | { |
375 | 375 | ||
376 | struct ieee80211softmac_network *net = NULL; | 376 | struct ieee80211softmac_network *net = NULL; |
377 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); | 377 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); |
378 | 378 | ||
379 | if (unlikely(!mac->running)) | 379 | if (unlikely(!mac->running)) |
380 | return -ENODEV; | 380 | return -ENODEV; |
381 | 381 | ||
@@ -385,7 +385,7 @@ ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *de | |||
385 | } | 385 | } |
386 | 386 | ||
387 | net = ieee80211softmac_get_network_by_bssid(mac, deauth->header.addr2); | 387 | net = ieee80211softmac_get_network_by_bssid(mac, deauth->header.addr2); |
388 | 388 | ||
389 | if (net == NULL) { | 389 | if (net == NULL) { |
390 | dprintkl(KERN_DEBUG PFX "Received deauthentication packet from "MAC_FMT", but that network is unknown.\n", | 390 | dprintkl(KERN_DEBUG PFX "Received deauthentication packet from "MAC_FMT", but that network is unknown.\n", |
391 | MAC_ARG(deauth->header.addr2)); | 391 | MAC_ARG(deauth->header.addr2)); |
diff --git a/net/ieee80211/softmac/ieee80211softmac_event.c b/net/ieee80211/softmac/ieee80211softmac_event.c index b9015656cfb3..b3e33a4d4869 100644 --- a/net/ieee80211/softmac/ieee80211softmac_event.c +++ b/net/ieee80211/softmac/ieee80211softmac_event.c | |||
@@ -79,7 +79,7 @@ ieee80211softmac_notify_callback(struct work_struct *work) | |||
79 | container_of(work, struct ieee80211softmac_event, work.work); | 79 | container_of(work, struct ieee80211softmac_event, work.work); |
80 | struct ieee80211softmac_event event = *pevent; | 80 | struct ieee80211softmac_event event = *pevent; |
81 | kfree(pevent); | 81 | kfree(pevent); |
82 | 82 | ||
83 | event.fun(event.mac->dev, event.event_type, event.context); | 83 | event.fun(event.mac->dev, event.event_type, event.context); |
84 | } | 84 | } |
85 | 85 | ||
@@ -92,14 +92,14 @@ ieee80211softmac_notify_internal(struct ieee80211softmac_device *mac, | |||
92 | 92 | ||
93 | if (event < -1 || event > IEEE80211SOFTMAC_EVENT_LAST) | 93 | if (event < -1 || event > IEEE80211SOFTMAC_EVENT_LAST) |
94 | return -ENOSYS; | 94 | return -ENOSYS; |
95 | 95 | ||
96 | if (!fun) | 96 | if (!fun) |
97 | return -EINVAL; | 97 | return -EINVAL; |
98 | 98 | ||
99 | eventptr = kmalloc(sizeof(struct ieee80211softmac_event), gfp_mask); | 99 | eventptr = kmalloc(sizeof(struct ieee80211softmac_event), gfp_mask); |
100 | if (!eventptr) | 100 | if (!eventptr) |
101 | return -ENOMEM; | 101 | return -ENOMEM; |
102 | 102 | ||
103 | eventptr->event_type = event; | 103 | eventptr->event_type = event; |
104 | INIT_DELAYED_WORK(&eventptr->work, ieee80211softmac_notify_callback); | 104 | INIT_DELAYED_WORK(&eventptr->work, ieee80211softmac_notify_callback); |
105 | eventptr->fun = fun; | 105 | eventptr->fun = fun; |
@@ -122,7 +122,7 @@ ieee80211softmac_notify_gfp(struct net_device *dev, | |||
122 | 122 | ||
123 | if (event < 0 || event > IEEE80211SOFTMAC_EVENT_LAST) | 123 | if (event < 0 || event > IEEE80211SOFTMAC_EVENT_LAST) |
124 | return -ENOSYS; | 124 | return -ENOSYS; |
125 | 125 | ||
126 | return ieee80211softmac_notify_internal(mac, event, NULL, fun, context, gfp_mask); | 126 | return ieee80211softmac_notify_internal(mac, event, NULL, fun, context, gfp_mask); |
127 | } | 127 | } |
128 | EXPORT_SYMBOL_GPL(ieee80211softmac_notify_gfp); | 128 | EXPORT_SYMBOL_GPL(ieee80211softmac_notify_gfp); |
@@ -133,7 +133,7 @@ ieee80211softmac_call_events_locked(struct ieee80211softmac_device *mac, int eve | |||
133 | { | 133 | { |
134 | struct ieee80211softmac_event *eventptr, *tmp; | 134 | struct ieee80211softmac_event *eventptr, *tmp; |
135 | struct ieee80211softmac_network *network; | 135 | struct ieee80211softmac_network *network; |
136 | 136 | ||
137 | if (event >= 0) { | 137 | if (event >= 0) { |
138 | union iwreq_data wrqu; | 138 | union iwreq_data wrqu; |
139 | int we_event; | 139 | int we_event; |
diff --git a/net/ieee80211/softmac/ieee80211softmac_io.c b/net/ieee80211/softmac/ieee80211softmac_io.c index b96931001b43..26c35253be33 100644 --- a/net/ieee80211/softmac/ieee80211softmac_io.c +++ b/net/ieee80211/softmac/ieee80211softmac_io.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * Some parts based on code from net80211 | 2 | * Some parts based on code from net80211 |
3 | * Copyright (c) 2001 Atsushi Onoe | 3 | * Copyright (c) 2001 Atsushi Onoe |
4 | * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting | 4 | * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting |
@@ -29,14 +29,14 @@ | |||
29 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 29 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
30 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 30 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
31 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 31 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
32 | * | 32 | * |
33 | */ | 33 | */ |
34 | 34 | ||
35 | #include "ieee80211softmac_priv.h" | 35 | #include "ieee80211softmac_priv.h" |
36 | 36 | ||
37 | /* Helper functions for inserting data into the frames */ | 37 | /* Helper functions for inserting data into the frames */ |
38 | 38 | ||
39 | /* | 39 | /* |
40 | * Adds an ESSID element to the frame | 40 | * Adds an ESSID element to the frame |
41 | * | 41 | * |
42 | */ | 42 | */ |
@@ -53,7 +53,7 @@ ieee80211softmac_add_essid(u8 *dst, struct ieee80211softmac_essid *essid) | |||
53 | *dst++ = 0; | 53 | *dst++ = 0; |
54 | return dst; | 54 | return dst; |
55 | } | 55 | } |
56 | } | 56 | } |
57 | 57 | ||
58 | /* Adds Supported Rates and if required Extended Rates Information Element | 58 | /* Adds Supported Rates and if required Extended Rates Information Element |
59 | * to the frame, ASSUMES WE HAVE A SORTED LIST OF RATES */ | 59 | * to the frame, ASSUMES WE HAVE A SORTED LIST OF RATES */ |
@@ -81,18 +81,18 @@ ieee80211softmac_frame_add_rates(u8 *dst, const struct ieee80211softmac_ratesinf | |||
81 | memcpy(dst, r->rates + cck_len, ofdm_len); | 81 | memcpy(dst, r->rates + cck_len, ofdm_len); |
82 | dst += ofdm_len; | 82 | dst += ofdm_len; |
83 | } | 83 | } |
84 | } | 84 | } |
85 | return dst; | 85 | return dst; |
86 | } | 86 | } |
87 | 87 | ||
88 | /* Allocate a management frame */ | 88 | /* Allocate a management frame */ |
89 | static u8 * | 89 | static u8 * |
90 | ieee80211softmac_alloc_mgt(u32 size) | 90 | ieee80211softmac_alloc_mgt(u32 size) |
91 | { | 91 | { |
92 | u8 * data; | 92 | u8 * data; |
93 | 93 | ||
94 | /* Add the header and FCS to the size */ | 94 | /* Add the header and FCS to the size */ |
95 | size = size + IEEE80211_3ADDR_LEN; | 95 | size = size + IEEE80211_3ADDR_LEN; |
96 | if(size > IEEE80211_DATA_LEN) | 96 | if(size > IEEE80211_DATA_LEN) |
97 | return NULL; | 97 | return NULL; |
98 | /* Allocate the frame */ | 98 | /* Allocate the frame */ |
@@ -103,13 +103,13 @@ ieee80211softmac_alloc_mgt(u32 size) | |||
103 | /* | 103 | /* |
104 | * Add a 2 Address Header | 104 | * Add a 2 Address Header |
105 | */ | 105 | */ |
106 | static void | 106 | static void |
107 | ieee80211softmac_hdr_2addr(struct ieee80211softmac_device *mac, | 107 | ieee80211softmac_hdr_2addr(struct ieee80211softmac_device *mac, |
108 | struct ieee80211_hdr_2addr *header, u32 type, u8 *dest) | 108 | struct ieee80211_hdr_2addr *header, u32 type, u8 *dest) |
109 | { | 109 | { |
110 | /* Fill in the frame control flags */ | 110 | /* Fill in the frame control flags */ |
111 | header->frame_ctl = cpu_to_le16(type); | 111 | header->frame_ctl = cpu_to_le16(type); |
112 | /* Control packets always have WEP turned off */ | 112 | /* Control packets always have WEP turned off */ |
113 | if(type > IEEE80211_STYPE_CFENDACK && type < IEEE80211_STYPE_PSPOLL) | 113 | if(type > IEEE80211_STYPE_CFENDACK && type < IEEE80211_STYPE_PSPOLL) |
114 | header->frame_ctl |= mac->ieee->sec.level ? cpu_to_le16(IEEE80211_FCTL_PROTECTED) : 0; | 114 | header->frame_ctl |= mac->ieee->sec.level ? cpu_to_le16(IEEE80211_FCTL_PROTECTED) : 0; |
115 | 115 | ||
@@ -130,13 +130,13 @@ ieee80211softmac_hdr_2addr(struct ieee80211softmac_device *mac, | |||
130 | 130 | ||
131 | 131 | ||
132 | /* Add a 3 Address Header */ | 132 | /* Add a 3 Address Header */ |
133 | static void | 133 | static void |
134 | ieee80211softmac_hdr_3addr(struct ieee80211softmac_device *mac, | 134 | ieee80211softmac_hdr_3addr(struct ieee80211softmac_device *mac, |
135 | struct ieee80211_hdr_3addr *header, u32 type, u8 *dest, u8 *bssid) | 135 | struct ieee80211_hdr_3addr *header, u32 type, u8 *dest, u8 *bssid) |
136 | { | 136 | { |
137 | /* This is common with 2addr, so use that instead */ | 137 | /* This is common with 2addr, so use that instead */ |
138 | ieee80211softmac_hdr_2addr(mac, (struct ieee80211_hdr_2addr *)header, type, dest); | 138 | ieee80211softmac_hdr_2addr(mac, (struct ieee80211_hdr_2addr *)header, type, dest); |
139 | 139 | ||
140 | /* Fill in the BSS ID */ | 140 | /* Fill in the BSS ID */ |
141 | if(bssid == NULL) | 141 | if(bssid == NULL) |
142 | memset(header->addr3, 0xFF, ETH_ALEN); | 142 | memset(header->addr3, 0xFF, ETH_ALEN); |
@@ -201,11 +201,11 @@ ieee80211softmac_capabilities(struct ieee80211softmac_device *mac, | |||
201 | 201 | ||
202 | /***************************************************************************** | 202 | /***************************************************************************** |
203 | * Create Management packets | 203 | * Create Management packets |
204 | *****************************************************************************/ | 204 | *****************************************************************************/ |
205 | 205 | ||
206 | /* Creates an association request packet */ | 206 | /* Creates an association request packet */ |
207 | static u32 | 207 | static u32 |
208 | ieee80211softmac_assoc_req(struct ieee80211_assoc_request **pkt, | 208 | ieee80211softmac_assoc_req(struct ieee80211_assoc_request **pkt, |
209 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net) | 209 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net) |
210 | { | 210 | { |
211 | u8 *data; | 211 | u8 *data; |
@@ -233,7 +233,7 @@ ieee80211softmac_assoc_req(struct ieee80211_assoc_request **pkt, | |||
233 | 233 | ||
234 | /* Fill in Listen Interval (?) */ | 234 | /* Fill in Listen Interval (?) */ |
235 | (*pkt)->listen_interval = cpu_to_le16(10); | 235 | (*pkt)->listen_interval = cpu_to_le16(10); |
236 | 236 | ||
237 | data = (u8 *)(*pkt)->info_element; | 237 | data = (u8 *)(*pkt)->info_element; |
238 | /* Add SSID */ | 238 | /* Add SSID */ |
239 | data = ieee80211softmac_add_essid(data, &net->essid); | 239 | data = ieee80211softmac_add_essid(data, &net->essid); |
@@ -250,7 +250,7 @@ ieee80211softmac_assoc_req(struct ieee80211_assoc_request **pkt, | |||
250 | 250 | ||
251 | /* Create a reassociation request packet */ | 251 | /* Create a reassociation request packet */ |
252 | static u32 | 252 | static u32 |
253 | ieee80211softmac_reassoc_req(struct ieee80211_reassoc_request **pkt, | 253 | ieee80211softmac_reassoc_req(struct ieee80211_reassoc_request **pkt, |
254 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net) | 254 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net) |
255 | { | 255 | { |
256 | u8 *data; | 256 | u8 *data; |
@@ -263,9 +263,9 @@ ieee80211softmac_reassoc_req(struct ieee80211_reassoc_request **pkt, | |||
263 | /* Rates IE */ | 263 | /* Rates IE */ |
264 | 1 + 1 + IEEE80211SOFTMAC_MAX_RATES_LEN + | 264 | 1 + 1 + IEEE80211SOFTMAC_MAX_RATES_LEN + |
265 | /* Extended Rates IE */ | 265 | /* Extended Rates IE */ |
266 | 1 + 1 + IEEE80211SOFTMAC_MAX_EX_RATES_LEN | 266 | 1 + 1 + IEEE80211SOFTMAC_MAX_EX_RATES_LEN |
267 | /* Other IE's? */ | 267 | /* Other IE's? */ |
268 | ); | 268 | ); |
269 | if (unlikely((*pkt) == NULL)) | 269 | if (unlikely((*pkt) == NULL)) |
270 | return 0; | 270 | return 0; |
271 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_REASSOC_REQ, net->bssid, net->bssid); | 271 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_REASSOC_REQ, net->bssid, net->bssid); |
@@ -277,10 +277,10 @@ ieee80211softmac_reassoc_req(struct ieee80211_reassoc_request **pkt, | |||
277 | (*pkt)->listen_interval = cpu_to_le16(10); | 277 | (*pkt)->listen_interval = cpu_to_le16(10); |
278 | /* Fill in the current AP MAC */ | 278 | /* Fill in the current AP MAC */ |
279 | memcpy((*pkt)->current_ap, mac->ieee->bssid, ETH_ALEN); | 279 | memcpy((*pkt)->current_ap, mac->ieee->bssid, ETH_ALEN); |
280 | 280 | ||
281 | data = (u8 *)(*pkt)->info_element; | 281 | data = (u8 *)(*pkt)->info_element; |
282 | /* Add SSID */ | 282 | /* Add SSID */ |
283 | data = ieee80211softmac_add_essid(data, &net->essid); | 283 | data = ieee80211softmac_add_essid(data, &net->essid); |
284 | /* Add Rates */ | 284 | /* Add Rates */ |
285 | data = ieee80211softmac_frame_add_rates(data, &mac->ratesinfo); | 285 | data = ieee80211softmac_frame_add_rates(data, &mac->ratesinfo); |
286 | /* Return packet size */ | 286 | /* Return packet size */ |
@@ -289,7 +289,7 @@ ieee80211softmac_reassoc_req(struct ieee80211_reassoc_request **pkt, | |||
289 | 289 | ||
290 | /* Create an authentication packet */ | 290 | /* Create an authentication packet */ |
291 | static u32 | 291 | static u32 |
292 | ieee80211softmac_auth(struct ieee80211_auth **pkt, | 292 | ieee80211softmac_auth(struct ieee80211_auth **pkt, |
293 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net, | 293 | struct ieee80211softmac_device *mac, struct ieee80211softmac_network *net, |
294 | u16 transaction, u16 status, int *encrypt_mpdu) | 294 | u16 transaction, u16 status, int *encrypt_mpdu) |
295 | { | 295 | { |
@@ -309,20 +309,20 @@ ieee80211softmac_auth(struct ieee80211_auth **pkt, | |||
309 | if (unlikely((*pkt) == NULL)) | 309 | if (unlikely((*pkt) == NULL)) |
310 | return 0; | 310 | return 0; |
311 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_AUTH, net->bssid, net->bssid); | 311 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_AUTH, net->bssid, net->bssid); |
312 | 312 | ||
313 | /* Algorithm */ | 313 | /* Algorithm */ |
314 | (*pkt)->algorithm = cpu_to_le16(auth_mode); | 314 | (*pkt)->algorithm = cpu_to_le16(auth_mode); |
315 | /* Transaction */ | 315 | /* Transaction */ |
316 | (*pkt)->transaction = cpu_to_le16(transaction); | 316 | (*pkt)->transaction = cpu_to_le16(transaction); |
317 | /* Status */ | 317 | /* Status */ |
318 | (*pkt)->status = cpu_to_le16(status); | 318 | (*pkt)->status = cpu_to_le16(status); |
319 | 319 | ||
320 | data = (u8 *)(*pkt)->info_element; | 320 | data = (u8 *)(*pkt)->info_element; |
321 | /* Challenge Text */ | 321 | /* Challenge Text */ |
322 | if (is_shared_response) { | 322 | if (is_shared_response) { |
323 | *data = MFIE_TYPE_CHALLENGE; | 323 | *data = MFIE_TYPE_CHALLENGE; |
324 | data++; | 324 | data++; |
325 | 325 | ||
326 | /* Copy the challenge in */ | 326 | /* Copy the challenge in */ |
327 | *data = net->challenge_len; | 327 | *data = net->challenge_len; |
328 | data++; | 328 | data++; |
@@ -360,7 +360,7 @@ static u32 | |||
360 | ieee80211softmac_probe_req(struct ieee80211_probe_request **pkt, | 360 | ieee80211softmac_probe_req(struct ieee80211_probe_request **pkt, |
361 | struct ieee80211softmac_device *mac, struct ieee80211softmac_essid *essid) | 361 | struct ieee80211softmac_device *mac, struct ieee80211softmac_essid *essid) |
362 | { | 362 | { |
363 | u8 *data; | 363 | u8 *data; |
364 | /* Allocate Packet */ | 364 | /* Allocate Packet */ |
365 | (*pkt) = (struct ieee80211_probe_request *)ieee80211softmac_alloc_mgt( | 365 | (*pkt) = (struct ieee80211_probe_request *)ieee80211softmac_alloc_mgt( |
366 | /* SSID of requested network */ | 366 | /* SSID of requested network */ |
@@ -368,12 +368,12 @@ ieee80211softmac_probe_req(struct ieee80211_probe_request **pkt, | |||
368 | /* Rates IE */ | 368 | /* Rates IE */ |
369 | 1 + 1 + IEEE80211SOFTMAC_MAX_RATES_LEN + | 369 | 1 + 1 + IEEE80211SOFTMAC_MAX_RATES_LEN + |
370 | /* Extended Rates IE */ | 370 | /* Extended Rates IE */ |
371 | 1 + 1 + IEEE80211SOFTMAC_MAX_EX_RATES_LEN | 371 | 1 + 1 + IEEE80211SOFTMAC_MAX_EX_RATES_LEN |
372 | ); | 372 | ); |
373 | if (unlikely((*pkt) == NULL)) | 373 | if (unlikely((*pkt) == NULL)) |
374 | return 0; | 374 | return 0; |
375 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_PROBE_REQ, NULL, NULL); | 375 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_PROBE_REQ, NULL, NULL); |
376 | 376 | ||
377 | data = (u8 *)(*pkt)->info_element; | 377 | data = (u8 *)(*pkt)->info_element; |
378 | /* Add ESSID (can be NULL) */ | 378 | /* Add ESSID (can be NULL) */ |
379 | data = ieee80211softmac_add_essid(data, essid); | 379 | data = ieee80211softmac_add_essid(data, essid); |
@@ -401,7 +401,7 @@ ieee80211softmac_probe_resp(struct ieee80211_probe_response **pkt, | |||
401 | 2 + /* DS Parameter Set */ | 401 | 2 + /* DS Parameter Set */ |
402 | 8 + /* CF Parameter Set */ | 402 | 8 + /* CF Parameter Set */ |
403 | 4 /* IBSS Parameter Set */ | 403 | 4 /* IBSS Parameter Set */ |
404 | ); | 404 | ); |
405 | if (unlikely((*pkt) == NULL)) | 405 | if (unlikely((*pkt) == NULL)) |
406 | return 0; | 406 | return 0; |
407 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_PROBE_RESP, net->bssid, net->bssid); | 407 | ieee80211softmac_hdr_3addr(mac, &((*pkt)->header), IEEE80211_STYPE_PROBE_RESP, net->bssid, net->bssid); |
@@ -445,15 +445,15 @@ ieee80211softmac_send_mgt_frame(struct ieee80211softmac_device *mac, | |||
445 | pkt_size = ieee80211softmac_probe_resp((struct ieee80211_probe_response **)(&pkt), mac, (struct ieee80211softmac_network *)ptrarg); | 445 | pkt_size = ieee80211softmac_probe_resp((struct ieee80211_probe_response **)(&pkt), mac, (struct ieee80211softmac_network *)ptrarg); |
446 | break; | 446 | break; |
447 | default: | 447 | default: |
448 | printkl(KERN_DEBUG PFX "Unsupported Management Frame type: %i\n", type); | 448 | printkl(KERN_DEBUG PFX "Unsupported Management Frame type: %i\n", type); |
449 | return -EINVAL; | 449 | return -EINVAL; |
450 | }; | 450 | }; |
451 | 451 | ||
452 | if(pkt_size == 0 || pkt == NULL) { | 452 | if(pkt_size == 0 || pkt == NULL) { |
453 | printkl(KERN_DEBUG PFX "Error, packet is nonexistant or 0 length\n"); | 453 | printkl(KERN_DEBUG PFX "Error, packet is nonexistant or 0 length\n"); |
454 | return -ENOMEM; | 454 | return -ENOMEM; |
455 | } | 455 | } |
456 | 456 | ||
457 | /* Send the packet to the ieee80211 layer for tx */ | 457 | /* Send the packet to the ieee80211 layer for tx */ |
458 | /* we defined softmac->mgmt_xmit for this. Should we keep it | 458 | /* we defined softmac->mgmt_xmit for this. Should we keep it |
459 | * as it is (that means we'd need to wrap this into a txb), | 459 | * as it is (that means we'd need to wrap this into a txb), |
diff --git a/net/ieee80211/softmac/ieee80211softmac_module.c b/net/ieee80211/softmac/ieee80211softmac_module.c index 770a068b298b..e9cdc6615ddc 100644 --- a/net/ieee80211/softmac/ieee80211softmac_module.c +++ b/net/ieee80211/softmac/ieee80211softmac_module.c | |||
@@ -32,19 +32,19 @@ struct net_device *alloc_ieee80211softmac(int sizeof_priv) | |||
32 | { | 32 | { |
33 | struct ieee80211softmac_device *softmac; | 33 | struct ieee80211softmac_device *softmac; |
34 | struct net_device *dev; | 34 | struct net_device *dev; |
35 | 35 | ||
36 | dev = alloc_ieee80211(sizeof(struct ieee80211softmac_device) + sizeof_priv); | 36 | dev = alloc_ieee80211(sizeof(struct ieee80211softmac_device) + sizeof_priv); |
37 | softmac = ieee80211_priv(dev); | 37 | softmac = ieee80211_priv(dev); |
38 | softmac->dev = dev; | 38 | softmac->dev = dev; |
39 | softmac->ieee = netdev_priv(dev); | 39 | softmac->ieee = netdev_priv(dev); |
40 | spin_lock_init(&softmac->lock); | 40 | spin_lock_init(&softmac->lock); |
41 | 41 | ||
42 | softmac->ieee->handle_auth = ieee80211softmac_auth_resp; | 42 | softmac->ieee->handle_auth = ieee80211softmac_auth_resp; |
43 | softmac->ieee->handle_deauth = ieee80211softmac_deauth_resp; | 43 | softmac->ieee->handle_deauth = ieee80211softmac_deauth_resp; |
44 | softmac->ieee->handle_assoc_response = ieee80211softmac_handle_assoc_response; | 44 | softmac->ieee->handle_assoc_response = ieee80211softmac_handle_assoc_response; |
45 | softmac->ieee->handle_reassoc_request = ieee80211softmac_handle_reassoc_req; | 45 | softmac->ieee->handle_reassoc_request = ieee80211softmac_handle_reassoc_req; |
46 | softmac->ieee->handle_disassoc = ieee80211softmac_handle_disassoc; | 46 | softmac->ieee->handle_disassoc = ieee80211softmac_handle_disassoc; |
47 | softmac->ieee->handle_beacon = ieee80211softmac_handle_beacon; | 47 | softmac->ieee->handle_beacon = ieee80211softmac_handle_beacon; |
48 | softmac->scaninfo = NULL; | 48 | softmac->scaninfo = NULL; |
49 | 49 | ||
50 | softmac->associnfo.scan_retry = IEEE80211SOFTMAC_ASSOC_SCAN_RETRY_LIMIT; | 50 | softmac->associnfo.scan_retry = IEEE80211SOFTMAC_ASSOC_SCAN_RETRY_LIMIT; |
@@ -66,37 +66,37 @@ struct net_device *alloc_ieee80211softmac(int sizeof_priv) | |||
66 | 66 | ||
67 | /* to start with, we can't send anything ... */ | 67 | /* to start with, we can't send anything ... */ |
68 | netif_carrier_off(dev); | 68 | netif_carrier_off(dev); |
69 | 69 | ||
70 | return dev; | 70 | return dev; |
71 | } | 71 | } |
72 | EXPORT_SYMBOL_GPL(alloc_ieee80211softmac); | 72 | EXPORT_SYMBOL_GPL(alloc_ieee80211softmac); |
73 | 73 | ||
74 | /* Clears the pending work queue items, stops all scans, etc. */ | 74 | /* Clears the pending work queue items, stops all scans, etc. */ |
75 | void | 75 | void |
76 | ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm) | 76 | ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm) |
77 | { | 77 | { |
78 | unsigned long flags; | 78 | unsigned long flags; |
79 | struct ieee80211softmac_event *eventptr, *eventtmp; | 79 | struct ieee80211softmac_event *eventptr, *eventtmp; |
80 | struct ieee80211softmac_auth_queue_item *authptr, *authtmp; | 80 | struct ieee80211softmac_auth_queue_item *authptr, *authtmp; |
81 | struct ieee80211softmac_network *netptr, *nettmp; | 81 | struct ieee80211softmac_network *netptr, *nettmp; |
82 | 82 | ||
83 | ieee80211softmac_stop_scan(sm); | 83 | ieee80211softmac_stop_scan(sm); |
84 | ieee80211softmac_wait_for_scan(sm); | 84 | ieee80211softmac_wait_for_scan(sm); |
85 | 85 | ||
86 | spin_lock_irqsave(&sm->lock, flags); | 86 | spin_lock_irqsave(&sm->lock, flags); |
87 | sm->running = 0; | 87 | sm->running = 0; |
88 | 88 | ||
89 | /* Free all pending assoc work items */ | 89 | /* Free all pending assoc work items */ |
90 | cancel_delayed_work(&sm->associnfo.work); | 90 | cancel_delayed_work(&sm->associnfo.work); |
91 | 91 | ||
92 | /* Free all pending scan work items */ | 92 | /* Free all pending scan work items */ |
93 | if(sm->scaninfo != NULL) | 93 | if(sm->scaninfo != NULL) |
94 | cancel_delayed_work(&sm->scaninfo->softmac_scan); | 94 | cancel_delayed_work(&sm->scaninfo->softmac_scan); |
95 | 95 | ||
96 | /* Free all pending auth work items */ | 96 | /* Free all pending auth work items */ |
97 | list_for_each_entry(authptr, &sm->auth_queue, list) | 97 | list_for_each_entry(authptr, &sm->auth_queue, list) |
98 | cancel_delayed_work(&authptr->work); | 98 | cancel_delayed_work(&authptr->work); |
99 | 99 | ||
100 | /* delete all pending event calls and work items */ | 100 | /* delete all pending event calls and work items */ |
101 | list_for_each_entry_safe(eventptr, eventtmp, &sm->events, list) | 101 | list_for_each_entry_safe(eventptr, eventtmp, &sm->events, list) |
102 | cancel_delayed_work(&eventptr->work); | 102 | cancel_delayed_work(&eventptr->work); |
@@ -111,13 +111,13 @@ ieee80211softmac_clear_pending_work(struct ieee80211softmac_device *sm) | |||
111 | list_del(&authptr->list); | 111 | list_del(&authptr->list); |
112 | kfree(authptr); | 112 | kfree(authptr); |
113 | } | 113 | } |
114 | 114 | ||
115 | /* delete all pending event calls and work items */ | 115 | /* delete all pending event calls and work items */ |
116 | list_for_each_entry_safe(eventptr, eventtmp, &sm->events, list) { | 116 | list_for_each_entry_safe(eventptr, eventtmp, &sm->events, list) { |
117 | list_del(&eventptr->list); | 117 | list_del(&eventptr->list); |
118 | kfree(eventptr); | 118 | kfree(eventptr); |
119 | } | 119 | } |
120 | 120 | ||
121 | /* Free all networks */ | 121 | /* Free all networks */ |
122 | list_for_each_entry_safe(netptr, nettmp, &sm->network_list, list) { | 122 | list_for_each_entry_safe(netptr, nettmp, &sm->network_list, list) { |
123 | ieee80211softmac_del_network_locked(sm, netptr); | 123 | ieee80211softmac_del_network_locked(sm, netptr); |
@@ -133,7 +133,7 @@ EXPORT_SYMBOL_GPL(ieee80211softmac_clear_pending_work); | |||
133 | void free_ieee80211softmac(struct net_device *dev) | 133 | void free_ieee80211softmac(struct net_device *dev) |
134 | { | 134 | { |
135 | struct ieee80211softmac_device *sm = ieee80211_priv(dev); | 135 | struct ieee80211softmac_device *sm = ieee80211_priv(dev); |
136 | ieee80211softmac_clear_pending_work(sm); | 136 | ieee80211softmac_clear_pending_work(sm); |
137 | kfree(sm->scaninfo); | 137 | kfree(sm->scaninfo); |
138 | kfree(sm->wpa.IE); | 138 | kfree(sm->wpa.IE); |
139 | free_ieee80211(dev); | 139 | free_ieee80211(dev); |
@@ -208,9 +208,9 @@ EXPORT_SYMBOL_GPL(ieee80211softmac_highest_supported_rate); | |||
208 | void ieee80211softmac_process_erp(struct ieee80211softmac_device *mac, | 208 | void ieee80211softmac_process_erp(struct ieee80211softmac_device *mac, |
209 | u8 erp_value) | 209 | u8 erp_value) |
210 | { | 210 | { |
211 | int use_protection; | 211 | int use_protection; |
212 | int short_preamble; | 212 | int short_preamble; |
213 | u32 changes = 0; | 213 | u32 changes = 0; |
214 | 214 | ||
215 | /* Barker preamble mode */ | 215 | /* Barker preamble mode */ |
216 | short_preamble = ((erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0 | 216 | short_preamble = ((erp_value & WLAN_ERP_BARKER_PREAMBLE) == 0 |
@@ -325,7 +325,7 @@ void ieee80211softmac_set_rates(struct net_device *dev, u8 count, u8 *rates) | |||
325 | { | 325 | { |
326 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); | 326 | struct ieee80211softmac_device *mac = ieee80211_priv(dev); |
327 | unsigned long flags; | 327 | unsigned long flags; |
328 | 328 | ||
329 | spin_lock_irqsave(&mac->lock, flags); | 329 | spin_lock_irqsave(&mac->lock, flags); |
330 | memcpy(mac->ratesinfo.rates, rates, count); | 330 | memcpy(mac->ratesinfo.rates, rates, count); |
331 | mac->ratesinfo.count = count; | 331 | mac->ratesinfo.count = count; |
@@ -337,7 +337,7 @@ static u8 raise_rate(struct ieee80211softmac_device *mac, u8 rate) | |||
337 | { | 337 | { |
338 | int i; | 338 | int i; |
339 | struct ieee80211softmac_ratesinfo *ri = &mac->ratesinfo; | 339 | struct ieee80211softmac_ratesinfo *ri = &mac->ratesinfo; |
340 | 340 | ||
341 | for (i=0; i<ri->count-1; i++) { | 341 | for (i=0; i<ri->count-1; i++) { |
342 | if (ri->rates[i] == rate) | 342 | if (ri->rates[i] == rate) |
343 | return ri->rates[i+1]; | 343 | return ri->rates[i+1]; |
@@ -350,7 +350,7 @@ u8 ieee80211softmac_lower_rate_delta(struct ieee80211softmac_device *mac, u8 rat | |||
350 | { | 350 | { |
351 | int i; | 351 | int i; |
352 | struct ieee80211softmac_ratesinfo *ri = &mac->ratesinfo; | 352 | struct ieee80211softmac_ratesinfo *ri = &mac->ratesinfo; |
353 | 353 | ||
354 | for (i=delta; i<ri->count; i++) { | 354 | for (i=delta; i<ri->count; i++) { |
355 | if (ri->rates[i] == rate) | 355 | if (ri->rates[i] == rate) |
356 | return ri->rates[i-delta]; | 356 | return ri->rates[i-delta]; |
@@ -431,7 +431,7 @@ ieee80211softmac_create_network(struct ieee80211softmac_device *mac, | |||
431 | softnet->channel = net->channel; | 431 | softnet->channel = net->channel; |
432 | softnet->essid.len = net->ssid_len; | 432 | softnet->essid.len = net->ssid_len; |
433 | memcpy(softnet->essid.data, net->ssid, softnet->essid.len); | 433 | memcpy(softnet->essid.data, net->ssid, softnet->essid.len); |
434 | 434 | ||
435 | /* copy rates over */ | 435 | /* copy rates over */ |
436 | softnet->supported_rates.count = net->rates_len; | 436 | softnet->supported_rates.count = net->rates_len; |
437 | memcpy(&softnet->supported_rates.rates[0], net->rates, net->rates_len); | 437 | memcpy(&softnet->supported_rates.rates[0], net->rates, net->rates_len); |
@@ -522,7 +522,7 @@ ieee80211softmac_get_network_by_bssid(struct ieee80211softmac_device *mac, | |||
522 | { | 522 | { |
523 | unsigned long flags; | 523 | unsigned long flags; |
524 | struct ieee80211softmac_network *softmac_net; | 524 | struct ieee80211softmac_network *softmac_net; |
525 | 525 | ||
526 | spin_lock_irqsave(&mac->lock, flags); | 526 | spin_lock_irqsave(&mac->lock, flags); |
527 | softmac_net = ieee80211softmac_get_network_by_bssid_locked(mac, bssid); | 527 | softmac_net = ieee80211softmac_get_network_by_bssid_locked(mac, bssid); |
528 | spin_unlock_irqrestore(&mac->lock, flags); | 528 | spin_unlock_irqrestore(&mac->lock, flags); |
@@ -549,13 +549,13 @@ ieee80211softmac_get_network_by_essid_locked(struct ieee80211softmac_device *mac | |||
549 | /* Get a network from the list by ESSID with locking */ | 549 | /* Get a network from the list by ESSID with locking */ |
550 | struct ieee80211softmac_network * | 550 | struct ieee80211softmac_network * |
551 | ieee80211softmac_get_network_by_essid(struct ieee80211softmac_device *mac, | 551 | ieee80211softmac_get_network_by_essid(struct ieee80211softmac_device *mac, |
552 | struct ieee80211softmac_essid *essid) | 552 | struct ieee80211softmac_essid *essid) |
553 | { | 553 | { |
554 | unsigned long flags; | 554 | unsigned long flags; |
555 | struct ieee80211softmac_network *softmac_net = NULL; | 555 | struct ieee80211softmac_network *softmac_net = NULL; |
556 | 556 | ||
557 | spin_lock_irqsave(&mac->lock, flags); | 557 | spin_lock_irqsave(&mac->lock, flags); |
558 | softmac_net = ieee80211softmac_get_network_by_essid_locked(mac, essid); | 558 | softmac_net = ieee80211softmac_get_network_by_essid_locked(mac, essid); |
559 | spin_unlock_irqrestore(&mac->lock, flags); | 559 | spin_unlock_irqrestore(&mac->lock, flags); |
560 | return softmac_net; | 560 | return softmac_net; |
561 | } | 561 | } |
diff --git a/net/ieee80211/softmac/ieee80211softmac_priv.h b/net/ieee80211/softmac/ieee80211softmac_priv.h index 4c2bba34d328..c43b189634df 100644 --- a/net/ieee80211/softmac/ieee80211softmac_priv.h +++ b/net/ieee80211/softmac/ieee80211softmac_priv.h | |||
@@ -130,7 +130,7 @@ static inline u8 get_fallback_rate(struct ieee80211softmac_device *mac, u8 rate) | |||
130 | { | 130 | { |
131 | return ieee80211softmac_lower_rate_delta(mac, rate, 2); | 131 | return ieee80211softmac_lower_rate_delta(mac, rate, 2); |
132 | } | 132 | } |
133 | 133 | ||
134 | 134 | ||
135 | /*** prototypes from _io.c */ | 135 | /*** prototypes from _io.c */ |
136 | int ieee80211softmac_send_mgt_frame(struct ieee80211softmac_device *mac, | 136 | int ieee80211softmac_send_mgt_frame(struct ieee80211softmac_device *mac, |
@@ -156,7 +156,7 @@ int ieee80211softmac_handle_assoc_response(struct net_device * dev, | |||
156 | int ieee80211softmac_handle_disassoc(struct net_device * dev, | 156 | int ieee80211softmac_handle_disassoc(struct net_device * dev, |
157 | struct ieee80211_disassoc * disassoc); | 157 | struct ieee80211_disassoc * disassoc); |
158 | int ieee80211softmac_handle_reassoc_req(struct net_device * dev, | 158 | int ieee80211softmac_handle_reassoc_req(struct net_device * dev, |
159 | struct ieee80211_reassoc_request * reassoc); | 159 | struct ieee80211_reassoc_request * reassoc); |
160 | void ieee80211softmac_assoc_timeout(struct work_struct *work); | 160 | void ieee80211softmac_assoc_timeout(struct work_struct *work); |
161 | void ieee80211softmac_send_disassoc_req(struct ieee80211softmac_device *mac, u16 reason); | 161 | void ieee80211softmac_send_disassoc_req(struct ieee80211softmac_device *mac, u16 reason); |
162 | void ieee80211softmac_disassoc(struct ieee80211softmac_device *mac); | 162 | void ieee80211softmac_disassoc(struct ieee80211softmac_device *mac); |
@@ -164,15 +164,15 @@ void ieee80211softmac_disassoc(struct ieee80211softmac_device *mac); | |||
164 | /* some helper functions */ | 164 | /* some helper functions */ |
165 | static inline int ieee80211softmac_scan_handlers_check_self(struct ieee80211softmac_device *sm) | 165 | static inline int ieee80211softmac_scan_handlers_check_self(struct ieee80211softmac_device *sm) |
166 | { | 166 | { |
167 | return (sm->start_scan == ieee80211softmac_start_scan_implementation) && | 167 | return (sm->start_scan == ieee80211softmac_start_scan_implementation) && |
168 | (sm->stop_scan == ieee80211softmac_stop_scan_implementation) && | 168 | (sm->stop_scan == ieee80211softmac_stop_scan_implementation) && |
169 | (sm->wait_for_scan == ieee80211softmac_wait_for_scan_implementation); | 169 | (sm->wait_for_scan == ieee80211softmac_wait_for_scan_implementation); |
170 | } | 170 | } |
171 | 171 | ||
172 | static inline int ieee80211softmac_scan_sanity_check(struct ieee80211softmac_device *sm) | 172 | static inline int ieee80211softmac_scan_sanity_check(struct ieee80211softmac_device *sm) |
173 | { | 173 | { |
174 | return ((sm->start_scan != ieee80211softmac_start_scan_implementation) && | 174 | return ((sm->start_scan != ieee80211softmac_start_scan_implementation) && |
175 | (sm->stop_scan != ieee80211softmac_stop_scan_implementation) && | 175 | (sm->stop_scan != ieee80211softmac_stop_scan_implementation) && |
176 | (sm->wait_for_scan != ieee80211softmac_wait_for_scan_implementation) | 176 | (sm->wait_for_scan != ieee80211softmac_wait_for_scan_implementation) |
177 | ) || ieee80211softmac_scan_handlers_check_self(sm); | 177 | ) || ieee80211softmac_scan_handlers_check_self(sm); |
178 | } | 178 | } |
diff --git a/net/ieee80211/softmac/ieee80211softmac_scan.c b/net/ieee80211/softmac/ieee80211softmac_scan.c index 0c85d6c24cdb..abea3648680e 100644 --- a/net/ieee80211/softmac/ieee80211softmac_scan.c +++ b/net/ieee80211/softmac/ieee80211softmac_scan.c | |||
@@ -62,12 +62,12 @@ ieee80211softmac_stop_scan(struct ieee80211softmac_device *sm) | |||
62 | unsigned long flags; | 62 | unsigned long flags; |
63 | 63 | ||
64 | spin_lock_irqsave(&sm->lock, flags); | 64 | spin_lock_irqsave(&sm->lock, flags); |
65 | 65 | ||
66 | if (!sm->scanning) { | 66 | if (!sm->scanning) { |
67 | spin_unlock_irqrestore(&sm->lock, flags); | 67 | spin_unlock_irqrestore(&sm->lock, flags); |
68 | return; | 68 | return; |
69 | } | 69 | } |
70 | 70 | ||
71 | spin_unlock_irqrestore(&sm->lock, flags); | 71 | spin_unlock_irqrestore(&sm->lock, flags); |
72 | sm->stop_scan(sm->dev); | 72 | sm->stop_scan(sm->dev); |
73 | } | 73 | } |
@@ -78,12 +78,12 @@ ieee80211softmac_wait_for_scan(struct ieee80211softmac_device *sm) | |||
78 | unsigned long flags; | 78 | unsigned long flags; |
79 | 79 | ||
80 | spin_lock_irqsave(&sm->lock, flags); | 80 | spin_lock_irqsave(&sm->lock, flags); |
81 | 81 | ||
82 | if (!sm->scanning) { | 82 | if (!sm->scanning) { |
83 | spin_unlock_irqrestore(&sm->lock, flags); | 83 | spin_unlock_irqrestore(&sm->lock, flags); |
84 | return; | 84 | return; |
85 | } | 85 | } |
86 | 86 | ||
87 | spin_unlock_irqrestore(&sm->lock, flags); | 87 | spin_unlock_irqrestore(&sm->lock, flags); |
88 | sm->wait_for_scan(sm->dev); | 88 | sm->wait_for_scan(sm->dev); |
89 | } | 89 | } |
@@ -158,14 +158,14 @@ int ieee80211softmac_start_scan_implementation(struct net_device *dev) | |||
158 | { | 158 | { |
159 | struct ieee80211softmac_device *sm = ieee80211_priv(dev); | 159 | struct ieee80211softmac_device *sm = ieee80211_priv(dev); |
160 | unsigned long flags; | 160 | unsigned long flags; |
161 | 161 | ||
162 | if (!(dev->flags & IFF_UP)) | 162 | if (!(dev->flags & IFF_UP)) |
163 | return -ENODEV; | 163 | return -ENODEV; |
164 | 164 | ||
165 | assert(ieee80211softmac_scan_handlers_check_self(sm)); | 165 | assert(ieee80211softmac_scan_handlers_check_self(sm)); |
166 | if (!ieee80211softmac_scan_handlers_check_self(sm)) | 166 | if (!ieee80211softmac_scan_handlers_check_self(sm)) |
167 | return -EINVAL; | 167 | return -EINVAL; |
168 | 168 | ||
169 | spin_lock_irqsave(&sm->lock, flags); | 169 | spin_lock_irqsave(&sm->lock, flags); |
170 | /* it looks like we need to hold the lock here | 170 | /* it looks like we need to hold the lock here |
171 | * to make sure we don't allocate two of these... */ | 171 | * to make sure we don't allocate two of these... */ |
@@ -241,7 +241,7 @@ void ieee80211softmac_scan_finished(struct ieee80211softmac_device *sm) | |||
241 | spin_lock_irqsave(&sm->lock, flags); | 241 | spin_lock_irqsave(&sm->lock, flags); |
242 | sm->scanning = 0; | 242 | sm->scanning = 0; |
243 | spin_unlock_irqrestore(&sm->lock, flags); | 243 | spin_unlock_irqrestore(&sm->lock, flags); |
244 | 244 | ||
245 | if (sm->associnfo.bssvalid) { | 245 | if (sm->associnfo.bssvalid) { |
246 | struct ieee80211softmac_network *net; | 246 | struct ieee80211softmac_network *net; |
247 | 247 | ||
diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c index 89c83fa9aacb..f13937bf9e8c 100644 --- a/net/ieee80211/softmac/ieee80211softmac_wx.c +++ b/net/ieee80211/softmac/ieee80211softmac_wx.c | |||
@@ -142,14 +142,14 @@ ieee80211softmac_wx_get_essid(struct net_device *net_dev, | |||
142 | /* If all fails, return ANY (empty) */ | 142 | /* If all fails, return ANY (empty) */ |
143 | data->essid.length = 0; | 143 | data->essid.length = 0; |
144 | data->essid.flags = 0; /* active */ | 144 | data->essid.flags = 0; /* active */ |
145 | 145 | ||
146 | /* If we have a statically configured ESSID then return it */ | 146 | /* If we have a statically configured ESSID then return it */ |
147 | if (sm->associnfo.static_essid) { | 147 | if (sm->associnfo.static_essid) { |
148 | data->essid.length = sm->associnfo.req_essid.len; | 148 | data->essid.length = sm->associnfo.req_essid.len; |
149 | data->essid.flags = 1; /* active */ | 149 | data->essid.flags = 1; /* active */ |
150 | memcpy(extra, sm->associnfo.req_essid.data, sm->associnfo.req_essid.len); | 150 | memcpy(extra, sm->associnfo.req_essid.data, sm->associnfo.req_essid.len); |
151 | } | 151 | } |
152 | 152 | ||
153 | /* If we're associating/associated, return that */ | 153 | /* If we're associating/associated, return that */ |
154 | if (sm->associnfo.associated || sm->associnfo.associating) { | 154 | if (sm->associnfo.associated || sm->associnfo.associating) { |
155 | data->essid.length = sm->associnfo.associate_essid.len; | 155 | data->essid.length = sm->associnfo.associate_essid.len; |
@@ -242,7 +242,7 @@ ieee80211softmac_wx_set_rate(struct net_device *net_dev, | |||
242 | ieee80211softmac_recalc_txrates(mac); | 242 | ieee80211softmac_recalc_txrates(mac); |
243 | err = 0; | 243 | err = 0; |
244 | 244 | ||
245 | out_unlock: | 245 | out_unlock: |
246 | spin_unlock_irqrestore(&mac->lock, flags); | 246 | spin_unlock_irqrestore(&mac->lock, flags); |
247 | out: | 247 | out: |
248 | return err; | 248 | return err; |
@@ -260,6 +260,12 @@ ieee80211softmac_wx_get_rate(struct net_device *net_dev, | |||
260 | int err = -EINVAL; | 260 | int err = -EINVAL; |
261 | 261 | ||
262 | spin_lock_irqsave(&mac->lock, flags); | 262 | spin_lock_irqsave(&mac->lock, flags); |
263 | |||
264 | if (unlikely(!mac->running)) { | ||
265 | err = -ENODEV; | ||
266 | goto out_unlock; | ||
267 | } | ||
268 | |||
263 | switch (mac->txrates.default_rate) { | 269 | switch (mac->txrates.default_rate) { |
264 | case IEEE80211_CCK_RATE_1MB: | 270 | case IEEE80211_CCK_RATE_1MB: |
265 | data->bitrate.value = 1000000; | 271 | data->bitrate.value = 1000000; |
@@ -355,7 +361,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev, | |||
355 | } else if (is_zero_ether_addr(data->ap_addr.sa_data)) { | 361 | } else if (is_zero_ether_addr(data->ap_addr.sa_data)) { |
356 | /* the bssid we have is no longer fixed */ | 362 | /* the bssid we have is no longer fixed */ |
357 | mac->associnfo.bssfixed = 0; | 363 | mac->associnfo.bssfixed = 0; |
358 | } else { | 364 | } else { |
359 | if (!memcmp(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN)) { | 365 | if (!memcmp(mac->associnfo.bssid, data->ap_addr.sa_data, ETH_ALEN)) { |
360 | if (mac->associnfo.associating || mac->associnfo.associated) { | 366 | if (mac->associnfo.associating || mac->associnfo.associated) { |
361 | /* bssid unchanged and associated or associating - just return */ | 367 | /* bssid unchanged and associated or associating - just return */ |
@@ -369,7 +375,7 @@ ieee80211softmac_wx_set_wap(struct net_device *net_dev, | |||
369 | mac->associnfo.bssfixed = 1; | 375 | mac->associnfo.bssfixed = 1; |
370 | /* queue associate if new bssid or (old one again and not associated) */ | 376 | /* queue associate if new bssid or (old one again and not associated) */ |
371 | schedule_delayed_work(&mac->associnfo.work, 0); | 377 | schedule_delayed_work(&mac->associnfo.work, 0); |
372 | } | 378 | } |
373 | 379 | ||
374 | out: | 380 | out: |
375 | mutex_unlock(&mac->associnfo.mutex); | 381 | mutex_unlock(&mac->associnfo.mutex); |
@@ -426,7 +432,7 @@ ieee80211softmac_wx_set_genie(struct net_device *dev, | |||
426 | mac->wpa.IEbuflen = 0; | 432 | mac->wpa.IEbuflen = 0; |
427 | } | 433 | } |
428 | 434 | ||
429 | out: | 435 | out: |
430 | spin_unlock_irqrestore(&mac->lock, flags); | 436 | spin_unlock_irqrestore(&mac->lock, flags); |
431 | mutex_unlock(&mac->associnfo.mutex); | 437 | mutex_unlock(&mac->associnfo.mutex); |
432 | 438 | ||
@@ -447,9 +453,9 @@ ieee80211softmac_wx_get_genie(struct net_device *dev, | |||
447 | 453 | ||
448 | mutex_lock(&mac->associnfo.mutex); | 454 | mutex_lock(&mac->associnfo.mutex); |
449 | spin_lock_irqsave(&mac->lock, flags); | 455 | spin_lock_irqsave(&mac->lock, flags); |
450 | 456 | ||
451 | wrqu->data.length = 0; | 457 | wrqu->data.length = 0; |
452 | 458 | ||
453 | if (mac->wpa.IE && mac->wpa.IElen) { | 459 | if (mac->wpa.IE && mac->wpa.IElen) { |
454 | wrqu->data.length = mac->wpa.IElen; | 460 | wrqu->data.length = mac->wpa.IElen; |
455 | if (mac->wpa.IElen <= space) | 461 | if (mac->wpa.IElen <= space) |