[LEDE-DEV] [PATCH v1 1/2] base-files, mac80211, broadcom-wl: plug-and-play wifi detection
Matthias Schiffer
mschiffer at universe-factory.net
Sat Oct 8 09:04:09 PDT 2016
On 10/08/2016 05:41 PM, Christian Lamparter wrote:
> Hello,
>
> On Friday, October 7, 2016 8:29:30 PM CEST Matthias Schiffer wrote:
>> On 10/07/2016 08:10 PM, Christian Lamparter wrote:
>>> Currently, the wifi detection script is executed as part of
>>> the (early) boot process. Pluggable wifi USB devices, which
>>> are inserted at a later time are not automatically
>>> detected and therefore they don't show up in LuCI.
>>>
>>> A user has to deal with wifi detection manually, or restart
>>> the router.
>>>
>>> [...]
>>> ---
>>> We would like to hear, if these changes work with broadcom-wl.
>>> (Felix removed the hostap, so this isn't included anymore).
>>>
>>> trap and lock are part of the default busybox setup.
>>
>> Hi,
>> it would be great to remove the direct write of /etc/config/wireless
>> completely, as it won't lock against other users of UCI that modify the
>> wireless config. IMO, it should just use UCI to modify the configuration as
>> everything else does.
>
> Well, What's the situation with ECE and configd? I didn't want to touch it
> since you plan to move away from the config files and replace them with
> json.
There isn't a concrete plan to integrate ECE with LEDE yet (there are still
some TODOs, and it will need to be discussed further with the LEDE
community). It will provide a bidirectional UCI mapping; this means as long
as the uci CLI and similar tools are used, most things should just continue
work with ECE.
>
> Anyway, I attached two RFCs (one for broadcom, the other mac80211)
> that replaces the code with uci calls.
Thanks, I'll try it out later.
>
> One issue is that there's no longer the "# REMOVE THIS LINE TO ENABLE WIFI:"
> line and people might overlook the "disabled 1" setting.
This single comment seems to be the only reason this was directly written
to the config file in the first place...
>
> Note: the "> /dev/null" for uci calls were added just in case someone still
> has the old /etc/init.d/boot and to not write garbage into /e/c/wireless.
>
> Note2: I've also changed the "plug-and-play wifi" patch and removed the
> /tmp/wireless.tmp step. But we still need proper locking.
> (That said, I would like to move the locking to the mac80211.sh / broadcom.sh
> detect functions, is everyone fine with that?)
Makes sense to me (maybe we can further factor out common parts of
mac80211.sh and broadcom.sh?). Note that you don't need any locking in the
hotplug handlers anyways, they are always run sequentially.
Regards,
Matthias
>
> ---
> mac80211: use uci to generate wireless config file
>
> Previously, wifi detect simply dumped its generated wireless
> configuration out 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.
>
> Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
> ---
> diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> --- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> +++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
> @@ -92,7 +92,7 @@ detect_mac80211() {
> 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)"
> @@ -104,30 +104,30 @@ detect_mac80211() {
> case "$path" in
> platform*/pci*) path="${path##platform/}";;
> esac
> - dev_id=" option path '$path'"
> + dev_id="set wireless.radio${devidx}.path='$path'"
> 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
>
> - 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 > /dev/null <<-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
> +
> + add wireless wifi-iface
> + set wireless. at wifi-iface[-1]=wifi-iface
> + set wireless. at wifi-iface[-1].device=radio${devidx}
> + set wireless. at wifi-iface[-1].network=lan
> + set wireless. at wifi-iface[-1].mode=ap
> + set wireless. at wifi-iface[-1].ssid=LEDE
> + set wireless. at wifi-iface[-1].encryption=none
> EOF
> - devidx=$(($devidx + 1))
> - done
> -}
> + uci commit &> /dev/null
>
> + devidx=$(($devidx + 1))
> + done
> +}
> ---
> broadcom-wl: use uci to generate wireless config file
>
> Previously, wifi detect simply dumped its generated wireless
> configuration out 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.
>
> Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
> ---
> diff --git a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
> --- a/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
> +++ b/package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
> @@ -456,22 +456,23 @@ detect_broadcom() {
> 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 > /dev/null <<-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
> +
> + add wireless wifi-iface
> + set wireless. at wifi-iface[-1]=wifi-iface
> + set wireless. at wifi-iface[-1].device=wl${i}
> + set wireless. at wifi-iface[-1].network=lan
> + set wireless. at wifi-iface[-1].mode=ap
> + set wireless. at wifi-iface[-1].ssid=Lede${i#0}
> + set wireless. at wifi-iface[-1].encryption=none
> EOF
> + uci commit &> /dev/null
> done
> }
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/lede-dev/attachments/20161008/03a1e720/attachment.sig>
More information about the Lede-dev
mailing list