blob: 89e33ab55a0bd301fcd6ae490a5e93b7f92c2bd2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/sh /etc/rc.common
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
START=99
USE_PROCD=1
alfred_args=""
vis_args=""
facters_dir="/etc/alfred"
enable=0
vis_enable=0
wait_for_dir() {
local ifce="$1" dir="$2"
if ! [ -d "$dir" ] ; then
timeout=30
echo "waiting $timeout secs for $ifce interface..."
for i in $(seq $timeout); do
sleep 1
[ -d "$dir" ] && break
if [ $i = $timeout ] ; then
echo "$ifce not detected, alfred not starting."
exit 1
fi
done
fi
}
wait_for_ll_address() {
local iface="$1"
local timeout=30
echo "waiting $timeout secs for $iface address..."
for i in $(seq $timeout); do
# We look for
# - the link-local address (starts with fe80)
# - without tentative flag (bit 0x40 in the flags field; the first char of the fifth field is evaluated)
# - on interface $iface
if awk '
BEGIN { RET=1 }
$1 ~ /^fe80/ && $5 ~ /^[012389ab]/ && $6 == "'"$iface"'" { RET=0 }
END { exit RET }
' /proc/net/if_inet6; then
return
fi
sleep 1
done
echo "$iface address not detected, alfred not starting."
exit 1
}
alfred_start() {
local args=""
local section="$1"
local disabled interface mode
# check if section is disabled
config_get_bool disabled "$section" disabled 0
[ $disabled = 0 ] || return 1
args=""
config_get interface "$section" interface
append args "-i $interface"
config_get mode "$section" mode
[ "$mode" = "master" ] && append args "-m"
config_get batmanif "$section" batmanif
append args "-b $batmanif"
if [ "$batmanif" != "none" ]; then
wait_for_dir "$batmanif" "/sys/class/net/$batmanif/mesh"
fi
wait_for_ll_address "$interface"
append alfred_args "$args"
enable=1
config_get_bool start_vis "$section" start_vis 0
if [ "$start_vis" = 1 ] && [ -x /usr/sbin/batadv-vis ]; then
vis_enable=1
append vis_args "-i $batmanif -s"
fi
config_get_bool run_facters "$section" run_facters 0
return 0
}
start_service() {
config_load "alfred"
config_foreach alfred_start alfred
[ "$enable" = "0" ] && exit 0
procd_open_instance "alfred"
procd_set_param command /usr/sbin/alfred
procd_append_param command ${alfred_args}
procd_close_instance
[ "$vis_enable" = "1" ] && {
procd_open_instance "batadv-vis"
procd_set_param command /usr/sbin/batadv-vis
procd_append_param command ${vis_args}
procd_close_instance
}
[ "$run_facters" = "1" ] && {
( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
/etc/init.d/cron enable
/etc/init.d/cron restart
fi
}
}
service_triggers() {
procd_add_reload_trigger "alfred"
}
stop_service() {
[ -e /etc/crontabs/root ] && {
sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
/etc/init.d/cron restart
}
}
|