From d3abc2c9f5dc2d238c17bd8764f780b38cf58491 Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 25 Jun 2006 15:42:53 +0000 Subject: [PATCH] add a simple /sbin/wifi script with support for the new broadcom driver (incomplete, but works) git-svn-id: svn://svn.openwrt.org/openwrt/branches/buildroot-ng/openwrt@4072 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../base-files/brcm-2.4/etc/config/wireless | 12 ++ package/base-files/default/sbin/wifi | 47 +++++ package/broadcom-wl/Makefile | 1 + .../broadcom-wl/files/lib/wifi/broadcom.sh | 161 ++++++++++++++++++ 4 files changed, 221 insertions(+) create mode 100644 package/base-files/brcm-2.4/etc/config/wireless create mode 100755 package/base-files/default/sbin/wifi create mode 100644 package/broadcom-wl/files/lib/wifi/broadcom.sh diff --git a/package/base-files/brcm-2.4/etc/config/wireless b/package/base-files/brcm-2.4/etc/config/wireless new file mode 100644 index 000000000..a7e67435c --- /dev/null +++ b/package/base-files/brcm-2.4/etc/config/wireless @@ -0,0 +1,12 @@ +config wifi-device wl0 + option type broadcom + option channel 5 + +config wifi-iface + option device wl0 + option mode ap + option ssid OpenWrt + option hidden 0 + option encryption none + + diff --git a/package/base-files/default/sbin/wifi b/package/base-files/default/sbin/wifi new file mode 100755 index 000000000..c983fe0df --- /dev/null +++ b/package/base-files/default/sbin/wifi @@ -0,0 +1,47 @@ +#!/bin/sh +. /etc/functions.sh + +config_get_bool() { + local _tmp + config_get "$1" "$2" "$3" + eval "_tmp=\$$1" + case "$_tmp" in + 1|on|enabled) eval "$1=1";; + 0|off|disabled) eval "$1=0";; + *) eval "$1=${4:-0}";; + esac +} + +config_cb() { + config_get TYPE "$CONFIG_SECTION" TYPE + case "$TYPE" in + wifi-device) + append DEVICES "$CONFIG_SECTION" + ;; + 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 wireless + +[ -d /lib/wifi -a -n "$(ls /lib/wifi/*.sh 2>&-)" ] && { + for script in /lib/wifi/*.sh; do + . $script + done +} + +for device in $DEVICES; do ( + config_get type "$device" type + eval "type setup_$type 2>&- >&-" && { + eval "scan_$type '$device'" + eval "setup_$type '$device'" && { + # TODO: set up network settings + /bin/true + } || echo "$device($type): Setup failed" || true + } || echo "$device($type): Interface type not supported" +); done diff --git a/package/broadcom-wl/Makefile b/package/broadcom-wl/Makefile index 43a0780f4..8b68e752f 100644 --- a/package/broadcom-wl/Makefile +++ b/package/broadcom-wl/Makefile @@ -100,6 +100,7 @@ define Package/kmod-brcm-wl-mimo/install endef define Package/wlc/install + $(CP) ./files/* $(1)/ install -d -m0755 $(1)/sbin install -m0755 $(PKG_BUILD_DIR)/wlc/wlc $(1)/sbin/ endef diff --git a/package/broadcom-wl/files/lib/wifi/broadcom.sh b/package/broadcom-wl/files/lib/wifi/broadcom.sh new file mode 100644 index 000000000..33a3ebb8f --- /dev/null +++ b/package/broadcom-wl/files/lib/wifi/broadcom.sh @@ -0,0 +1,161 @@ +scan_broadcom() { + local device="$1" + + config_get vifs "$device" vifs + for vif in $vifs; do + config_get mode "$vif" mode + case "$mode" in + adhoc) + adhoc=1 + adhoc_if="$vif" + ;; + sta) + sta=1 + sta_if="$vif" + ;; + ap) + ap=1 + ap_if="${ap_if:+$ap_if }$vif" + ;; + *) echo "$device($vif): Invalid mode";; + esac + done + + local _c= + for vif in ${adhoc_if:-$sta_if $ap_if}; do + config_set "$vif" ifname "wl0${_c:+.$_c}" + _c=$((${_c:-0} + 1)) + done + + ifdown="down" + for vif in 0 1 2 3; do + append ifdown "vif $vif" "$N" + append ifdown "enabled 0" "$N" + done + + ap=1 + infra=1 + mssid=1 + apsta=0 + radio=1 + case "$adhoc:$sta:$ap" in + 1*) + ap=0 + mssid=0 + infra=0 + ;; + :1:1) + apsta=1 + wet=1 + ;; + :1:) + wet=1 + ap=0 + mssid=0 + ;; + ::) + radio=0 + ;; + esac +} + + +setup_broadcom() { + local _c + config_get channel "$device" channel + config_get country "$device" country + config_get maxassoc "$device" maxassoc + + _c=0 + nas="$(which nas)" + nas_cmd= + for vif in ${adhoc_if:-$sta_if $ap_if}; do + append vif_pre_up "vif $_c" "$N" + append vif_post_up "vif $_c" "$N" + + [ "$vif" = "$sta_if" ] || { + config_get_bool hidden "$vif" hidden 1 + append vif_pre_up "closed $hidden" "$N" + config_get_bool isolate "$vif" isolate + append vif_pre_up "ap_isolate $hidden" "$N" + } + + wsec_r=0 + eap_r=0 + wsec=0 + auth=0 + nasopts= + config_get enc "$vif" encryption + case "$enc" in + WEP|wep) + wsec_r=1 + ;; + *psk*|*PSK*) + wsec_r=1 + config_get key "$vif" key + case "$enc" in + wpa2*|WPA2*|PSK2*|psk2*) auth=128; wsec=4;; + *) auth=4; crypto=2;; + esac + eval "${vif}_key=\"\$key\"" + nasopts="-k \"\$${vif}_key\"" + ;; + *wpa*|*WPA*) + wsec_r=1 + eap_r=1 + config_get key "$vif" key + config_get server "$vif" server + config_get port "$vif" port + case "$enc" in + wpa2*|WPA2*) auth=64; wsec=4;; + *) auth=2; crypto=2;; + esac + eval "${vif}_key=\"\$key\"" + nasopts="-r \"\$${vif}_key\" -h $server -p $port" + ;; + esac + append vif_post_up "wsec $wsec" "$N" + append vif_post_up "wpa_auth $auth" "$N" + append vif_post_up "wsec_restrict $wsec_r" "$N" + append vif_post_up "eap_restrict $eap_r" "$N" + + config_get ssid "$vif" ssid + append vif_post_up "ssid $ssid" "$N" + append vif_post_up "enabled 1" "$N" + + [ -z "$nasopts" ] || { + config_get ifname "$vif" ifname + config_get bridge "$vif" bridge # XXX: integrate with /etc/config/network later + eval "${vif}_ssid=\"\$ssid\"" + mode="-A" + [ "$vif" = "$sta_if" ] && mode="-S" + [ -z "$nas" ] || nas_cmd="${nas_cmd:+$nas_cmd$N}$nas -P /var/run/nas.$ifname.pid -H 34954 -i $ifname${bridge:+ -l $bridge} $mode -m $auth -w $crypto -s \"\$${vif}_ssid\" -g 3600 $nasopts &" + } + _c=$(($_c + 1)) + done + killall -KILL nas >&- 2>&- + cat <