Blame view

net/wireless/core.h 15 KB
704232c27   Johannes Berg   [WIRELESS] cfg802...
1
2
3
  /*
   * Wireless configuration interface internals.
   *
5f2aa25e0   Johannes Berg   cfg80211: rcu-ify...
4
   * Copyright 2006-2010	Johannes Berg <johannes@sipsolutions.net>
704232c27   Johannes Berg   [WIRELESS] cfg802...
5
6
7
8
9
10
   */
  #ifndef __NET_WIRELESS_CORE_H
  #define __NET_WIRELESS_CORE_H
  #include <linux/mutex.h>
  #include <linux/list.h>
  #include <linux/netdevice.h>
2a5193119   Johannes Berg   cfg80211/nl80211:...
11
12
  #include <linux/kref.h>
  #include <linux/rbtree.h>
1ac61302d   Luis R. Rodriguez   mac80211/cfg80211...
13
  #include <linux/debugfs.h>
1f87f7d3a   Johannes Berg   cfg80211: add rfk...
14
15
  #include <linux/rfkill.h>
  #include <linux/workqueue.h>
704232c27   Johannes Berg   [WIRELESS] cfg802...
16
  #include <net/genetlink.h>
704232c27   Johannes Berg   [WIRELESS] cfg802...
17
  #include <net/cfg80211.h>
3f2355cb9   Luis R. Rodriguez   cfg80211/mac80211...
18
  #include "reg.h"
704232c27   Johannes Berg   [WIRELESS] cfg802...
19
20
  
  struct cfg80211_registered_device {
3dcf670ba   David Kilroy   cfg80211: mark op...
21
  	const struct cfg80211_ops *ops;
704232c27   Johannes Berg   [WIRELESS] cfg802...
22
23
24
25
26
27
  	struct list_head list;
  	/* we hold this mutex during any call so that
  	 * we cannot do multiple calls at once, and also
  	 * to avoid the deregister call to proceed while
  	 * any call is in progress */
  	struct mutex mtx;
1f87f7d3a   Johannes Berg   cfg80211: add rfk...
28
29
30
31
  	/* rfkill support */
  	struct rfkill_ops rfkill_ops;
  	struct rfkill *rfkill;
  	struct work_struct rfkill_sync;
3f2355cb9   Luis R. Rodriguez   cfg80211/mac80211...
32
33
34
35
36
37
38
39
40
41
42
  	/* ISO / IEC 3166 alpha2 for which this device is receiving
  	 * country IEs on, this can help disregard country IEs from APs
  	 * on the same alpha2 quickly. The alpha2 may differ from
  	 * cfg80211_regdomain's alpha2 when an intersection has occurred.
  	 * If the AP is reconfigured this can also be used to tell us if
  	 * the country on the country IE changed. */
  	char country_ie_alpha2[2];
  
  	/* If a Country IE has been received this tells us the environment
  	 * which its telling us its in. This defaults to ENVIRON_ANY */
  	enum environment_cap env;
704232c27   Johannes Berg   [WIRELESS] cfg802...
43
  	/* wiphy index, internal only */
b5850a7a4   Luis R. Rodriguez   cfg80211: rename ...
44
  	int wiphy_idx;
704232c27   Johannes Berg   [WIRELESS] cfg802...
45
46
47
  
  	/* associate netdev list */
  	struct mutex devlist_mtx;
5f2aa25e0   Johannes Berg   cfg80211: rcu-ify...
48
  	/* protected by devlist_mtx or RCU */
704232c27   Johannes Berg   [WIRELESS] cfg802...
49
  	struct list_head netdev_list;
f5ea9120b   Johannes Berg   nl80211: add gene...
50
  	int devlist_generation;
ad002395f   Johannes Berg   cfg80211: fix dan...
51
52
  	int opencount; /* also protected by devlist_mtx */
  	wait_queue_head_t dev_wait;
704232c27   Johannes Berg   [WIRELESS] cfg802...
53

5e760230e   Johannes Berg   cfg80211: allow r...
54
  	u32 ap_beacons_nlpid;
2a5193119   Johannes Berg   cfg80211/nl80211:...
55
56
57
58
59
60
  	/* BSSes/scanning */
  	spinlock_t bss_lock;
  	struct list_head bss_list;
  	struct rb_root bss_tree;
  	u32 bss_generation;
  	struct cfg80211_scan_request *scan_req; /* protected by RTNL */
807f8a8c3   Luciano Coelho   cfg80211/nl80211:...
61
  	struct cfg80211_sched_scan_request *sched_scan_req;
cb3a8eec0   Dan Williams   cfg80211: age sca...
62
  	unsigned long suspend_at;
667503ddc   Johannes Berg   cfg80211: fix loc...
63
  	struct work_struct scan_done_wk;
807f8a8c3   Luciano Coelho   cfg80211/nl80211:...
64
  	struct work_struct sched_scan_results_wk;
2a5193119   Johannes Berg   cfg80211/nl80211:...
65

c10841ca7   Luciano Coelho   cfg80211: fix dea...
66
  	struct mutex sched_scan_mtx;
aff89a9b9   Johannes Berg   cfg80211: introdu...
67
68
69
  #ifdef CONFIG_NL80211_TESTMODE
  	struct genl_info *testmode_info;
  #endif
6829c878e   Johannes Berg   cfg80211: emulate...
70
  	struct work_struct conn_work;
667503ddc   Johannes Berg   cfg80211: fix loc...
71
  	struct work_struct event_work;
6829c878e   Johannes Berg   cfg80211: emulate...
72

ff1b6e69a   Johannes Berg   nl80211/cfg80211:...
73
  	struct cfg80211_wowlan *wowlan;
704232c27   Johannes Berg   [WIRELESS] cfg802...
74
75
76
77
78
79
80
81
82
83
84
  	/* must be last because of the way we do wiphy_priv(),
  	 * and it should at least be aligned to NETDEV_ALIGN */
  	struct wiphy wiphy __attribute__((__aligned__(NETDEV_ALIGN)));
  };
  
  static inline
  struct cfg80211_registered_device *wiphy_to_dev(struct wiphy *wiphy)
  {
  	BUG_ON(!wiphy);
  	return container_of(wiphy, struct cfg80211_registered_device, wiphy);
  }
85fd129a7   Luis R. Rodriguez   cfg80211: add wip...
85
86
87
88
  /* Note 0 is valid, hence phy0 */
  static inline
  bool wiphy_idx_valid(int wiphy_idx)
  {
a02cec215   Eric Dumazet   net: return opera...
89
  	return wiphy_idx >= 0;
85fd129a7   Luis R. Rodriguez   cfg80211: add wip...
90
  }
ff1b6e69a   Johannes Berg   nl80211/cfg80211:...
91
92
93
94
95
96
97
98
99
100
101
102
  static inline void
  cfg80211_rdev_free_wowlan(struct cfg80211_registered_device *rdev)
  {
  	int i;
  
  	if (!rdev->wowlan)
  		return;
  	for (i = 0; i < rdev->wowlan->n_patterns; i++)
  		kfree(rdev->wowlan->patterns[i].mask);
  	kfree(rdev->wowlan->patterns);
  	kfree(rdev->wowlan);
  }
e60d7443e   Alban Browaeys   wireless : use a ...
103
104
  
  extern struct workqueue_struct *cfg80211_wq;
a1794390f   Luis R. Rodriguez   cfg80211: rename ...
105
  extern struct mutex cfg80211_mutex;
79c97e97a   Johannes Berg   cfg80211: clean u...
106
  extern struct list_head cfg80211_rdev_list;
f5ea9120b   Johannes Berg   nl80211: add gene...
107
  extern int cfg80211_rdev_list_generation;
704232c27   Johannes Berg   [WIRELESS] cfg802...
108

46a5ebaf0   Johannes Berg   cfg80211/mac80211...
109
110
111
112
  static inline void assert_cfg80211_lock(void)
  {
  	lockdep_assert_held(&cfg80211_mutex);
  }
761cf7ecf   Luis R. Rodriguez   cfg80211: add ass...
113

806a9e396   Luis R. Rodriguez   cfg80211: make re...
114
115
  /*
   * You can use this to mark a wiphy_idx as not having an associated wiphy.
79c97e97a   Johannes Berg   cfg80211: clean u...
116
   * It guarantees cfg80211_rdev_by_wiphy_idx(wiphy_idx) will return NULL
806a9e396   Luis R. Rodriguez   cfg80211: make re...
117
118
   */
  #define WIPHY_IDX_STALE -1
2a5193119   Johannes Berg   cfg80211/nl80211:...
119
120
121
122
123
  struct cfg80211_internal_bss {
  	struct list_head list;
  	struct rb_node rbn;
  	unsigned long ts;
  	struct kref ref;
19957bb39   Johannes Berg   cfg80211: keep tr...
124
  	atomic_t hold;
34a6eddba   Jouni Malinen   cfg80211: Store I...
125
126
  	bool beacon_ies_allocated;
  	bool proberesp_ies_allocated;
a08c1c1ac   Kalle Valo   cfg80211: add fea...
127

2a5193119   Johannes Berg   cfg80211/nl80211:...
128
129
130
  	/* must be last because of priv member */
  	struct cfg80211_bss pub;
  };
19957bb39   Johannes Berg   cfg80211: keep tr...
131
132
133
134
  static inline struct cfg80211_internal_bss *bss_from_pub(struct cfg80211_bss *pub)
  {
  	return container_of(pub, struct cfg80211_internal_bss, pub);
  }
df7fc0f97   Johannes Berg   cfg80211: keep tr...
135
136
137
138
  static inline void cfg80211_ref_bss(struct cfg80211_internal_bss *bss)
  {
  	kref_get(&bss->ref);
  }
19957bb39   Johannes Berg   cfg80211: keep tr...
139
140
141
142
143
144
145
146
147
148
  static inline void cfg80211_hold_bss(struct cfg80211_internal_bss *bss)
  {
  	atomic_inc(&bss->hold);
  }
  
  static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
  {
  	int r = atomic_dec_return(&bss->hold);
  	WARN_ON(r < 0);
  }
79c97e97a   Johannes Berg   cfg80211: clean u...
149
  struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx);
806a9e396   Luis R. Rodriguez   cfg80211: make re...
150
  int get_wiphy_idx(struct wiphy *wiphy);
4bbf4d565   Johannes Berg   cfg80211: fix loc...
151
  struct cfg80211_registered_device *
79c97e97a   Johannes Berg   cfg80211: clean u...
152
  __cfg80211_rdev_from_info(struct genl_info *info);
4bbf4d565   Johannes Berg   cfg80211: fix loc...
153

556829657   Johannes Berg   [NL80211]: add ne...
154
155
156
157
158
159
  /*
   * This function returns a pointer to the driver
   * that the genl_info item that is passed refers to.
   * If successful, it returns non-NULL and also locks
   * the driver's mutex!
   *
4d0c8aead   Johannes Berg   cfg80211: properl...
160
   * This means that you need to call cfg80211_unlock_rdev()
a1794390f   Luis R. Rodriguez   cfg80211: rename ...
161
   * before being allowed to acquire &cfg80211_mutex!
556829657   Johannes Berg   [NL80211]: add ne...
162
163
164
   *
   * This is necessary because we need to lock the global
   * mutex to get an item off the list safely, and then
79c97e97a   Johannes Berg   cfg80211: clean u...
165
   * we lock the rdev mutex so it doesn't go away under us.
556829657   Johannes Berg   [NL80211]: add ne...
166
   *
a1794390f   Luis R. Rodriguez   cfg80211: rename ...
167
   * We don't want to keep cfg80211_mutex locked
556829657   Johannes Berg   [NL80211]: add ne...
168
169
170
171
172
173
174
175
   * for all the time in order to allow requests on
   * other interfaces to go through at the same time.
   *
   * The result of this can be a PTR_ERR and hence must
   * be checked with IS_ERR() for errors.
   */
  extern struct cfg80211_registered_device *
  cfg80211_get_dev_from_info(struct genl_info *info);
79c97e97a   Johannes Berg   cfg80211: clean u...
176
  /* requires cfg80211_rdev_mutex to be held! */
806a9e396   Luis R. Rodriguez   cfg80211: make re...
177
  struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx);
556829657   Johannes Berg   [NL80211]: add ne...
178
179
  /* identical to cfg80211_get_dev_from_info but only operate on ifindex */
  extern struct cfg80211_registered_device *
463d01832   Johannes Berg   cfg80211: make aw...
180
181
182
183
  cfg80211_get_dev_from_ifindex(struct net *net, int ifindex);
  
  int cfg80211_switch_netns(struct cfg80211_registered_device *rdev,
  			  struct net *net);
556829657   Johannes Berg   [NL80211]: add ne...
184

79c97e97a   Johannes Berg   cfg80211: clean u...
185
  static inline void cfg80211_lock_rdev(struct cfg80211_registered_device *rdev)
667503ddc   Johannes Berg   cfg80211: fix loc...
186
  {
79c97e97a   Johannes Berg   cfg80211: clean u...
187
  	mutex_lock(&rdev->mtx);
667503ddc   Johannes Berg   cfg80211: fix loc...
188
  }
79c97e97a   Johannes Berg   cfg80211: clean u...
189
  static inline void cfg80211_unlock_rdev(struct cfg80211_registered_device *rdev)
4d0c8aead   Johannes Berg   cfg80211: properl...
190
  {
79c97e97a   Johannes Berg   cfg80211: clean u...
191
192
  	BUG_ON(IS_ERR(rdev) || !rdev);
  	mutex_unlock(&rdev->mtx);
4d0c8aead   Johannes Berg   cfg80211: properl...
193
  }
556829657   Johannes Berg   [NL80211]: add ne...
194

667503ddc   Johannes Berg   cfg80211: fix loc...
195
196
197
198
199
200
201
202
203
204
205
206
207
  static inline void wdev_lock(struct wireless_dev *wdev)
  	__acquires(wdev)
  {
  	mutex_lock(&wdev->mtx);
  	__acquire(wdev->mtx);
  }
  
  static inline void wdev_unlock(struct wireless_dev *wdev)
  	__releases(wdev)
  {
  	__release(wdev->mtx);
  	mutex_unlock(&wdev->mtx);
  }
46a5ebaf0   Johannes Berg   cfg80211/mac80211...
208
209
  #define ASSERT_RDEV_LOCK(rdev) lockdep_assert_held(&(rdev)->mtx)
  #define ASSERT_WDEV_LOCK(wdev) lockdep_assert_held(&(wdev)->mtx)
667503ddc   Johannes Berg   cfg80211: fix loc...
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
  
  enum cfg80211_event_type {
  	EVENT_CONNECT_RESULT,
  	EVENT_ROAMED,
  	EVENT_DISCONNECTED,
  	EVENT_IBSS_JOINED,
  };
  
  struct cfg80211_event {
  	struct list_head list;
  	enum cfg80211_event_type type;
  
  	union {
  		struct {
  			u8 bssid[ETH_ALEN];
  			const u8 *req_ie;
  			const u8 *resp_ie;
  			size_t req_ie_len;
  			size_t resp_ie_len;
  			u16 status;
  		} cr;
  		struct {
667503ddc   Johannes Berg   cfg80211: fix loc...
232
233
234
235
  			const u8 *req_ie;
  			const u8 *resp_ie;
  			size_t req_ie_len;
  			size_t resp_ie_len;
adbde344d   Vasanthakumar Thiagarajan   cfg80211: Fix rac...
236
  			struct cfg80211_bss *bss;
667503ddc   Johannes Berg   cfg80211: fix loc...
237
238
239
240
241
242
243
244
245
246
247
  		} rm;
  		struct {
  			const u8 *ie;
  			size_t ie_len;
  			u16 reason;
  		} dc;
  		struct {
  			u8 bssid[ETH_ALEN];
  		} ij;
  	};
  };
fffd0934b   Johannes Berg   cfg80211: rework ...
248
249
250
251
252
  struct cfg80211_cached_keys {
  	struct key_params params[6];
  	u8 data[6][WLAN_MAX_KEY_LEN];
  	int def, defmgmt;
  };
667503ddc   Johannes Berg   cfg80211: fix loc...
253

704232c27   Johannes Berg   [WIRELESS] cfg802...
254
  /* free object */
79c97e97a   Johannes Berg   cfg80211: clean u...
255
  extern void cfg80211_dev_free(struct cfg80211_registered_device *rdev);
704232c27   Johannes Berg   [WIRELESS] cfg802...
256

79c97e97a   Johannes Berg   cfg80211: clean u...
257
  extern int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
556829657   Johannes Berg   [NL80211]: add ne...
258
  			       char *newname);
8318d78a4   Johannes Berg   cfg80211 API for ...
259
  void ieee80211_set_bitrate_flags(struct wiphy *wiphy);
8318d78a4   Johannes Berg   cfg80211 API for ...
260

2a5193119   Johannes Berg   cfg80211/nl80211:...
261
  void cfg80211_bss_expire(struct cfg80211_registered_device *dev);
cb3a8eec0   Dan Williams   cfg80211: age sca...
262
263
  void cfg80211_bss_age(struct cfg80211_registered_device *dev,
                        unsigned long age_secs);
2a5193119   Johannes Berg   cfg80211/nl80211:...
264

04a773ade   Johannes Berg   cfg80211/nl80211:...
265
  /* IBSS */
667503ddc   Johannes Berg   cfg80211: fix loc...
266
267
  int __cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
  			 struct net_device *dev,
fffd0934b   Johannes Berg   cfg80211: rework ...
268
269
  			 struct cfg80211_ibss_params *params,
  			 struct cfg80211_cached_keys *connkeys);
04a773ade   Johannes Berg   cfg80211/nl80211:...
270
271
  int cfg80211_join_ibss(struct cfg80211_registered_device *rdev,
  		       struct net_device *dev,
fffd0934b   Johannes Berg   cfg80211: rework ...
272
273
  		       struct cfg80211_ibss_params *params,
  		       struct cfg80211_cached_keys *connkeys);
9d308429a   Johannes Berg   cfg80211: clear W...
274
  void cfg80211_clear_ibss(struct net_device *dev, bool nowext);
98d3a7ca9   Johannes Berg   cfg80211: re-join...
275
276
  int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev,
  			  struct net_device *dev, bool nowext);
04a773ade   Johannes Berg   cfg80211/nl80211:...
277
  int cfg80211_leave_ibss(struct cfg80211_registered_device *rdev,
9d308429a   Johannes Berg   cfg80211: clear W...
278
  			struct net_device *dev, bool nowext);
667503ddc   Johannes Berg   cfg80211: fix loc...
279
  void __cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid);
fffd0934b   Johannes Berg   cfg80211: rework ...
280
281
  int cfg80211_ibss_wext_join(struct cfg80211_registered_device *rdev,
  			    struct wireless_dev *wdev);
04a773ade   Johannes Berg   cfg80211/nl80211:...
282

29cbe68c5   Johannes Berg   cfg80211/mac80211...
283
284
  /* mesh */
  extern const struct mesh_config default_mesh_config;
c80d545da   Javier Cardona   mac80211: Let use...
285
  extern const struct mesh_setup default_mesh_setup;
29cbe68c5   Johannes Berg   cfg80211/mac80211...
286
287
  int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
  			 struct net_device *dev,
c80d545da   Javier Cardona   mac80211: Let use...
288
  			 const struct mesh_setup *setup,
29cbe68c5   Johannes Berg   cfg80211/mac80211...
289
290
291
  			 const struct mesh_config *conf);
  int cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
  		       struct net_device *dev,
c80d545da   Javier Cardona   mac80211: Let use...
292
  		       const struct mesh_setup *setup,
29cbe68c5   Johannes Berg   cfg80211/mac80211...
293
294
295
  		       const struct mesh_config *conf);
  int cfg80211_leave_mesh(struct cfg80211_registered_device *rdev,
  			struct net_device *dev);
19957bb39   Johannes Berg   cfg80211: keep tr...
296
  /* MLME */
667503ddc   Johannes Berg   cfg80211: fix loc...
297
298
299
300
301
302
  int __cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
  			 struct net_device *dev,
  			 struct ieee80211_channel *chan,
  			 enum nl80211_auth_type auth_type,
  			 const u8 *bssid,
  			 const u8 *ssid, int ssid_len,
fffd0934b   Johannes Berg   cfg80211: rework ...
303
  			 const u8 *ie, int ie_len,
d5cdfacb3   Jouni Malinen   cfg80211: Add loc...
304
305
  			 const u8 *key, int key_len, int key_idx,
  			 bool local_state_change);
19957bb39   Johannes Berg   cfg80211: keep tr...
306
307
308
309
  int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev,
  		       struct net_device *dev, struct ieee80211_channel *chan,
  		       enum nl80211_auth_type auth_type, const u8 *bssid,
  		       const u8 *ssid, int ssid_len,
fffd0934b   Johannes Berg   cfg80211: rework ...
310
  		       const u8 *ie, int ie_len,
d5cdfacb3   Jouni Malinen   cfg80211: Add loc...
311
312
  		       const u8 *key, int key_len, int key_idx,
  		       bool local_state_change);
667503ddc   Johannes Berg   cfg80211: fix loc...
313
314
315
316
317
318
  int __cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev,
  			  struct net_device *dev,
  			  struct ieee80211_channel *chan,
  			  const u8 *bssid, const u8 *prev_bssid,
  			  const u8 *ssid, int ssid_len,
  			  const u8 *ie, int ie_len, bool use_mfp,
7e7c8926b   Ben Greear   wireless: Support...
319
320
321
  			  struct cfg80211_crypto_settings *crypt,
  			  u32 assoc_flags, struct ieee80211_ht_cap *ht_capa,
  			  struct ieee80211_ht_cap *ht_capa_mask);
19957bb39   Johannes Berg   cfg80211: keep tr...
322
323
  int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev,
  			struct net_device *dev, struct ieee80211_channel *chan,
3e5d7649a   Johannes Berg   cfg80211: let SME...
324
325
  			const u8 *bssid, const u8 *prev_bssid,
  			const u8 *ssid, int ssid_len,
19957bb39   Johannes Berg   cfg80211: keep tr...
326
  			const u8 *ie, int ie_len, bool use_mfp,
7e7c8926b   Ben Greear   wireless: Support...
327
328
329
  			struct cfg80211_crypto_settings *crypt,
  			u32 assoc_flags, struct ieee80211_ht_cap *ht_capa,
  			struct ieee80211_ht_cap *ht_capa_mask);
667503ddc   Johannes Berg   cfg80211: fix loc...
330
331
  int __cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev,
  			   struct net_device *dev, const u8 *bssid,
d5cdfacb3   Jouni Malinen   cfg80211: Add loc...
332
333
  			   const u8 *ie, int ie_len, u16 reason,
  			   bool local_state_change);
19957bb39   Johannes Berg   cfg80211: keep tr...
334
335
  int cfg80211_mlme_deauth(struct cfg80211_registered_device *rdev,
  			 struct net_device *dev, const u8 *bssid,
d5cdfacb3   Jouni Malinen   cfg80211: Add loc...
336
337
  			 const u8 *ie, int ie_len, u16 reason,
  			 bool local_state_change);
19957bb39   Johannes Berg   cfg80211: keep tr...
338
339
  int cfg80211_mlme_disassoc(struct cfg80211_registered_device *rdev,
  			   struct net_device *dev, const u8 *bssid,
d5cdfacb3   Jouni Malinen   cfg80211: Add loc...
340
341
  			   const u8 *ie, int ie_len, u16 reason,
  			   bool local_state_change);
19957bb39   Johannes Berg   cfg80211: keep tr...
342
343
  void cfg80211_mlme_down(struct cfg80211_registered_device *rdev,
  			struct net_device *dev);
667503ddc   Johannes Berg   cfg80211: fix loc...
344
345
346
  void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
  			       const u8 *req_ie, size_t req_ie_len,
  			       const u8 *resp_ie, size_t resp_ie_len,
df7fc0f97   Johannes Berg   cfg80211: keep tr...
347
348
  			       u16 status, bool wextev,
  			       struct cfg80211_bss *bss);
2e161f78e   Johannes Berg   cfg80211/mac80211...
349
350
351
352
353
354
355
  int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_pid,
  				u16 frame_type, const u8 *match_data,
  				int match_len);
  void cfg80211_mlme_unregister_socket(struct wireless_dev *wdev, u32 nlpid);
  void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev);
  int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
  			  struct net_device *dev,
f7ca38dfe   Johannes Berg   nl80211/cfg80211:...
356
  			  struct ieee80211_channel *chan, bool offchan,
2e161f78e   Johannes Berg   cfg80211/mac80211...
357
  			  enum nl80211_channel_type channel_type,
f7ca38dfe   Johannes Berg   nl80211/cfg80211:...
358
  			  bool channel_type_valid, unsigned int wait,
e9f935e3e   Rajkumar Manoharan   nl80211/cfg80211:...
359
  			  const u8 *buf, size_t len, bool no_cck,
e247bd906   Johannes Berg   cfg80211/mac80211...
360
  			  bool dont_wait_for_ack, u64 *cookie);
7e7c8926b   Ben Greear   wireless: Support...
361
362
  void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa,
  			       const struct ieee80211_ht_cap *ht_capa_mask);
19957bb39   Johannes Berg   cfg80211: keep tr...
363

b23aa676a   Samuel Ortiz   cfg80211: connect...
364
  /* SME */
667503ddc   Johannes Berg   cfg80211: fix loc...
365
366
  int __cfg80211_connect(struct cfg80211_registered_device *rdev,
  		       struct net_device *dev,
fffd0934b   Johannes Berg   cfg80211: rework ...
367
  		       struct cfg80211_connect_params *connect,
f401a6f7e   Johannes Berg   cfg80211: use rea...
368
369
  		       struct cfg80211_cached_keys *connkeys,
  		       const u8 *prev_bssid);
b23aa676a   Samuel Ortiz   cfg80211: connect...
370
371
  int cfg80211_connect(struct cfg80211_registered_device *rdev,
  		     struct net_device *dev,
fffd0934b   Johannes Berg   cfg80211: rework ...
372
373
  		     struct cfg80211_connect_params *connect,
  		     struct cfg80211_cached_keys *connkeys);
667503ddc   Johannes Berg   cfg80211: fix loc...
374
375
376
  int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
  			  struct net_device *dev, u16 reason,
  			  bool wextev);
b23aa676a   Samuel Ortiz   cfg80211: connect...
377
  int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
f21293549   Johannes Berg   cfg80211: managed...
378
379
  			struct net_device *dev, u16 reason,
  			bool wextev);
ed9d01026   Jouni Malinen   cfg80211: Use con...
380
  void __cfg80211_roamed(struct wireless_dev *wdev,
adbde344d   Vasanthakumar Thiagarajan   cfg80211: Fix rac...
381
  		       struct cfg80211_bss *bss,
667503ddc   Johannes Berg   cfg80211: fix loc...
382
383
  		       const u8 *req_ie, size_t req_ie_len,
  		       const u8 *resp_ie, size_t resp_ie_len);
fffd0934b   Johannes Berg   cfg80211: rework ...
384
385
  int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
  			      struct wireless_dev *wdev);
b23aa676a   Samuel Ortiz   cfg80211: connect...
386

6829c878e   Johannes Berg   cfg80211: emulate...
387
  void cfg80211_conn_work(struct work_struct *work);
7d930bc33   Johannes Berg   cfg80211: sme: de...
388
  void cfg80211_sme_failed_assoc(struct wireless_dev *wdev);
f401a6f7e   Johannes Berg   cfg80211: use rea...
389
  bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev);
6829c878e   Johannes Berg   cfg80211: emulate...
390

08645126d   Johannes Berg   cfg80211: impleme...
391
  /* internal helpers */
38ba3c57a   Jouni Malinen   cfg80211: Validat...
392
  bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher);
fffd0934b   Johannes Berg   cfg80211: rework ...
393
394
  int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
  				   struct key_params *params, int key_idx,
e31b82136   Johannes Berg   cfg80211/mac80211...
395
  				   bool pairwise, const u8 *mac_addr);
667503ddc   Johannes Berg   cfg80211: fix loc...
396
  void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
6829c878e   Johannes Berg   cfg80211: emulate...
397
398
399
  			     size_t ie_len, u16 reason, bool from_ap);
  void cfg80211_sme_scan_done(struct net_device *dev);
  void cfg80211_sme_rx_auth(struct net_device *dev, const u8 *buf, size_t len);
19957bb39   Johannes Berg   cfg80211: keep tr...
400
  void cfg80211_sme_disassoc(struct net_device *dev, int idx);
667503ddc   Johannes Berg   cfg80211: fix loc...
401
  void __cfg80211_scan_done(struct work_struct *wk);
01a0ac417   Johannes Berg   cfg80211: check l...
402
  void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev, bool leak);
807f8a8c3   Luciano Coelho   cfg80211/nl80211:...
403
404
405
  void __cfg80211_sched_scan_results(struct work_struct *wk);
  int __cfg80211_stop_sched_scan(struct cfg80211_registered_device *rdev,
  			       bool driver_initiated);
fffd0934b   Johannes Berg   cfg80211: rework ...
406
  void cfg80211_upload_connect_keys(struct wireless_dev *wdev);
3d54d2551   Johannes Berg   cfg80211: clean u...
407
408
409
410
  int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
  			  struct net_device *dev, enum nl80211_iftype ntype,
  			  u32 *flags, struct vif_params *params);
  void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev);
08645126d   Johannes Berg   cfg80211: impleme...
411

7527a782e   Johannes Berg   cfg80211: adverti...
412
413
414
415
416
417
418
419
420
421
  int cfg80211_can_change_interface(struct cfg80211_registered_device *rdev,
  				  struct wireless_dev *wdev,
  				  enum nl80211_iftype iftype);
  
  static inline int
  cfg80211_can_add_interface(struct cfg80211_registered_device *rdev,
  			   enum nl80211_iftype iftype)
  {
  	return cfg80211_can_change_interface(rdev, NULL, iftype);
  }
59bbb6f75   Johannes Berg   cfg80211: validat...
422
  struct ieee80211_channel *
9588bbd55   Jouni Malinen   cfg80211: add rem...
423
424
  rdev_freq_to_chan(struct cfg80211_registered_device *rdev,
  		  int freq, enum nl80211_channel_type channel_type);
f444de05d   Johannes Berg   cfg80211/mac80211...
425
426
427
  int cfg80211_set_freq(struct cfg80211_registered_device *rdev,
  		      struct wireless_dev *wdev, int freq,
  		      enum nl80211_channel_type channel_type);
59bbb6f75   Johannes Berg   cfg80211: validat...
428

254416aae   John W. Linville   wireless: report ...
429
  u16 cfg80211_calculate_bitrate(struct rate_info *rate);
34850ab25   Johannes Berg   cfg80211: allow u...
430
431
432
  int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
  			   const u8 *rates, unsigned int n_rates,
  			   u32 *mask);
56d1893d9   Johannes Berg   cfg80211: restric...
433
434
  int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev,
  				 u32 beacon_int);
f7969969f   Johannes Berg   cfg80211: make sp...
435
436
437
438
439
440
441
442
443
444
  #ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS
  #define CFG80211_DEV_WARN_ON(cond)	WARN_ON(cond)
  #else
  /*
   * Trick to enable using it as a condition,
   * and also not give a warning when it's
   * not used that way.
   */
  #define CFG80211_DEV_WARN_ON(cond)	({bool __r = (cond); __r; })
  #endif
704232c27   Johannes Berg   [WIRELESS] cfg802...
445
  #endif /* __NET_WIRELESS_CORE_H */