diff options
Diffstat (limited to 'package/mac80211/files')
-rw-r--r-- | package/mac80211/files/b43-fwcutter-fw-dirname.patch | 16 | ||||
-rwxr-xr-x | package/mac80211/files/host_bin/b43-fwsquash.py | 118 | ||||
-rw-r--r-- | package/mac80211/files/lib/wifi/mac80211.sh | 134 |
3 files changed, 89 insertions, 179 deletions
diff --git a/package/mac80211/files/b43-fwcutter-fw-dirname.patch b/package/mac80211/files/b43-fwcutter-fw-dirname.patch deleted file mode 100644 index c2f49ab78..000000000 --- a/package/mac80211/files/b43-fwcutter-fw-dirname.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/fwcutter.c -+++ b/fwcutter.c -@@ -48,13 +48,8 @@ - #include "fwcutter.h" - #include "fwcutter_list.h" - --#if defined(__DragonFly__) || defined(__FreeBSD__) --#define V3_FW_DIRNAME "v3" --#define V4_FW_DIRNAME "v4" --#else - #define V3_FW_DIRNAME "b43legacy" - #define V4_FW_DIRNAME "b43" --#endif - - static struct cmdline_args cmdargs; - diff --git a/package/mac80211/files/host_bin/b43-fwsquash.py b/package/mac80211/files/host_bin/b43-fwsquash.py deleted file mode 100755 index 3a2ea13cd..000000000 --- a/package/mac80211/files/host_bin/b43-fwsquash.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python -# -# b43 firmware file squasher -# Removes unnecessary firmware files -# -# Copyright (c) 2009 Michael Buesch <mb@bu3sch.de> -# -# Licensed under the GNU/GPL version 2 or (at your option) any later version. -# - -import sys -import os - -def usage(): - print("Usage: %s PHYTYPES COREREVS /path/to/extracted/firmware" % sys.argv[0]) - print("") - print("PHYTYPES is a comma separated list of:") - print("A => A-PHY") - print("AG => Dual A-PHY G-PHY") - print("G => G-PHY") - print("LP => LP-PHY") - print("N => N-PHY") - print("") - print("COREREVS is a comma separated list of core revision numbers.") - -if len(sys.argv) != 4: - usage() - sys.exit(1) - -phytypes = sys.argv[1] -corerevs = sys.argv[2] -fwpath = sys.argv[3] - -phytypes = phytypes.split(',') -try: - corerevs = map(lambda r: int(r), corerevs.split(',')) -except ValueError: - print("ERROR: \"%s\" is not a valid COREREVS string\n" % corerevs) - usage() - sys.exit(1) - - -fwfiles = os.listdir(fwpath) -fwfiles = filter(lambda str: str.endswith(".fw"), fwfiles) -if not fwfiles: - print("ERROR: No firmware files found in %s" % fwpath) - sys.exit(1) - -required_fwfiles = [] - -def revs_match(revs_a, revs_b): - for rev in revs_a: - if rev in revs_b: - return True - return False - -def phytypes_match(types_a, types_b): - for type in types_a: - type = type.strip().upper() - if type in types_b: - return True - return False - -revmapping = { - "ucode2.fw" : (2,3,), - "ucode4.fw" : (4,), - "ucode5.fw" : (5,6,7,8,9,10,), - "ucode11.fw" : (11,12,), - "ucode13.fw" : (13,), - "ucode14.fw" : (14,), - "ucode15.fw" : (15,), - "ucode16_mimo.fw" : (16,), - "ucode24_mimo.fw" : (24,), - "ucode29_mimo.fw" : (29,), - "pcm4.fw" : (1,2,3,4,), - "pcm5.fw" : (5,6,7,8,9,10,), -} - -initvalmapping = { - "a0g1initvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ), - "a0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG",), ), - "b0g0initvals2.fw" : ( (2,4,), ("G",), ), - "b0g0initvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ), - "b0g0initvals13.fw" : ( (13,), ("G",), ), - "n0initvals11.fw" : ( (11,12,), ("N",), ), - "n0initvals16.fw" : ( (16,), ("N",), ), - "lp0initvals13.fw" : ( (13,), ("LP",), ), - "lp0initvals14.fw" : ( (14,), ("LP",), ), - "lp0initvals15.fw" : ( (15,), ("LP",), ), - "a0g1bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("AG",), ), - "a0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("A", "AG"), ), - "b0g0bsinitvals5.fw" : ( (5,6,7,8,9,10,), ("G",), ), - "n0bsinitvals11.fw" : ( (11,12,), ("N",), ), - "n0bsinitvals16.fw" : ( (16,), ("N",), ), - "lp0bsinitvals13.fw" : ( (13,), ("LP",), ), - "lp0bsinitvals14.fw" : ( (14,), ("LP",), ), - "lp0bsinitvals15.fw" : ( (15,), ("LP",), ), - "lcn0initvals24.fw" : ( (24,), ("LNC",), ), - "ht0initvals29.fw" : ( (29,), ("HT",), ), -} - -for f in fwfiles: - if f in revmapping: - if revs_match(corerevs, revmapping[f]): - required_fwfiles += [f] - continue - if f in initvalmapping: - if revs_match(corerevs, initvalmapping[f][0]) and\ - phytypes_match(phytypes, initvalmapping[f][1]): - required_fwfiles += [f] - continue - print("WARNING: Firmware file %s not found in the mapping lists" % f) - -for f in fwfiles: - if f not in required_fwfiles: - print("Deleting %s" % f) - os.unlink(fwpath + '/' + f) - diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 6dfe2a2ca..a052a1cbf 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -6,8 +6,6 @@ mac80211_hostapd_setup_base() { local ifname="$2" cfgfile="/var/run/hostapd-$phy.conf" - macfile="/var/run/hostapd-$phy.maclist" - [ -e "$macfile" ] && rm -f "$macfile" config_get device "$vif" device config_get country "$device" country @@ -16,7 +14,6 @@ mac80211_hostapd_setup_base() { config_get beacon_int "$device" beacon_int config_get basic_rate_list "$device" basic_rate config_get_bool noscan "$device" noscan - config_get_bool short_preamble "$device" short_preamble "0" hostapd_set_log_options base_cfg "$device" @@ -51,24 +48,6 @@ mac80211_hostapd_setup_base() { config_get_bool country_ie "$device" country_ie "$country_ie" [ "$country_ie" -gt 0 ] && append base_cfg "ieee80211d=1" "$N" - config_get macfilter "$vif" macfilter - case "$macfilter" in - allow) - append base_cfg "macaddr_acl=1" "$N" - append base_cfg "accept_mac_file=$macfile" "$N" - ;; - deny) - append base_cfg "macaddr_acl=0" "$N" - append base_cfg "deny_mac_file=$macfile" "$N" - ;; - esac - config_get maclist "$vif" maclist - [ -n "$maclist" ] && { - for mac in $maclist; do - echo "$mac" >> $macfile - done - } - local br brval brstr [ -n "$basic_rate_list" ] && { for br in $basic_rate_list; do @@ -78,8 +57,6 @@ mac80211_hostapd_setup_base() { done } - append base_cfg "preamble=$short_preamble" "$N" - cat >> "$cfgfile" <<EOF ctrl_interface=/var/run/hostapd-$phy driver=nl80211 @@ -184,26 +161,46 @@ mac80211_start_vif() { set_wifi_up "$vif" "$ifname" } -find_mac80211_phy() { - local device="$1" +lookup_phy() { + [ -n "$phy" ] && { + [ -d /sys/class/ieee80211/$phy ] && return + } + + local devpath + config_get devpath "$device" path + [ -n "$devpath" -a -d "/sys/devices/$devpath/ieee80211" ] && { + phy="$(ls /sys/devices/$devpath/ieee80211 | grep -m 1 phy)" + [ -n "$phy" ] && return + } local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')" - config_get phy "$device" phy - [ -z "$phy" -a -n "$macaddr" ] && { - for phy in $(ls /sys/class/ieee80211 2>/dev/null); do - [ "$macaddr" = "$(cat /sys/class/ieee80211/${phy}/macaddress)" ] || continue - config_set "$device" phy "$phy" - break + [ -n "$macaddr" ] && { + for _phy in $(ls /sys/class/ieee80211 2>/dev/null); do + [ "$macaddr" = "$(cat /sys/class/ieee80211/${_phy}/macaddress)" ] || continue + phy="$_phy" + return done - config_get phy "$device" phy } + 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 } @@ -273,17 +270,35 @@ get_freq() { } mac80211_generate_mac() { - local off="$1" - local mac="$2" - local oIFS="$IFS"; IFS=":"; set -- $mac; IFS="$oIFS" + local id="$1" + local ref="$2" + local mask="$3" + + [ "$mask" = "00:00:00:00:00:00" ] && mask="ff:ff:ff:ff:ff:ff"; + local oIFS="$IFS"; IFS=":"; set -- $mask; IFS="$oIFS" + + local mask1=$1 + local mask6=$6 + + local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS" + [ "$((0x$mask1))" -gt 0 ] && { + b1="0x$1" + [ "$id" -gt 0 ] && \ + b1=$((($b1 | 0x2) ^ (($id - 1) << 2))) + printf "%02x:%s:%s:%s:%s:%s" $b1 $2 $3 $4 $5 $6 + return + } - local b2mask=0x00 - [ $off -gt 0 ] && b2mask=0x02 + [ "$((0x$mask6))" -lt 255 ] && { + printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $(( 0x$6 ^ $id )) + return + } - printf "%02x:%s:%s:%s:%02x:%02x" \ - $(( 0x$1 | $b2mask )) $2 $3 $4 \ - $(( (0x$5 + ($off / 0x100)) % 0x100 )) \ - $(( (0x$6 + $off) % 0x100 )) + off2=$(( (0x$6 + $id) / 0x100 )) + printf "%s:%s:%s:%s:%02x:%02x" \ + $1 $2 $3 $4 \ + $(( (0x$5 + $off2) % 0x100 )) \ + $(( (0x$6 + $id) % 0x100 )) } enable_mac80211() { @@ -295,6 +310,7 @@ enable_mac80211() { config_get distance "$device" distance config_get txantenna "$device" txantenna all config_get rxantenna "$device" rxantenna all + config_get antenna_gain "$device" antenna_gain 0 config_get frag "$device" frag config_get rts "$device" rts find_mac80211_phy "$device" || return 0 @@ -321,6 +337,7 @@ enable_mac80211() { } iw phy "$phy" set antenna $txantenna $rxantenna >/dev/null 2>&1 + iw phy "$phy" set antenna_gain $antenna_gain [ -n "$distance" ] && iw phy "$phy" set distance "$distance" [ -n "$frag" ] && iw phy "$phy" set frag "${frag%%.*}" @@ -376,7 +393,7 @@ enable_mac80211() { config_get macaddr "$device" macaddr config_get vif_mac "$vif" macaddr [ -n "$vif_mac" ] || { - vif_mac="$(mac80211_generate_mac $macidx $macaddr)" + vif_mac="$(mac80211_generate_mac $macidx $macaddr $(cat /sys/class/ieee80211/${phy}/address_mask))" macidx="$(($macidx + 1))" } [ "$mode" = "ap" ] || ifconfig "$ifname" hw ether "$vif_mac" @@ -394,7 +411,12 @@ enable_mac80211() { # We attempt to set the channel for all interfaces, although # mac80211 may not support it or the driver might not yet # for ap mode this is handled by hostapd - [ -n "$fixed" -a -n "$channel" ] && iw dev "$ifname" set channel "$channel" + config_get htmode "$device" htmode + case "$htmode" in + HT20|HT40+|HT40-) ;; + *) htmode= ;; + esac + [ -n "$fixed" -a -n "$channel" ] && iw dev "$ifname" set channel "$channel" $htmode fi i=$(($i + 1)) @@ -460,7 +482,7 @@ enable_mac80211() { # make sure this wifi interface won't accidentally stay open without encryption ifconfig "$ifname" down } - # wpa_supplicant will bring the iface up + mac80211_start_vif "$vif" "$ifname" continue fi } @@ -509,6 +531,20 @@ enable_mac80211() { ${mcval:+mcast-rate $mcval} \ ${keyspec:+keys $keyspec} ;; + mesh) + mp_list="mesh_retry_timeout mesh_confirm_timeout mesh_holding_timeout mesh_max_peer_links + mesh_max_retries mesh_ttl mesh_element_ttl mesh_auto_open_plinks mesh_hwmp_max_preq_retries + mesh_path_refresh_time mesh_min_discovery_timeout mesh_hwmp_active_path_timeout + mesh_hwmp_preq_min_interval mesh_hwmp_net_diameter_traversal_time mesh_hwmp_rootmode + mesh_hwmp_rann_interval mesh_gate_announcements mesh_fwding mesh_sync_offset_max_neighor + mesh_rssi_threshold mesh_hwmp_active_path_to_root_timeout mesh_hwmp_root_interval + mesh_hwmp_confirmation_interval mesh_power_mode mesh_awake_window" + for mp in $mp_list + do + config_get mp_val "$vif" "$mp" "" + [ -n "$mp_val" ] && iw dev "$ifname" set mesh_param "$mp" "$mp_val" + done + ;; sta) if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then wpa_supplicant_setup_vif "$vif" nl80211 "${hostapd_ctrl:+-H $hostapd_ctrl}" || { @@ -573,12 +609,20 @@ detect_mac80211() { } iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a"; channel="36"; } + if [ -x /usr/bin/readlink ]; then + path="$(readlink -f /sys/class/ieee80211/${dev}/device)" + path="${path##/sys/devices/}" + dev_id=" option path '$path'" + else + dev_id=" option macaddr $(cat /sys/class/ieee80211/${dev}/macaddress)" + fi + cat <<EOF config wifi-device radio$devidx option type mac80211 option channel ${channel} - option macaddr $(cat /sys/class/ieee80211/${dev}/macaddress) option hwmode 11${mode_11n}${mode_band} +$dev_id $ht_capab # REMOVE THIS LINE TO ENABLE WIFI: option disabled 1 |