Changeset 25951


Ignore:
Timestamp:
2011-03-08T13:54:13+01:00 (7 years ago)
Author:
acinonyx
Message:

[package] madwifi: Add support for multiple interfaces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/madwifi/files/lib/wifi/madwifi.sh

    r23679 r25951  
    11#!/bin/sh 
    22append DRIVERS "atheros" 
     3 
     4find_atheros_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/sys/dev 
     11                for phy in $(ls -d wifi* 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/sys/dev/$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} 
    327 
    428scan_atheros() { 
     
    630        local wds 
    731        local adhoc ahdemo sta ap monitor 
     32 
     33        [ ${device%[0-9]} = "wifi" ] && config_set "$device" phy "$device" 
    834         
    935        config_get vifs "$device" vifs 
     
    5076        local device="$1" 
    5177 
     78        find_atheros_phy "$device" || return 0 
     79        config_get phy "$device" phy 
     80 
    5281        set_wifi_down "$device" 
    5382         
     
    5584        cd /proc/sys/net 
    5685        for dev in *; do 
    57                 grep "$device" "$dev/%parent" >/dev/null 2>/dev/null && { 
     86                grep "$phy" "$dev/%parent" >/dev/null 2>/dev/null && { 
    5887                        [ -f "/var/run/wifi-${dev}.pid" ] && 
    5988                                kill "$(cat "/var/run/wifi-${dev}.pid")" 
     
    6998        local device="$1" 
    7099 
     100        find_atheros_phy "$device" || return 0 
     101        config_get phy "$device" phy 
     102 
    71103        config_get regdomain "$device" regdomain 
    72         [ -n "$regdomain" ] && echo "$regdomain" > /proc/sys/dev/$device/regdomain 
     104        [ -n "$regdomain" ] && echo "$regdomain" > /proc/sys/dev/$phy/regdomain 
    73105 
    74106        config_get country "$device" country 
    75107        [ -z "$country" ] && country="0" 
    76         echo "$country" > /proc/sys/dev/$device/countrycode 
     108        echo "$country" > /proc/sys/dev/$phy/countrycode 
    77109 
    78110        config_get_bool outdoor "$device" outdoor "0" 
    79         echo "$outdoor" > /proc/sys/dev/$device/outdoor 
     111        echo "$outdoor" > /proc/sys/dev/$phy/outdoor 
    80112 
    81113        config_get channel "$device" channel 
     
    91123        config_get antenna "$device" antenna 
    92124 
    93         devname="$(cat /proc/sys/dev/$device/dev_name)" 
     125        devname="$(cat /proc/sys/dev/$phy/dev_name)" 
    94126        local antgpio= 
    95127        local invert= 
     
    147179        fi 
    148180 
    149         [ -n "$antdiv" ] && sysctl -w dev."$device".diversity="$antdiv" >&- 
    150         [ -n "$antrx" ] && sysctl -w dev."$device".rxantenna="$antrx" >&- 
    151         [ -n "$anttx" ] && sysctl -w dev."$device".txantenna="$anttx" >&- 
    152         [ -n "$softled" ] && sysctl -w dev."$device".softled="$softled" >&- 
     181        [ -n "$antdiv" ] && sysctl -w dev."$phy".diversity="$antdiv" >&- 
     182        [ -n "$antrx" ] && sysctl -w dev."$phy".rxantenna="$antrx" >&- 
     183        [ -n "$anttx" ] && sysctl -w dev."$phy".txantenna="$anttx" >&- 
     184        [ -n "$softled" ] && sysctl -w dev."$phy".softled="$softled" >&- 
    153185 
    154186        config_get distance "$device" distance 
    155         [ -n "$distance" ] && sysctl -w dev."$device".distance="$distance" >&- 
     187        [ -n "$distance" ] && sysctl -w dev."$phy".distance="$distance" >&- 
    156188 
    157189        for vif in $vifs; do 
     
    168200                 
    169201                [ "$nosbeacon" = 1 ] || nosbeacon="" 
    170                 ifname=$(wlanconfig "$ifname" create wlandev "$device" wlanmode "$mode" ${nosbeacon:+nosbeacon}) 
     202                ifname=$(wlanconfig "$ifname" create wlandev "$phy" wlanmode "$mode" ${nosbeacon:+nosbeacon}) 
    171203                [ $? -ne 0 ] && { 
    172204                        echo "enable_atheros($device): Failed to set up $mode vif $ifname" >&2 
     
    375407} 
    376408 
     409check_device() { 
     410        [ ${1%[0-9]} = "wifi" ] && config_set "$1" phy "$1" 
     411        config_get phy "$1" phy 
     412        [ -z "$phy" ] && { 
     413                find_atheros_phy "$1" >/dev/null || return 0 
     414                config_get phy "$1" phy 
     415        } 
     416        [ "$phy" = "$dev" ] && found=1 
     417} 
     418 
    377419 
    378420detect_atheros() { 
     421        devidx=0 
     422        config_load wireless 
     423        while :; do 
     424                config_get type "radio$devidx" type 
     425                [ -n "$type" ] || break 
     426                devidx=$(($devidx + 1)) 
     427        done 
    379428        cd /proc/sys/dev 
    380429        [ -d ath ] || return 
    381430        for dev in $(ls -d wifi* 2>&-); do 
    382                 config_get type "$dev" type 
     431                found=0 
     432                config_foreach check_device wifi-device 
     433                [ "$found" -gt 0 ] && continue 
     434 
    383435                devname="$(cat /proc/sys/dev/$dev/dev_name)" 
    384436                case "$devname" in 
     
    402454                        ;; 
    403455                esac 
    404                 [ "$type" = atheros ] && continue 
     456 
    405457                cat <<EOF 
    406 config wifi-device  $dev 
     458config wifi-device  radio$devidx 
    407459        option type     atheros 
    408460        option channel  auto 
     461        option macaddr  $(cat /sys/class/net/${dev}/address) 
    409462$EXTRA_DEV 
    410463        # REMOVE THIS LINE TO ENABLE WIFI: 
     
    412465 
    413466config wifi-iface 
    414         option device   $dev 
     467        option device   radio$devidx 
    415468        option network  lan 
    416469        option mode     ap 
     
    418471        option encryption none 
    419472EOF 
     473        devidx=$(($devidx + 1)) 
    420474        done 
    421475} 
Note: See TracChangeset for help on using the changeset viewer.