307fbf2baf333e8fd58e24dbea84dd0c356b68e9
[lede.git] / package / relayd / files / relay.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (c) 2011-2012 OpenWrt.org
3 START=80
4
5 resolve_ifname() {
6         grep -qs "^ *$1:" /proc/net/dev && {
7                 append args "-I $1"
8                 append ifaces "$1"
9         }
10 }
11
12 resolve_network() {
13         local ifn
14         fixup_interface "$1"
15         config_get ifn "$1" ifname
16         [ -z "$ifn" ] && return 1
17         resolve_ifname "$ifn"
18         return 0
19 }
20
21 start_relay() {
22         local cfg="$1"
23
24         local args=""
25         local ifaces=""
26
27         config_get proto "$cfg" proto
28         [[ "$proto" == relay ]] || return 0
29
30         SERVICE_DAEMONIZE=1
31         SERVICE_WRITE_PID=1
32         SERVICE_PID_FILE="/var/run/relay-$cfg.pid"
33         [ -f "$SERVICE_PID_FILE" ] && {
34                 if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then
35                         return 0
36                 else
37                         rm -f "$SERVICE_PID_FILE"
38                 fi
39         }
40
41         local net networks
42         config_get networks "$cfg" network
43         for net in $networks; do
44                 resolve_network "$net" || {
45                         return 1
46                 }
47         done
48
49         local ifn ifnames
50         config_get ifnames "$cfg" ifname
51         for ifn in $ifnames; do
52                 resolve_ifname "$ifn"
53         done
54
55         local ipaddr
56         config_get ipaddr "$cfg" ipaddr
57         [ -n "$ipaddr" ] && append args "-L $ipaddr"
58
59         local gateway
60         config_get gateway "$cfg" gateway
61         [ -n "$gateway" ] && append args "-G $gateway"
62
63         local expiry # = 30
64         config_get expiry "$cfg" expiry
65         [ -n "$expiry" ] && append args "-t $expiry"
66
67         local retry # = 5
68         config_get retry "$cfg" retry
69         [ -n "$retry" ] && append args "-p $retry"
70
71         local table # = 16800
72         config_get table "$cfg" table
73         [ -n "$table" ] && append args "-T $table"
74
75         local fwd_bcast # = 1
76         config_get_bool fwd_bcast "$cfg" forward_bcast 1
77         [ $fwd_bcast -eq 1 ] && append args "-B"
78
79         local fwd_dhcp # = 1
80         config_get_bool fwd_dhcp "$cfg" forward_dhcp 1
81         [ $fwd_dhcp -eq 1 ] && append args "-D"
82
83         service_start /usr/sbin/relayd $args
84 }
85
86 stop() {
87         for pid in /var/run/relay-*.pid; do
88                 SERVICE_PID_FILE="$pid"
89                 service_stop /usr/sbin/relayd
90                 rm -f "$SERVICE_PID_FILE"
91         done
92 }
93
94 start() {
95         include /lib/network
96         config_load network
97         config_foreach start_relay interface
98 }