summaryrefslogtreecommitdiffstats
path: root/package/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds
blob: 0a563c2dbd3c3109e4bfdb950d01c8b6113f7ed1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
include /lib/wifi

setup_broadcom_wds() {
	local iface="$1"
	local remote="$(wlc ifname "$iface" wdsmac)"

	[ -z "$remote" ] && return
	
	config_cb() {
		[ -z "$CONFIG_SECTION" ] && return
	
		config_get type "$CONFIG_SECTION" TYPE
		[ "$type" = "wifi-iface" ] || return
		
		config_get network "$CONFIG_SECTION" network
		[ -z "$network" ] && return
		
		config_get addr "$CONFIG_SECTION" bssid
		addr=$(echo "$addr" | tr 'A-F' 'a-f')
		[ "$addr" = "$remote" ] && {
			local cfg="$CONFIG_SECTION"
			
			include /lib/network
			scan_interfaces

			for network in $network; do
				setup_interface "$iface" "$network"
			done
			
			config_get encryption "$cfg" encryption
			config_get key "$cfg" key
			config_get ssid "$cfg" ssid
		
			[ "$encryption" != "none" ] && {
				sleep 5
				case "$encryption" in
					psk|PSK)
						nas4not "$network" "$iface" up auto tkip psk "$key" "$ssid"
						;;
					psk2|PSK2)
						nas4not "$network" "$iface" up auto aes psk "$key" "$ssid"
						;;
					psk+psk2|psk2+psk|PSK+PSK2|PSK2+PSK)
						nas4not "$network" "$iface" up auto aes+tkip psk "$key" "$ssid"
						;;
					*)
						nas4not lan "$iface" up auto aes "$encryption" "$key" "$ssid"
						;;
					esac
			}
		}
	}

	config_load wireless
}

case "$ACTION" in
	add|register)
		[ "${INTERFACE%%0.*}" = wds ] && setup_broadcom_wds "$INTERFACE"
	;;
esac