guest_network="guest"
traffic_separation_enabled=0
traffic_separation_active=0
WLAN_INCLUDED_IFACES=""
WLAN_INCLUDED_DEVICES=""
WLAN_EXCLUDE=

__whc_get_wlan_ifaces() {
	local config="$1"
	local ssid_to_match="$2"
	local network_to_match="$3"
	local device iface disabled mode ssid network radio_disabled

	config_get device "$config" device
	config_get iface "$config" ifname
	config_get disabled "$config" disabled '0'
	config_get mode "$config" mode
	config_get ssid "$config" ssid
	config_get network "$config" network
	config_get radio_disabled "$device" disabled '0'

	if [ "$traffic_separation_enabled" -gt 0 ] && \
		[ "$traffic_separation_active" -gt 0 ] && \
                [ -n "$network_to_match" -a "$network" != "$network_to_match" -a "$network" != "backhaul" ]; then
			return
	fi

	driver=$(lsmod | cut -d' ' -f 1 | grep ath10k_core)
	#TODO: Read the interface name from config rather than assuming single interface per radio.
	if [ "$driver" == "ath10k_core" -a "$radio_disabled" -eq 0 ]; then
		if [ "$device" == "radio0" ]; then
			iface="wlan0"
		elif [ "$device" == "radio1" ]; then
			iface="wlan1"
		else
			iface="wlan2"
		fi
	fi

	if [ -n "$iface" -a "$disabled" -eq 0 ]; then
		if [ "$mode" == "ap" -o "$mode" == "wrap" ]; then
			if [ -z "$ssid_to_match" ]; then
				WLAN_INCLUDED_DEVICES="${WLAN_INCLUDED_DEVICES}${WLAN_INCLUDED_DEVICES:+","}${device}:${iface}"
			else
				if [ ! -n "$ssid_to_match" -o "$ssid" == "$ssid_to_match" ]; then
					WLAN_INCLUDED_DEVICES="${WLAN_INCLUDED_DEVICES}${WLAN_INCLUDED_DEVICES:+","}${device}:${iface}"
					WLAN_INCLUDED_IFACES="${WLAN_INCLUDED_IFACES}${WLAN_INCLUDED_IFACES:+","}${iface}"
					return
				fi
			fi
		fi
	fi
}
__whc_get_wlan_excluded() {
	local config="$1"
	local ifaces_to_match="$2"
	config_get device "$config" device
	config_get iface "$config" ifname
	config_get disabled "$config" disabled '0'
	config_get mode "$config" mode
	config_get ssid "$config" ssid
	config_get network "$config" network

	local iface_array=$(echo $ifaces_to_match | tr ',' "\n")
	if [ -n "$iface" -a "$disabled" -eq 0 ]; then
		if [ "$mode" == "ap" -o "$mode" == "wrap" ]; then
			for i in $iface_array
			do
				if [ ! -n "$i" -o "$iface" == "$i" ]; then
					return
				fi
			done
				WLAN_EXCLUDE="${WLAN_EXCLUDE}${WLAN_EXCLUDE:+","}${device}:${iface}"
		fi
	fi
}


# whc_get_wlan_ifaces()
# input:  $1 The desired SSID. If it is null string, then get all WLAN
#	  $4 The disired network name. Only the interfaces with matching network name included
# output: $2 List of all WLAN interfaces matching the SSID provided and the network name
#            if no matching ssid, only the network name will be checked
#	  $3 the matching SSID returned back to the caller
whc_get_wlan_ifaces() {
	config_load 'repacd'
	config_get guest_network repacd NetworkGuest 'guest'
	config_get traffic_separation_enabled repacd TrafficSeparationEnabled '0'
	config_get traffic_separation_active repacd TrafficSeparationActive '0'

	config_load wireless
	config_foreach __whc_get_wlan_ifaces wifi-iface "$1" "$4"

	eval "$2='${WLAN_INCLUDED_DEVICES}'"
	eval "$3='$1'"
}

# return the EXCLUDE interface list. This should be called after the interface list is created
whc_get_wlan_ifaces_excl()
{
	config_load wireless
	config_foreach __whc_get_wlan_excluded wifi-iface $WLAN_INCLUDED_IFACES
	eval "$1='${WLAN_EXCLUDE}'"
}

# clean the global variables. This should be called before create the new lists
whc_init_wlan_interface_list()
{
	WLAN_EXCLUDE=""
	WLAN_INCLUDED_DEVICES=""
}
