diff options
author | William A. Kennington III <wak@google.com> | 2021-11-05 13:52:53 +0300 |
---|---|---|
committer | William A. Kennington III <wak@google.com> | 2021-11-06 02:40:43 +0300 |
commit | cefbd1cf61ec037f62b7f5cfe93c727ed234226a (patch) | |
tree | c986dfe33f6de30e1825e69daffcac4e77734857 | |
parent | cbd9ef029b2134af941a801715cf3b7281d21e95 (diff) | |
download | openbmc-cefbd1cf61ec037f62b7f5cfe93c727ed234226a.tar.xz |
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>
-rwxr-xr-x | meta-google/recipes-google/networking/files/gbmc-ip-monitor.sh | 23 |
1 files changed, 21 insertions, 2 deletions
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 e64c8675e..9da090f47 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 @@ gbmc_ip_monitor_generate_init() { 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 @@ gbmc_ip_monitor_parse_line() { 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 @@ cleanup() { } 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 @@ while read line; do 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) |