diff options
Diffstat (limited to 'package/wireless-tools')
| -rw-r--r-- | package/wireless-tools/Makefile | 4 | ||||
| -rw-r--r-- | package/wireless-tools/files/wifi.sh | 66 | 
2 files changed, 69 insertions, 1 deletions
diff --git a/package/wireless-tools/Makefile b/package/wireless-tools/Makefile index f07a40640..6c5112662 100644 --- a/package/wireless-tools/Makefile +++ b/package/wireless-tools/Makefile @@ -61,7 +61,9 @@ define Build/UninstallDev  endef  define Package/wireless-tools/install -	$(INSTALL_DIR)  $(1)/usr/lib +	$(INSTALL_DIR) $(1)/lib/wifi +	$(INSTALL_DATA)  ./files/wifi.sh $(1)/lib/wifi/generic.sh +	$(INSTALL_DIR) $(1)/usr/lib  	$(INSTALL_BIN) $(PKG_BUILD_DIR)/libiw.so.28 $(1)/usr/lib/  	$(INSTALL_DIR) $(1)/usr/sbin  	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/iw{config,getid,list,priv,spy} $(1)/usr/sbin/ diff --git a/package/wireless-tools/files/wifi.sh b/package/wireless-tools/files/wifi.sh new file mode 100644 index 000000000..529462e6c --- /dev/null +++ b/package/wireless-tools/files/wifi.sh @@ -0,0 +1,66 @@ +hostapd_setup_vif() { +	local vif="$1" +	local driver="$2" +	local hostapd_cfg= + +	# Examples: +	# psk-mixed/tkip 	=> WPA1+2 PSK, TKIP +	# wpa-psk2/tkip+aes	=> WPA2 PSK, CCMP+TKIP +	# wpa2/tkip+aes 	=> WPA2 RADIUS, CCMP+TKIP +	# ... + +	# TODO: move this parsing function somewhere generic, so that +	# later it can be reused by drivers that don't use hostapd +	 +	# crypto defaults: WPA2 vs WPA1 +	case "$enc" in +		wpa2*|WPA2*|*PSK2*|*psk2*) +			wpa=2 +			crypto="CCMP" +		;; +		*mixed*) +			wpa=3 +			crypto="CCMP TKIP" +		;; +		*)  +			wpa=1 +			crypto="TKIP" +		;; +	esac + +	# explicit override for crypto setting +	case "$enc" in +		*tkip+aes|*TKIP+AES|*tkip+ccmp|*TKIP+CCMP) crypto="CCMP TKIP";; +		*tkip|*TKIP) crypto="TKIP";; +		*aes|*AES|*ccmp|*CCMP) crypto="CCMP";; +	esac +	 +	# use crypto/auth settings for building the hostapd config +	case "$enc" in +		*psk*|*PSK*) +			config_get psk "$vif" key +			append hostapd_cfg "wpa_passphrase=$psk" "$N" +		;; +		*wpa*|*WPA*) +		# FIXME: add wpa+radius here +		;; +		*) +			return 0; +		;; +	esac +	config_get ifname "$vif" ifname +	config_get bridge "$vif" bridge +	config_get ssid "$vif" ssid +	cat > /var/run/hostapd-$ifname.conf <<EOF +driver=$driver +interface=$ifname +${bridge:+bridge=$bridge} +ssid=$ssid +debug=0 +wpa=$wpa +wpa_pairwise=$crypto +$hostapd_cfg +EOF +	hostapd -B /var/run/hostapd-$ifname.conf +} +  | 
