babeld: Specify edge cases
[lede-routing/.git] / alfred / files / alfred.init
1 #!/bin/sh /etc/rc.common
2
3 #
4 # Copyright (C) 2013 OpenWrt.org
5 #
6 # This is free software, licensed under the GNU General Public License v2.
7 # See /LICENSE for more information.
8 #
9
10 START=99
11 STOP=99
12 alfred_args=""
13 vis_args=""
14 facters_dir="/etc/alfred"
15 pid_file_alfred="/var/run/alfred.pid"
16 pid_file_vis="/var/run/batadv-vis.pid"
17 enable=0
18 vis_enable=0
19 batmanif=""
20 SERVICE_DAEMONIZE=1
21 SERVICE_WRITE_PID=1
22
23 alfred_start()
24 {
25         local args=""
26         local section="$1"
27         local disabled interface mode
28
29         # check if section is disabled
30         config_get_bool disabled "$section" disabled 0
31         [ $disabled = 0 ] || return 1
32
33         args=""
34
35         config_get interface "$section" interface
36         append args "-i $interface"
37
38         config_get mode "$section" mode
39         [ "$mode" = "master" ] && append args "-m"
40
41         config_get batmanif "$section" batmanif
42         append args "-b $batmanif"
43
44         append alfred_args "$args"
45         enable=1
46
47         config_get_bool start_vis "$section" start_vis 0
48         if [ "$start_vis" = 1 ] && [ -x /usr/sbin/batadv-vis ]; then
49                 vis_enable=1
50                 append vis_args "-i $batmanif -s"
51         fi
52
53         config_get_bool run_facters "$section" run_facters 0
54
55         return 0
56 }
57
58 start()
59 {
60         config_load "alfred"
61         config_foreach alfred_start alfred
62
63         if [ "$enable" = "0" ]; then
64                 exit 0
65         fi
66
67         mesh_dir="/sys/class/net/$batmanif/mesh/"
68         if ! [ -d "$mesh_dir" ] ; then
69                 timeout=30
70                 echo "${initscript}: waiting $timeout secs for $batmanif interface..."
71                 for i in $(seq $timeout); do
72                         sleep 1
73                         [ -d "$mesh_dir" ] && break
74                         if [ $i == $timeout ] ; then
75                                 echo "${initscript}: $batmanif not detected, alfred not starting."
76                                 exit 1
77                         fi
78                 done
79         fi
80
81         echo "${initscript}: starting alfred"
82         SERVICE_PID_FILE="$pid_file_alfred"
83         service_start /usr/sbin/alfred ${alfred_args}
84
85         if [ "$vis_enable" = "1" ]; then
86                 echo "${initscript}: starting batadv-vis"
87                 SERVICE_PID_FILE="$pid_file_vis"
88                 service_start /usr/sbin/batadv-vis ${vis_args}
89         fi
90
91         if [ "$run_facters" = "1" ]; then
92                 ( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
93                 if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
94                         echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
95                         /etc/init.d/cron enable
96                         /etc/init.d/cron restart
97                 fi
98         fi
99 }
100
101 stop()
102 {
103         SERVICE_PID_FILE="$pid_file_alfred"
104         service_stop /usr/sbin/alfred
105         SERVICE_PID_FILE="$pid_file_vis"
106         [ -x /usr/sbin/batadv-vis ] && service_stop /usr/sbin/batadv-vis
107         sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
108         /etc/init.d/cron restart
109 }