Skip to content

[RFC] introduce dynamic wireless defaults #4777

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions package/base-files/files/bin/board_detect
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ CFG=$1

[ -n "$CFG" ] || CFG=/etc/board.json

[ -d "/etc/board.d/" -a ! -s "$CFG" ] && {
for a in $(ls /etc/board.d/*); do
[ -s $a ] || continue;
$(. $a)
done
}
(
flock 9 || return 1
[ -d "/etc/board.d/" -a ! -s "$CFG" ] && {
for a in $(ls /etc/board.d/*); do
[ -s $a ] || continue;
$(. $a)
done
}
) 9>/tmp/lock/board_detect.lock

[ -s "$CFG" ] || return 1
64 changes: 64 additions & 0 deletions package/base-files/files/lib/functions/uci-defaults.sh
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,70 @@ ucidef_set_hostname() {
json_select ..
}

ucidef_set_wireless() {
local ssid="$1"
local encryption="$2"
local key="$3"

json_select_object wireless
json_add_string ssid "$ssid"
[ -n "$encryption" ] && json_add_string encryption "$encryption"
[ -n "$key" ] && json_add_string key "$key"
json_select ..
}

ucidef_enable_wireless() {
local bands="$1"
local enable_2ghz
local enable_5ghz
local enable_6ghz
local enable_60ghz

case "$bands" in
*2*|*b*)
enable_2ghz=1
;;
all)
enable_2ghz=1
enable_5ghz=1
enable_6ghz=1
enable_60ghz=1
;;
esac

case "${bands//a[dy]/}" in
*5*|*a*)
enable_5ghz=1
;;
esac

case "${bands/60/}" in
*6*|*ax*)
enable_6ghz=1
;;
esac

case "$bands" in
*60*|*ad*|*ay*)
enable_60ghz=1
;;
esac

json_select_object wireless
[ "$enable_2ghz" = "1" ] && json_add_boolean enable_2ghz 1
[ "$enable_5ghz" = "1" ] && json_add_boolean enable_5ghz 1
[ "$enable_6ghz" = "1" ] && json_add_boolean enable_6ghz 1
[ "$enable_60ghz" = "1" ] && json_add_boolean enable_60ghz 1
json_select ..
}

ucidef_set_country() {
local country="$1"
json_select_object wireless
json_add_string country "$country"
json_select ..
}

ucidef_set_ntpserver() {
local server

Expand Down
1 change: 1 addition & 0 deletions package/base-files/files/sbin/wifi
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ wifi_config() {
echo "$driver: Hardware detection not supported" >&2
fi
); done
wifi_updown "reconf"
}

start_net() {(
Expand Down
24 changes: 20 additions & 4 deletions package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,15 @@ EOF


detect_broadcom() {
local i=-1
local ssid encryption key country enable_2ghz enable_5ghz disabled i=-1

/bin/board_detect

. /usr/share/libubox/jshn.sh
json_load_file "/etc/board.json"
json_select wireless
json_get_vars ssid encryption key country enable_2ghz enable_5ghz
json_cleanup

while grep -qs "^ *wl$((++i)):" /proc/net/dev; do
local channel type
Expand All @@ -460,21 +468,29 @@ detect_broadcom() {
[ "$type" = broadcom ] && continue
channel=`wlc ifname wl${i} channel`

disabled=1
if [ $((channel)) -gt 14 ]; then
[ "$enable_5ghz" = "1" ] && disabled=0
else
[ "$enable_2ghz" = "1" ] && disabled=0
fi
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.wl${i}.disabled=$disabled

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=OpenWrt${i#0}
set wireless.default_wl${i}.encryption=none
set wireless.default_wl${i}.ssid=${ssid:-OpenWrt${i#0}}
set wireless.default_wl${i}.encryption=${encryption:-none}
EOF
[ "$key" ] && uci set wireless.default_wl${i}.key="${key}"
[ "$country" ] && uci set wireless.wl${i}.country="${country}"
uci -q commit wireless
done
}
28 changes: 25 additions & 3 deletions package/kernel/mac80211/files/lib/wifi/mac80211.sh
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,17 @@ get_band_defaults() {
}

detect_mac80211() {
local ssid encryption key country disabled
local enable_2ghz enable_5ghz enable_6ghz enable_60ghz

/bin/board_detect

. /usr/share/libubox/jshn.sh
json_load_file "/etc/board.json"
json_select wireless
json_get_vars ssid encryption key country enable_2ghz enable_5ghz enable_6ghz enable_60ghz
json_cleanup

devidx=0
config_load wireless
while :; do
Expand Down Expand Up @@ -167,24 +178,35 @@ detect_mac80211() {
dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)"
fi

disabled=1
case "$mode_band" in
2g) [ "$enable_2ghz" = "1" ] && disabled=0 ;;
5g) [ "$enable_5ghz" = "1" ] && disabled=0 ;;
6g) [ "$enable_6ghz" = "1" ] && disabled=0 ;;
60g) [ "$enable_60ghz" = "1" ] && disabled=0 ;;
esac

uci -q batch <<-EOF
set wireless.radio${devidx}=wifi-device
set wireless.radio${devidx}.type=mac80211
${dev_id}
set wireless.radio${devidx}.channel=${channel}
set wireless.radio${devidx}.band=${mode_band}
set wireless.radio${devidx}.htmode=$htmode
set wireless.radio${devidx}.disabled=1
set wireless.radio${devidx}.disabled=$disabled

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=OpenWrt
set wireless.default_radio${devidx}.encryption=none
set wireless.default_radio${devidx}.ssid="${ssid:-OpenWrt}"
set wireless.default_radio${devidx}.encryption="${encryption:-none}"
EOF
[ "$key" ] && uci set wireless.default_radio${devidx}.key="${key}"
[ "$country" ] && uci set wireless.radio${devidx}.country="${country}"
uci -q commit wireless

devidx=$(($devidx + 1))
done
reload_config
}
12 changes: 12 additions & 0 deletions target/linux/ath79/generic/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -748,10 +748,22 @@ ath79_setup_macs()
[ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac
}

ath79_setup_wireless()
{
local board="$1"

case "$board" in
tplink,tl-wdr4300-v1-il)
ucidef_set_country "IL"
;;
esac
}

board_config_update
board=$(board_name)
ath79_setup_interfaces $board
ath79_setup_macs $board
ath79_setup_wireless $board
board_config_flush

exit 0