Major enhancement to hostap.sh script * use common openwrt option naming (e.g. sta instead of manged for mode) * add support for wds vifs * add support for monitor mode * add encryption support * add antenna selection options * add hidden ssid option * other minor fixes Signed-off-by: Vasilis Tsiligiannis <b_tsiligiannis@silverton.gr>
SVN-Revision: 16220
This commit is contained in:
		@@ -3,14 +3,33 @@ append DRIVERS "prism2"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
scan_prism2() {
 | 
					scan_prism2() {
 | 
				
			||||||
	local device="$1"
 | 
						local device="$1"
 | 
				
			||||||
 | 
						local mainvif
 | 
				
			||||||
 | 
						local wds
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	config_get mode "$device" mode
 | 
						config_get vifs "$device" vifs
 | 
				
			||||||
 | 
						local _c=0
 | 
				
			||||||
 | 
						for vif in $vifs; do
 | 
				
			||||||
 | 
							config_get mode "$vif" mode
 | 
				
			||||||
		case "$mode" in
 | 
							case "$mode" in
 | 
				
			||||||
		ad-hoc|managed|master)
 | 
								adhoc|sta|ap|monitor)
 | 
				
			||||||
 | 
									# Only one vif is allowed on AP, station, Ad-hoc or monitor mode
 | 
				
			||||||
 | 
									[ -z "$mainvif" ] && {
 | 
				
			||||||
 | 
										mainvif="$vif"
 | 
				
			||||||
 | 
										config_set "$vif" ifname "$device"
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			;;
 | 
								;;
 | 
				
			||||||
		*) echo "$device: Invalid mode, ignored."; continue;;
 | 
								wds)
 | 
				
			||||||
 | 
									config_get ssid "$vif" ssid
 | 
				
			||||||
 | 
									[ -z "$ssid" ] && continue
 | 
				
			||||||
 | 
									config_set "$vif" ifname "${device}wds${_c}"
 | 
				
			||||||
 | 
									_c=$(($_c + 1))
 | 
				
			||||||
 | 
									addr="$ssid"
 | 
				
			||||||
 | 
									${addr:+append wds "$vif"}
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
								*) echo "$device($vif): Invalid mode, ignored."; continue;;
 | 
				
			||||||
		esac
 | 
							esac
 | 
				
			||||||
	
 | 
						done
 | 
				
			||||||
 | 
						config_set "$device" vifs "${mainvif:+$mainvif }${wds:+$wds}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
disable_prism2() (
 | 
					disable_prism2() (
 | 
				
			||||||
@@ -19,97 +38,155 @@ disable_prism2() (
 | 
				
			|||||||
	set_wifi_down "$device"
 | 
						set_wifi_down "$device"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	include /lib/network
 | 
						include /lib/network
 | 
				
			||||||
	ifconfig "$device" down 
 | 
						while read line < /proc/net/hostap/${device}/wds; do
 | 
				
			||||||
 | 
							set $line
 | 
				
			||||||
 | 
							[ -f "/var/run/wifi-${1}.pid" ] &&
 | 
				
			||||||
 | 
								kill "$(cat "/var/run/wifi-${1}.pid")"
 | 
				
			||||||
 | 
							ifconfig "$1" down
 | 
				
			||||||
 | 
							unbridge "$1"
 | 
				
			||||||
 | 
							iwpriv "$device" wds_del "$2"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
	unbridge "$device"
 | 
						unbridge "$device"
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enable_prism2() {
 | 
					enable_prism2() {
 | 
				
			||||||
	local irqdevs
 | 
						local device="$1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config_get rxantenna "$device" rxantenna
 | 
				
			||||||
 | 
						[ -n "$rxantenna" ] && iwpriv $device antsel_rx "$rxantenna"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config_get txantenna "$device" txantenna
 | 
				
			||||||
 | 
						[ -n "$txantenna" ] && iwpriv $device antsel_tx "$txantenna"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config_get prifw "$device" prifw
 | 
					 | 
				
			||||||
	config_get stafw "$device" stafw
 | 
					 | 
				
			||||||
	config_get mode "$device" mode
 | 
					 | 
				
			||||||
	config_get rate "$device" rate
 | 
					 | 
				
			||||||
	config_get channel "$device" channel
 | 
						config_get channel "$device" channel
 | 
				
			||||||
 | 
						[ -n "$channel" ] && iwconfig "$device" channel "$channel" >/dev/null 2>/dev/null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	config_get txpower "$device" txpower
 | 
						config_get txpower "$device" txpower
 | 
				
			||||||
	config_get ssid "$device" ssid
 | 
						[ -n "$txpower" ] && iwconfig "$device" txpower "${txpower%%.*}"
 | 
				
			||||||
	config_get maclist "$device" maclist
 | 
					
 | 
				
			||||||
	config_get macpolicy "$device" macpolicy
 | 
						config_get vifs "$device" vifs
 | 
				
			||||||
	[ -f "$prifw" ] || [ -f "$stafw" ] && [ -x /usr/sbin/prism2_srec ] && {
 | 
						local first=1
 | 
				
			||||||
		irqdevs=$(cat /proc/interrupts | grep wifi${device##wlan} | cut -b 37- | tr -d ",")
 | 
						for vif in $vifs; do
 | 
				
			||||||
		for dev in $irqdevs; do
 | 
							config_get ifname "$vif" ifname
 | 
				
			||||||
			[ "$(config_get "$dev" type)" = "atheros" ] && wifi down "$dev"
 | 
							config_get ssid "$vif" ssid
 | 
				
			||||||
		done
 | 
							config_get mode "$vif" mode
 | 
				
			||||||
		[ -f "$prifw" ] && prism2_srec -g $device $prifw
 | 
					
 | 
				
			||||||
		[ -f "$stafw" ] && prism2_srec -r $device $stafw
 | 
							[ "$mode" = "wds" ] || iwconfig "$device" essid "$ssid"
 | 
				
			||||||
		for dev in $irqdevs; do
 | 
					
 | 
				
			||||||
			[ "$(config_get "$dev" type)" = "atheros" ] && wifi up "$dev"
 | 
							case "$mode" in
 | 
				
			||||||
		done
 | 
								sta) iwconfig "$device" mode managed;;
 | 
				
			||||||
	}
 | 
								ap) iwconfig "$device" mode master;;
 | 
				
			||||||
	[ -n "$mode" ] && iwconfig $device mode $mode
 | 
								wds) iwpriv "$device" wds_add "$ssid";;
 | 
				
			||||||
	[ -n "$rate" ] && iwconfig $device rate $rate
 | 
								*) iwconfig "$device" mode "$mode";;
 | 
				
			||||||
	[ -n "$channel" ] && iwconfig $device channel $channel
 | 
							esac
 | 
				
			||||||
	[ -n "$ssid" ] && iwconfig $device essid $ssid
 | 
					
 | 
				
			||||||
	ifconfig "$device" up
 | 
							[ "$first" = 1 ] && {
 | 
				
			||||||
	[ -n "$txpower" ] && iwconfig $device txpower $txpower
 | 
								config_get rate "$vif" rate
 | 
				
			||||||
 | 
								[ -n "$rate" ] && iwconfig "$device" rate "${rate%%.*}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								config_get_bool hidden "$vif" hidden 0
 | 
				
			||||||
 | 
								iwpriv "$ifname" enh_sec "$hidden"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			[ -n "$maclist" ] && {
 | 
								[ -n "$maclist" ] && {
 | 
				
			||||||
				# flush MAC list
 | 
									# flush MAC list
 | 
				
			||||||
		iwpriv $device maccmd 3
 | 
									iwpriv "$device" maccmd 3
 | 
				
			||||||
				for mac in $maclist; do
 | 
									for mac in $maclist; do
 | 
				
			||||||
			iwpriv $device addmac $mac
 | 
										iwpriv "$device" addmac "$mac"
 | 
				
			||||||
				done
 | 
									done
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			case "$macpolicy" in
 | 
								case "$macpolicy" in
 | 
				
			||||||
		open)
 | 
					 | 
				
			||||||
			iwpriv $device maccmd 0
 | 
					 | 
				
			||||||
		;;
 | 
					 | 
				
			||||||
				allow)
 | 
									allow)
 | 
				
			||||||
			iwpriv $device maccmd 1
 | 
										iwpriv $device maccmd 2
 | 
				
			||||||
				;;
 | 
									;;
 | 
				
			||||||
				deny)
 | 
									deny)
 | 
				
			||||||
			iwpriv $device maccmd 2
 | 
										iwpriv $device maccmd 1
 | 
				
			||||||
				;;
 | 
									;;
 | 
				
			||||||
				*)
 | 
									*)
 | 
				
			||||||
					# default deny policy if mac list exists
 | 
										# default deny policy if mac list exists
 | 
				
			||||||
			[ -n "$maclist" ] && iwpriv $device maccmd 2
 | 
										[ -n "$maclist" ] && iwpriv $device maccmd 1
 | 
				
			||||||
				;;
 | 
									;;
 | 
				
			||||||
			esac
 | 
								esac
 | 
				
			||||||
			# kick all stations if we have policy explicitly set
 | 
								# kick all stations if we have policy explicitly set
 | 
				
			||||||
			[ -n "$macpolicy" ] && iwpriv $device maccmd 4
 | 
								[ -n "$macpolicy" ] && iwpriv $device maccmd 4
 | 
				
			||||||
	local net_cfg bridge
 | 
					 | 
				
			||||||
	net_cfg="$(find_net_config "$device")"
 | 
					 | 
				
			||||||
	[ -z "$net_cfg" ] || {
 | 
					 | 
				
			||||||
		bridge="$(bridge_interface "$net_cfg")"
 | 
					 | 
				
			||||||
		config_set "$device" bridge "$bridge"
 | 
					 | 
				
			||||||
		start_net "$device" "$net_cfg"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	set_wifi_up "$device" "$device"
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							config_get enc "$vif" encryption
 | 
				
			||||||
 | 
							case "$enc" in
 | 
				
			||||||
 | 
								WEP|wep)
 | 
				
			||||||
 | 
									for idx in 1 2 3 4; do
 | 
				
			||||||
 | 
										config_get key "$vif" "key${idx}"
 | 
				
			||||||
 | 
										iwconfig "$ifname" enc "[$idx]" "${key:-off}"
 | 
				
			||||||
 | 
									done
 | 
				
			||||||
 | 
									config_get key "$vif" key
 | 
				
			||||||
 | 
									key="${key:-1}"
 | 
				
			||||||
 | 
									case "$key" in
 | 
				
			||||||
 | 
										[1234]) iwconfig "$ifname" enc "[$key]";;
 | 
				
			||||||
 | 
										*) iwconfig "$ifname" enc "$key";;
 | 
				
			||||||
 | 
									esac
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
								psk*|wpa*)
 | 
				
			||||||
 | 
									start_hostapd=1
 | 
				
			||||||
 | 
									config_get key "$vif" key
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							local net_cfg bridge
 | 
				
			||||||
 | 
							net_cfg="$(find_net_config "$vif")"
 | 
				
			||||||
 | 
							[ -z "$net_cfg" ] || {
 | 
				
			||||||
 | 
								bridge="$(bridge_interface "$net_cfg")"
 | 
				
			||||||
 | 
								config_set "$vif" bridge "$bridge"
 | 
				
			||||||
 | 
								start_net "$ifname" "$net_cfg"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							set_wifi_up "$vif" "$ifname"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case "$mode" in
 | 
				
			||||||
 | 
								ap)
 | 
				
			||||||
 | 
									if [ -n "$start_hostapd" ] && eval "type hostapd_setup_vif" 2>/dev/null >/dev/null; then
 | 
				
			||||||
 | 
										hostapd_setup_vif "$vif" hostap || {
 | 
				
			||||||
 | 
											echo "enable_prism2($device): Failed to set up hostapd for interface $ifname" >&2
 | 
				
			||||||
 | 
											# make sure this wifi interface won't accidentally stay open without encryption
 | 
				
			||||||
 | 
											ifconfig "$ifname" down
 | 
				
			||||||
 | 
											continue
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									fi
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
								wds|sta)
 | 
				
			||||||
 | 
									if eval "type wpa_supplicant_setup_vif" 2>/dev/null >/dev/null; then
 | 
				
			||||||
 | 
										wpa_supplicant_setup_vif "$vif" hostap || {
 | 
				
			||||||
 | 
											echo "enable_prism2($device): Failed to set up wpa_supplicant for interface $ifname" >&2
 | 
				
			||||||
 | 
											ifconfig "$ifname" down
 | 
				
			||||||
 | 
											continue
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									fi
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
							first=0
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
detect_prism2() {
 | 
					detect_prism2() {
 | 
				
			||||||
	cd /proc/net/hostap
 | 
						cd /proc/net/hostap
 | 
				
			||||||
	[ -d wlan0 ] || return
 | 
						[ -d wlan* ] || return
 | 
				
			||||||
	for dev in wlan*; do
 | 
						for dev in $(ls -d wlan* 2>&-); do
 | 
				
			||||||
		config_get type "$dev" type
 | 
							config_get type "$dev" type
 | 
				
			||||||
		[ "$type" = prism2 ] && continue
 | 
							[ "$type" = prism2 ] && continue
 | 
				
			||||||
		cat <<EOF
 | 
							cat <<EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config wifi-device $dev
 | 
					config wifi-device $dev
 | 
				
			||||||
	option type	prism2
 | 
						option type	prism2
 | 
				
			||||||
#	option rate	11M
 | 
						option channel  6
 | 
				
			||||||
	option channel	5
 | 
					 | 
				
			||||||
	option txpower	127
 | 
					 | 
				
			||||||
	option mode     managed
 | 
					 | 
				
			||||||
	option ssid     OpenWrt
 | 
					 | 
				
			||||||
#	option macpolicy deny
 | 
					 | 
				
			||||||
#	option maclist	'12:34:56:78:90:12
 | 
					 | 
				
			||||||
#			 09:87:65:43:21:09'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# REMOVE THIS LINE TO ENABLE WIFI:
 | 
						# REMOVE THIS LINE TO ENABLE WIFI:
 | 
				
			||||||
	option disabled 1
 | 
						option disabled 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config wifi-iface
 | 
				
			||||||
 | 
						option device	$dev
 | 
				
			||||||
 | 
						option network	lan
 | 
				
			||||||
 | 
						option mode	ap
 | 
				
			||||||
 | 
						option ssid	OpenWrt
 | 
				
			||||||
 | 
						option encryption none
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,6 +57,7 @@ TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/madwifi $(if $(CONFIG_WPA_SUPPLICA
 | 
				
			|||||||
define Build/Configure
 | 
					define Build/Configure
 | 
				
			||||||
	cp $(CONFIG) $(PKG_BUILD_DIR)/wpa_supplicant/.config
 | 
						cp $(CONFIG) $(PKG_BUILD_DIR)/wpa_supplicant/.config
 | 
				
			||||||
	$(if $(CONFIG_PACKAGE_kmod-madwifi),,$(SED) 's,^CONFIG_DRIVER_MADWIFI,#CONFIG_DRIVER_MADWIFI,g' $(PKG_BUILD_DIR)/wpa_supplicant/.config)
 | 
						$(if $(CONFIG_PACKAGE_kmod-madwifi),,$(SED) 's,^CONFIG_DRIVER_MADWIFI,#CONFIG_DRIVER_MADWIFI,g' $(PKG_BUILD_DIR)/wpa_supplicant/.config)
 | 
				
			||||||
 | 
						$(if $(CONFIG_PACKAGE_kmod-hostap),,$(SED) 's,^CONFIG_DRIVER_HOSTAP,#CONFIG_DRIVER_HOSTAP,g' $(PKG_BUILD_DIR)/wpa_supplicant/.config)
 | 
				
			||||||
	$(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),$(SED) 's|^CONFIG_TLS.*|CONFIG_TLS=openssl|g' $(PKG_BUILD_DIR)/wpa_supplicant/.config)
 | 
						$(if $(CONFIG_WPA_SUPPLICANT_OPENSSL),$(SED) 's|^CONFIG_TLS.*|CONFIG_TLS=openssl|g' $(PKG_BUILD_DIR)/wpa_supplicant/.config)
 | 
				
			||||||
endef
 | 
					endef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Driver interface for Host AP driver
 | 
					# Driver interface for Host AP driver
 | 
				
			||||||
#CONFIG_DRIVER_HOSTAP=y
 | 
					CONFIG_DRIVER_HOSTAP=y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Driver interface for Agere driver
 | 
					# Driver interface for Agere driver
 | 
				
			||||||
#CONFIG_DRIVER_HERMES=y
 | 
					#CONFIG_DRIVER_HERMES=y
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user