meta-google: gbmc-ip-monitor: Add deferred actions
This makes it possible to defer actions for a future time in order to
let networking events settle out before triggering a reconfiguration.
Change-Id: I0b2372ba6b114a6b6548ccac3944af912482d68a
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/meta-google/recipes-google/networking/files/gbmc-ip-monitor.sh b/meta-google/recipes-google/networking/files/gbmc-ip-monitor.sh
index e64c867..9da090f 100755
--- a/meta-google/recipes-google/networking/files/gbmc-ip-monitor.sh
+++ b/meta-google/recipes-google/networking/files/gbmc-ip-monitor.sh
@@ -44,6 +44,17 @@
echo '[INIT]'
}
+GBMC_IP_MONITOR_DEFER_OUTSTANDING=
+gbmc_ip_monitor_defer_() {
+ sleep 1
+ printf '[DEFER]\n' >&$GBMC_IP_MONITOR_DEFER
+}
+gbmc_ip_monitor_defer() {
+ [ -z "$GBMC_IP_MONITOR_DEFER_OUTSTANDING" ] || return 0
+ gbmc_ip_monitor_defer_ &
+ GBMC_IP_MONITOR_DEFER_OUTSTANDING=1
+}
+
gbmc_ip_monitor_parse_line() {
local line="$1"
if [[ "$line" == '[INIT]'* ]]; then
@@ -98,11 +109,16 @@
read line || break
data=($line)
mac="${data[1]}"
+ elif [[ "$line" == '[DEFER]'* ]]; then
+ GBMC_IP_MONITOR_DEFER_OUTSTANDING=
+ change=defer
else
return 2
fi
}
+return 0 2>/dev/null
+
cleanup() {
local st="$?"
trap - HUP INT QUIT ABRT TERM EXIT
@@ -111,7 +127,10 @@
}
trap cleanup HUP INT QUIT ABRT TERM EXIT
-return 0 2>/dev/null
+FIFODIR="$(mktemp -d)"
+mkfifo "$FIFODIR"/fifo
+exec {GBMC_IP_MONITOR_DEFER}<>"$FIFODIR"/fifo
+rm -rf "$FIFODIR"
while read line; do
gbmc_ip_monitor_parse_line "$line" || continue
@@ -119,4 +138,4 @@
if [ "$change" = 'init' ]; then
systemd-notify --ready
fi
-done < <(gbmc_ip_monitor_generate_init; exec ip monitor link addr route label)
+done < <(gbmc_ip_monitor_generate_init; ip monitor link addr route label & cat <&$GBMC_IP_MONITOR_DEFER)