diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index ce4bfcec2..958c21061 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.8.11 +PKG_VERSION:=2.8.12 PKG_RELEASE:=1 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPL-2.0 diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 5bfbd2462..645cdd3e4 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -9,24 +9,29 @@ [ -n "$INTERFACE" ] || exit 2 if [ "$ACTION" == "ifup" ]; then - [ -n "$DEVICE" ] || exit 3 + [ -n "$DEVICE" ] || exit 3 fi +mwan3_lock "$ACTION" "$INTERFACE" config_load mwan3 config_get_bool enabled globals 'enabled' '0' -[ ${enabled} -gt 0 ] || exit 0 +[ "${enabled}" -gt 0 ] || { + mwan3_unlock "$ACTION" "$INTERFACE" + exit 0 +} -mwan3_lock "$ACTION" "$INTERFACE" mwan3_init mwan3_set_connected_iptables mwan3_set_custom_ipset -mwan3_unlock "$ACTION" "$INTERFACE" -config_get enabled $INTERFACE enabled 0 config_get initial_state $INTERFACE initial_state "online" -[ "$enabled" == "1" ] || exit 0 +config_get_bool enabled $INTERFACE 'enabled' '0' +[ "${enabled}" -eq 1 ] || { + mwan3_unlock "$ACTION" "$INTERFACE" + exit 0 +} -if [ "$ACTION" == "ifup" ]; then +if [ "$ACTION" = "ifup" ]; then config_get family $INTERFACE family ipv4 if [ "$family" = "ipv4" ]; then ubus call network.interface.${INTERFACE}_4 status &>/dev/null @@ -58,7 +63,6 @@ else running=1 fi -mwan3_lock "$ACTION" "$INTERFACE" $LOG notice "Execute "$ACTION" event on interface $INTERFACE (${DEVICE:-unknown})" case "$ACTION" in @@ -68,7 +72,7 @@ case "$ACTION" in mwan3_create_iface_iptables $INTERFACE $DEVICE mwan3_create_iface_rules $INTERFACE $DEVICE mwan3_create_iface_route $INTERFACE $DEVICE - if [ ${running} -eq 1 -a "${status}" = "online" ]; then + if [ "${running}" -eq 1 ] && [ "${status}" = "online" ]; then $LOG notice "Starting tracker on interface $INTERFACE (${DEVICE:-unknown})" mwan3_set_iface_hotplug_state $INTERFACE "online" mwan3_track $INTERFACE $DEVICE "online" "$src_ip" diff --git a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3 index c243d55ff..dd09358eb 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3 @@ -4,19 +4,24 @@ . /lib/functions/network.sh . /lib/mwan3/mwan3.sh +mwan3_lock "$ACTION" "mwan3rtmon" + config_load mwan3 config_get_bool enabled globals 'enabled' '0' -[ ${enabled} -gt 0 ] || exit 0 +[ "${enabled}" -gt 0 ] || { + mwan3_unlock "$ACTION" "mwan3rtmon" + exit 0 +} -if [ "$ACTION" == "ifup" ]; then - mwan3_lock "$ACTION" "mwan3rtmon" +if [ "$ACTION" = "ifup" ]; then mwan3_rtmon - mwan3_unlock "$ACTION" "mwan3rtmon" fi -config_get enabled $INTERFACE enabled 0 -[ "${enabled}" = "0" ] || { +config_get_bool enabled "$INTERFACE" 'enabled' '0' +[ "${enabled}" -eq 0 ] || { mwan3_flush_conntrack "$INTERFACE" "$ACTION" } +mwan3_unlock "$ACTION" "mwan3rtmon" + exit 0 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 9372c736e..af28b1f4f 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user @@ -2,13 +2,25 @@ [ -f "/etc/mwan3.user" ] && { . /lib/functions.sh + . /lib/mwan3/mwan3.sh + + mwan3_lock "$ACTION" "user" config_load mwan3 config_get_bool enabled globals 'enabled' '0' - [ ${enabled} -gt 0 ] || exit 0 + [ "${enabled}" -gt 0 ] || { + mwan3_unlock "$ACTION" "user" + exit 0 + } + + config_get_bool enabled "$INTERFACE" enabled 0 + [ "${enabled}" -eq 1 ] || { + mwan3_unlock "$ACTION" "user" + exit 0 + } + + mwan3_unlock "$ACTION" "user" - config_get enabled "$INTERFACE" enabled 0 - [ "${enabled}" = "1" ] || exit 0 env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \ /bin/sh /etc/mwan3.user } diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 2ec760f9a..3c7422dc0 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -203,17 +203,6 @@ mwan3_unlock() { lock -u /var/run/mwan3.lock } -mwan3_lock_clean() { - for pid in $(pgrep -f "lock /var/run/mwan3.lock"); do - kill -TERM "$pid" > /dev/null 2>&1 - done - sleep 1 - for pid in $(pgrep -f "lock /var/run/mwan3.lock"); do - kill -KILL "$pid" > /dev/null 2>&1 - done - rm -rf /var/run/mwan3.lock -} - mwan3_get_iface_id() { local _tmp _iface _iface_count diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index b9a5afb9e..79a0eba25 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -45,30 +45,39 @@ ifup() { local device enabled up l3_device status + mwan3_lock "command" "mwan3" + config_load mwan3 config_get_bool enabled globals 'enabled' 0 + [ ${enabled} -gt 0 ] || { echo "The service mwan3 is global disabled." echo "Please execute \"/etc/init.d/mwan3 start\" first." + mwan3_unlock "command" "mwan3" exit 1 } if [ -z "$1" ]; then - echo "Expecting interface. Usage: mwan3 ifup " && exit 0 + echo "Expecting interface. Usage: mwan3 ifup " + mwan3_unlock "command" "mwan3" + exit 0 fi if [ -n "$2" ]; then - echo "Too many arguments. Usage: mwan3 ifup " && exit 0 + echo "Too many arguments. Usage: mwan3 ifup " + mwan3_unlock "command" "mwan3" + exit 0 fi + config_get enabled "$1" enabled 0 + mwan3_unlock "command" "mwan3" + status=$(ubus -S call network.interface.$1 status) [ -n "$status" ] && { json_load "$status" json_get_vars up l3_device } - config_get enabled "$1" enabled 0 - if [ "$up" = "1" ] \ && [ -n "$l3_device" ] \ && [ "$enabled" = "1" ]; then @@ -130,7 +139,9 @@ start() { local enabled + mwan3_lock "command" "mwan3" uci_toggle_state mwan3 globals enabled "1" + mwan3_unlock "command" "mwan3" config_load mwan3 config_foreach ifup interface @@ -141,6 +152,7 @@ stop() local ipset route rule table IP IPT pid mwan3_lock "command" "mwan3" + uci_toggle_state mwan3 globals enabled "0" for pid in $(pgrep -f "mwan3rtmon"); do kill -TERM "$pid" > /dev/null 2>&1 @@ -198,10 +210,7 @@ stop() mwan3_unlock "command" "mwan3" - mwan3_lock_clean rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR - - uci_toggle_state mwan3 globals enabled "0" } restart() {