base-files, mac80211, broadcom-wl: use uci to populate wireless config
authorChristian Lamparter <chunkeey@googlemail.com>
Mon, 17 Oct 2016 13:59:13 +0000 (15:59 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 3 Nov 2016 10:08:01 +0000 (11:08 +0100)
Previously, wifi detect simply dumped its generated wireless
configuration to STDOUT. A second step was needed to append
the configuration to /etc/config/wireless (or create it, if
it didn't exist).

With this patch, The wifi detection script will now use uci
to update the wireless configuration directly.

This patch also makes the initially created wifi-iface a
named section ('default_radio$X' for mac80211 and
'default_wl$X' for broadcom). With this change, uci will
not print the cfgHASH to STDOUT (which would now corrupt
the wireless configuration). It will also prevent adding
duplicated wifi interface configurations, if the wifi
configuration is run concurrently.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
package/base-files/files/etc/init.d/boot
package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
package/kernel/mac80211/files/lib/wifi/mac80211.sh

index 904f7db75e90de1d22637e1649ac8305240656cd..03b0fa04199091c12d30280768e4cbab550e6770 100755 (executable)
@@ -41,11 +41,7 @@ boot() {
        # allow wifi modules time to settle
        sleep 1
 
        # allow wifi modules time to settle
        sleep 1
 
-       /sbin/wifi detect > /tmp/wireless.tmp
-       [ -s /tmp/wireless.tmp ] && {
-               cat /tmp/wireless.tmp >> /etc/config/wireless
-       }
-       rm -f /tmp/wireless.tmp
+       /sbin/wifi detect
 
        /bin/config_generate
        uci_apply_defaults
 
        /bin/config_generate
        uci_apply_defaults
index deb4ddf1d2dd3413f154d11edcfdaf339f33c616..2780fa16791d13e5987e749bf9fe37ac631c18d3 100644 (file)
@@ -456,22 +456,22 @@ detect_broadcom() {
                config_get type wl${i} type
                [ "$type" = broadcom ] && continue
                channel=`wlc ifname wl${i} channel`
                config_get type wl${i} type
                [ "$type" = broadcom ] && continue
                channel=`wlc ifname wl${i} channel`
-               cat <<EOF
-config wifi-device  wl${i}
-       option type     broadcom
-       option channel  ${channel:-11}
-       option txantenna 3
-       option rxantenna 3
-       # REMOVE THIS LINE TO ENABLE WIFI:
-       option disabled 1
-
-config wifi-iface
-       option device   wl${i}
-       option network  lan
-       option mode     ap
-       option ssid     Lede${i#0}
-       option encryption none
 
 
+               uci -q batch <<-EOF
+                       set wireless.wl${i}=wifi-device
+                       set wireless.wl${i}.type=broadcom
+                       set wireless.wl${i}.channel=${channel:-11}
+                       set wireless.wl${i}.txantenna=3
+                       set wireless.wl${i}.rxantenna=3
+                       set wireless.wl${i}.disabled=1
+
+                       set wireless.default_wl${i}=wifi-iface
+                       set wireless.default_wl${i}.device=wl${i}
+                       set wireless.default_wl${i}.network=lan
+                       set wireless.default_wl${i}.mode=ap
+                       set wireless.default_wl${i}.ssid=Lede${i#0}
+                       set wireless.default_wl${i}.encryption=none
 EOF
 EOF
+               uci -q commit wireless
        done
 }
        done
 }
index 9b15de55a8986fa9d354ccb5c92d65edf2b4f514..4bfc7424b2cf6a4ac95f2b37f6723ecf1f0ec6f3 100644 (file)
@@ -92,7 +92,7 @@ detect_mac80211() {
                        htmode="VHT80"
                }
 
                        htmode="VHT80"
                }
 
-               [ -n $htmode ] && append ht_capab "     option htmode   $htmode" "$N"
+               [ -n $htmode ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode"
 
                if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then
                        path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
 
                if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then
                        path="$(readlink -f /sys/class/ieee80211/${dev}/device)"
@@ -104,30 +104,29 @@ detect_mac80211() {
                        case "$path" in
                                platform*/pci*) path="${path##platform/}";;
                        esac
                        case "$path" in
                                platform*/pci*) path="${path##platform/}";;
                        esac
-                       dev_id="        option path     '$path'"
+                       dev_id="set wireless.radio${devidx}.path='$path'"
                else
                else
-                       dev_id="        option macaddr  $(cat /sys/class/ieee80211/${dev}/macaddress)"
+                       dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
                fi
 
                fi
 
-               cat <<EOF
-config wifi-device  radio$devidx
-       option type     mac80211
-       option channel  ${channel}
-       option hwmode   11${mode_band}
-$dev_id
-$ht_capab
-       # REMOVE THIS LINE TO ENABLE WIFI:
-       option disabled 1
-
-config wifi-iface
-       option device   radio$devidx
-       option network  lan
-       option mode     ap
-       option ssid     LEDE
-       option encryption none
-
+               uci -q batch <<-EOF
+                       set wireless.radio${devidx}=wifi-device
+                       set wireless.radio${devidx}.type=mac80211
+                       set wireless.radio${devidx}.channel=${channel}
+                       set wireless.radio${devidx}.hwmode=11${mode_band}
+                       ${dev_id}
+                       ${ht_capab}
+                       set wireless.radio${devidx}.disabled=1
+
+                       set wireless.default_radio${devidx}=wifi-iface
+                       set wireless.default_radio${devidx}.device=radio${devidx}
+                       set wireless.default_radio${devidx}.network=lan
+                       set wireless.default_radio${devidx}.mode=ap
+                       set wireless.default_radio${devidx}.ssid=LEDE
+                       set wireless.default_radio${devidx}.encryption=none
 EOF
 EOF
-       devidx=$(($devidx + 1))
+               uci -q commit wireless
+
+               devidx=$(($devidx + 1))
        done
 }
        done
 }
-