1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 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
|