tunneldigger-broker: add broker for tunneldigger
[feed/packages.git] / net / tunneldigger-broker / files / tunneldigger-broker.init
1 #!/bin/sh /etc/rc.common
2
3 . $IPKG_INSTROOT/lib/functions/network.sh
4
5 START=90
6 USE_PROCD=1
7 NAME=tunneldigger-broker
8
9 PIDPATH=/var/run
10 CONFIGFILE=/var/etc/tunneldigger-broker.cfg
11 HOOKPATH=/usr/lib/tunneldigger-broker/hooks
12
13 missing() {
14 echo "Not starting tunneldigger-broker - missing $1" >&2
15 exit 1
16 }
17
18 cfg_append() {
19 local value="$1"
20 echo "$value" >> $CONFIGFILE
21 }
22
23 cfg_append_section() {
24 local name="$1"
25 cfg_append "[${name}]"
26 }
27
28 cfg_append_kv() {
29 local key="$1"
30 local value="$2"
31 cfg_append "${key}=${value}"
32 }
33
34 cfg_append_option() {
35 local cfg="$1"
36 local option="$2"
37 local key="$3"
38 config_get value "$cfg" "${option}"
39 [ -z "${value}" ] && missing ${option}
40 cfg_append_kv "${key}" "${value}"
41 }
42
43 parse_broker() {
44 local section="$1"
45 cfg_append_section broker
46 config_get interface "$section" interface
47
48 [ ! -z "${interface}" ] && {
49 # Resolve logical interface name.
50 unset _interface address
51 network_get_device _interface "${interface}" || _interface="${interface}"
52 cfg_append_kv interface "${_interface}"
53 network_get_ipaddr address "${interface}"
54 cfg_append_kv address "${address}"
55 }
56
57 OPTIONS="max_cookies max_tunnels port_base tunnel_id_base tunnel_timeout namespace connection_rate_limit pmtu"
58 for option in ${OPTIONS}; do
59 cfg_append_option "$section" "${option}" "${option}"
60 done
61
62 config_get port "$section" port
63 cfg_append_kv "port" "${port// /,}"
64
65 cfg_append_section hooks
66 cfg_append_kv "session.up" "${HOOKPATH}/setup"
67 cfg_append_kv "session.pre-down" "${HOOKPATH}/teardown"
68 cfg_append_kv "session.mtu-changed" "${HOOKPATH}/mtu-changed"
69 }
70
71 parse_log() {
72 local section="$1"
73 cfg_append_section log
74
75 OPTIONS="filename verbosity"
76 for option in ${OPTIONS}; do
77 cfg_append_option "$section" "${option}" "${option}"
78 done
79
80 config_get_bool log_ip_addresses "$section" log_ip_addresses 1
81 if [ "${log_ip_addresses}" -eq 1 ]; then
82 cfg_append_kv "log_ip_addresses" "true"
83 else
84 cfg_append_kv "log_ip_addresses" "false"
85 fi
86 }
87
88 start_service() {
89 # Prepare the configuration file from UCI settings.
90 rm -f ${CONFIGFILE}
91 config_load tunneldigger-broker
92 config_foreach parse_broker broker
93 config_foreach parse_log log
94
95 # Start the service using procd.
96 procd_open_instance
97 procd_set_param command "/usr/bin/python"
98 procd_append_param command -m tunneldigger_broker.main
99 procd_append_param command "${CONFIGFILE}"
100 procd_set_param respawn
101 procd_set_param stdout 1
102 procd_set_param stderr 1
103 procd_close_instance
104 }