broadcom-wl: support more virtual interfaces
Read the number of virtual interfaces to support from the device capabilities; as some newer devices can support up to 16. Signed-off-by: Nathan Hintz <nlhintz@hotmail.com> SVN-Revision: 38759
This commit is contained in:
parent
c926edd72d
commit
df493faf12
2 changed files with 53 additions and 2 deletions
|
@ -108,12 +108,14 @@ disable_broadcom() {
|
||||||
|
|
||||||
# make sure all of the devices are disabled in the driver
|
# make sure all of the devices are disabled in the driver
|
||||||
local ifdown=
|
local ifdown=
|
||||||
local vif
|
local bssmax=$(wlc ifname "$device" bssmax)
|
||||||
|
local vif=$((${bssmax:-4} - 1))
|
||||||
append ifdown "down" "$N"
|
append ifdown "down" "$N"
|
||||||
append ifdown "wds none" "$N"
|
append ifdown "wds none" "$N"
|
||||||
for vif in 3 2 1 0; do
|
while [ $vif -ge 0 ]; do
|
||||||
append ifdown "vif $vif" "$N"
|
append ifdown "vif $vif" "$N"
|
||||||
append ifdown "enabled 0" "$N"
|
append ifdown "enabled 0" "$N"
|
||||||
|
vif=$(($vif - 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
wlc ifname "$device" stdin <<EOF
|
wlc ifname "$device" stdin <<EOF
|
||||||
|
@ -209,8 +211,12 @@ enable_broadcom() {
|
||||||
local nas="$(which nas)"
|
local nas="$(which nas)"
|
||||||
local if_pre_up if_up nas_cmd
|
local if_pre_up if_up nas_cmd
|
||||||
local vif vif_pre_up vif_post_up vif_do_up vif_txpower
|
local vif vif_pre_up vif_post_up vif_do_up vif_txpower
|
||||||
|
local bssmax=$(wlc ifname "$device" bssmax)
|
||||||
|
bssmax=${bssmax:-4}
|
||||||
|
|
||||||
for vif in $vifs; do
|
for vif in $vifs; do
|
||||||
|
[ $_c -ge $bssmax ] && break
|
||||||
|
|
||||||
config_get vif_txpower "$vif" txpower
|
config_get vif_txpower "$vif" txpower
|
||||||
|
|
||||||
local mode
|
local mode
|
||||||
|
|
|
@ -391,6 +391,37 @@ static int wlc_wsec_key(wlc_param param, void *null, void *value)
|
||||||
return wl_bssiovar_set(interface, "wsec_key", vif, &wsec_key, sizeof(wsec_key));
|
return wl_bssiovar_set(interface, "wsec_key", vif, &wsec_key, sizeof(wsec_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wlc_cap(wlc_param param, void *data, void *value)
|
||||||
|
{
|
||||||
|
char *iov = *((char **) data);
|
||||||
|
|
||||||
|
if (param & GET)
|
||||||
|
return wl_iovar_get(interface, iov, value, BUFSIZE);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int wlc_bssmax(wlc_param param, void *data, void *value)
|
||||||
|
{
|
||||||
|
int *val = (int *) value;
|
||||||
|
char *iov = *((char **) data);
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (param & GET) {
|
||||||
|
ret = wl_iovar_get(interface, iov, wlbuf, BUFSIZE);
|
||||||
|
if (!ret) {
|
||||||
|
if (strstr(wlbuf, "mbss4"))
|
||||||
|
*val = 4;
|
||||||
|
else if (strstr(wlbuf, "mbss16"))
|
||||||
|
*val = 16;
|
||||||
|
else
|
||||||
|
*val = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int cw2ecw(int cw)
|
static inline int cw2ecw(int cw)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -954,6 +985,20 @@ static const struct wlc_call wlc_calls[] = {
|
||||||
.handler = wlc_ioctl,
|
.handler = wlc_ioctl,
|
||||||
.desc = "Band (0=auto, 1=5Ghz, 2=2.4GHz)"
|
.desc = "Band (0=auto, 1=5Ghz, 2=2.4GHz)"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "cap",
|
||||||
|
.param = STRING|NOARG,
|
||||||
|
.handler = wlc_cap,
|
||||||
|
.data.str = "cap",
|
||||||
|
.desc = "Capabilities"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.name = "bssmax",
|
||||||
|
.param = INT|NOARG,
|
||||||
|
.handler = wlc_bssmax,
|
||||||
|
.data.str = "cap",
|
||||||
|
.desc = "Number of VIF's supported"
|
||||||
|
},
|
||||||
};
|
};
|
||||||
#define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call))
|
#define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue