openwrt-routing/olsrd/files/olsrd4.init

80 lines
1.7 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2013 OpenWrt.org
. $IPKG_INSTROOT/lib/functions/olsrd.sh
START=65
USE_PROCD=1
BIN=/usr/sbin/olsrd
OLSRD=olsrd
CONF=/var/etc/$OLSRD.conf
PID=/var/run/olsrd.pid
wait_for_network()
{
ubus -t 15 wait_for network.interface.$1 2>/dev/null
}
wait_for_wireless()
{
local count=0
ubus -t 15 wait_for network.wireless 2>/dev/null
while [ $count -lt 30 ]; do
if [ "$(ubus call network.wireless status | jsonfilter -e '@[*]["pending"]' | grep true | wc -l)" == "0" ]; then
break
fi
count=$((count+1))
sleep 1
done
}
boot()
{
config_load network
config_foreach wait_for_network interface
wait_for_wireless
rc_procd start_service
}
start_service() {
olsrd_generate_config $OLSRD
procd_open_instance
config_load olsrd
local _respawn_threshold
local _respawn_timeout
local _respawn_retry
config_get _respawn_threshold procd respawn_threshold 3600
config_get _respawn_timeout procd respawn_timeout 15
config_get _respawn_retry procd respawn_retry 0
procd_set_param command "$BIN"
procd_append_param command -f ${CONF}
procd_append_param command -nofork
procd_append_param command -pidfile ${PID}
# restart if olsrd dies
procd_set_param respawn $_respawn_threshold $_respawn_timeout $_respawn_retry
# automatically restart olsrd if generated cfg has changed
procd_set_param file $CONF
procd_set_param pidfile $PID
procd_close_instance
olsrd_setup_smartgw_rules
}
service_triggers() {
# reload if config changed via uci
procd_add_reload_trigger "olsrd"
# restart on ifup interface events
for n in $(olsrd_list_configured_interfaces $OLSRD); do
procd_add_reload_interface_trigger $n /etc/init.d/$OLSRD reload
done
}