ieee80211_ioctl.c (208699) | ieee80211_ioctl.c (218092) |
---|---|
1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Atsushi Onoe 3 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_ioctl.c 208699 2010-06-01 14:20:58Z rpaulo $"); | 28__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_ioctl.c 218092 2011-01-30 14:05:21Z bschmidt $"); |
29 30/* 31 * IEEE 802.11 ioctl support (FreeBSD-specific) 32 */ 33 34#include "opt_inet.h" 35#include "opt_ipx.h" 36#include "opt_wlan.h" --- 2342 unchanged lines hidden (view full) --- 2379{ 2380#define IEEE80211_IOC_SCAN_FLAGS \ 2381 (IEEE80211_IOC_SCAN_NOPICK | IEEE80211_IOC_SCAN_ACTIVE | \ 2382 IEEE80211_IOC_SCAN_PICK1ST | IEEE80211_IOC_SCAN_BGSCAN | \ 2383 IEEE80211_IOC_SCAN_ONCE | IEEE80211_IOC_SCAN_NOBCAST | \ 2384 IEEE80211_IOC_SCAN_NOJOIN | IEEE80211_IOC_SCAN_FLUSH | \ 2385 IEEE80211_IOC_SCAN_CHECK) 2386 struct ieee80211com *ic = vap->iv_ic; | 29 30/* 31 * IEEE 802.11 ioctl support (FreeBSD-specific) 32 */ 33 34#include "opt_inet.h" 35#include "opt_ipx.h" 36#include "opt_wlan.h" --- 2342 unchanged lines hidden (view full) --- 2379{ 2380#define IEEE80211_IOC_SCAN_FLAGS \ 2381 (IEEE80211_IOC_SCAN_NOPICK | IEEE80211_IOC_SCAN_ACTIVE | \ 2382 IEEE80211_IOC_SCAN_PICK1ST | IEEE80211_IOC_SCAN_BGSCAN | \ 2383 IEEE80211_IOC_SCAN_ONCE | IEEE80211_IOC_SCAN_NOBCAST | \ 2384 IEEE80211_IOC_SCAN_NOJOIN | IEEE80211_IOC_SCAN_FLUSH | \ 2385 IEEE80211_IOC_SCAN_CHECK) 2386 struct ieee80211com *ic = vap->iv_ic; |
2387 int i; | 2387 int error, i; |
2388 2389 /* convert duration */ 2390 if (sr->sr_duration == IEEE80211_IOC_SCAN_FOREVER) 2391 sr->sr_duration = IEEE80211_SCAN_FOREVER; 2392 else { 2393 if (sr->sr_duration < IEEE80211_IOC_SCAN_DURATION_MIN || 2394 sr->sr_duration > IEEE80211_IOC_SCAN_DURATION_MAX) 2395 return EINVAL; --- 57 unchanged lines hidden (view full) --- 2453 sr->sr_ssid[i].ssid, sr->sr_ssid[i].len); 2454 } 2455 vap->iv_flags_ext |= IEEE80211_FEXT_SCANREQ; 2456 IEEE80211_UNLOCK(ic); 2457 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); 2458 } else { 2459 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ; 2460 IEEE80211_UNLOCK(ic); | 2388 2389 /* convert duration */ 2390 if (sr->sr_duration == IEEE80211_IOC_SCAN_FOREVER) 2391 sr->sr_duration = IEEE80211_SCAN_FOREVER; 2392 else { 2393 if (sr->sr_duration < IEEE80211_IOC_SCAN_DURATION_MIN || 2394 sr->sr_duration > IEEE80211_IOC_SCAN_DURATION_MAX) 2395 return EINVAL; --- 57 unchanged lines hidden (view full) --- 2453 sr->sr_ssid[i].ssid, sr->sr_ssid[i].len); 2454 } 2455 vap->iv_flags_ext |= IEEE80211_FEXT_SCANREQ; 2456 IEEE80211_UNLOCK(ic); 2457 ieee80211_new_state(vap, IEEE80211_S_SCAN, 0); 2458 } else { 2459 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ; 2460 IEEE80211_UNLOCK(ic); |
2461 /* XXX neeed error return codes */ | |
2462 if (sr->sr_flags & IEEE80211_IOC_SCAN_CHECK) { | 2461 if (sr->sr_flags & IEEE80211_IOC_SCAN_CHECK) { |
2463 (void) ieee80211_check_scan(vap, sr->sr_flags, | 2462 error = ieee80211_check_scan(vap, sr->sr_flags, |
2464 sr->sr_duration, sr->sr_mindwell, sr->sr_maxdwell, 2465 sr->sr_nssid, 2466 /* NB: cheat, we assume structures are compatible */ 2467 (const struct ieee80211_scan_ssid *) &sr->sr_ssid[0]); 2468 } else { | 2463 sr->sr_duration, sr->sr_mindwell, sr->sr_maxdwell, 2464 sr->sr_nssid, 2465 /* NB: cheat, we assume structures are compatible */ 2466 (const struct ieee80211_scan_ssid *) &sr->sr_ssid[0]); 2467 } else { |
2469 (void) ieee80211_start_scan(vap, sr->sr_flags, | 2468 error = ieee80211_start_scan(vap, sr->sr_flags, |
2470 sr->sr_duration, sr->sr_mindwell, sr->sr_maxdwell, 2471 sr->sr_nssid, 2472 /* NB: cheat, we assume structures are compatible */ 2473 (const struct ieee80211_scan_ssid *) &sr->sr_ssid[0]); 2474 } | 2469 sr->sr_duration, sr->sr_mindwell, sr->sr_maxdwell, 2470 sr->sr_nssid, 2471 /* NB: cheat, we assume structures are compatible */ 2472 (const struct ieee80211_scan_ssid *) &sr->sr_ssid[0]); 2473 } |
2474 if (error == 0) 2475 return EINPROGRESS; |
|
2475 } 2476 return 0; 2477#undef IEEE80211_IOC_SCAN_FLAGS 2478} 2479 2480static __noinline int 2481ieee80211_ioctl_scanreq(struct ieee80211vap *vap, struct ieee80211req *ireq) 2482{ --- 912 unchanged lines hidden --- | 2476 } 2477 return 0; 2478#undef IEEE80211_IOC_SCAN_FLAGS 2479} 2480 2481static __noinline int 2482ieee80211_ioctl_scanreq(struct ieee80211vap *vap, struct ieee80211req *ireq) 2483{ --- 912 unchanged lines hidden --- |