d73c622097ce842dd10a631be1dae14500ffbe0a
[project/usteer.git] / openwrt / usteer / files / etc / init.d / usteer
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2013 OpenWrt.org
3
4 START=50
5 USE_PROCD=1
6
7 NAME=usteer
8 PROG=/sbin/usteer
9
10 . /lib/functions/network.sh
11 . /usr/share/libubox/jshn.sh
12 . /lib/functions.sh
13
14 load_ifaces() {
15 local network="$(uci get usteer.@usteer[-1].network)"
16 for n in $network; do
17 local device
18 json_load "$(ifstatus $n)"
19 json_get_var device l3_device
20 echo -n "$device "
21 done
22 }
23
24 uci_option_to_json_bool() {
25 local cfg="$1"
26 local option="$2"
27 local val
28
29 config_get_bool val "$cfg" $option
30 [ -n "$val" ] && json_add_boolean $option $val
31 }
32
33 uci_option_to_json_string() {
34 local cfg="$1"
35 local option="$2"
36 local val
37
38 config_get val "$cfg" "$option"
39 [ -n "$val" ] && json_add_string $option "$val"
40 }
41
42 uci_option_to_json() {
43 local cfg="$1"
44 local option="$2"
45 local val
46
47 config_get val "$cfg" $option
48 [ -n "$val" ] && json_add_int $option $val
49 }
50
51 uci_usteer() {
52 local cfg="$1"
53
54 uci_option_to_json_bool "$cfg" syslog
55 uci_option_to_json_bool "$cfg" load_kick_enabled
56 uci_option_to_json_string "$cfg" node_up_script
57
58 for opt in \
59 debug_level \
60 sta_block_timeout local_sta_timeout local_sta_update \
61 max_retry_band seen_policy_timeout \
62 load_balancing_threshold band_steering_threshold \
63 remote_update_interval \
64 min_connect_snr min_snr signal_diff_threshold \
65 initial_connect_delay \
66 roam_kick_delay roam_scan_tries \
67 roam_scan_snr roam_scan_interval \
68 roam_trigger_snr roam_trigger_interval \
69 load_kick_threshold load_kick_delay load_kick_min_clients \
70 load_kick_reason_code
71 do
72 uci_option_to_json "$cfg" "$opt"
73 done
74 }
75
76
77 load_config() {
78 [ "$ENABLED" -gt 0 ] || return
79
80 ubus -t 10 wait_for usteer
81
82 json_init
83 json_add_array interfaces
84 for i in $(load_ifaces); do
85 json_add_string "" "$i"
86 done
87 json_close_array
88
89 config_load usteer
90 config_foreach uci_usteer usteer
91
92 ubus call usteer set_config "$(json_dump)"
93 }
94
95 reload_service() {
96 start
97 load_config
98 }
99
100 service_started() {
101 load_config
102 }
103
104 service_triggers() {
105 procd_add_reload_trigger usteer
106 procd_add_raw_trigger "interface.*" 2000 /etc/init.d/usteer reload
107 }
108
109 start_service()
110 {
111 local network="$(uci -q get usteer.@usteer[-1].network)"
112 ENABLED="$(uci -q get usteer.@usteer[-1].enabled)"
113 ENABLED="${ENABLED:-1}"
114
115 [ "$ENABLED" -gt 0 ] || return
116
117 procd_open_instance
118 procd_set_param command "$PROG"
119 procd_close_instance
120 }