mirror of
https://github.com/openwrt/routing.git
synced 2026-01-11 16:50:07 +04:00
alfred: Start up alfred without valid interfaces
The alfred server always needs interfaces to operate on. But these interfaces might not exist at the moment when the daemon process is started. This situation stopped the startup process after the init scripts waited for a longer period of polling the system state. But alfred is able to deal with interfaces which disappeared at runtime but existed at startup. To force a similar behavior for the alfred startup, the parameter "--force" or "-f" is used. The extra polling code is therefore no longer needed in the init scripts. Signed-off-by: Sven Eckelmann <sven@narfation.org>
This commit is contained in:
@@ -13,53 +13,9 @@ facters_dir="/etc/alfred"
|
||||
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."
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
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 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "$iface address not detected, alfred not starting."
|
||||
return 1
|
||||
}
|
||||
|
||||
append_interface()
|
||||
{
|
||||
append "interfaces" "$1" ","
|
||||
wait_for_ll_address "$1"
|
||||
}
|
||||
|
||||
alfred_start() {
|
||||
@@ -72,7 +28,7 @@ alfred_start() {
|
||||
config_get_bool disabled "$section" disabled 0
|
||||
[ $disabled = 0 ] || return 1
|
||||
|
||||
args=""
|
||||
args="-f"
|
||||
|
||||
config_list_foreach "$section" "interface" append_interface
|
||||
if [ -z "$interfaces" ]; then
|
||||
@@ -87,10 +43,6 @@ alfred_start() {
|
||||
config_get batmanif "$section" batmanif
|
||||
append args "-b $batmanif"
|
||||
|
||||
if [ "$batmanif" != "none" ]; then
|
||||
wait_for_dir "$batmanif" "/sys/devices/virtual/net/$batmanif" || return 1
|
||||
fi
|
||||
|
||||
append alfred_args "$args"
|
||||
enable=1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user