diff options
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 260 |
1 files changed, 144 insertions, 116 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 68eb5052179a..588005c84a6d 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
25 | #include <linux/etherdevice.h> | 25 | #include <linux/etherdevice.h> |
26 | #include <net/cfg80211.h> | 26 | #include <net/cfg80211.h> |
27 | #include <net/iw_handler.h> | ||
28 | #include <net/mac80211.h> | 27 | #include <net/mac80211.h> |
29 | #include "key.h" | 28 | #include "key.h" |
30 | #include "sta_info.h" | 29 | #include "sta_info.h" |
@@ -213,7 +212,9 @@ struct ieee80211_if_vlan { | |||
213 | }; | 212 | }; |
214 | 213 | ||
215 | struct mesh_stats { | 214 | struct mesh_stats { |
216 | __u32 fwded_frames; /* Mesh forwarded frames */ | 215 | __u32 fwded_mcast; /* Mesh forwarded multicast frames */ |
216 | __u32 fwded_unicast; /* Mesh forwarded unicast frames */ | ||
217 | __u32 fwded_frames; /* Mesh total forwarded frames */ | ||
217 | __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/ | 218 | __u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/ |
218 | __u32 dropped_frames_no_route; /* Not transmitted, no route found */ | 219 | __u32 dropped_frames_no_route; /* Not transmitted, no route found */ |
219 | atomic_t estab_plinks; | 220 | atomic_t estab_plinks; |
@@ -227,86 +228,81 @@ struct mesh_preq_queue { | |||
227 | u8 flags; | 228 | u8 flags; |
228 | }; | 229 | }; |
229 | 230 | ||
231 | enum ieee80211_mgd_state { | ||
232 | IEEE80211_MGD_STATE_IDLE, | ||
233 | IEEE80211_MGD_STATE_PROBE, | ||
234 | IEEE80211_MGD_STATE_AUTH, | ||
235 | IEEE80211_MGD_STATE_ASSOC, | ||
236 | }; | ||
237 | |||
238 | struct ieee80211_mgd_work { | ||
239 | struct list_head list; | ||
240 | struct ieee80211_bss *bss; | ||
241 | int ie_len; | ||
242 | u8 prev_bssid[ETH_ALEN]; | ||
243 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
244 | u8 ssid_len; | ||
245 | unsigned long timeout; | ||
246 | enum ieee80211_mgd_state state; | ||
247 | u16 auth_alg, auth_transaction; | ||
248 | |||
249 | int tries; | ||
250 | |||
251 | u8 key[WLAN_KEY_LEN_WEP104]; | ||
252 | u8 key_len, key_idx; | ||
253 | |||
254 | /* must be last */ | ||
255 | u8 ie[0]; /* for auth or assoc frame, not probe */ | ||
256 | }; | ||
257 | |||
230 | /* flags used in struct ieee80211_if_managed.flags */ | 258 | /* flags used in struct ieee80211_if_managed.flags */ |
231 | #define IEEE80211_STA_SSID_SET BIT(0) | 259 | enum ieee80211_sta_flags { |
232 | #define IEEE80211_STA_BSSID_SET BIT(1) | 260 | IEEE80211_STA_BEACON_POLL = BIT(0), |
233 | #define IEEE80211_STA_PREV_BSSID_SET BIT(2) | 261 | IEEE80211_STA_CONNECTION_POLL = BIT(1), |
234 | #define IEEE80211_STA_AUTHENTICATED BIT(3) | 262 | IEEE80211_STA_CONTROL_PORT = BIT(2), |
235 | #define IEEE80211_STA_ASSOCIATED BIT(4) | 263 | IEEE80211_STA_WMM_ENABLED = BIT(3), |
236 | #define IEEE80211_STA_PROBEREQ_POLL BIT(5) | 264 | IEEE80211_STA_DISABLE_11N = BIT(4), |
237 | #define IEEE80211_STA_CREATE_IBSS BIT(6) | 265 | IEEE80211_STA_CSA_RECEIVED = BIT(5), |
238 | #define IEEE80211_STA_CONTROL_PORT BIT(7) | 266 | IEEE80211_STA_MFP_ENABLED = BIT(6), |
239 | #define IEEE80211_STA_WMM_ENABLED BIT(8) | 267 | }; |
240 | /* hole at 9, please re-use */ | ||
241 | #define IEEE80211_STA_AUTO_SSID_SEL BIT(10) | ||
242 | #define IEEE80211_STA_AUTO_BSSID_SEL BIT(11) | ||
243 | #define IEEE80211_STA_AUTO_CHANNEL_SEL BIT(12) | ||
244 | #define IEEE80211_STA_PRIVACY_INVOKED BIT(13) | ||
245 | #define IEEE80211_STA_TKIP_WEP_USED BIT(14) | ||
246 | #define IEEE80211_STA_CSA_RECEIVED BIT(15) | ||
247 | #define IEEE80211_STA_MFP_ENABLED BIT(16) | ||
248 | #define IEEE80211_STA_EXT_SME BIT(17) | ||
249 | /* flags for MLME request */ | ||
250 | #define IEEE80211_STA_REQ_SCAN 0 | ||
251 | #define IEEE80211_STA_REQ_AUTH 1 | ||
252 | #define IEEE80211_STA_REQ_RUN 2 | ||
253 | 268 | ||
254 | /* bitfield of allowed auth algs */ | 269 | /* flags for MLME request */ |
255 | #define IEEE80211_AUTH_ALG_OPEN BIT(0) | 270 | enum ieee80211_sta_request { |
256 | #define IEEE80211_AUTH_ALG_SHARED_KEY BIT(1) | 271 | IEEE80211_STA_REQ_SCAN, |
257 | #define IEEE80211_AUTH_ALG_LEAP BIT(2) | 272 | }; |
258 | #define IEEE80211_AUTH_ALG_FT BIT(3) | ||
259 | 273 | ||
260 | struct ieee80211_if_managed { | 274 | struct ieee80211_if_managed { |
261 | struct timer_list timer; | 275 | struct timer_list timer; |
276 | struct timer_list conn_mon_timer; | ||
277 | struct timer_list bcn_mon_timer; | ||
262 | struct timer_list chswitch_timer; | 278 | struct timer_list chswitch_timer; |
263 | struct work_struct work; | 279 | struct work_struct work; |
280 | struct work_struct monitor_work; | ||
264 | struct work_struct chswitch_work; | 281 | struct work_struct chswitch_work; |
265 | struct work_struct beacon_loss_work; | 282 | struct work_struct beacon_loss_work; |
266 | 283 | ||
267 | u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN]; | 284 | unsigned long probe_timeout; |
285 | int probe_send_count; | ||
268 | 286 | ||
269 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 287 | struct mutex mtx; |
270 | size_t ssid_len; | 288 | struct ieee80211_bss *associated; |
289 | struct ieee80211_mgd_work *old_associate_work; | ||
290 | struct list_head work_list; | ||
271 | 291 | ||
272 | enum { | 292 | u8 bssid[ETH_ALEN]; |
273 | IEEE80211_STA_MLME_DISABLED, | ||
274 | IEEE80211_STA_MLME_DIRECT_PROBE, | ||
275 | IEEE80211_STA_MLME_AUTHENTICATE, | ||
276 | IEEE80211_STA_MLME_ASSOCIATE, | ||
277 | IEEE80211_STA_MLME_ASSOCIATED, | ||
278 | } state; | ||
279 | 293 | ||
280 | u16 aid; | 294 | u16 aid; |
281 | u16 ap_capab, capab; | 295 | u16 capab; |
282 | u8 *extra_ie; /* to be added to the end of AssocReq */ | ||
283 | size_t extra_ie_len; | ||
284 | |||
285 | /* The last AssocReq/Resp IEs */ | ||
286 | u8 *assocreq_ies, *assocresp_ies; | ||
287 | size_t assocreq_ies_len, assocresp_ies_len; | ||
288 | 296 | ||
289 | struct sk_buff_head skb_queue; | 297 | struct sk_buff_head skb_queue; |
290 | 298 | ||
291 | int assoc_scan_tries; /* number of scans done pre-association */ | ||
292 | int direct_probe_tries; /* retries for direct probes */ | ||
293 | int auth_tries; /* retries for auth req */ | ||
294 | int assoc_tries; /* retries for assoc req */ | ||
295 | |||
296 | unsigned long timers_running; /* used for quiesce/restart */ | 299 | unsigned long timers_running; /* used for quiesce/restart */ |
297 | bool powersave; /* powersave requested for this iface */ | 300 | bool powersave; /* powersave requested for this iface */ |
298 | 301 | ||
299 | unsigned long request; | 302 | unsigned long request; |
300 | 303 | ||
301 | unsigned long last_probe; | ||
302 | unsigned long last_beacon; | ||
303 | |||
304 | unsigned int flags; | 304 | unsigned int flags; |
305 | 305 | ||
306 | unsigned int auth_algs; /* bitfield of allowed auth algs */ | ||
307 | int auth_alg; /* currently used IEEE 802.11 authentication algorithm */ | ||
308 | int auth_transaction; | ||
309 | |||
310 | u32 beacon_crc; | 306 | u32 beacon_crc; |
311 | 307 | ||
312 | enum { | 308 | enum { |
@@ -316,10 +312,6 @@ struct ieee80211_if_managed { | |||
316 | } mfp; /* management frame protection */ | 312 | } mfp; /* management frame protection */ |
317 | 313 | ||
318 | int wmm_last_param_set; | 314 | int wmm_last_param_set; |
319 | |||
320 | /* Extra IE data for management frames */ | ||
321 | u8 *sme_auth_ie; | ||
322 | size_t sme_auth_ie_len; | ||
323 | }; | 315 | }; |
324 | 316 | ||
325 | enum ieee80211_ibss_request { | 317 | enum ieee80211_ibss_request { |
@@ -339,6 +331,7 @@ struct ieee80211_if_ibss { | |||
339 | 331 | ||
340 | bool fixed_bssid; | 332 | bool fixed_bssid; |
341 | bool fixed_channel; | 333 | bool fixed_channel; |
334 | bool privacy; | ||
342 | 335 | ||
343 | u8 bssid[ETH_ALEN]; | 336 | u8 bssid[ETH_ALEN]; |
344 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 337 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
@@ -364,7 +357,7 @@ struct ieee80211_if_mesh { | |||
364 | 357 | ||
365 | unsigned long timers_running; | 358 | unsigned long timers_running; |
366 | 359 | ||
367 | bool housekeeping; | 360 | unsigned long wrkq_flags; |
368 | 361 | ||
369 | u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; | 362 | u8 mesh_id[IEEE80211_MAX_MESH_ID_LEN]; |
370 | size_t mesh_id_len; | 363 | size_t mesh_id_len; |
@@ -374,6 +367,10 @@ struct ieee80211_if_mesh { | |||
374 | u8 mesh_pm_id[4]; | 367 | u8 mesh_pm_id[4]; |
375 | /* Congestion Control Mode Identifier */ | 368 | /* Congestion Control Mode Identifier */ |
376 | u8 mesh_cc_id[4]; | 369 | u8 mesh_cc_id[4]; |
370 | /* Synchronization Protocol Identifier */ | ||
371 | u8 mesh_sp_id[4]; | ||
372 | /* Authentication Protocol Identifier */ | ||
373 | u8 mesh_auth_id[4]; | ||
377 | /* Local mesh Destination Sequence Number */ | 374 | /* Local mesh Destination Sequence Number */ |
378 | u32 dsn; | 375 | u32 dsn; |
379 | /* Last used PREQ ID */ | 376 | /* Last used PREQ ID */ |
@@ -478,20 +475,9 @@ struct ieee80211_sub_if_data { | |||
478 | union { | 475 | union { |
479 | struct { | 476 | struct { |
480 | struct dentry *drop_unencrypted; | 477 | struct dentry *drop_unencrypted; |
481 | struct dentry *state; | ||
482 | struct dentry *bssid; | 478 | struct dentry *bssid; |
483 | struct dentry *prev_bssid; | ||
484 | struct dentry *ssid_len; | ||
485 | struct dentry *aid; | 479 | struct dentry *aid; |
486 | struct dentry *ap_capab; | ||
487 | struct dentry *capab; | 480 | struct dentry *capab; |
488 | struct dentry *extra_ie_len; | ||
489 | struct dentry *auth_tries; | ||
490 | struct dentry *assoc_tries; | ||
491 | struct dentry *auth_algs; | ||
492 | struct dentry *auth_alg; | ||
493 | struct dentry *auth_transaction; | ||
494 | struct dentry *flags; | ||
495 | struct dentry *force_unicast_rateidx; | 481 | struct dentry *force_unicast_rateidx; |
496 | struct dentry *max_ratectrl_rateidx; | 482 | struct dentry *max_ratectrl_rateidx; |
497 | } sta; | 483 | } sta; |
@@ -526,6 +512,8 @@ struct ieee80211_sub_if_data { | |||
526 | #ifdef CONFIG_MAC80211_MESH | 512 | #ifdef CONFIG_MAC80211_MESH |
527 | struct dentry *mesh_stats_dir; | 513 | struct dentry *mesh_stats_dir; |
528 | struct { | 514 | struct { |
515 | struct dentry *fwded_mcast; | ||
516 | struct dentry *fwded_unicast; | ||
529 | struct dentry *fwded_frames; | 517 | struct dentry *fwded_frames; |
530 | struct dentry *dropped_frames_ttl; | 518 | struct dentry *dropped_frames_ttl; |
531 | struct dentry *dropped_frames_no_route; | 519 | struct dentry *dropped_frames_no_route; |
@@ -588,12 +576,44 @@ enum queue_stop_reason { | |||
588 | IEEE80211_QUEUE_STOP_REASON_CSA, | 576 | IEEE80211_QUEUE_STOP_REASON_CSA, |
589 | IEEE80211_QUEUE_STOP_REASON_AGGREGATION, | 577 | IEEE80211_QUEUE_STOP_REASON_AGGREGATION, |
590 | IEEE80211_QUEUE_STOP_REASON_SUSPEND, | 578 | IEEE80211_QUEUE_STOP_REASON_SUSPEND, |
591 | IEEE80211_QUEUE_STOP_REASON_PENDING, | ||
592 | IEEE80211_QUEUE_STOP_REASON_SKB_ADD, | 579 | IEEE80211_QUEUE_STOP_REASON_SKB_ADD, |
593 | }; | 580 | }; |
594 | 581 | ||
595 | struct ieee80211_master_priv { | 582 | /** |
596 | struct ieee80211_local *local; | 583 | * mac80211 scan flags - currently active scan mode |
584 | * | ||
585 | * @SCAN_SW_SCANNING: We're currently in the process of scanning but may as | ||
586 | * well be on the operating channel | ||
587 | * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to | ||
588 | * determine if we are on the operating channel or not | ||
589 | * @SCAN_OFF_CHANNEL: We're off our operating channel for scanning, | ||
590 | * gets only set in conjunction with SCAN_SW_SCANNING | ||
591 | */ | ||
592 | enum { | ||
593 | SCAN_SW_SCANNING, | ||
594 | SCAN_HW_SCANNING, | ||
595 | SCAN_OFF_CHANNEL, | ||
596 | }; | ||
597 | |||
598 | /** | ||
599 | * enum mac80211_scan_state - scan state machine states | ||
600 | * | ||
601 | * @SCAN_DECISION: Main entry point to the scan state machine, this state | ||
602 | * determines if we should keep on scanning or switch back to the | ||
603 | * operating channel | ||
604 | * @SCAN_SET_CHANNEL: Set the next channel to be scanned | ||
605 | * @SCAN_SEND_PROBE: Send probe requests and wait for probe responses | ||
606 | * @SCAN_LEAVE_OPER_CHANNEL: Leave the operating channel, notify the AP | ||
607 | * about us leaving the channel and stop all associated STA interfaces | ||
608 | * @SCAN_ENTER_OPER_CHANNEL: Enter the operating channel again, notify the | ||
609 | * AP about us being back and restart all associated STA interfaces | ||
610 | */ | ||
611 | enum mac80211_scan_state { | ||
612 | SCAN_DECISION, | ||
613 | SCAN_SET_CHANNEL, | ||
614 | SCAN_SEND_PROBE, | ||
615 | SCAN_LEAVE_OPER_CHANNEL, | ||
616 | SCAN_ENTER_OPER_CHANNEL, | ||
597 | }; | 617 | }; |
598 | 618 | ||
599 | struct ieee80211_local { | 619 | struct ieee80211_local { |
@@ -604,17 +624,33 @@ struct ieee80211_local { | |||
604 | 624 | ||
605 | const struct ieee80211_ops *ops; | 625 | const struct ieee80211_ops *ops; |
606 | 626 | ||
627 | /* | ||
628 | * private workqueue to mac80211. mac80211 makes this accessible | ||
629 | * via ieee80211_queue_work() | ||
630 | */ | ||
631 | struct workqueue_struct *workqueue; | ||
632 | |||
607 | unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES]; | 633 | unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES]; |
608 | /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ | 634 | /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ |
609 | spinlock_t queue_stop_reason_lock; | 635 | spinlock_t queue_stop_reason_lock; |
610 | 636 | ||
611 | struct net_device *mdev; /* wmaster# - "master" 802.11 device */ | ||
612 | int open_count; | 637 | int open_count; |
613 | int monitors, cooked_mntrs; | 638 | int monitors, cooked_mntrs; |
614 | /* number of interfaces with corresponding FIF_ flags */ | 639 | /* number of interfaces with corresponding FIF_ flags */ |
615 | int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss; | 640 | int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll; |
616 | unsigned int filter_flags; /* FIF_* */ | 641 | unsigned int filter_flags; /* FIF_* */ |
617 | struct iw_statistics wstats; | 642 | struct iw_statistics wstats; |
643 | |||
644 | /* protects the aggregated multicast list and filter calls */ | ||
645 | spinlock_t filter_lock; | ||
646 | |||
647 | /* used for uploading changed mc list */ | ||
648 | struct work_struct reconfig_filter; | ||
649 | |||
650 | /* aggregated multicast list */ | ||
651 | struct dev_addr_list *mc_list; | ||
652 | int mc_count; | ||
653 | |||
618 | bool tim_in_locked_section; /* see ieee80211_beacon_get() */ | 654 | bool tim_in_locked_section; /* see ieee80211_beacon_get() */ |
619 | 655 | ||
620 | /* | 656 | /* |
@@ -631,6 +667,9 @@ struct ieee80211_local { | |||
631 | */ | 667 | */ |
632 | bool quiescing; | 668 | bool quiescing; |
633 | 669 | ||
670 | /* device is started */ | ||
671 | bool started; | ||
672 | |||
634 | int tx_headroom; /* required headroom for hardware/radiotap */ | 673 | int tx_headroom; /* required headroom for hardware/radiotap */ |
635 | 674 | ||
636 | /* Tasklet and skb queue to process calls from IRQ mode. All frames | 675 | /* Tasklet and skb queue to process calls from IRQ mode. All frames |
@@ -653,6 +692,7 @@ struct ieee80211_local { | |||
653 | struct list_head sta_list; | 692 | struct list_head sta_list; |
654 | struct sta_info *sta_hash[STA_HASH_SIZE]; | 693 | struct sta_info *sta_hash[STA_HASH_SIZE]; |
655 | struct timer_list sta_cleanup; | 694 | struct timer_list sta_cleanup; |
695 | int sta_generation; | ||
656 | 696 | ||
657 | struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; | 697 | struct sk_buff_head pending[IEEE80211_MAX_QUEUES]; |
658 | struct tasklet_struct tx_pending_tasklet; | 698 | struct tasklet_struct tx_pending_tasklet; |
@@ -687,9 +727,9 @@ struct ieee80211_local { | |||
687 | 727 | ||
688 | /* Scanning and BSS list */ | 728 | /* Scanning and BSS list */ |
689 | struct mutex scan_mtx; | 729 | struct mutex scan_mtx; |
690 | bool sw_scanning, hw_scanning; | 730 | unsigned long scanning; |
691 | struct cfg80211_ssid scan_ssid; | 731 | struct cfg80211_ssid scan_ssid; |
692 | struct cfg80211_scan_request int_scan_req; | 732 | struct cfg80211_scan_request *int_scan_req; |
693 | struct cfg80211_scan_request *scan_req; | 733 | struct cfg80211_scan_request *scan_req; |
694 | struct ieee80211_channel *scan_channel; | 734 | struct ieee80211_channel *scan_channel; |
695 | const u8 *orig_ies; | 735 | const u8 *orig_ies; |
@@ -697,7 +737,7 @@ struct ieee80211_local { | |||
697 | int scan_channel_idx; | 737 | int scan_channel_idx; |
698 | int scan_ies_len; | 738 | int scan_ies_len; |
699 | 739 | ||
700 | enum { SCAN_SET_CHANNEL, SCAN_SEND_PROBE } scan_state; | 740 | enum mac80211_scan_state next_scan_state; |
701 | struct delayed_work scan_work; | 741 | struct delayed_work scan_work; |
702 | struct ieee80211_sub_if_data *scan_sdata; | 742 | struct ieee80211_sub_if_data *scan_sdata; |
703 | enum nl80211_channel_type oper_channel_type; | 743 | enum nl80211_channel_type oper_channel_type; |
@@ -834,10 +874,6 @@ struct ieee80211_local { | |||
834 | static inline struct ieee80211_sub_if_data * | 874 | static inline struct ieee80211_sub_if_data * |
835 | IEEE80211_DEV_TO_SUB_IF(struct net_device *dev) | 875 | IEEE80211_DEV_TO_SUB_IF(struct net_device *dev) |
836 | { | 876 | { |
837 | struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); | ||
838 | |||
839 | BUG_ON(!local || local->mdev == dev); | ||
840 | |||
841 | return netdev_priv(dev); | 877 | return netdev_priv(dev); |
842 | } | 878 | } |
843 | 879 | ||
@@ -937,21 +973,20 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata, | |||
937 | void ieee80211_configure_filter(struct ieee80211_local *local); | 973 | void ieee80211_configure_filter(struct ieee80211_local *local); |
938 | u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata); | 974 | u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata); |
939 | 975 | ||
940 | /* wireless extensions */ | ||
941 | extern const struct iw_handler_def ieee80211_iw_handler_def; | ||
942 | |||
943 | /* STA code */ | 976 | /* STA code */ |
944 | void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata); | 977 | void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata); |
978 | int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata, | ||
979 | struct cfg80211_auth_request *req); | ||
980 | int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata, | ||
981 | struct cfg80211_assoc_request *req); | ||
982 | int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata, | ||
983 | struct cfg80211_deauth_request *req, | ||
984 | void *cookie); | ||
985 | int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata, | ||
986 | struct cfg80211_disassoc_request *req, | ||
987 | void *cookie); | ||
945 | ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata, | 988 | ieee80211_rx_result ieee80211_sta_rx_mgmt(struct ieee80211_sub_if_data *sdata, |
946 | struct sk_buff *skb, | 989 | struct sk_buff *skb); |
947 | struct ieee80211_rx_status *rx_status); | ||
948 | int ieee80211_sta_commit(struct ieee80211_sub_if_data *sdata); | ||
949 | int ieee80211_sta_set_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size_t len); | ||
950 | int ieee80211_sta_get_ssid(struct ieee80211_sub_if_data *sdata, char *ssid, size_t *len); | ||
951 | int ieee80211_sta_set_bssid(struct ieee80211_sub_if_data *sdata, u8 *bssid); | ||
952 | void ieee80211_sta_req_auth(struct ieee80211_sub_if_data *sdata); | ||
953 | int ieee80211_sta_deauthenticate(struct ieee80211_sub_if_data *sdata, u16 reason); | ||
954 | int ieee80211_sta_disassociate(struct ieee80211_sub_if_data *sdata, u16 reason); | ||
955 | void ieee80211_send_pspoll(struct ieee80211_local *local, | 990 | void ieee80211_send_pspoll(struct ieee80211_local *local, |
956 | struct ieee80211_sub_if_data *sdata); | 991 | struct ieee80211_sub_if_data *sdata); |
957 | void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency); | 992 | void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency); |
@@ -967,8 +1002,7 @@ void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata); | |||
967 | void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); | 1002 | void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local); |
968 | void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata); | 1003 | void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata); |
969 | ieee80211_rx_result | 1004 | ieee80211_rx_result |
970 | ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, | 1005 | ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); |
971 | struct ieee80211_rx_status *rx_status); | ||
972 | struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, | 1006 | struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, |
973 | u8 *bssid, u8 *addr, u32 supp_rates); | 1007 | u8 *bssid, u8 *addr, u32 supp_rates); |
974 | int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, | 1008 | int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, |
@@ -983,16 +1017,9 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata, | |||
983 | const u8 *ssid, u8 ssid_len); | 1017 | const u8 *ssid, u8 ssid_len); |
984 | int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, | 1018 | int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, |
985 | struct cfg80211_scan_request *req); | 1019 | struct cfg80211_scan_request *req); |
986 | int ieee80211_scan_results(struct ieee80211_local *local, | ||
987 | struct iw_request_info *info, | ||
988 | char *buf, size_t len); | ||
989 | void ieee80211_scan_cancel(struct ieee80211_local *local); | 1020 | void ieee80211_scan_cancel(struct ieee80211_local *local); |
990 | ieee80211_rx_result | 1021 | ieee80211_rx_result |
991 | ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, | 1022 | ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb); |
992 | struct sk_buff *skb, | ||
993 | struct ieee80211_rx_status *rx_status); | ||
994 | int ieee80211_sta_set_extra_ie(struct ieee80211_sub_if_data *sdata, | ||
995 | const char *ie, size_t len); | ||
996 | 1023 | ||
997 | void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local); | 1024 | void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local); |
998 | struct ieee80211_bss * | 1025 | struct ieee80211_bss * |
@@ -1008,8 +1035,6 @@ ieee80211_rx_bss_get(struct ieee80211_local *local, u8 *bssid, int freq, | |||
1008 | u8 *ssid, u8 ssid_len); | 1035 | u8 *ssid, u8 ssid_len); |
1009 | void ieee80211_rx_bss_put(struct ieee80211_local *local, | 1036 | void ieee80211_rx_bss_put(struct ieee80211_local *local, |
1010 | struct ieee80211_bss *bss); | 1037 | struct ieee80211_bss *bss); |
1011 | void ieee80211_rx_bss_remove(struct ieee80211_sub_if_data *sdata, u8 *bssid, | ||
1012 | int freq, u8 *ssid, u8 ssid_len); | ||
1013 | 1038 | ||
1014 | /* interface handling */ | 1039 | /* interface handling */ |
1015 | int ieee80211_if_add(struct ieee80211_local *local, const char *name, | 1040 | int ieee80211_if_add(struct ieee80211_local *local, const char *name, |
@@ -1025,9 +1050,10 @@ void ieee80211_recalc_idle(struct ieee80211_local *local); | |||
1025 | /* tx handling */ | 1050 | /* tx handling */ |
1026 | void ieee80211_clear_tx_pending(struct ieee80211_local *local); | 1051 | void ieee80211_clear_tx_pending(struct ieee80211_local *local); |
1027 | void ieee80211_tx_pending(unsigned long data); | 1052 | void ieee80211_tx_pending(unsigned long data); |
1028 | int ieee80211_master_start_xmit(struct sk_buff *skb, struct net_device *dev); | 1053 | netdev_tx_t ieee80211_monitor_start_xmit(struct sk_buff *skb, |
1029 | int ieee80211_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev); | 1054 | struct net_device *dev); |
1030 | int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev); | 1055 | netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, |
1056 | struct net_device *dev); | ||
1031 | 1057 | ||
1032 | /* HT */ | 1058 | /* HT */ |
1033 | void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband, | 1059 | void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband, |
@@ -1065,6 +1091,7 @@ void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, | |||
1065 | 1091 | ||
1066 | /* Suspend/resume and hw reconfiguration */ | 1092 | /* Suspend/resume and hw reconfiguration */ |
1067 | int ieee80211_reconfig(struct ieee80211_local *local); | 1093 | int ieee80211_reconfig(struct ieee80211_local *local); |
1094 | void ieee80211_stop_device(struct ieee80211_local *local); | ||
1068 | 1095 | ||
1069 | #ifdef CONFIG_PM | 1096 | #ifdef CONFIG_PM |
1070 | int __ieee80211_suspend(struct ieee80211_hw *hw); | 1097 | int __ieee80211_suspend(struct ieee80211_hw *hw); |
@@ -1092,7 +1119,8 @@ u8 *ieee80211_get_bssid(struct ieee80211_hdr *hdr, size_t len, | |||
1092 | int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, | 1119 | int ieee80211_frame_duration(struct ieee80211_local *local, size_t len, |
1093 | int rate, int erp, int short_preamble); | 1120 | int rate, int erp, int short_preamble); |
1094 | void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, | 1121 | void mac80211_ev_michael_mic_failure(struct ieee80211_sub_if_data *sdata, int keyidx, |
1095 | struct ieee80211_hdr *hdr, const u8 *tsc); | 1122 | struct ieee80211_hdr *hdr, const u8 *tsc, |
1123 | gfp_t gfp); | ||
1096 | void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata); | 1124 | void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata); |
1097 | void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, | 1125 | void ieee80211_tx_skb(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, |
1098 | int encrypt); | 1126 | int encrypt); |
@@ -1129,8 +1157,8 @@ int ieee80211_add_pending_skbs(struct ieee80211_local *local, | |||
1129 | 1157 | ||
1130 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, | 1158 | void ieee80211_send_auth(struct ieee80211_sub_if_data *sdata, |
1131 | u16 transaction, u16 auth_alg, | 1159 | u16 transaction, u16 auth_alg, |
1132 | u8 *extra, size_t extra_len, | 1160 | u8 *extra, size_t extra_len, const u8 *bssid, |
1133 | const u8 *bssid, int encrypt); | 1161 | const u8 *key, u8 key_len, u8 key_idx); |
1134 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, | 1162 | int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, |
1135 | const u8 *ie, size_t ie_len); | 1163 | const u8 *ie, size_t ie_len); |
1136 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 1164 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, |