PERFORCE change 137290 for review
Sam Leffler
sam at FreeBSD.org
Mon Mar 10 05:24:59 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=137290
Change 137290 by sam at sam_ebb on 2008/03/10 05:24:20
Add IEEE80211_SCAN_NOJOIN and the equivalent ioctl flag for
scan requests that want to check the scan cache for a hit
before deciding whether or not to kick off a scan. This will
be used to short-circuit scans done after a deauth or similar.
While here correct previous addition of IEEE80211_IOC_SCAN_CHECK
to not overlap with IEEE80211_SCAN_NOSSID (move the latter since
it's used internally).
Affected files ...
.. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#39 edit
.. //depot/projects/vap/sys/net80211/ieee80211_ioctl.h#15 edit
.. //depot/projects/vap/sys/net80211/ieee80211_scan.c#17 edit
.. //depot/projects/vap/sys/net80211/ieee80211_scan.h#12 edit
.. //depot/projects/vap/sys/net80211/ieee80211_scan_sta.c#20 edit
Differences ...
==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#39 (text+ko) ====
@@ -2345,7 +2345,8 @@
(IEEE80211_IOC_SCAN_NOPICK | IEEE80211_IOC_SCAN_ACTIVE | \
IEEE80211_IOC_SCAN_PICK1ST | IEEE80211_IOC_SCAN_BGSCAN | \
IEEE80211_IOC_SCAN_ONCE | IEEE80211_IOC_SCAN_NOBCAST | \
- IEEE80211_IOC_SCAN_FLUSH | IEEE80211_IOC_SCAN_CHECK)
+ IEEE80211_IOC_SCAN_NOJOIN | IEEE80211_IOC_SCAN_FLUSH | \
+ IEEE80211_IOC_SCAN_CHECK)
struct ieee80211com *ic = vap->iv_ic;
struct ieee80211_scan_req sr; /* XXX off stack? */
int error, i;
==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.h#15 (text+ko) ====
@@ -646,6 +646,7 @@
#define IEEE80211_IOC_SCAN_BGSCAN 0x00008 /* bg scan, exit ps at end */
#define IEEE80211_IOC_SCAN_ONCE 0x00010 /* do one complete pass */
#define IEEE80211_IOC_SCAN_NOBCAST 0x00020 /* don't send bcast probe req */
+#define IEEE80211_IOC_SCAN_NOJOIN 0x00040 /* no auto-sequencing */
#define IEEE80211_IOC_SCAN_FLUSH 0x10000 /* flush scan cache first */
#define IEEE80211_IOC_SCAN_CHECK 0x20000 /* check scan cache first */
u_int sr_duration; /* duration (ms) */
==== //depot/projects/vap/sys/net80211/ieee80211_scan.c#17 (text+ko) ====
@@ -469,13 +469,14 @@
"%s: scan inhibited by pending channel change\n", __func__);
} else if ((ic->ic_flags & IEEE80211_F_SCAN) == 0) {
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN,
- "%s: %s scan, duration %u mindwell %u maxdwell %u, desired mode %s, %s%s%s%s%s\n"
+ "%s: %s scan, duration %u mindwell %u maxdwell %u, desired mode %s, %s%s%s%s%s%s\n"
, __func__
, flags & IEEE80211_SCAN_ACTIVE ? "active" : "passive"
, duration, mindwell, maxdwell
, ieee80211_phymode_name[vap->iv_des_mode]
, flags & IEEE80211_SCAN_FLUSH ? "flush" : "append"
, flags & IEEE80211_SCAN_NOPICK ? ", nopick" : ""
+ , flags & IEEE80211_SCAN_NOJOIN ? ", nojoin" : ""
, flags & IEEE80211_SCAN_NOBCAST ? ", nobcast" : ""
, flags & IEEE80211_SCAN_PICK1ST ? ", pick1st" : ""
, flags & IEEE80211_SCAN_ONCE ? ", once" : ""
@@ -549,11 +550,12 @@
IEEE80211_LOCK(ic);
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN,
- "%s: %s scan, %s%s%s%s\n"
+ "%s: %s scan, %s%s%s%s%s\n"
, __func__
, flags & IEEE80211_SCAN_ACTIVE ? "active" : "passive"
, flags & IEEE80211_SCAN_FLUSH ? "flush" : "append"
, flags & IEEE80211_SCAN_NOPICK ? ", nopick" : ""
+ , flags & IEEE80211_SCAN_NOJOIN ? ", nojoin" : ""
, flags & IEEE80211_SCAN_PICK1ST ? ", pick1st" : ""
, flags & IEEE80211_SCAN_ONCE ? ", once" : ""
);
==== //depot/projects/vap/sys/net80211/ieee80211_scan.h#12 (text+ko) ====
@@ -99,6 +99,7 @@
#define IEEE80211_SCAN_BGSCAN 0x0008 /* bg scan, exit ps at end */
#define IEEE80211_SCAN_ONCE 0x0010 /* do one complete pass */
#define IEEE80211_SCAN_NOBCAST 0x0020 /* no broadcast probe req */
+#define IEEE80211_SCAN_NOJOIN 0x0040 /* no auto-sequencing */
#define IEEE80211_SCAN_GOTPICK 0x1000 /* got candidate, can stop */
uint8_t ss_nssid; /* # ssid's to probe/match */
struct ieee80211_scan_ssid ss_ssid[IEEE80211_SCAN_MAX_SSID];
@@ -117,8 +118,8 @@
* ss_flags. It might be better to split this stuff out into
* a separate variable to avoid confusion.
*/
-#define IEEE80211_SCAN_FLUSH 0x10000 /* flush candidate table */
-#define IEEE80211_SCAN_NOSSID 0x20000 /* don't update ssid list */
+#define IEEE80211_SCAN_FLUSH 0x00010000 /* flush candidate table */
+#define IEEE80211_SCAN_NOSSID 0x80000000 /* don't update ssid list */
struct ieee80211com;
void ieee80211_scan_attach(struct ieee80211com *);
==== //depot/projects/vap/sys/net80211/ieee80211_scan_sta.c#20 (text+ko) ====
@@ -1036,6 +1036,8 @@
if (TAILQ_FIRST(&st->st_entry) == NULL) {
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN,
"%s: no scan candidate\n", __func__);
+ if (ss->ss_flags & IEEE80211_SCAN_NOJOIN)
+ return 0;
notfound:
/*
* If nothing suitable was found decrement
@@ -1049,6 +1051,8 @@
return 0; /* restart scan */
}
selbs = select_bss(ss, vap, IEEE80211_MSG_SCAN);
+ if (ss->ss_flags & IEEE80211_SCAN_NOJOIN)
+ return (selbs != NULL);
if (selbs == NULL || !ieee80211_sta_join(vap, &selbs->base))
goto notfound;
return 1; /* terminate scan */
@@ -1374,6 +1378,8 @@
if (TAILQ_FIRST(&st->st_entry) == NULL) {
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN,
"%s: no scan candidate\n", __func__);
+ if (ss->ss_flags & IEEE80211_SCAN_NOJOIN)
+ return 0;
notfound:
if (vap->iv_des_nssid) {
/*
@@ -1405,6 +1411,8 @@
return 0; /* restart scan */
}
selbs = select_bss(ss, vap, IEEE80211_MSG_SCAN);
+ if (ss->ss_flags & IEEE80211_SCAN_NOJOIN)
+ return (selbs != NULL);
if (selbs == NULL || !ieee80211_sta_join(vap, &selbs->base))
goto notfound;
return 1; /* terminate scan */
@@ -1570,7 +1578,7 @@
}
}
ap_reset_promisc(ic);
- if (ss->ss_flags & IEEE80211_SCAN_NOPICK) {
+ if (ss->ss_flags & (IEEE80211_SCAN_NOPICK | IEEE80211_SCAN_NOJOIN)) {
/*
* Manual/background scan, don't select+join the
* bss, just return. The scanning framework will
More information about the p4-projects
mailing list