X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=alfred%2Ffiles%2Falfred.init;h=f191827fd0af2977a9b9cbd2fa7ce0c8ead4f9e5;hb=HEAD;hp=8293436870af23914ce2cdcad26e0539d4b3667d;hpb=68e3498edbe1800b1d55f623b7885bdf73be8f13;p=feed%2Frouting.git diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init index 8293436..f191827 100755 --- a/alfred/files/alfred.init +++ b/alfred/files/alfred.init @@ -1,81 +1,41 @@ #!/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 +USE_PROCD=1 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() +append_interface() { - local iface="$1" - local 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 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 "${initscript}: $iface address not detected, alfred not starting." - exit 1 + append "interfaces" "$1" "," } -alfred_start() -{ +alfred_start() { local args="" local section="$1" local disabled interface mode + local interfaces # check if section is disabled config_get_bool disabled "$section" disabled 0 [ $disabled = 0 ] || return 1 - args="" + args="-f" - config_get interface "$section" interface - append args "-i $interface" + config_list_foreach "$section" "interface" append_interface + if [ -z "$interfaces" ]; then + config_get interface "$section" interface + append_interface "$interface" + fi + append args "-i $interfaces" config_get mode "$section" mode [ "$mode" = "master" ] && append args "-m" @@ -83,12 +43,6 @@ alfred_start() 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 @@ -103,41 +57,41 @@ alfred_start() return 0 } -start() -{ +start_service() { config_load "alfred" config_foreach alfred_start alfred - if [ "$enable" = "0" ]; then - exit 0 - fi + [ "$enable" = "0" ] && return 0 - echo "${initscript}: starting alfred" - SERVICE_PID_FILE="$pid_file_alfred" - service_start /usr/sbin/alfred ${alfred_args} + procd_open_instance "alfred" + procd_set_param command /usr/sbin/alfred + procd_append_param command ${alfred_args} + procd_close_instance - 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 + [ "$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 + } - if [ "$run_facters" = "1" ]; then + [ "$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 - 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 +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 + } }