Merge pull request #1481 from jow-/opennhrp-musl-compat
[feed/packages.git] / net / shadowsocks-libev / files / shadowsocks-libev.init
1 #!/bin/sh /etc/rc.common
2
3 START=90
4 STOP=15
5
6 SERVICE_USE_PID=1
7 SERVICE_WRITE_PID=1
8 SERVICE_DAEMONIZE=1
9 EXTRA_COMMANDS="rules"
10 CONFIG_FILE=/var/etc/shadowsocks-libev.json
11
12 get_config() {
13 config_get_bool enable $1 enable
14 config_get server $1 server
15 config_get server_port $1 server_port
16 config_get local_port $1 local_port
17 config_get password $1 password
18 config_get timeout $1 timeout
19 config_get encrypt_method $1 encrypt_method
20 config_get ignore_list $1 ignore_list
21 config_get udp_relay $1 udp_relay
22 config_get_bool tunnel_enable $1 tunnel_enable
23 config_get tunnel_port $1 tunnel_port
24 config_get tunnel_forward $1 tunnel_forward
25 config_get lan_ac_mode $1 lan_ac_mode
26 config_get lan_ac_ip $1 lan_ac_ip
27 config_get wan_bp_ip $1 wan_bp_ip
28 config_get wan_fw_ip $1 wan_fw_ip
29 config_get ipt_ext $1 ipt_ext
30 : ${tunnel_port:=5300}
31 : ${tunnel_forward:=8.8.4.4:53}
32 }
33
34 start_rules() {
35 local ac_args
36
37 if [ -n "$lan_ac_ip" ]; then
38 case $lan_ac_mode in
39 1) ac_args="w$lan_ac_ip"
40 ;;
41 2) ac_args="b$lan_ac_ip"
42 ;;
43 esac
44 fi
45 /usr/bin/ss-rules \
46 -s "$server" \
47 -l "$local_port" \
48 -i "$ignore_list" \
49 -a "$ac_args" \
50 -b "$wan_bp_ip" \
51 -w "$wan_fw_ip" \
52 -e "$ipt_ext" \
53 -o $udp
54 return $?
55 }
56
57 start_redir() {
58 service_start /usr/bin/ss-redir \
59 -c "$CONFIG_FILE" $udp
60 return $?
61 }
62
63 start_tunnel() {
64 service_start /usr/bin/ss-tunnel \
65 -c "$CONFIG_FILE" \
66 -l "$tunnel_port" \
67 -L "$tunnel_forward" \
68 -u
69 return $?
70 }
71
72 rules() {
73 config_load shadowsocks-libev
74 config_foreach get_config shadowsocks-libev
75 [ "$enable" = 1 ] || exit 0
76 [ "$udp_relay" = 1 ] && udp="-u"
77 mkdir -p $(dirname $CONFIG_FILE)
78
79 : ${server:?}
80 : ${server_port:?}
81 : ${local_port:?}
82 : ${password:?}
83 : ${encrypt_method:?}
84 cat <<-EOF >$CONFIG_FILE
85 {
86 "server": "$server",
87 "server_port": $server_port,
88 "local_address": "0.0.0.0",
89 "local_port": $local_port,
90 "password": "$password",
91 "timeout": $timeout,
92 "method": "$encrypt_method"
93 }
94 EOF
95 start_rules
96 }
97
98 boot() {
99 until iptables-save -t nat | grep -q "^:zone_lan_prerouting"; do
100 sleep 1
101 done
102 start
103 }
104
105 start() {
106 rules && start_redir
107 [ "$tunnel_enable" = 1 ] && start_tunnel
108 }
109
110 stop() {
111 /usr/bin/ss-rules -f
112 service_stop /usr/bin/ss-redir
113 service_stop /usr/bin/ss-tunnel
114 rm -f $CONFIG_FILE
115 }