aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@openwrt.org>2013-11-11 22:02:14 +0000
committerHauke Mehrtens <hauke@openwrt.org>2013-11-11 22:02:14 +0000
commitbe7a5ba55465b6cbf08dacfa99fdbdbab500d1c1 (patch)
tree4aa52398d1561c8607e443d455e4681e285ce11d
parent5e7044815722fdab48463f31f5f0249513c86171 (diff)
downloadupstream-be7a5ba55465b6cbf08dacfa99fdbdbab500d1c1.tar.gz
upstream-be7a5ba55465b6cbf08dacfa99fdbdbab500d1c1.tar.bz2
upstream-be7a5ba55465b6cbf08dacfa99fdbdbab500d1c1.zip
broadcom-wl: add support for setting H/W address
Some devices initialize with a default address (common to all H/W). The address needs to be changeable so that a unique address can be assigned to each AP. Signed-off-by: Nathan Hintz <nlhintz@hotmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@38757 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh15
-rw-r--r--package/kernel/broadcom-wl/src/wlc.c7
2 files changed, 18 insertions, 4 deletions
diff --git a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
index 0dd25a39b3..892a415b6f 100644
--- a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
+++ b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
@@ -97,7 +97,6 @@ disable_broadcom() {
local device="$1"
set_wifi_down "$device"
wlc ifname "$device" down
- wlc ifname "$device" bssid `wlc ifname "$device" default_bssid`
(
include /lib/network
@@ -131,7 +130,7 @@ enable_broadcom() {
config_get_bool frameburst "$device" frameburst
config_get macfilter "$device" macfilter
config_get maclist "$device" maclist
- config_get macaddr "$device" macaddr
+ config_get macaddr "$device" macaddr $(wlc ifname "$device" default_bssid)
config_get txpower "$device" txpower
config_get frag "$device" frag
config_get rts "$device" rts
@@ -199,7 +198,7 @@ enable_broadcom() {
local _c=0
local nas="$(which nas)"
- local 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
for vif in $vifs; do
@@ -340,7 +339,10 @@ enable_broadcom() {
local ifname
config_get ifname "$vif" ifname
- #append if_up "ifconfig $ifname up" ";$N"
+ local if_cmd="if_pre_up"
+ [ "$ifname" != "${ifname##${device}-}" ] && if_cmd="if_up"
+ append $if_cmd "macaddr=\$(wlc ifname '$ifname' cur_etheraddr)" ";$N"
+ append $if_cmd "ifconfig '$ifname' \${macaddr:+hw ether \$macaddr}" ";$N"
local net_cfg="$(find_net_config "$vif")"
[ -z "$net_cfg" ] || {
@@ -362,6 +364,8 @@ enable_broadcom() {
wlc ifname "$device" stdin <<EOF
$ifdown
+${macaddr:+bssid $macaddr}
+${macaddr:+cur_etheraddr $macaddr}
band ${band:-0}
${nmode:+nmode $nmode}
${nmode:+${nreqd:+nreqd $nreqd}}
@@ -393,6 +397,9 @@ slottime ${slottime:--1}
${frameburst:+frameburst $frameburst}
$vif_pre_up
+EOF
+ eval "$if_pre_up"
+ wlc ifname "$device" stdin <<EOF
up
$vif_post_up
EOF
diff --git a/package/kernel/broadcom-wl/src/wlc.c b/package/kernel/broadcom-wl/src/wlc.c
index 9f4abc04f9..21754a798c 100644
--- a/package/kernel/broadcom-wl/src/wlc.c
+++ b/package/kernel/broadcom-wl/src/wlc.c
@@ -892,6 +892,13 @@ static const struct wlc_call wlc_calls[] = {
.desc = "BSSID"
},
{
+ .name = "cur_etheraddr",
+ .param = MAC,
+ .handler = wlc_iovar,
+ .data.str = "cur_etheraddr",
+ .desc = "Current MAC Address"
+ },
+ {
.name = "default_bssid",
.param = MAC,
.handler = wlc_iovar,