enable=0
vis_enable=0
-wait_for_dir() {
- local ifce="$1" dir="$2"
-
- if ! [ -d "$dir" ] ; then
- timeout=30
- echo "waiting $timeout secs for $ifce interface..."
- for i in $(seq $timeout); do
- sleep 1
- [ -d "$dir" ] && break
- if [ $i = $timeout ] ; then
- echo "$ifce not detected, alfred not starting."
- exit 1
- fi
- done
- fi
-}
-
-wait_for_ll_address() {
- local iface="$1"
- local timeout=30
-
- echo "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 "$iface address not detected, alfred not starting."
- exit 1
+append_interface()
+{
+ append "interfaces" "$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
[ $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"
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_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