hostapd: add support for wifi-station and wifi-vlan sections
This patch adds support for 2 new uci sections.
config wifi-vlan
	# iface is optional. if it is not defined the vlan will apply
	# to all interfaces
        option iface	default_radio0
        option name	guest
        option vid	100
        option network	guest
config wifi-station
	# iface is optional. if it is not defined the station will apply
	# to all interfaces
        option iface	default_radio0
        # mac is optional. if it is not defined it will be a catch all
	# for any sta using this key
	option mac	'00:11:22:33:44:55'
        # vid is optional. if it is not defined, the sta will be part of
	# the primary iface.
	option vid	100
        option key	testtest
With this patch applied it is possible to use multiple PSKs on a single BSS.
Signed-off-by: John Crispin <john@phrozen.org>
			
			
This commit is contained in:
		| @@ -506,7 +506,7 @@ mac80211_iw_interface_add() { | |||||||
| mac80211_prepare_vif() { | mac80211_prepare_vif() { | ||||||
| 	json_select config | 	json_select config | ||||||
|  |  | ||||||
| 	json_get_vars ifname mode ssid wds powersave macaddr enable | 	json_get_vars ifname mode ssid wds powersave macaddr enable wpa_psk_file vlan_file | ||||||
|  |  | ||||||
| 	[ -n "$ifname" ] || ifname="wlan${phy#phy}${if_idx:+-$if_idx}" | 	[ -n "$ifname" ] || ifname="wlan${phy#phy}${if_idx:+-$if_idx}" | ||||||
| 	if_idx=$((${if_idx:-0} + 1)) | 	if_idx=$((${if_idx:-0} + 1)) | ||||||
| @@ -524,6 +524,12 @@ mac80211_prepare_vif() { | |||||||
| 	json_add_object data | 	json_add_object data | ||||||
| 	json_add_string ifname "$ifname" | 	json_add_string ifname "$ifname" | ||||||
| 	json_close_object | 	json_close_object | ||||||
|  |  | ||||||
|  | 	[ "$mode" == "ap" ] && { | ||||||
|  | 		[ -z "$wpa_psk_file" ] && hostapd_set_psk "$ifname" | ||||||
|  | 		[ -z "$vlan_file" ] && hostapd_set_vlan "$ifname" | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	json_select config | 	json_select config | ||||||
|  |  | ||||||
| 	# It is far easier to delete and create the desired interface | 	# It is far easier to delete and create the desired interface | ||||||
|   | |||||||
| @@ -262,6 +262,39 @@ hostapd_common_add_bss_config() { | |||||||
| 	config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string' | 	config_add_string 'owe_transition_bssid:macaddr' 'owe_transition_ssid:string' | ||||||
| } | } | ||||||
|  |  | ||||||
|  | hostapd_set_vlan_file() { | ||||||
|  | 	local ifname="$1" | ||||||
|  | 	local vlan="$2" | ||||||
|  | 	json_get_vars name vid | ||||||
|  | 	echo "${vid} ${ifname}-${name}" >> /var/run/hostapd-${ifname}.vlan | ||||||
|  | 	wireless_add_vlan "${vlan}" "${ifname}-${name}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | hostapd_set_vlan() { | ||||||
|  | 	local ifname="$1" | ||||||
|  |  | ||||||
|  | 	rm /var/run/hostapd-${ifname}.vlan | ||||||
|  | 	for_each_vlan hostapd_set_vlan_file ${ifname} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | hostapd_set_psk_file() { | ||||||
|  | 	local ifname="$1" | ||||||
|  | 	local vlan="$2" | ||||||
|  | 	local vlan_id="" | ||||||
|  |  | ||||||
|  | 	json_get_vars mac vid key | ||||||
|  | 	set_default isolate "00:00:00:00:00:00" | ||||||
|  | 	[ -n "$vid" ] && vlan_id="vlanid=$vid " | ||||||
|  | 	echo "${vlan_id} ${mac} ${key}" >> /var/run/hostapd-${ifname}.psk | ||||||
|  | } | ||||||
|  |  | ||||||
|  | hostapd_set_psk() { | ||||||
|  | 	local ifname="$1" | ||||||
|  |  | ||||||
|  | 	rm /var/run/hostapd-${ifname}.psk | ||||||
|  | 	for_each_station hostapd_set_psk_file ${ifname} | ||||||
|  | } | ||||||
|  |  | ||||||
| hostapd_set_bss_options() { | hostapd_set_bss_options() { | ||||||
| 	local var="$1" | 	local var="$1" | ||||||
| 	local phy="$2" | 	local phy="$2" | ||||||
| @@ -377,12 +410,15 @@ hostapd_set_bss_options() { | |||||||
| 			else | 			else | ||||||
| 				append bss_conf "wpa_passphrase=$key" "$N" | 				append bss_conf "wpa_passphrase=$key" "$N" | ||||||
| 			fi | 			fi | ||||||
|  | 			[ -z "$wpa_psk_file" ] && set_default wpa_psk_file /var/run/hostapd-$ifname.psk | ||||||
| 			[ -n "$wpa_psk_file" ] && { | 			[ -n "$wpa_psk_file" ] && { | ||||||
| 				[ -e "$wpa_psk_file" ] || touch "$wpa_psk_file" | 				[ -e "$wpa_psk_file" ] || touch "$wpa_psk_file" | ||||||
| 				append bss_conf "wpa_psk_file=$wpa_psk_file" "$N" | 				append bss_conf "wpa_psk_file=$wpa_psk_file" "$N" | ||||||
| 			} | 			} | ||||||
| 			[ "$eapol_version" -ge "1" -a "$eapol_version" -le "2" ] && append bss_conf "eapol_version=$eapol_version" "$N" | 			[ "$eapol_version" -ge "1" -a "$eapol_version" -le "2" ] && append bss_conf "eapol_version=$eapol_version" "$N" | ||||||
|  |  | ||||||
|  | 			set_default dynamic_vlan 0 | ||||||
|  | 			vlan_possible=1 | ||||||
| 			wps_possible=1 | 			wps_possible=1 | ||||||
| 		;; | 		;; | ||||||
| 		eap|eap192|eap-eap192) | 		eap|eap192|eap-eap192) | ||||||
| @@ -639,6 +675,7 @@ hostapd_set_bss_options() { | |||||||
| 	[ -n "$vlan_possible" -a -n "$dynamic_vlan" ] && { | 	[ -n "$vlan_possible" -a -n "$dynamic_vlan" ] && { | ||||||
| 		json_get_vars vlan_naming vlan_tagged_interface vlan_bridge vlan_file | 		json_get_vars vlan_naming vlan_tagged_interface vlan_bridge vlan_file | ||||||
| 		set_default vlan_naming 1 | 		set_default vlan_naming 1 | ||||||
|  | 		[ -z "$vlan_file" ] && set_default vlan_file /var/run/hostapd-$ifname.vlan | ||||||
| 		append bss_conf "dynamic_vlan=$dynamic_vlan" "$N" | 		append bss_conf "dynamic_vlan=$dynamic_vlan" "$N" | ||||||
| 		append bss_conf "vlan_naming=$vlan_naming" "$N" | 		append bss_conf "vlan_naming=$vlan_naming" "$N" | ||||||
| 		[ -n "$vlan_bridge" ] && \ | 		[ -n "$vlan_bridge" ] && \ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 John Crispin
					John Crispin