Polishes bmx6 graph. Adds colors by network and gives color to links based on link...
[feed/routing.git] / alfred / files / alfred.init
index e52a7bd48b1eb3de7f1cd08bd5495979761a664a..4c9a9e195ada75d8f7b9d42e2b852cc855552bfb 100755 (executable)
@@ -13,17 +13,60 @@ alfred_args=""
 vis_args=""
 facters_dir="/etc/alfred"
 pid_file_alfred="/var/run/alfred.pid"
-pid_file_vis="/var/run/vis.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=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 batmanif
+       local disabled interface mode
 
        # check if section is disabled
        config_get_bool disabled "$section" disabled 0
@@ -40,14 +83,20 @@ 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
 
-        config_get_bool start_vis "$section" start_vis 0
-        if [ "$start_vis" = 1 ] && [ -x /usr/sbin/vis ]; then
-                vis_enable=1
-                append vis_args "-i $batmanif -s"
-        fi
+       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
 
@@ -62,14 +111,15 @@ start()
        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 vis"
+               echo "${initscript}: starting batadv-vis"
                SERVICE_PID_FILE="$pid_file_vis"
-               service_start /usr/sbin/vis ${vis_args}
+               service_start /usr/sbin/batadv-vis ${vis_args}
        fi
 
        if [ "$run_facters" = "1" ]; then
@@ -87,7 +137,7 @@ stop()
        SERVICE_PID_FILE="$pid_file_alfred"
        service_stop /usr/sbin/alfred
        SERVICE_PID_FILE="$pid_file_vis"
-       [ -x /usr/sbin/vis ] && service_stop /usr/sbin/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
 }