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 <nlhi...@hotmail.com>
---
 package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh | 15 +++++++++++----
 package/kernel/broadcom-wl/src/wlc.c                  |  7 +++++++
 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 a25ea7e..741aec3 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 9f4abc0..21754a7 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,
-- 
1.8.3.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to