diff options
author | Aaron Goodman <aaronjg@stanford.edu> | 2020-08-12 20:38:56 -0400 |
---|---|---|
committer | Aaron Goodman <aaronjg@stanford.edu> | 2020-10-16 09:54:48 -0400 |
commit | 566293d228a48d21a04ecbc815a7ae97e26eb319 (patch) | |
tree | a1ea2f22aa059b7f9b4b0e2dc6322da8b19d2357 /net/mwan3/files/etc/hotplug.d | |
parent | 5faa99f3b850c40669f231b45cca7bb7273c3083 (diff) |
mwan3: use procd for mwan3rtmon and mwan3track
start all mwan3mon and mwan3track instances on mwan3 start
if an interface is down when mwan3track starts, it waits
for a signal from the hotplug script to start
procd can then handle stopping all of the scripts when mwan3
is halted
Signed-off-by: Aaron Goodman <aaronjg@stanford.edu>
Diffstat (limited to 'net/mwan3/files/etc/hotplug.d')
-rw-r--r-- | net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 60 | ||||
-rw-r--r-- | net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user | 14 |
2 files changed, 34 insertions, 40 deletions
diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 196b03257..320e7f787 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -9,6 +9,8 @@ SCRIPTNAME="mwan3-hotplug" [ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 +[ "$FIRSTCONNECT" = "1" ] || [ "$MWAN3_SHUTDOWN" = "1" ] && exit 0 + if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" ]; then LOG notice "$ACTION called on $INTERFACE with no device set" exit 3 @@ -17,10 +19,9 @@ fi [ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$INTERFACE" config_load mwan3 -config_get_bool enabled globals 'enabled' '0' -[ "${enabled}" -gt 0 ] || { +/etc/init.d/mwan3 running || { [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" - LOG notice "mwan3 hotplug on $INTERFACE not called because globally disabled" + LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled" mwan3_flush_conntrack "$INTERFACE" "$ACTION" exit 0 } @@ -41,7 +42,6 @@ if [ "$MWAN3_STARTUP" != 1 ] && [ "$ACTION" = "ifup" ]; then mwan3_set_user_iface_rules $INTERFACE $DEVICE fi -config_get initial_state $INTERFACE initial_state "online" config_get_bool enabled $INTERFACE 'enabled' '0' [ "${enabled}" -eq 1 ] || { [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" @@ -49,53 +49,47 @@ config_get_bool enabled $INTERFACE 'enabled' '0' exit 0 } -trackpid=$(pgrep -f "mwan3track $INTERFACE ") - +config_get initial_state $INTERFACE initial_state "online" if [ "$initial_state" = "offline" ]; then status=$(cat $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || echo unknown) + [ "$status" = "online" ] || status=offline else status=online fi -[ -z "$TRUE_INTERFACE" ] && mwan3_get_true_iface TRUE_INTERFACE $INTERFACE - -binary_status=$status -[ "$binary_status" = "online" ] || binary_status=offline +if [ "$ACTION" = ifup ] || [ "$ACTION" = ifdown ]; then + initscript=/etc/init.d/mwan3 + . /lib/functions/procd.sh +fi LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})" case "$ACTION" in - ifup|connected) + connected) + mwan3_set_iface_hotplug_state $INTERFACE "online" + mwan3_set_policies_iptables + ;; + ifup) mwan3_create_iface_iptables $INTERFACE $DEVICE mwan3_create_iface_rules $INTERFACE $DEVICE - [ "$MWAN3_STARTUP" != 1 ] && mwan3_create_iface_route $INTERFACE $DEVICE - mwan3_set_iface_hotplug_state $INTERFACE "$binary_status" - - mwan3_get_src_ip src_ip "$TRUE_INTERFACE" - if [ -n "${trackpid}" ]; then - device_pid=$(pgrep -f "mwan3track $INTERFACE $DEVICE ") - if [ "$device_pid" = "$trackpid" ]; then - [ "$ACTION" = ifup ] && kill -USR2 "$trackpid" - else - mwan3_track $INTERFACE $DEVICE "$binary_status" "$src_ip" - LOG notice "Restarted tracker [$!] on interface $INTERFACE (${DEVICE:-unknown})" - fi - else - mwan3_track $INTERFACE $DEVICE "$binary_status" "$src_ip" - LOG notice "Started tracker [$!] on interface $INTERFACE (${DEVICE:-unknown})" + mwan3_set_iface_hotplug_state $INTERFACE "$status" + if [ "$MWAN3_STARTUP" != 1 ]; then + mwan3_create_iface_route $INTERFACE $DEVICE + [ "$status" = "online" ] && mwan3_set_policies_iptables fi - [ "$MWAN3_STARTUP" != 1 ] && [ "$binary_status" == "online" ] && mwan3_set_policies_iptables - - ;; - ifdown|disconnected) + [ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2 + ;; + disconnected) + mwan3_set_iface_hotplug_state $INTERFACE "offline" + mwan3_set_policies_iptables + ;; + ifdown) mwan3_set_iface_hotplug_state $INTERFACE "offline" mwan3_delete_iface_ipset_entries $INTERFACE mwan3_delete_iface_rules $INTERFACE mwan3_delete_iface_route $INTERFACE mwan3_delete_iface_iptables $INTERFACE - if [ "$ACTION" = "ifdown" ]; then - [ -n "$trackpid" ] && kill -USR1 "$trackpid" - fi + procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR1 mwan3_set_policies_iptables ;; esac diff --git a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user index 2ec5c79a3..698fe0909 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user @@ -4,22 +4,22 @@ . /lib/functions.sh . /lib/mwan3/mwan3.sh - [ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$DEVICE-user" + [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_lock "$ACTION" "$DEVICE-user" - config_load mwan3 - config_get_bool enabled globals 'enabled' '0' - [ "${enabled}" -gt 0 ] || { - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$DEVICE-user" + [ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && { + mwan3_unlock "$ACTION" "$DEVICE-user" exit 0 } + config_load mwan3 + config_get_bool enabled "$INTERFACE" enabled 0 [ "${enabled}" -eq 1 ] || { - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$DEVICE-user" + [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_unlock "$ACTION" "$DEVICE-user" exit 0 } - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$DEVICE-user" + [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_unlock "$ACTION" "$DEVICE-user" env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \ /bin/sh /etc/mwan3.user |