alfred: Fix procd process handling for disable state
[feed/routing.git] / alfred / files / alfred.init
index b2926505d32ad3e9e47c07e3d310f1529c9632fb..e439be10f71647adb17c52743cec3f819ae31439 100755 (executable)
@@ -24,10 +24,12 @@ wait_for_dir() {
                        [ -d "$dir" ] && break
                        if [ $i = $timeout ] ; then
                                echo "$ifce not detected, alfred not starting."
-                               exit 1
+                               return 1
                        fi
                done
        fi
+
+       return 0
 }
 
 wait_for_ll_address() {
@@ -45,19 +47,26 @@ wait_for_ll_address() {
                        $1 ~ /^fe80/ && $5 ~ /^[012389ab]/ && $6 == "'"$iface"'" { RET=0 }
                        END { exit RET }
                ' /proc/net/if_inet6; then
-                       return
+                       return 0
                fi
                sleep 1
        done
 
        echo "$iface address not detected, alfred not starting."
-       exit 1
+       return 1
+}
+
+append_interface()
+{
+       append "interfaces" "$1" ","
+       wait_for_ll_address "$1"
 }
 
 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
@@ -65,8 +74,12 @@ alfred_start() {
 
        args=""
 
-       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"
@@ -75,11 +88,9 @@ alfred_start() {
        append args "-b $batmanif"
 
        if [ "$batmanif" != "none" ]; then
-               wait_for_dir "$batmanif" "/sys/class/net/$batmanif/mesh"
+               wait_for_dir "$batmanif" "/sys/devices/virtual/net/$batmanif" || return 1
        fi
 
-       wait_for_ll_address "$interface"
-
        append alfred_args "$args"
        enable=1
 
@@ -98,7 +109,7 @@ start_service() {
        config_load "alfred"
        config_foreach alfred_start alfred
 
-       [ "$enable" = "0" ] && { exit 0 }
+       [ "$enable" = "0" ] && return 0
 
        procd_open_instance "alfred"
        procd_set_param command /usr/sbin/alfred