Changeset 26162


Ignore:
Timestamp:
2011-03-15T00:48:25+01:00 (7 years ago)
Author:
acinonyx
Message:

[package] hostap-driver: Add support for multiple interfaces

Location:
trunk/package/hostap-driver
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/hostap-driver/Makefile

    r22145 r26162  
    11#  
    2 # Copyright (C) 2006 OpenWrt.org 
     2# Copyright (C) 2006-2011 OpenWrt.org 
    33# 
    44# This is free software, licensed under the GNU General Public License v2. 
     
    1111PKG_NAME:=hostap-driver 
    1212PKG_VERSION:=0.4.9 
    13 PKG_RELEASE:=1 
     13PKG_RELEASE:=2 
    1414 
    1515PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz 
  • trunk/package/hostap-driver/files/lib/wifi/hostap.sh

    r23565 r26162  
    22append DRIVERS "prism2" 
    33 
     4find_prism2_phy() { 
     5        local device="$1" 
     6 
     7        local macaddr="$(config_get "$device" macaddr | tr 'A-Z' 'a-z')" 
     8        config_get phy "$device" phy 
     9        [ -z "$phy" -a -n "$macaddr" ] && { 
     10                cd /proc/net/hostap 
     11                for phy in $(ls -d wlan* 2>&-); do 
     12                        [ "$macaddr" = "$(cat /sys/class/net/${phy}/address)" ] || continue 
     13                        config_set "$device" phy "$phy" 
     14                        break 
     15                done 
     16                config_get phy "$device" phy 
     17        } 
     18        [ -n "$phy" -a -d "/proc/net/hostap/$phy" ] || { 
     19                echo "phy for wifi device $1 not found" 
     20                return 1 
     21        } 
     22        [ -z "$macaddr" ] && { 
     23                config_set "$device" macaddr "$(cat /sys/class/net/${phy}/address)" 
     24        } 
     25        return 0 
     26} 
     27 
    428scan_prism2() { 
    529        local device="$1" 
    630        local mainvif 
    731        local wds 
    8          
     32 
     33        [ ${device%[0-9]} = "wlan" ] && config_set "$device" phy "$device" || find_prism2_phy "$device" || { 
     34                config_unset "$device" vifs 
     35                return 0 
     36        } 
     37        config_get phy "$device" phy 
     38 
    939        config_get vifs "$device" vifs 
    1040        local _c=0 
     
    1646                                [ -z "$mainvif" ] && { 
    1747                                        mainvif="$vif" 
    18                                         config_set "$vif" ifname "$device" 
     48                                        config_set "$vif" ifname "$phy" 
    1949                                } 
    2050                        ;; 
     
    2252                                config_get ssid "$vif" ssid 
    2353                                [ -z "$ssid" ] && continue 
    24                                 config_set "$vif" ifname "${device}wds${_c}" 
     54                                config_set "$vif" ifname "${phy}wds${_c}" 
    2555                                _c=$(($_c + 1)) 
    2656                                addr="$ssid" 
     
    3565disable_prism2() ( 
    3666        local device="$1" 
    37          
     67 
     68        find_prism2_phy "$device" || return 0 
     69        config_get phy "$device" phy 
     70 
    3871        set_wifi_down "$device" 
    3972 
    4073        include /lib/network 
    41         while read line < /proc/net/hostap/${device}/wds; do 
     74        while read line < /proc/net/hostap/${phy}/wds; do 
    4275                set $line 
    4376                [ -f "/var/run/wifi-${1}.pid" ] && 
     
    4578                ifconfig "$1" down 
    4679                unbridge "$1" 
    47                 iwpriv "$device" wds_del "$2" 
    48         done 
    49         unbridge "$device" 
     80                iwpriv "$phy" wds_del "$2" 
     81        done 
     82        unbridge "$phy" 
    5083        return 0 
    5184) 
     
    5386enable_prism2() { 
    5487        local device="$1" 
     88 
     89        find_prism2_phy "$device" || return 0 
     90        config_get phy "$device" phy 
    5591 
    5692        config_get rxantenna "$device" rxantenna 
     
    6197                txantenna="1" 
    6298        } 
    63         [ -n "$rxantenna" ] && iwpriv $device antsel_rx "$rxantenna" 
    64         [ -n "$txantenna" ] && iwpriv $device antsel_tx "$txantenna" 
     99        [ -n "$rxantenna" ] && iwpriv "$phy" antsel_rx "$rxantenna" 
     100        [ -n "$txantenna" ] && iwpriv "$phy" antsel_tx "$txantenna" 
    65101 
    66102        config_get channel "$device" channel 
    67         [ -n "$channel" ] && iwconfig "$device" channel "$channel" >/dev/null 2>/dev/null 
     103        [ -n "$channel" ] && iwconfig "$phy" channel "$channel" >/dev/null 2>/dev/null 
    68104 
    69105        config_get txpower "$device" txpower 
    70         [ -n "$txpower" ] && iwconfig "$device" txpower "${txpower%%.*}" 
     106        [ -n "$txpower" ] && iwconfig "$phy" txpower "${txpower%%.*}" 
    71107 
    72108        config_get vifs "$device" vifs 
     
    77113                config_get mode "$vif" mode 
    78114 
    79                 [ "$mode" = "wds" ] || iwconfig "$device" essid -- "$ssid" 
     115                [ "$mode" = "wds" ] || iwconfig "$phy" essid -- "$ssid" 
    80116 
    81117                case "$mode" in 
    82118                        sta) 
    83                                 iwconfig "$device" mode managed 
     119                                iwconfig "$phy" mode managed 
    84120                                config_get addr "$device" bssid 
    85121                                [ -z "$addr" ] || {  
    86                                         iwconfig "$device" ap "$addr" 
     122                                        iwconfig "$phy" ap "$addr" 
    87123                                } 
    88124                        ;; 
    89                         ap) iwconfig "$device" mode master;; 
    90                         wds) iwpriv "$device" wds_add "$ssid";; 
    91                         *) iwconfig "$device" mode "$mode";; 
     125                        ap) iwconfig "$phy" mode master;; 
     126                        wds) iwpriv "$phy" wds_add "$ssid";; 
     127                        *) iwconfig "$phy" mode "$mode";; 
    92128                esac 
    93129 
    94130                [ "$first" = 1 ] && { 
    95131                        config_get rate "$vif" rate 
    96                         [ -n "$rate" ] && iwconfig "$device" rate "${rate%%.*}" 
     132                        [ -n "$rate" ] && iwconfig "$phy" rate "${rate%%.*}" 
    97133 
    98134                        config_get_bool hidden "$vif" hidden 0 
    99                         iwpriv "$device" enh_sec "$hidden" 
     135                        iwpriv "$phy" enh_sec "$hidden" 
    100136 
    101137                        config_get frag "$vif" frag 
    102                         [ -n "$frag" ] && iwconfig "$device" frag "${frag%%.*}" 
     138                        [ -n "$frag" ] && iwconfig "$phy" frag "${frag%%.*}" 
    103139 
    104140                        config_get rts "$vif" rts 
    105                         [ -n "$rts" ] && iwconfig "$device" rts "${rts%%.*}" 
     141                        [ -n "$rts" ] && iwconfig "$phy" rts "${rts%%.*}" 
    106142 
    107143                        config_get maclist "$vif" maclist 
    108144                        [ -n "$maclist" ] && { 
    109145                                # flush MAC list 
    110                                 iwpriv "$device" maccmd 3 
     146                                iwpriv "$phy" maccmd 3 
    111147                                for mac in $maclist; do 
    112                                         iwpriv "$device" addmac "$mac" 
     148                                        iwpriv "$phy" addmac "$mac" 
    113149                                done 
    114150                        } 
     
    116152                        case "$macpolicy" in 
    117153                                allow) 
    118                                         iwpriv $device maccmd 2 
     154                                        iwpriv "$phy" maccmd 2 
    119155                                ;; 
    120156                                deny) 
    121                                         iwpriv $device maccmd 1 
     157                                        iwpriv "$phy" maccmd 1 
    122158                                ;; 
    123159                                *) 
    124160                                        # default deny policy if mac list exists 
    125                                         [ -n "$maclist" ] && iwpriv $device maccmd 1 
     161                                        [ -n "$maclist" ] && iwpriv "$phy" maccmd 1 
    126162                                ;; 
    127163                        esac 
    128164                        # kick all stations if we have policy explicitly set 
    129                         [ -n "$macpolicy" ] && iwpriv $device maccmd 4 
     165                        [ -n "$macpolicy" ] && iwpriv "$phy" maccmd 4 
    130166                } 
    131167 
     
    185221} 
    186222 
     223check_device() { 
     224        [ ${1%[0-9]} = "wlan" ] && config_set "$1" phy "$1" 
     225        config_get phy "$1" phy 
     226        [ -z "$phy" ] && { 
     227                find_prism2_phy "$1" >/dev/null || return 0 
     228                config_get phy "$1" phy 
     229        } 
     230        [ "$phy" = "$dev" ] && found=1 
     231} 
     232 
    187233detect_prism2() { 
     234        devidx=0 
     235        config_load wireless 
     236        while :; do 
     237                config_get type "radio$devidx" type 
     238                [ -n "$type" ] || break 
     239                devidx=$(($devidx + 1)) 
     240        done 
    188241        cd /proc/net/hostap 
    189242        [ -d wlan* ] || return 
    190243        for dev in $(ls -d wlan* 2>&-); do 
    191                 config_get type "$dev" type 
    192                 [ "$type" = prism2 ] && continue 
     244                found=0 
     245                config_foreach check_device wifi-device 
     246                [ "$found" -gt 0 ] && continue 
    193247                cat <<EOF 
    194248 
    195 config wifi-device $dev 
     249config wifi-device radio$devidx 
    196250        option type     prism2 
    197251        option channel  11 
     252        option macaddr  $(cat /sys/class/net/${dev}/address) 
    198253 
    199254        # REMOVE THIS LINE TO ENABLE WIFI: 
     
    201256 
    202257config wifi-iface 
    203         option device   $dev 
     258        option device   radio$devidx 
    204259        option network  lan 
    205260        option mode     ap 
     
    207262        option encryption none 
    208263EOF 
    209         done 
    210 } 
     264        devidx=$(($devidx + 1)) 
     265        done 
     266} 
Note: See TracChangeset for help on using the changeset viewer.