diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 01f9e07f6..5387cd9df 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,9 +8,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.0 -PKG_RELEASE:=3 -PKG_MAINTAINER:=Jeroen Louwes +PKG_VERSION:=2.0.1 +PKG_RELEASE:=1 +PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPLv2 include $(INCLUDE_DIR)/package.mk @@ -21,7 +21,6 @@ define Package/mwan3 SUBMENU:=Routing and Redirection DEPENDS:=+ip +ipset +iptables +iptables-mod-conntrack-extra +iptables-mod-ipopt TITLE:=Multiwan hotplug script with connection tracking support - MAINTAINER:=Jeroen Louwes PKGARCH:=all endef diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 86e60e133..0e4c8ee38 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -4,11 +4,6 @@ . /lib/functions/network.sh . /lib/mwan3/mwan3.sh -config_load mwan3 - -config_get enabled $INTERFACE enabled 0 -[ "$enabled" == "1" ] || exit 0 - [ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 @@ -22,6 +17,14 @@ fi [ -x /usr/sbin/ip6tables ] || exit 7 [ -x /usr/bin/logger ] || exit 8 +mwan3_lock +mwan3_set_connected_iptables +mwan3_unlock + +config_load mwan3 +config_get enabled $INTERFACE enabled 0 +[ "$enabled" == "1" ] || exit 0 + config_get family $INTERFACE family ipv4 if [ "$family" == "ipv4" ]; then @@ -30,12 +33,13 @@ elif [ "$family" == "ipv6" ]; then network_get_gateway6 gateway $INTERFACE fi -[ -n "$gateway" ] || exit 9 +if [ "$ACTION" == "ifup" ]; then + [ -n "$gateway" ] || exit 9 +fi +mwan3_lock $LOG notice "$ACTION interface $INTERFACE (${DEVICE:-unknown})" -mwan3_set_connected_iptables - case "$ACTION" in ifup) mwan3_set_general_rules @@ -49,7 +53,6 @@ case "$ACTION" in ;; ifdown) mwan3_delete_iface_rules $INTERFACE - mwan3_delete_iface_iptables $INTERFACE mwan3_delete_iface_route $INTERFACE mwan3_delete_iface_ipset_entries $INTERFACE mwan3_set_policies_iptables @@ -57,4 +60,6 @@ case "$ACTION" in ;; esac +mwan3_unlock + exit 0 diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 1e1de969f..2bba6f9a3 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -7,6 +7,18 @@ IPT4="/usr/sbin/iptables -t mangle -w" IPT6="/usr/sbin/ip6tables -t mangle -w" LOG="/usr/bin/logger -t mwan3 -p" +mwan3_lock() { + lock /var/run/mwan3.lock +} + +mwan3_unlock() { + lock -u /var/run/mwan3.lock +} + +mwan3_lock_clean() { + 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 405cd43f3..b3285b6f6 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -46,6 +46,7 @@ ifdown() kill $(cat /var/run/mwan3track-$1.pid) rm /var/run/mwan3track-$1.pid fi + mwan3_delete_iface_iptables $1 } ifup() @@ -163,6 +164,8 @@ stop() for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do $IPS -q destroy $ipset done + + mwan3_lock_clean } restart() { diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 35f97fe0d..326d8ab52 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -59,7 +59,8 @@ while true; do fi host_up_count=0 - sleep $6 + sleep $6 & + wait done exit 1