Skip to content
Snippets Groups Projects
Commit d432a0a2 authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

alfred: not only wait for the interface, but also a link-local address

parent 0f928b08
No related branches found
No related tags found
No related merge requests found
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Sun, 9 Aug 2015 18:03:28 +0200
Subject: alfred: not only wait for the interface, but also a link-local address
Changes between alfred 2015.0 and 2015.1 cause alfred to print an error
and exit when the interface to bind to is not completely set up (has no
non-tentative link-local address). As a workaround, wait for such an
address by reading /proc/net/if_inet6 before alfred is started.
In the long term, it would be nice to make alfred more robust against
missing interfaces (allowing alfred to start without the interface
existing, and keeping it working even when the interface is removed and
re-added while alfred is running).
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init
index 5ce06c0..8e1f11d 100755
--- a/alfred/files/alfred.init
+++ b/alfred/files/alfred.init
@@ -37,6 +37,32 @@ wait_for_dir()
fi
}
+wait_for_ll_address()
+{
+ local iface="$1"
+ local timeout
+
+ 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=""
@@ -62,7 +88,7 @@ alfred_start()
wait_for_dir "$batmanif" "/sys/class/net/$batmanif/mesh"
fi
- wait_for_dir "$interface" "/sys/class/net/$interface/"
+ wait_for_ll_address "$interface"
append alfred_args "$args"
enable=1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment