Created
August 9, 2015 15:58
-
-
Save neocturne/54ee1c30c1546be35fee to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh /etc/rc.common | |
# | |
# Copyright (C) 2013 OpenWrt.org | |
# | |
# This is free software, licensed under the GNU General Public License v2. | |
# See /LICENSE for more information. | |
# | |
START=99 | |
STOP=99 | |
alfred_args="" | |
vis_args="" | |
facters_dir="/etc/alfred" | |
pid_file_alfred="/var/run/alfred.pid" | |
pid_file_vis="/var/run/batadv-vis.pid" | |
enable=0 | |
vis_enable=0 | |
SERVICE_DAEMONIZE=1 | |
SERVICE_WRITE_PID=1 | |
wait_for_dir() | |
{ | |
local ifce="$1" dir="$2" | |
if ! [ -d "$dir" ] ; then | |
timeout=30 | |
echo "${initscript}: waiting $timeout secs for $ifce interface..." | |
for i in $(seq $timeout); do | |
sleep 1 | |
[ -d "$dir" ] && break | |
if [ $i == $timeout ] ; then | |
echo "${initscript}: $ifce not detected, alfred not starting." | |
exit 1 | |
fi | |
done | |
fi | |
} | |
wait_for_ll_address() | |
{ | |
local iface="$1" | |
local timeout | |
timeout=30 | |
echo "${initscript}: 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 flags field begins 38 columns after the fe80 prefix | |
# - on interface $iface | |
if awk ' | |
BEGIN { RET=1 } | |
/^fe80.{37} [012389ab]/ { if ($6 == "'"$iface"'") RET=0 } | |
END { exit RET } | |
' /proc/net/if_inet6; then | |
return | |
fi | |
sleep 1 | |
done | |
echo "${initscript}: $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() | |
{ | |
config_load "alfred" | |
config_foreach alfred_start alfred | |
if [ "$enable" = "0" ]; then | |
exit 0 | |
fi | |
echo "${initscript}: starting alfred" | |
SERVICE_PID_FILE="$pid_file_alfred" | |
service_start /usr/sbin/alfred ${alfred_args} | |
if [ "$vis_enable" = "1" ]; then | |
echo "${initscript}: starting batadv-vis" | |
SERVICE_PID_FILE="$pid_file_vis" | |
service_start /usr/sbin/batadv-vis ${vis_args} | |
fi | |
if [ "$run_facters" = "1" ]; then | |
( 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 | |
fi | |
} | |
stop() | |
{ | |
SERVICE_PID_FILE="$pid_file_alfred" | |
service_stop /usr/sbin/alfred | |
SERVICE_PID_FILE="$pid_file_vis" | |
[ -x /usr/sbin/batadv-vis ] && service_stop /usr/sbin/batadv-vis | |
sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root | |
/etc/init.d/cron restart | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment