Commit a7d0adae authored by Holger Schurig's avatar Holger Schurig Committed by David S. Miller

libertas: remove user-specified channel list

Remove the ability to specify channels to scan via debugfs
Signed-off-by: default avatarHolger Schurig <hs4233@mail.mn-solutions.de>
Acked-by: default avatarDan Williams <dcbw@redhat.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent dd1d12da
...@@ -195,8 +195,6 @@ setuserscan ...@@ -195,8 +195,6 @@ setuserscan
where [ARGS]: where [ARGS]:
chan=[chan#][band][mode] where band is [a,b,g] and mode is
blank for active or 'p' for passive
bssid=xx:xx:xx:xx:xx:xx specify a BSSID filter for the scan bssid=xx:xx:xx:xx:xx:xx specify a BSSID filter for the scan
ssid="[SSID]" specify a SSID filter for the scan ssid="[SSID]" specify a SSID filter for the scan
keep=[0 or 1] keep the previous scan results (1), discard (0) keep=[0 or 1] keep the previous scan results (1), discard (0)
...@@ -204,35 +202,26 @@ setuserscan ...@@ -204,35 +202,26 @@ setuserscan
type=[1,2,3] BSS type: 1 (Infra), 2(Adhoc), 3(Any) type=[1,2,3] BSS type: 1 (Infra), 2(Adhoc), 3(Any)
Any combination of the above arguments can be supplied on the command Any combination of the above arguments can be supplied on the command
line. If the chan token is absent, a full channel scan will be line. If dur tokens are absent, the driver default setting will be used.
completed by the driver. If dur tokens are absent, the driver default The bssid and ssid fields, if blank, will produce an unfiltered scan.
setting will be used. The bssid and ssid fields, if blank, will The type field will default to 3 (Any) and the keep field will default
produce an unfiltered scan. The type field will default to 3 (Any) and to 0 (Discard).
the keep field will default to 0 (Discard).
Examples: Examples:
1) Perform an active scan on channels 1, 6, and 11 in the 'g' band: 1) Perform a passive scan on all channels for 20 ms per channel:
echo "chan=1g,6g,11g" > setuserscan echo "dur=20" > setuserscan
2) Perform a passive scan on channel 11 for 20 ms: 2) Perform an active scan for a specific SSID:
echo "chan=11gp dur=20" > setuserscan echo "ssid="TestAP"" > setuserscan
3) Perform an active scan on channels 1, 6, and 11; and a passive scan on 3) Scan all available channels (B/G, A bands) for a specific BSSID, keep
channel 36 in the 'a' band:
echo "chan=1g,6g,11g,36ap" > setuserscan
4) Perform an active scan on channel 6 and 36 for a specific SSID:
echo "chan=6g,36a ssid="TestAP"" > setuserscan
5) Scan all available channels (B/G, A bands) for a specific BSSID, keep
the current scan table intact, update existing or append new scan data: the current scan table intact, update existing or append new scan data:
echo "bssid=00:50:43:20:12:82 keep=1" > setuserscan echo "bssid=00:50:43:20:12:82 keep=1" > setuserscan
6) Scan channel 6, for all infrastructure networks. 4) Scan for all infrastructure networks.
Keep the previous scan table intact. Update any duplicate BSSID/SSID Keep the previous scan table intact. Update any duplicate BSSID/SSID
matches with the new scan data: matches with the new scan data:
echo "chan=6g type=1 keep=1" > setuserscan echo "type=1 keep=1" > setuserscan
All entries in the scan table (not just the new scan data when keep=1) All entries in the scan table (not just the new scan data when keep=1)
will be displayed upon completion by use of the getscantable ioctl. will be displayed upon completion by use of the getscantable ioctl.
......
...@@ -196,43 +196,6 @@ out_unlock: ...@@ -196,43 +196,6 @@ out_unlock:
return count; return count;
} }
static int lbs_parse_chan(char *buf, size_t count,
struct lbs_ioctl_user_scan_cfg *scan_cfg, int dur)
{
char *start, *end, *hold, *str;
int i = 0;
start = strstr(buf, "chan=");
if (!start)
return -EINVAL;
start += 5;
end = strchr(start, ' ');
if (!end)
end = buf + count;
hold = kzalloc((end - start)+1, GFP_KERNEL);
if (!hold)
return -ENOMEM;
strncpy(hold, start, end - start);
hold[(end-start)+1] = '\0';
while(hold && (str = strsep(&hold, ","))) {
int chan;
char band, passive = 0;
sscanf(str, "%d%c%c", &chan, &band, &passive);
scan_cfg->chanlist[i].channumber = chan;
scan_cfg->chanlist[i].scantype = passive ? 1 : 0;
if (band == 'b' || band == 'g')
scan_cfg->chanlist[i].radiotype = 0;
else if (band == 'a')
scan_cfg->chanlist[i].radiotype = 1;
scan_cfg->chanlist[i].scantime = dur;
i++;
}
kfree(hold);
return i;
}
static void lbs_parse_bssid(char *buf, size_t count, static void lbs_parse_bssid(char *buf, size_t count,
struct lbs_ioctl_user_scan_cfg *scan_cfg) struct lbs_ioctl_user_scan_cfg *scan_cfg)
{ {
...@@ -346,7 +309,6 @@ static ssize_t lbs_setuserscan(struct file *file, ...@@ -346,7 +309,6 @@ static ssize_t lbs_setuserscan(struct file *file,
scan_cfg->bsstype = LBS_SCAN_BSS_TYPE_ANY; scan_cfg->bsstype = LBS_SCAN_BSS_TYPE_ANY;
dur = lbs_parse_dur(buf, count, scan_cfg); dur = lbs_parse_dur(buf, count, scan_cfg);
lbs_parse_chan(buf, count, scan_cfg, dur);
lbs_parse_bssid(buf, count, scan_cfg); lbs_parse_bssid(buf, count, scan_cfg);
scan_cfg->clear_bssid = lbs_parse_clear(buf, count, "clear_bssid="); scan_cfg->clear_bssid = lbs_parse_clear(buf, count, "clear_bssid=");
lbs_parse_ssid(buf, count, scan_cfg); lbs_parse_ssid(buf, count, scan_cfg);
......
...@@ -416,11 +416,6 @@ lbs_scan_setup_scan_config(struct lbs_private *priv, ...@@ -416,11 +416,6 @@ lbs_scan_setup_scan_config(struct lbs_private *priv,
struct mrvlietypes_ssidparamset *pssidtlv; struct mrvlietypes_ssidparamset *pssidtlv;
struct lbs_scan_cmd_config *pscancfgout = NULL; struct lbs_scan_cmd_config *pscancfgout = NULL;
u8 *ptlvpos; u8 *ptlvpos;
int chanidx;
int scantype;
int scandur;
int channel;
int radiotype;
lbs_deb_enter(LBS_DEB_SCAN); lbs_deb_enter(LBS_DEB_SCAN);
...@@ -505,58 +500,8 @@ lbs_scan_setup_scan_config(struct lbs_private *priv, ...@@ -505,58 +500,8 @@ lbs_scan_setup_scan_config(struct lbs_private *priv,
*/ */
*ppchantlvout = (struct mrvlietypes_chanlistparamset *) ptlvpos; *ppchantlvout = (struct mrvlietypes_chanlistparamset *) ptlvpos;
if (!puserscanin || !puserscanin->chanlist[0].channumber) { lbs_scan_create_channel_list(priv, pscanchanlist,
/* Create a default channel scan list */ *pfilteredscan);
lbs_deb_scan("creating full region channel list\n");
lbs_scan_create_channel_list(priv, pscanchanlist,
*pfilteredscan);
goto out;
}
for (chanidx = 0;
chanidx < LBS_IOCTL_USER_SCAN_CHAN_MAX
&& puserscanin->chanlist[chanidx].channumber; chanidx++) {
channel = puserscanin->chanlist[chanidx].channumber;
(pscanchanlist + chanidx)->channumber = channel;
radiotype = puserscanin->chanlist[chanidx].radiotype;
(pscanchanlist + chanidx)->radiotype = radiotype;
scantype = puserscanin->chanlist[chanidx].scantype;
if (scantype == CMD_SCAN_TYPE_PASSIVE) {
(pscanchanlist +
chanidx)->chanscanmode.passivescan = 1;
} else {
(pscanchanlist +
chanidx)->chanscanmode.passivescan = 0;
}
if (puserscanin->chanlist[chanidx].scantime) {
scandur = puserscanin->chanlist[chanidx].scantime;
} else {
if (scantype == CMD_SCAN_TYPE_PASSIVE) {
scandur = MRVDRV_PASSIVE_SCAN_CHAN_TIME;
} else {
scandur = MRVDRV_ACTIVE_SCAN_CHAN_TIME;
}
}
(pscanchanlist + chanidx)->minscantime =
cpu_to_le16(scandur);
(pscanchanlist + chanidx)->maxscantime =
cpu_to_le16(scandur);
}
/* Check if we are only scanning the current channel */
if ((chanidx == 1) &&
(puserscanin->chanlist[0].channumber ==
priv->adapter->curbssparams.channel)) {
*pscancurrentonly = 1;
lbs_deb_scan("scanning current channel only");
}
out: out:
return pscancfgout; return pscancfgout;
} }
......
...@@ -121,11 +121,6 @@ struct lbs_ioctl_user_scan_cfg { ...@@ -121,11 +121,6 @@ struct lbs_ioctl_user_scan_cfg {
/* Clear existing scan results matching this SSID */ /* Clear existing scan results matching this SSID */
u8 clear_ssid; u8 clear_ssid;
/**
* @brief Variable number (fixed maximum) of channels to scan up
*/
struct lbs_ioctl_user_scan_chan chanlist[LBS_IOCTL_USER_SCAN_CHAN_MAX];
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment