diff --git a/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh b/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh deleted file mode 100644 index b31cb6ef4f448a3e38bfb369ffc80c55a16f5ca1..0000000000000000000000000000000000000000 --- a/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/sh -append DRIVERS "brcm_mac80211" - -detect_brcm_mac80211() { - local default_ch_pref="11 36 100" - local default_band_pref="2 5" - local default_bw_pref="20" - local apsta="0" - - devidx=0 - config_load wireless - - [ -s "/etc/device_info" ] || return 0 - source "/etc/device_info" - - while :; do - config_get type "radio$devidx" type - [ -n "$type" ] || break - devidx=$(($devidx + 1)) - done - - # Get factory WPA key. - local WPAKEY=$(db -q get hw.board.wpa_key) - WPAKEY=${WPAKEY:-1234567890} - [ "$WPAKEY" == "00000000" ] && WPAKEY="1234567890" - - for _dev in /sys/class/ieee80211/*; do - [ -e "$_dev" ] || continue - - dev="${_dev##*/}" - - found=0 - config_foreach check_mac80211_device wifi-device - [ "$found" -gt 0 ] && continue - - mode_band="" - channel="" - radioidx="" - htmode="HT20" - - for _netdev in /sys/class/net/*; do - if [ -h ${_netdev}/phy80211 ] && [ "$(cat ${_netdev}/phy80211/name)" == "${dev}" ]; then - radioidx="${_netdev##*/}" - break - fi - done - - # check what channels the phy actually supports - for bw in ${default_bw_pref}; do - for band in ${default_band_pref}; do - for ch in ${default_ch_pref}; do - wl -i ${radioidx} chanspecs -b ${band} -w ${bw} | grep -q "^${ch}[^0-9]" && { - [ "${band}" == "2" ] && mode_band="g" || mode_band="a" - channel="${ch}" - break 3 # 3 nested levels - }; - done; - done; - done; - - res=$(wl -i ${radioidx} he 2>&1 > /dev/null) - rc=$? - if [ $rc -eq 0 ] - then - [ "${mode_band}" = "a" ] && htmode="HE80" || htmode="HE20" - else - [ "${mode_band}" = "a" ] && htmode="VHT80" || htmode="HT20" - fi - - # This is all fine and dandy but totally unnecessary since we already have the phy - -# if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev}/device ]; then -# path="$(readlink -f /sys/class/ieee80211/${dev}/device)" -# else -# path="" -# fi -# if [ -n "$path" ]; then -# path="${path##/sys/devices/}" -# case "$path" in -# platform*/pci*) path="${path##platform/}";; -# esac -# dev_id="set wireless.${radioidx}.path='$path'" -# else -# dev_id="set wireless.${radioidx}.macaddr=$(cat ${_netdev}/address)" -# fi - - dev_id="set wireless.${radioidx}.phy=${dev}" - rmac=$(iw dev ${radioidx} info | grep addr | cut -d ' ' -f 2) - - BMAC=$(db -q get hw.board.basemac) - BMAC=${BMAC//:/} - BMAC=${BMAC// /} - - BSSID=$(printf "%12.12X" $((0x$BMAC))) - UUID=$(uuidgen -s -r | cut -c 1-24) - UUID=$UUID$BMAC - - uci -q batch <<-EOF - set wireless.${radioidx}=wifi-device - set wireless.${radioidx}.type=mac80211 - set wireless.${radioidx}.channel=${channel} - set wireless.${radioidx}.hwmode=11${mode_band} - set wireless.${radioidx}.country=DE - set wireless.${radioidx}.htmode=${htmode} - set wireless.${radioidx}.apsta=${apsta} - ${dev_id} - ${aps_sta} - - set wireless.default_${radioidx}=wifi-iface - set wireless.default_${radioidx}.device=${radioidx} - set wireless.default_${radioidx}.network=lan - ${aps_ap} - set wireless.default_${radioidx}.mode=ap - set wireless.default_${radioidx}.ifname='${radioidx}' - set wireless.default_${radioidx}.ssid="${DEVICE_MANUFACTURER}-${BSSID}" - set wireless.default_${radioidx}.uuid="${UUID}" - set wireless.default_${radioidx}.encryption=psk2 - set wireless.default_${radioidx}.key=${WPAKEY} - set wireless.default_${radioidx}.wps=1 - set wireless.default_${radioidx}.wps_pushbutton=1 - set wireless.default_${radioidx}.ieee80211k=1 - set wireless.default_${radioidx}.ieee80211v=1 - set wireless.default_${radioidx}.bss_transition=1 - set wireless.default_${radioidx}.multi_ap=3 -EOF - uci -q commit wireless - - devidx=$(($devidx + 1)) - done -} diff --git a/iopsys-brcm63xx-arm/base-files/lib/wifi/mac80211.sh b/iopsys-brcm63xx-arm/base-files/lib/wifi/mac80211.sh index 511a9188db218fbd0c595f53508b68b15ce30337..60a0b48981d77da4c927f1ae3f57fe433a829eda 100644 --- a/iopsys-brcm63xx-arm/base-files/lib/wifi/mac80211.sh +++ b/iopsys-brcm63xx-arm/base-files/lib/wifi/mac80211.sh @@ -1,72 +1,29 @@ #!/bin/sh append DRIVERS "mac80211" -lookup_phy() { - [ -n "$phy" ] && { - [ -d /sys/class/ieee80211/$phy ] && return - } - - local devpath - config_get devpath "$device" path - [ -n "$devpath" ] && { - for phy in $(ls /sys/class/ieee80211 2>/dev/null); do - case "$(readlink -f /sys/class/ieee80211/$phy/device)" in - *$devpath) return;; - esac - done - } - - local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')" - [ -n "$macaddr" ] && { - for _phy in /sys/class/ieee80211/*; do - [ -e "$_phy" ] || continue - - [ "$macaddr" = "$(cat ${_phy}/macaddress)" ] || continue - phy="${_phy##*/}" - return - done - } - phy= - return -} - -find_mac80211_phy() { - local device="$1" - - config_get phy "$device" phy - lookup_phy - [ -n "$phy" -a -d "/sys/class/ieee80211/$phy" ] || { - echo "PHY for wifi device $1 not found" - return 1 - } - config_set "$device" phy "$phy" - - config_get macaddr "$device" macaddr - [ -z "$macaddr" ] && { - config_set "$device" macaddr "$(cat /sys/class/ieee80211/${phy}/macaddress)" - } - - return 0 -} - -check_mac80211_device() { - config_get phy "$1" phy - [ -z "$phy" ] && { - find_mac80211_phy "$1" >/dev/null || return 0 - config_get phy "$1" phy - } - [ "$phy" = "$dev" ] && found=1 -} - detect_mac80211() { + local default_ch_pref="11 36 100" + local default_band_pref="2 5" + local default_bw_pref="20" + local apsta="0" + devidx=0 config_load wireless + + [ -s "/etc/device_info" ] || return 0 + source "/etc/device_info" + while :; do config_get type "radio$devidx" type [ -n "$type" ] || break devidx=$(($devidx + 1)) done + # Get factory WPA key. + local WPAKEY=$(db -q get hw.board.wpa_key) + WPAKEY=${WPAKEY:-1234567890} + [ "$WPAKEY" == "00000000" ] && WPAKEY="1234567890" + for _dev in /sys/class/ieee80211/*; do [ -e "$_dev" ] || continue @@ -76,51 +33,95 @@ detect_mac80211() { config_foreach check_mac80211_device wifi-device [ "$found" -gt 0 ] && continue - mode_band="g" - channel="11" - htmode="" - ht_capab="" - - iw phy "$dev" info | grep -q 'Capabilities:' && htmode=HT20 + mode_band="" + channel="" + radioidx="" + htmode="HT20" - iw phy "$dev" info | grep -q '5180 MHz' && { - mode_band="a" - channel="36" - iw phy "$dev" info | grep -q 'VHT Capabilities' && htmode="VHT80" - } - - [ -n "$htmode" ] && ht_capab="set wireless.radio${devidx}.htmode=$htmode" + for _netdev in /sys/class/net/*; do + if [ -h ${_netdev}/phy80211 ] && [ "$(cat ${_netdev}/phy80211/name)" == "${dev}" ]; then + radioidx="${_netdev##*/}" + break + fi + done - if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev} ]; then - path="$(readlink -f /sys/class/ieee80211/${dev}/device)" + # check what channels the phy actually supports + for bw in ${default_bw_pref}; do + for band in ${default_band_pref}; do + for ch in ${default_ch_pref}; do + wl -i ${radioidx} chanspecs -b ${band} -w ${bw} | grep -q "^${ch}[^0-9]" && { + [ "${band}" == "2" ] && mode_band="g" || mode_band="a" + channel="${ch}" + break 3 # 3 nested levels + }; + done; + done; + done; + + res=$(wl -i ${radioidx} he 2>&1 > /dev/null) + rc=$? + if [ $rc -eq 0 ] + then + [ "${mode_band}" = "a" ] && htmode="HE80" || htmode="HE20" else - path="" - fi - if [ -n "$path" ]; then - path="${path##/sys/devices/}" - case "$path" in - platform*/pci*) path="${path##platform/}";; - esac - dev_id="set wireless.radio${devidx}.path='$path'" - else - dev_id="set wireless.radio${devidx}.macaddr=$(cat /sys/class/ieee80211/${dev}/macaddress)" + [ "${mode_band}" = "a" ] && htmode="VHT80" || htmode="HT20" fi + # This is all fine and dandy but totally unnecessary since we already have the phy + +# if [ -x /usr/bin/readlink -a -h /sys/class/ieee80211/${dev}/device ]; then +# path="$(readlink -f /sys/class/ieee80211/${dev}/device)" +# else +# path="" +# fi +# if [ -n "$path" ]; then +# path="${path##/sys/devices/}" +# case "$path" in +# platform*/pci*) path="${path##platform/}";; +# esac +# dev_id="set wireless.${radioidx}.path='$path'" +# else +# dev_id="set wireless.${radioidx}.macaddr=$(cat ${_netdev}/address)" +# fi + + dev_id="set wireless.${radioidx}.phy=${dev}" + rmac=$(iw dev ${radioidx} info | grep addr | cut -d ' ' -f 2) + + BMAC=$(db -q get hw.board.basemac) + BMAC=${BMAC//:/} + BMAC=${BMAC// /} + + BSSID=$(printf "%12.12X" $((0x$BMAC))) + UUID=$(uuidgen -s -r | cut -c 1-24) + UUID=$UUID$BMAC + 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} + set wireless.${radioidx}=wifi-device + set wireless.${radioidx}.type=mac80211 + set wireless.${radioidx}.channel=${channel} + set wireless.${radioidx}.hwmode=11${mode_band} + set wireless.${radioidx}.country=DE + set wireless.${radioidx}.htmode=${htmode} + set wireless.${radioidx}.apsta=${apsta} ${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=OpenWrt - set wireless.default_radio${devidx}.encryption=none + ${aps_sta} + + set wireless.default_${radioidx}=wifi-iface + set wireless.default_${radioidx}.device=${radioidx} + set wireless.default_${radioidx}.network=lan + ${aps_ap} + set wireless.default_${radioidx}.mode=ap + set wireless.default_${radioidx}.ifname='${radioidx}' + set wireless.default_${radioidx}.ssid="${DEVICE_MANUFACTURER}-${BSSID}" + set wireless.default_${radioidx}.uuid="${UUID}" + set wireless.default_${radioidx}.encryption=psk2 + set wireless.default_${radioidx}.key=${WPAKEY} + set wireless.default_${radioidx}.wps=1 + set wireless.default_${radioidx}.wps_pushbutton=1 + set wireless.default_${radioidx}.ieee80211k=1 + set wireless.default_${radioidx}.ieee80211v=1 + set wireless.default_${radioidx}.bss_transition=1 + set wireless.default_${radioidx}.multi_ap=3 EOF uci -q commit wireless diff --git a/iopsys-brcm63xx-arm/base-files/sbin/wifi b/iopsys-brcm63xx-arm/base-files/sbin/wifi deleted file mode 100755 index d70eb06583aae1bf28146c5b0fcc1db0da33c14b..0000000000000000000000000000000000000000 --- a/iopsys-brcm63xx-arm/base-files/sbin/wifi +++ /dev/null @@ -1,247 +0,0 @@ -#!/bin/sh -# Copyright (C) 2006 OpenWrt.org - -. /lib/functions.sh -. /usr/share/libubox/jshn.sh - -usage() { - cat <<EOF -Usage: $0 [config|up|down|reload|status] -enables (default), disables or configures devices not yet configured. -EOF - exit 1 -} - -ubus_wifi_cmd() { - local cmd="$1" - local dev="$2" - - json_init - [ -n "$2" ] && json_add_string device "$2" - ubus call network.wireless "$1" "$(json_dump)" -} - -find_net_config() {( - local vif="$1" - local cfg - local ifname - - config_get cfg "$vif" network - - [ -z "$cfg" ] && { - include /lib/network - scan_interfaces - - config_get ifname "$vif" ifname - - cfg="$(find_config "$ifname")" - } - [ -z "$cfg" ] && return 0 - echo "$cfg" -)} - - -bridge_interface() {( - local cfg="$1" - [ -z "$cfg" ] && return 0 - - include /lib/network - scan_interfaces - - for cfg in $cfg; do - config_get iftype "$cfg" type - [ "$iftype" = bridge ] && config_get "$cfg" ifname - prepare_interface_bridge "$cfg" - return $? - done -)} - -prepare_key_wep() { - local key="$1" - local hex=1 - - echo -n "$key" | grep -qE "[^a-fA-F0-9]" && hex=0 - [ "${#key}" -eq 10 -a $hex -eq 1 ] || \ - [ "${#key}" -eq 26 -a $hex -eq 1 ] || { - [ "${key:0:2}" = "s:" ] && key="${key#s:}" - key="$(echo -n "$key" | hexdump -ve '1/1 "%02x" ""')" - } - echo "$key" -} - -wifi_fixup_hwmode() { - local device="$1" - local default="$2" - local hwmode hwmode_11n - - config_get channel "$device" channel - config_get hwmode "$device" hwmode - case "$hwmode" in - 11bg) hwmode=bg;; - 11a) hwmode=a;; - 11b) hwmode=b;; - 11g) hwmode=g;; - 11n*) - hwmode_11n="${hwmode##11n}" - case "$hwmode_11n" in - a|g) ;; - default) hwmode_11n="$default" - esac - config_set "$device" hwmode_11n "$hwmode_11n" - ;; - *) - hwmode= - if [ "${channel:-0}" -gt 0 ]; then - if [ "${channel:-0}" -gt 14 ]; then - hwmode=a - else - hwmode=g - fi - else - hwmode="$default" - fi - ;; - esac - config_set "$device" hwmode "$hwmode" -} - -_wifi_updown() { - for device in ${2:-$DEVICES}; do ( - config_get disabled "$device" disabled - [ "$disabled" = "1" ] && { - echo "'$device' is disabled" - set disable - } - config_get iftype "$device" type - if eval "type ${1}_$iftype" 2>/dev/null >/dev/null; then - eval "scan_$iftype '$device'" - eval "${1}_$iftype '$device'" || echo "$device($iftype): ${1} failed" - elif [ ! -f /lib/netifd/wireless/$iftype.sh ]; then - echo "$device($iftype): Interface type not supported" - fi - ); done -} - -wifi_updown() { - cmd=down - [ enable = "$1" ] && { - _wifi_updown disable "$2" - ubus_wifi_cmd "$cmd" "$2" - scan_wifi - cmd=up - } - ubus_wifi_cmd "$cmd" "$2" - _wifi_updown "$@" -} - -wifi_reload_legacy() { - _wifi_updown "disable" "$1" - scan_wifi - _wifi_updown "enable" "$1" -} - -wifi_reload() { - ubus call network reload - wifi_reload_legacy -} - -wifi_detect_notice() { - >&2 echo "WARNING: Wifi detect is deprecated. Use wifi config instead" - >&2 echo "For more information, see commit 5f8f8a366136a07df661e31decce2458357c167a" - exit 1 -} - -wifi_config() { - [ ! -f /etc/config/wireless ] && touch /etc/config/wireless - - for driver in $DRIVERS; do ( - if eval "type detect_$driver" 2>/dev/null >/dev/null; then - eval "detect_$driver" || echo "$driver: Detect failed" >&2 - else - echo "$driver: Hardware detection not supported" >&2 - fi - ); done -} - -start_net() {( - local iface="$1" - local config="$2" - local vifmac="$3" - - [ -f "/var/run/$iface.pid" ] && kill "$(cat /var/run/${iface}.pid)" 2>/dev/null - [ -z "$config" ] || { - include /lib/network - scan_interfaces - for config in $config; do - setup_interface "$iface" "$config" "" "$vifmac" - done - } -)} - -set_wifi_up() { - local cfg="$1" - local ifname="$2" - uci_set_state wireless "$cfg" up 1 - uci_set_state wireless "$cfg" ifname "$ifname" -} - -set_wifi_down() { - local cfg="$1" - local vifs vif vifstr - - [ -f "/var/run/wifi-${cfg}.pid" ] && - kill "$(cat "/var/run/wifi-${cfg}.pid")" 2>/dev/null - uci_revert_state wireless "$cfg" - config_get vifs "$cfg" vifs - for vif in $vifs; do - uci_revert_state wireless "$vif" - done -} - -scan_wifi() { - local cfgfile="$1" - DEVICES= - config_cb() { - local type="$1" - local section="$2" - - # section start - case "$type" in - wifi-device) - append DEVICES "$section" - config_set "$section" vifs "" - config_set "$section" ht_capab "" - ;; - esac - - # section end - config_get TYPE "$CONFIG_SECTION" TYPE - case "$TYPE" in - wifi-iface) - config_get device "$CONFIG_SECTION" device - config_get vifs "$device" vifs - append vifs "$CONFIG_SECTION" - config_set "$device" vifs "$vifs" - ;; - esac - } - config_load "${cfgfile:-wireless}" -} - -DEVICES= -DRIVERS= -include /lib/wifi/ -DRIVERS=brcm_mac80211 -scan_wifi - -case "$1" in - down) wifi_updown "disable" "$2";; - detect) wifi_detect_notice ;; - config) wifi_config ;; - status) ubus_wifi_cmd "status" "$2";; - reload) wifi_reload "$2";; - reload_legacy) wifi_reload_legacy "$2";; - --help|help) usage;; - ''|up) ubus call network reload; wifi_updown "enable" "$2";; - *) usage; exit 1;; -esac