#!/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 }