xref: /linux/net/mac80211/ibss.c (revision f8324e20f8289dffc646d64366332e05eaacab25)
1 /*
2  * IBSS mode implementation
3  * Copyright 2003-2008, Jouni Malinen <j@w1.fi>
4  * Copyright 2004, Instant802 Networks, Inc.
5  * Copyright 2005, Devicescape Software, Inc.
6  * Copyright 2006-2007	Jiri Benc <jbenc@suse.cz>
7  * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
8  * Copyright 2009, Johannes Berg <johannes@sipsolutions.net>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 
15 #include <linux/delay.h>
16 #include <linux/slab.h>
17 #include <linux/if_ether.h>
18 #include <linux/skbuff.h>
19 #include <linux/if_arp.h>
20 #include <linux/etherdevice.h>
21 #include <linux/rtnetlink.h>
22 #include <net/mac80211.h>
23 #include <asm/unaligned.h>
24 
25 #include "ieee80211_i.h"
26 #include "driver-ops.h"
27 #include "rate.h"
28 
29 #define IEEE80211_SCAN_INTERVAL (2 * HZ)
30 #define IEEE80211_SCAN_INTERVAL_SLOW (15 * HZ)
31 #define IEEE80211_IBSS_JOIN_TIMEOUT (7 * HZ)
32 
33 #define IEEE80211_IBSS_MERGE_INTERVAL (30 * HZ)
34 #define IEEE80211_IBSS_MERGE_DELAY 0x400000
35 #define IEEE80211_IBSS_INACTIVITY_LIMIT (60 * HZ)
36 
37 #define IEEE80211_IBSS_MAX_STA_ENTRIES 128
38 
39 
40 static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata,
41 					struct ieee80211_mgmt *mgmt,
42 					size_t len)
43 {
44 	u16 auth_alg, auth_transaction, status_code;
45 
46 	if (len < 24 + 6)
47 		return;
48 
49 	auth_alg = le16_to_cpu(mgmt->u.auth.auth_alg);
50 	auth_transaction = le16_to_cpu(mgmt->u.auth.auth_transaction);
51 	status_code = le16_to_cpu(mgmt->u.auth.status_code);
52 
53 	/*
54 	 * IEEE 802.11 standard does not require authentication in IBSS
55 	 * networks and most implementations do not seem to use it.
56 	 * However, try to reply to authentication attempts if someone
57 	 * has actually implemented this.
58 	 */
59 	if (auth_alg == WLAN_AUTH_OPEN && auth_transaction == 1)
60 		ieee80211_send_auth(sdata, 2, WLAN_AUTH_OPEN, NULL, 0,
61 				    sdata->u.ibss.bssid, NULL, 0, 0);
62 }
63 
64 static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
65 				      const u8 *bssid, const int beacon_int,
66 				      struct ieee80211_channel *chan,
67 				      const u32 basic_rates,
68 				      const u16 capability, u64 tsf)
69 {
70 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
71 	struct ieee80211_local *local = sdata->local;
72 	int rates, i;
73 	struct sk_buff *skb;
74 	struct ieee80211_mgmt *mgmt;
75 	u8 *pos;
76 	struct ieee80211_supported_band *sband;
77 	struct cfg80211_bss *bss;
78 	u32 bss_change;
79 	u8 supp_rates[IEEE80211_MAX_SUPP_RATES];
80 
81 	/* Reset own TSF to allow time synchronization work. */
82 	drv_reset_tsf(local);
83 
84 	skb = ifibss->skb;
85 	rcu_assign_pointer(ifibss->presp, NULL);
86 	synchronize_rcu();
87 	skb->data = skb->head;
88 	skb->len = 0;
89 	skb_reset_tail_pointer(skb);
90 	skb_reserve(skb, sdata->local->hw.extra_tx_headroom);
91 
92 	if (memcmp(ifibss->bssid, bssid, ETH_ALEN))
93 		sta_info_flush(sdata->local, sdata);
94 
95 	/* if merging, indicate to driver that we leave the old IBSS */
96 	if (sdata->vif.bss_conf.ibss_joined) {
97 		sdata->vif.bss_conf.ibss_joined = false;
98 		ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IBSS);
99 	}
100 
101 	memcpy(ifibss->bssid, bssid, ETH_ALEN);
102 
103 	sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0;
104 
105 	local->oper_channel = chan;
106 	WARN_ON(!ieee80211_set_channel_type(local, sdata, NL80211_CHAN_NO_HT));
107 	ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
108 
109 	sband = local->hw.wiphy->bands[chan->band];
110 
111 	/* build supported rates array */
112 	pos = supp_rates;
113 	for (i = 0; i < sband->n_bitrates; i++) {
114 		int rate = sband->bitrates[i].bitrate;
115 		u8 basic = 0;
116 		if (basic_rates & BIT(i))
117 			basic = 0x80;
118 		*pos++ = basic | (u8) (rate / 5);
119 	}
120 
121 	/* Build IBSS probe response */
122 	mgmt = (void *) skb_put(skb, 24 + sizeof(mgmt->u.beacon));
123 	memset(mgmt, 0, 24 + sizeof(mgmt->u.beacon));
124 	mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
125 					  IEEE80211_STYPE_PROBE_RESP);
126 	memset(mgmt->da, 0xff, ETH_ALEN);
127 	memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
128 	memcpy(mgmt->bssid, ifibss->bssid, ETH_ALEN);
129 	mgmt->u.beacon.beacon_int = cpu_to_le16(beacon_int);
130 	mgmt->u.beacon.timestamp = cpu_to_le64(tsf);
131 	mgmt->u.beacon.capab_info = cpu_to_le16(capability);
132 
133 	pos = skb_put(skb, 2 + ifibss->ssid_len);
134 	*pos++ = WLAN_EID_SSID;
135 	*pos++ = ifibss->ssid_len;
136 	memcpy(pos, ifibss->ssid, ifibss->ssid_len);
137 
138 	rates = sband->n_bitrates;
139 	if (rates > 8)
140 		rates = 8;
141 	pos = skb_put(skb, 2 + rates);
142 	*pos++ = WLAN_EID_SUPP_RATES;
143 	*pos++ = rates;
144 	memcpy(pos, supp_rates, rates);
145 
146 	if (sband->band == IEEE80211_BAND_2GHZ) {
147 		pos = skb_put(skb, 2 + 1);
148 		*pos++ = WLAN_EID_DS_PARAMS;
149 		*pos++ = 1;
150 		*pos++ = ieee80211_frequency_to_channel(chan->center_freq);
151 	}
152 
153 	pos = skb_put(skb, 2 + 2);
154 	*pos++ = WLAN_EID_IBSS_PARAMS;
155 	*pos++ = 2;
156 	/* FIX: set ATIM window based on scan results */
157 	*pos++ = 0;
158 	*pos++ = 0;
159 
160 	if (sband->n_bitrates > 8) {
161 		rates = sband->n_bitrates - 8;
162 		pos = skb_put(skb, 2 + rates);
163 		*pos++ = WLAN_EID_EXT_SUPP_RATES;
164 		*pos++ = rates;
165 		memcpy(pos, &supp_rates[8], rates);
166 	}
167 
168 	if (ifibss->ie_len)
169 		memcpy(skb_put(skb, ifibss->ie_len),
170 		       ifibss->ie, ifibss->ie_len);
171 
172 	rcu_assign_pointer(ifibss->presp, skb);
173 
174 	sdata->vif.bss_conf.beacon_int = beacon_int;
175 	bss_change = BSS_CHANGED_BEACON_INT;
176 	bss_change |= ieee80211_reset_erp_info(sdata);
177 	bss_change |= BSS_CHANGED_BSSID;
178 	bss_change |= BSS_CHANGED_BEACON;
179 	bss_change |= BSS_CHANGED_BEACON_ENABLED;
180 	bss_change |= BSS_CHANGED_IBSS;
181 	sdata->vif.bss_conf.ibss_joined = true;
182 	ieee80211_bss_info_change_notify(sdata, bss_change);
183 
184 	ieee80211_sta_def_wmm_params(sdata, sband->n_bitrates, supp_rates);
185 
186 	ifibss->state = IEEE80211_IBSS_MLME_JOINED;
187 	mod_timer(&ifibss->timer,
188 		  round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL));
189 
190 	bss = cfg80211_inform_bss_frame(local->hw.wiphy, local->hw.conf.channel,
191 					mgmt, skb->len, 0, GFP_KERNEL);
192 	cfg80211_put_bss(bss);
193 	cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL);
194 }
195 
196 static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
197 				    struct ieee80211_bss *bss)
198 {
199 	struct cfg80211_bss *cbss =
200 		container_of((void *)bss, struct cfg80211_bss, priv);
201 	struct ieee80211_supported_band *sband;
202 	u32 basic_rates;
203 	int i, j;
204 	u16 beacon_int = cbss->beacon_interval;
205 
206 	if (beacon_int < 10)
207 		beacon_int = 10;
208 
209 	sband = sdata->local->hw.wiphy->bands[cbss->channel->band];
210 
211 	basic_rates = 0;
212 
213 	for (i = 0; i < bss->supp_rates_len; i++) {
214 		int rate = (bss->supp_rates[i] & 0x7f) * 5;
215 		bool is_basic = !!(bss->supp_rates[i] & 0x80);
216 
217 		for (j = 0; j < sband->n_bitrates; j++) {
218 			if (sband->bitrates[j].bitrate == rate) {
219 				if (is_basic)
220 					basic_rates |= BIT(j);
221 				break;
222 			}
223 		}
224 	}
225 
226 	__ieee80211_sta_join_ibss(sdata, cbss->bssid,
227 				  beacon_int,
228 				  cbss->channel,
229 				  basic_rates,
230 				  cbss->capability,
231 				  cbss->tsf);
232 }
233 
234 static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
235 				  struct ieee80211_mgmt *mgmt,
236 				  size_t len,
237 				  struct ieee80211_rx_status *rx_status,
238 				  struct ieee802_11_elems *elems,
239 				  bool beacon)
240 {
241 	struct ieee80211_local *local = sdata->local;
242 	int freq;
243 	struct cfg80211_bss *cbss;
244 	struct ieee80211_bss *bss;
245 	struct sta_info *sta;
246 	struct ieee80211_channel *channel;
247 	u64 beacon_timestamp, rx_timestamp;
248 	u32 supp_rates = 0;
249 	enum ieee80211_band band = rx_status->band;
250 
251 	if (elems->ds_params && elems->ds_params_len == 1)
252 		freq = ieee80211_channel_to_frequency(elems->ds_params[0]);
253 	else
254 		freq = rx_status->freq;
255 
256 	channel = ieee80211_get_channel(local->hw.wiphy, freq);
257 
258 	if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
259 		return;
260 
261 	if (sdata->vif.type == NL80211_IFTYPE_ADHOC && elems->supp_rates &&
262 	    memcmp(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0) {
263 		supp_rates = ieee80211_sta_get_rates(local, elems, band);
264 
265 		rcu_read_lock();
266 
267 		sta = sta_info_get(sdata, mgmt->sa);
268 		if (sta) {
269 			u32 prev_rates;
270 
271 			prev_rates = sta->sta.supp_rates[band];
272 			/* make sure mandatory rates are always added */
273 			sta->sta.supp_rates[band] = supp_rates |
274 				ieee80211_mandatory_rates(local, band);
275 
276 			if (sta->sta.supp_rates[band] != prev_rates) {
277 #ifdef CONFIG_MAC80211_IBSS_DEBUG
278 				printk(KERN_DEBUG "%s: updated supp_rates set "
279 				    "for %pM based on beacon/probe_response "
280 				    "(0x%x -> 0x%x)\n",
281 				    sdata->name, sta->sta.addr,
282 				    prev_rates, sta->sta.supp_rates[band]);
283 #endif
284 				rate_control_rate_init(sta);
285 			}
286 			rcu_read_unlock();
287 		} else {
288 			rcu_read_unlock();
289 			ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa,
290 					       supp_rates, GFP_KERNEL);
291 		}
292 	}
293 
294 	bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems,
295 					channel, beacon);
296 	if (!bss)
297 		return;
298 
299 	cbss = container_of((void *)bss, struct cfg80211_bss, priv);
300 
301 	/* was just updated in ieee80211_bss_info_update */
302 	beacon_timestamp = cbss->tsf;
303 
304 	/* check if we need to merge IBSS */
305 
306 	/* we use a fixed BSSID */
307 	if (sdata->u.ibss.fixed_bssid)
308 		goto put_bss;
309 
310 	/* not an IBSS */
311 	if (!(cbss->capability & WLAN_CAPABILITY_IBSS))
312 		goto put_bss;
313 
314 	/* different channel */
315 	if (cbss->channel != local->oper_channel)
316 		goto put_bss;
317 
318 	/* different SSID */
319 	if (elems->ssid_len != sdata->u.ibss.ssid_len ||
320 	    memcmp(elems->ssid, sdata->u.ibss.ssid,
321 				sdata->u.ibss.ssid_len))
322 		goto put_bss;
323 
324 	/* same BSSID */
325 	if (memcmp(cbss->bssid, sdata->u.ibss.bssid, ETH_ALEN) == 0)
326 		goto put_bss;
327 
328 	if (rx_status->flag & RX_FLAG_TSFT) {
329 		/*
330 		 * For correct IBSS merging we need mactime; since mactime is
331 		 * defined as the time the first data symbol of the frame hits
332 		 * the PHY, and the timestamp of the beacon is defined as "the
333 		 * time that the data symbol containing the first bit of the
334 		 * timestamp is transmitted to the PHY plus the transmitting
335 		 * STA's delays through its local PHY from the MAC-PHY
336 		 * interface to its interface with the WM" (802.11 11.1.2)
337 		 * - equals the time this bit arrives at the receiver - we have
338 		 * to take into account the offset between the two.
339 		 *
340 		 * E.g. at 1 MBit that means mactime is 192 usec earlier
341 		 * (=24 bytes * 8 usecs/byte) than the beacon timestamp.
342 		 */
343 		int rate;
344 
345 		if (rx_status->flag & RX_FLAG_HT)
346 			rate = 65; /* TODO: HT rates */
347 		else
348 			rate = local->hw.wiphy->bands[band]->
349 				bitrates[rx_status->rate_idx].bitrate;
350 
351 		rx_timestamp = rx_status->mactime + (24 * 8 * 10 / rate);
352 	} else {
353 		/*
354 		 * second best option: get current TSF
355 		 * (will return -1 if not supported)
356 		 */
357 		rx_timestamp = drv_get_tsf(local);
358 	}
359 
360 #ifdef CONFIG_MAC80211_IBSS_DEBUG
361 	printk(KERN_DEBUG "RX beacon SA=%pM BSSID="
362 	       "%pM TSF=0x%llx BCN=0x%llx diff=%lld @%lu\n",
363 	       mgmt->sa, mgmt->bssid,
364 	       (unsigned long long)rx_timestamp,
365 	       (unsigned long long)beacon_timestamp,
366 	       (unsigned long long)(rx_timestamp - beacon_timestamp),
367 	       jiffies);
368 #endif
369 
370 	/* give slow hardware some time to do the TSF sync */
371 	if (rx_timestamp < IEEE80211_IBSS_MERGE_DELAY)
372 		goto put_bss;
373 
374 	if (beacon_timestamp > rx_timestamp) {
375 #ifdef CONFIG_MAC80211_IBSS_DEBUG
376 		printk(KERN_DEBUG "%s: beacon TSF higher than "
377 		       "local TSF - IBSS merge with BSSID %pM\n",
378 		       sdata->name, mgmt->bssid);
379 #endif
380 		ieee80211_sta_join_ibss(sdata, bss);
381 		supp_rates = ieee80211_sta_get_rates(local, elems, band);
382 		ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa,
383 				       supp_rates, GFP_KERNEL);
384 	}
385 
386  put_bss:
387 	ieee80211_rx_bss_put(local, bss);
388 }
389 
390 /*
391  * Add a new IBSS station, will also be called by the RX code when,
392  * in IBSS mode, receiving a frame from a yet-unknown station, hence
393  * must be callable in atomic context.
394  */
395 struct sta_info *ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata,
396 					u8 *bssid,u8 *addr, u32 supp_rates,
397 					gfp_t gfp)
398 {
399 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
400 	struct ieee80211_local *local = sdata->local;
401 	struct sta_info *sta;
402 	int band = local->hw.conf.channel->band;
403 
404 	/*
405 	 * XXX: Consider removing the least recently used entry and
406 	 * 	allow new one to be added.
407 	 */
408 	if (local->num_sta >= IEEE80211_IBSS_MAX_STA_ENTRIES) {
409 		if (net_ratelimit())
410 			printk(KERN_DEBUG "%s: No room for a new IBSS STA entry %pM\n",
411 			       sdata->name, addr);
412 		return NULL;
413 	}
414 
415 	if (ifibss->state == IEEE80211_IBSS_MLME_SEARCH)
416 		return NULL;
417 
418 	if (compare_ether_addr(bssid, sdata->u.ibss.bssid))
419 		return NULL;
420 
421 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
422 	printk(KERN_DEBUG "%s: Adding new IBSS station %pM (dev=%s)\n",
423 	       wiphy_name(local->hw.wiphy), addr, sdata->name);
424 #endif
425 
426 	sta = sta_info_alloc(sdata, addr, gfp);
427 	if (!sta)
428 		return NULL;
429 
430 	set_sta_flags(sta, WLAN_STA_AUTHORIZED);
431 
432 	/* make sure mandatory rates are always added */
433 	sta->sta.supp_rates[band] = supp_rates |
434 			ieee80211_mandatory_rates(local, band);
435 
436 	rate_control_rate_init(sta);
437 
438 	/* If it fails, maybe we raced another insertion? */
439 	if (sta_info_insert(sta))
440 		return sta_info_get(sdata, addr);
441 	return sta;
442 }
443 
444 static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata)
445 {
446 	struct ieee80211_local *local = sdata->local;
447 	int active = 0;
448 	struct sta_info *sta;
449 
450 	rcu_read_lock();
451 
452 	list_for_each_entry_rcu(sta, &local->sta_list, list) {
453 		if (sta->sdata == sdata &&
454 		    time_after(sta->last_rx + IEEE80211_IBSS_MERGE_INTERVAL,
455 			       jiffies)) {
456 			active++;
457 			break;
458 		}
459 	}
460 
461 	rcu_read_unlock();
462 
463 	return active;
464 }
465 
466 /*
467  * This function is called with state == IEEE80211_IBSS_MLME_JOINED
468  */
469 
470 static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
471 {
472 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
473 
474 	mod_timer(&ifibss->timer,
475 		  round_jiffies(jiffies + IEEE80211_IBSS_MERGE_INTERVAL));
476 
477 	ieee80211_sta_expire(sdata, IEEE80211_IBSS_INACTIVITY_LIMIT);
478 
479 	if (time_before(jiffies, ifibss->last_scan_completed +
480 		       IEEE80211_IBSS_MERGE_INTERVAL))
481 		return;
482 
483 	if (ieee80211_sta_active_ibss(sdata))
484 		return;
485 
486 	if (ifibss->fixed_channel)
487 		return;
488 
489 	printk(KERN_DEBUG "%s: No active IBSS STAs - trying to scan for other "
490 	       "IBSS networks with same SSID (merge)\n", sdata->name);
491 
492 	ieee80211_request_internal_scan(sdata,
493 			ifibss->ssid, ifibss->ssid_len,
494 			ifibss->fixed_channel ? ifibss->channel : NULL);
495 }
496 
497 static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
498 {
499 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
500 	struct ieee80211_local *local = sdata->local;
501 	struct ieee80211_supported_band *sband;
502 	u8 bssid[ETH_ALEN];
503 	u16 capability;
504 	int i;
505 
506 	if (ifibss->fixed_bssid) {
507 		memcpy(bssid, ifibss->bssid, ETH_ALEN);
508 	} else {
509 		/* Generate random, not broadcast, locally administered BSSID. Mix in
510 		 * own MAC address to make sure that devices that do not have proper
511 		 * random number generator get different BSSID. */
512 		get_random_bytes(bssid, ETH_ALEN);
513 		for (i = 0; i < ETH_ALEN; i++)
514 			bssid[i] ^= sdata->vif.addr[i];
515 		bssid[0] &= ~0x01;
516 		bssid[0] |= 0x02;
517 	}
518 
519 	printk(KERN_DEBUG "%s: Creating new IBSS network, BSSID %pM\n",
520 	       sdata->name, bssid);
521 
522 	sband = local->hw.wiphy->bands[ifibss->channel->band];
523 
524 	capability = WLAN_CAPABILITY_IBSS;
525 
526 	if (ifibss->privacy)
527 		capability |= WLAN_CAPABILITY_PRIVACY;
528 	else
529 		sdata->drop_unencrypted = 0;
530 
531 	__ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int,
532 				  ifibss->channel, 3, /* first two are basic */
533 				  capability, 0);
534 }
535 
536 /*
537  * This function is called with state == IEEE80211_IBSS_MLME_SEARCH
538  */
539 
540 static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
541 {
542 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
543 	struct ieee80211_local *local = sdata->local;
544 	struct cfg80211_bss *cbss;
545 	struct ieee80211_channel *chan = NULL;
546 	const u8 *bssid = NULL;
547 	int active_ibss;
548 	u16 capability;
549 
550 	active_ibss = ieee80211_sta_active_ibss(sdata);
551 #ifdef CONFIG_MAC80211_IBSS_DEBUG
552 	printk(KERN_DEBUG "%s: sta_find_ibss (active_ibss=%d)\n",
553 	       sdata->name, active_ibss);
554 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
555 
556 	if (active_ibss)
557 		return;
558 
559 	capability = WLAN_CAPABILITY_IBSS;
560 	if (ifibss->privacy)
561 		capability |= WLAN_CAPABILITY_PRIVACY;
562 	if (ifibss->fixed_bssid)
563 		bssid = ifibss->bssid;
564 	if (ifibss->fixed_channel)
565 		chan = ifibss->channel;
566 	if (!is_zero_ether_addr(ifibss->bssid))
567 		bssid = ifibss->bssid;
568 	cbss = cfg80211_get_bss(local->hw.wiphy, chan, bssid,
569 				ifibss->ssid, ifibss->ssid_len,
570 				WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_PRIVACY,
571 				capability);
572 
573 	if (cbss) {
574 		struct ieee80211_bss *bss;
575 
576 		bss = (void *)cbss->priv;
577 #ifdef CONFIG_MAC80211_IBSS_DEBUG
578 		printk(KERN_DEBUG "   sta_find_ibss: selected %pM current "
579 		       "%pM\n", cbss->bssid, ifibss->bssid);
580 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
581 
582 		printk(KERN_DEBUG "%s: Selected IBSS BSSID %pM"
583 		       " based on configured SSID\n",
584 		       sdata->name, cbss->bssid);
585 
586 		ieee80211_sta_join_ibss(sdata, bss);
587 		ieee80211_rx_bss_put(local, bss);
588 		return;
589 	}
590 
591 #ifdef CONFIG_MAC80211_IBSS_DEBUG
592 	printk(KERN_DEBUG "   did not try to join ibss\n");
593 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
594 
595 	/* Selected IBSS not found in current scan results - try to scan */
596 	if (time_after(jiffies, ifibss->last_scan_completed +
597 					IEEE80211_SCAN_INTERVAL)) {
598 		printk(KERN_DEBUG "%s: Trigger new scan to find an IBSS to "
599 		       "join\n", sdata->name);
600 
601 		ieee80211_request_internal_scan(sdata,
602 				ifibss->ssid, ifibss->ssid_len,
603 				ifibss->fixed_channel ? ifibss->channel : NULL);
604 	} else {
605 		int interval = IEEE80211_SCAN_INTERVAL;
606 
607 		if (time_after(jiffies, ifibss->ibss_join_req +
608 			       IEEE80211_IBSS_JOIN_TIMEOUT)) {
609 			if (!(local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS)) {
610 				ieee80211_sta_create_ibss(sdata);
611 				return;
612 			}
613 			printk(KERN_DEBUG "%s: IBSS not allowed on"
614 			       " %d MHz\n", sdata->name,
615 			       local->hw.conf.channel->center_freq);
616 
617 			/* No IBSS found - decrease scan interval and continue
618 			 * scanning. */
619 			interval = IEEE80211_SCAN_INTERVAL_SLOW;
620 		}
621 
622 		mod_timer(&ifibss->timer,
623 			  round_jiffies(jiffies + interval));
624 	}
625 }
626 
627 static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata,
628 					struct ieee80211_mgmt *mgmt,
629 					size_t len)
630 {
631 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
632 	struct ieee80211_local *local = sdata->local;
633 	int tx_last_beacon;
634 	struct sk_buff *skb;
635 	struct ieee80211_mgmt *resp;
636 	u8 *pos, *end;
637 
638 	if (ifibss->state != IEEE80211_IBSS_MLME_JOINED ||
639 	    len < 24 + 2 || !ifibss->presp)
640 		return;
641 
642 	tx_last_beacon = drv_tx_last_beacon(local);
643 
644 #ifdef CONFIG_MAC80211_IBSS_DEBUG
645 	printk(KERN_DEBUG "%s: RX ProbeReq SA=%pM DA=%pM BSSID=%pM"
646 	       " (tx_last_beacon=%d)\n",
647 	       sdata->name, mgmt->sa, mgmt->da,
648 	       mgmt->bssid, tx_last_beacon);
649 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
650 
651 	if (!tx_last_beacon)
652 		return;
653 
654 	if (memcmp(mgmt->bssid, ifibss->bssid, ETH_ALEN) != 0 &&
655 	    memcmp(mgmt->bssid, "\xff\xff\xff\xff\xff\xff", ETH_ALEN) != 0)
656 		return;
657 
658 	end = ((u8 *) mgmt) + len;
659 	pos = mgmt->u.probe_req.variable;
660 	if (pos[0] != WLAN_EID_SSID ||
661 	    pos + 2 + pos[1] > end) {
662 #ifdef CONFIG_MAC80211_IBSS_DEBUG
663 		printk(KERN_DEBUG "%s: Invalid SSID IE in ProbeReq "
664 		       "from %pM\n",
665 		       sdata->name, mgmt->sa);
666 #endif
667 		return;
668 	}
669 	if (pos[1] != 0 &&
670 	    (pos[1] != ifibss->ssid_len ||
671 	     memcmp(pos + 2, ifibss->ssid, ifibss->ssid_len))) {
672 		/* Ignore ProbeReq for foreign SSID */
673 		return;
674 	}
675 
676 	/* Reply with ProbeResp */
677 	skb = skb_copy(ifibss->presp, GFP_KERNEL);
678 	if (!skb)
679 		return;
680 
681 	resp = (struct ieee80211_mgmt *) skb->data;
682 	memcpy(resp->da, mgmt->sa, ETH_ALEN);
683 #ifdef CONFIG_MAC80211_IBSS_DEBUG
684 	printk(KERN_DEBUG "%s: Sending ProbeResp to %pM\n",
685 	       sdata->name, resp->da);
686 #endif /* CONFIG_MAC80211_IBSS_DEBUG */
687 	IEEE80211_SKB_CB(skb)->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
688 	ieee80211_tx_skb(sdata, skb);
689 }
690 
691 static void ieee80211_rx_mgmt_probe_resp(struct ieee80211_sub_if_data *sdata,
692 					 struct ieee80211_mgmt *mgmt,
693 					 size_t len,
694 					 struct ieee80211_rx_status *rx_status)
695 {
696 	size_t baselen;
697 	struct ieee802_11_elems elems;
698 
699 	if (memcmp(mgmt->da, sdata->vif.addr, ETH_ALEN))
700 		return; /* ignore ProbeResp to foreign address */
701 
702 	baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt;
703 	if (baselen > len)
704 		return;
705 
706 	ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen,
707 				&elems);
708 
709 	ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, false);
710 }
711 
712 static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
713 				     struct ieee80211_mgmt *mgmt,
714 				     size_t len,
715 				     struct ieee80211_rx_status *rx_status)
716 {
717 	size_t baselen;
718 	struct ieee802_11_elems elems;
719 
720 	/* Process beacon from the current BSS */
721 	baselen = (u8 *) mgmt->u.beacon.variable - (u8 *) mgmt;
722 	if (baselen > len)
723 		return;
724 
725 	ieee802_11_parse_elems(mgmt->u.beacon.variable, len - baselen, &elems);
726 
727 	ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems, true);
728 }
729 
730 static void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
731 					  struct sk_buff *skb)
732 {
733 	struct ieee80211_rx_status *rx_status;
734 	struct ieee80211_mgmt *mgmt;
735 	u16 fc;
736 
737 	rx_status = IEEE80211_SKB_RXCB(skb);
738 	mgmt = (struct ieee80211_mgmt *) skb->data;
739 	fc = le16_to_cpu(mgmt->frame_control);
740 
741 	switch (fc & IEEE80211_FCTL_STYPE) {
742 	case IEEE80211_STYPE_PROBE_REQ:
743 		ieee80211_rx_mgmt_probe_req(sdata, mgmt, skb->len);
744 		break;
745 	case IEEE80211_STYPE_PROBE_RESP:
746 		ieee80211_rx_mgmt_probe_resp(sdata, mgmt, skb->len,
747 					     rx_status);
748 		break;
749 	case IEEE80211_STYPE_BEACON:
750 		ieee80211_rx_mgmt_beacon(sdata, mgmt, skb->len,
751 					 rx_status);
752 		break;
753 	case IEEE80211_STYPE_AUTH:
754 		ieee80211_rx_mgmt_auth_ibss(sdata, mgmt, skb->len);
755 		break;
756 	}
757 
758 	kfree_skb(skb);
759 }
760 
761 static void ieee80211_ibss_work(struct work_struct *work)
762 {
763 	struct ieee80211_sub_if_data *sdata =
764 		container_of(work, struct ieee80211_sub_if_data, u.ibss.work);
765 	struct ieee80211_local *local = sdata->local;
766 	struct ieee80211_if_ibss *ifibss;
767 	struct sk_buff *skb;
768 
769 	if (WARN_ON(local->suspended))
770 		return;
771 
772 	if (!ieee80211_sdata_running(sdata))
773 		return;
774 
775 	if (local->scanning)
776 		return;
777 
778 	if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_ADHOC))
779 		return;
780 	ifibss = &sdata->u.ibss;
781 
782 	while ((skb = skb_dequeue(&ifibss->skb_queue)))
783 		ieee80211_ibss_rx_queued_mgmt(sdata, skb);
784 
785 	if (!test_and_clear_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request))
786 		return;
787 
788 	switch (ifibss->state) {
789 	case IEEE80211_IBSS_MLME_SEARCH:
790 		ieee80211_sta_find_ibss(sdata);
791 		break;
792 	case IEEE80211_IBSS_MLME_JOINED:
793 		ieee80211_sta_merge_ibss(sdata);
794 		break;
795 	default:
796 		WARN_ON(1);
797 		break;
798 	}
799 }
800 
801 static void ieee80211_ibss_timer(unsigned long data)
802 {
803 	struct ieee80211_sub_if_data *sdata =
804 		(struct ieee80211_sub_if_data *) data;
805 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
806 	struct ieee80211_local *local = sdata->local;
807 
808 	if (local->quiescing) {
809 		ifibss->timer_running = true;
810 		return;
811 	}
812 
813 	set_bit(IEEE80211_IBSS_REQ_RUN, &ifibss->request);
814 	ieee80211_queue_work(&local->hw, &ifibss->work);
815 }
816 
817 #ifdef CONFIG_PM
818 void ieee80211_ibss_quiesce(struct ieee80211_sub_if_data *sdata)
819 {
820 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
821 
822 	cancel_work_sync(&ifibss->work);
823 	if (del_timer_sync(&ifibss->timer))
824 		ifibss->timer_running = true;
825 }
826 
827 void ieee80211_ibss_restart(struct ieee80211_sub_if_data *sdata)
828 {
829 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
830 
831 	if (ifibss->timer_running) {
832 		add_timer(&ifibss->timer);
833 		ifibss->timer_running = false;
834 	}
835 }
836 #endif
837 
838 void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata)
839 {
840 	struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
841 
842 	INIT_WORK(&ifibss->work, ieee80211_ibss_work);
843 	setup_timer(&ifibss->timer, ieee80211_ibss_timer,
844 		    (unsigned long) sdata);
845 	skb_queue_head_init(&ifibss->skb_queue);
846 }
847 
848 /* scan finished notification */
849 void ieee80211_ibss_notify_scan_completed(struct ieee80211_local *local)
850 {
851 	struct ieee80211_sub_if_data *sdata;
852 
853 	mutex_lock(&local->iflist_mtx);
854 	list_for_each_entry(sdata, &local->interfaces, list) {
855 		if (!ieee80211_sdata_running(sdata))
856 			continue;
857 		if (sdata->vif.type != NL80211_IFTYPE_ADHOC)
858 			continue;
859 		if (!sdata->u.ibss.ssid_len)
860 			continue;
861 		sdata->u.ibss.last_scan_completed = jiffies;
862 		mod_timer(&sdata->u.ibss.timer, 0);
863 	}
864 	mutex_unlock(&local->iflist_mtx);
865 }
866 
867 ieee80211_rx_result
868 ieee80211_ibss_rx_mgmt(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
869 {
870 	struct ieee80211_local *local = sdata->local;
871 	struct ieee80211_mgmt *mgmt;
872 	u16 fc;
873 
874 	if (skb->len < 24)
875 		return RX_DROP_MONITOR;
876 
877 	mgmt = (struct ieee80211_mgmt *) skb->data;
878 	fc = le16_to_cpu(mgmt->frame_control);
879 
880 	switch (fc & IEEE80211_FCTL_STYPE) {
881 	case IEEE80211_STYPE_PROBE_RESP:
882 	case IEEE80211_STYPE_BEACON:
883 	case IEEE80211_STYPE_PROBE_REQ:
884 	case IEEE80211_STYPE_AUTH:
885 		skb_queue_tail(&sdata->u.ibss.skb_queue, skb);
886 		ieee80211_queue_work(&local->hw, &sdata->u.ibss.work);
887 		return RX_QUEUED;
888 	}
889 
890 	return RX_DROP_MONITOR;
891 }
892 
893 int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata,
894 			struct cfg80211_ibss_params *params)
895 {
896 	struct sk_buff *skb;
897 
898 	if (params->bssid) {
899 		memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN);
900 		sdata->u.ibss.fixed_bssid = true;
901 	} else
902 		sdata->u.ibss.fixed_bssid = false;
903 
904 	sdata->u.ibss.privacy = params->privacy;
905 
906 	sdata->vif.bss_conf.beacon_int = params->beacon_interval;
907 
908 	sdata->u.ibss.channel = params->channel;
909 	sdata->u.ibss.fixed_channel = params->channel_fixed;
910 
911 	/* fix ourselves to that channel now already */
912 	if (params->channel_fixed) {
913 		sdata->local->oper_channel = params->channel;
914 		WARN_ON(!ieee80211_set_channel_type(sdata->local, sdata,
915 						    NL80211_CHAN_NO_HT));
916 	}
917 
918 	if (params->ie) {
919 		sdata->u.ibss.ie = kmemdup(params->ie, params->ie_len,
920 					   GFP_KERNEL);
921 		if (sdata->u.ibss.ie)
922 			sdata->u.ibss.ie_len = params->ie_len;
923 	}
924 
925 	skb = dev_alloc_skb(sdata->local->hw.extra_tx_headroom +
926 			    36 /* bitrates */ +
927 			    34 /* SSID */ +
928 			    3  /* DS params */ +
929 			    4  /* IBSS params */ +
930 			    params->ie_len);
931 	if (!skb)
932 		return -ENOMEM;
933 
934 	sdata->u.ibss.skb = skb;
935 	sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH;
936 	sdata->u.ibss.ibss_join_req = jiffies;
937 
938 	memcpy(sdata->u.ibss.ssid, params->ssid, IEEE80211_MAX_SSID_LEN);
939 
940 	/*
941 	 * The ssid_len setting below is used to see whether
942 	 * we are active, and we need all other settings
943 	 * before that may get visible.
944 	 */
945 	mb();
946 
947 	sdata->u.ibss.ssid_len = params->ssid_len;
948 
949 	ieee80211_recalc_idle(sdata->local);
950 
951 	set_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
952 	ieee80211_queue_work(&sdata->local->hw, &sdata->u.ibss.work);
953 
954 	return 0;
955 }
956 
957 int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata)
958 {
959 	struct sk_buff *skb;
960 
961 	del_timer_sync(&sdata->u.ibss.timer);
962 	clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
963 	cancel_work_sync(&sdata->u.ibss.work);
964 	clear_bit(IEEE80211_IBSS_REQ_RUN, &sdata->u.ibss.request);
965 
966 	sta_info_flush(sdata->local, sdata);
967 
968 	/* remove beacon */
969 	kfree(sdata->u.ibss.ie);
970 	skb = sdata->u.ibss.presp;
971 	rcu_assign_pointer(sdata->u.ibss.presp, NULL);
972 	sdata->vif.bss_conf.ibss_joined = false;
973 	ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED |
974 						BSS_CHANGED_IBSS);
975 	synchronize_rcu();
976 	kfree_skb(skb);
977 
978 	skb_queue_purge(&sdata->u.ibss.skb_queue);
979 	memset(sdata->u.ibss.bssid, 0, ETH_ALEN);
980 	sdata->u.ibss.ssid_len = 0;
981 
982 	ieee80211_recalc_idle(sdata->local);
983 
984 	return 0;
985 }
986