mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +00:00
move channel parsing to a getchannel routine so it can be reused to check
the channel argument supplied to chanswitch
This commit is contained in:
parent
746b34ace7
commit
ddd244ecff
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=186105
|
@ -663,31 +663,39 @@ getchannelflags(const char *val, int freq)
|
|||
#undef _CHAN_HT
|
||||
}
|
||||
|
||||
static void
|
||||
getchannel(int s, struct ieee80211_channel *chan, const char *val)
|
||||
{
|
||||
int v, flags;
|
||||
char *eptr;
|
||||
|
||||
memset(chan, 0, sizeof(*chan));
|
||||
if (isanyarg(val)) {
|
||||
chan->ic_freq = IEEE80211_CHAN_ANY;
|
||||
return;
|
||||
}
|
||||
getchaninfo(s);
|
||||
errno = 0;
|
||||
v = strtol(val, &eptr, 10);
|
||||
if (val[0] == '\0' || val == eptr || errno == ERANGE ||
|
||||
/* channel may be suffixed with nothing, :flag, or /width */
|
||||
(eptr[0] != '\0' && eptr[0] != ':' && eptr[0] != '/'))
|
||||
errx(1, "invalid channel specification%s",
|
||||
errno == ERANGE ? " (out of range)" : "");
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(chan, v, flags);
|
||||
} else {
|
||||
mapchan(chan, v, flags);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
set80211channel(const char *val, int d, int s, const struct afswtch *rafp)
|
||||
{
|
||||
struct ieee80211_channel chan;
|
||||
|
||||
memset(&chan, 0, sizeof(chan));
|
||||
if (!isanyarg(val)) {
|
||||
int v, flags;
|
||||
char *ep;
|
||||
|
||||
getchaninfo(s);
|
||||
v = strtol(val, &ep, 10);
|
||||
if (val[0] == '\0' || val == ep || errno == ERANGE ||
|
||||
/* channel may be suffixed with nothing, :flag, or /width */
|
||||
(ep[0] != '\0' && ep[0] != ':' && ep[0] != '/'))
|
||||
errx(1, "invalid channel specification");
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(&chan, v, flags);
|
||||
} else {
|
||||
mapchan(&chan, v, flags);
|
||||
}
|
||||
} else {
|
||||
chan.ic_freq = IEEE80211_CHAN_ANY;
|
||||
}
|
||||
getchannel(s, &chan, val);
|
||||
set80211(s, IEEE80211_IOC_CURCHAN, 0, sizeof(chan), &chan);
|
||||
}
|
||||
|
||||
|
@ -695,17 +703,8 @@ static void
|
|||
set80211chanswitch(const char *val, int d, int s, const struct afswtch *rafp)
|
||||
{
|
||||
struct ieee80211_chanswitch_req csr;
|
||||
int v, flags;
|
||||
|
||||
memset(&csr, 0, sizeof(csr));
|
||||
getchaninfo(s);
|
||||
v = atoi(val);
|
||||
flags = getchannelflags(val, v);
|
||||
if (v > 255) { /* treat as frequency */
|
||||
mapfreq(&csr.csa_chan, v, flags);
|
||||
} else {
|
||||
mapchan(&csr.csa_chan, v, flags);
|
||||
}
|
||||
getchannel(s, &csr.csa_chan, val);
|
||||
csr.csa_mode = 1;
|
||||
csr.csa_count = 5;
|
||||
set80211(s, IEEE80211_IOC_CHANSWITCH, 0, sizeof(csr), &csr);
|
||||
|
|
Loading…
Reference in a new issue