alfred: wait for batmanif and interface, ignore batmanif if it is set to 'none'
[feed/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 SERVICE_DAEMONIZE=1
20 SERVICE_WRITE_PID=1
21
22 wait_for_dir()
23 {
24 local ifce="$1" dir="$2"
25
26 if ! [ -d "$dir" ] ; then
27 timeout=30
28 echo "${initscript}: waiting $timeout secs for $ifce interface..."
29 for i in $(seq $timeout); do
30 sleep 1
31 [ -d "$dir" ] && break
32 if [ $i == $timeout ] ; then
33 echo "${initscript}: $ifce not detected, alfred not starting."
34 exit 1
35 fi
36 done
37 fi
38 }
39
40 alfred_start()
41 {
42 local args=""
43 local section="$1"
44 local disabled interface mode
45
46 # check if section is disabled
47 config_get_bool disabled "$section" disabled 0
48 [ $disabled = 0 ] || return 1
49
50 args=""
51
52 config_get interface "$section" interface
53 append args "-i $interface"
54
55 config_get mode "$section" mode
56 [ "$mode" = "master" ] && append args "-m"
57
58 config_get batmanif "$section" batmanif
59 append args "-b $batmanif"
60
61 if [ "$batmanif" != "none" ]; then
62 wait_for_dir "$batmanif" "/sys/class/net/$batmanif/mesh"
63 fi
64
65 wait_for_dir "$interface" "/sys/class/net/$interface/"
66
67 append alfred_args "$args"
68 enable=1
69
70 config_get_bool start_vis "$section" start_vis 0
71 if [ "$start_vis" = 1 ] && [ -x /usr/sbin/batadv-vis ]; then
72 vis_enable=1
73 append vis_args "-i $batmanif -s"
74 fi
75
76 config_get_bool run_facters "$section" run_facters 0
77
78 return 0
79 }
80
81 start()
82 {
83 config_load "alfred"
84 config_foreach alfred_start alfred
85
86 if [ "$enable" = "0" ]; then
87 exit 0
88 fi
89
90 echo "${initscript}: starting alfred"
91 SERVICE_PID_FILE="$pid_file_alfred"
92 service_start /usr/sbin/alfred ${alfred_args}
93
94 if [ "$vis_enable" = "1" ]; then
95 echo "${initscript}: starting batadv-vis"
96 SERVICE_PID_FILE="$pid_file_vis"
97 service_start /usr/sbin/batadv-vis ${vis_args}
98 fi
99
100 if [ "$run_facters" = "1" ]; then
101 ( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
102 if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
103 echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
104 /etc/init.d/cron enable
105 /etc/init.d/cron restart
106 fi
107 fi
108 }
109
110 stop()
111 {
112 SERVICE_PID_FILE="$pid_file_alfred"
113 service_stop /usr/sbin/alfred
114 SERVICE_PID_FILE="$pid_file_vis"
115 [ -x /usr/sbin/batadv-vis ] && service_stop /usr/sbin/batadv-vis
116 sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
117 /etc/init.d/cron restart
118 }