diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 4cdaed9ee..07d6827f7 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.6.9 +PKG_VERSION:=2.6.10 PKG_RELEASE:=1 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPLv2 diff --git a/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 index f977b3d84..4f8e0be16 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 @@ -12,6 +12,9 @@ if [ "$ACTION" = "ifup" ]; then fi config_load mwan3 +config_get_bool enabled globals 'enabled' '0' +[ ${enabled} -gt 0 ] || exit 0 + config_get local_source globals local_source 'none' [ "${local_source}" = "none" ] && { exit 0 diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 71d6393b4..f94b40093 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -12,15 +12,19 @@ if [ "$ACTION" == "ifup" ]; then [ -n "$DEVICE" ] || exit 3 fi -mwan3_lock -mwan3_set_connected_iptables -mwan3_unlock - config_load mwan3 +config_get_bool enabled globals 'enabled' '0' +[ ${enabled} -gt 0 ] || exit 0 + config_get enabled $INTERFACE enabled 0 config_get initial_state $INTERFACE initial_state "online" [ "$enabled" == "1" ] || exit 0 +mwan3_lock +mwan3_init +mwan3_set_connected_iptables +mwan3_unlock + if [ "$ACTION" == "ifup" ]; then config_get family $INTERFACE family ipv4 if [ "$family" = "ipv4" ]; then 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 485f8de4e..9372c736e 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user @@ -4,6 +4,9 @@ . /lib/functions.sh config_load mwan3 + config_get_bool enabled globals 'enabled' '0' + [ ${enabled} -gt 0 ] || exit 0 + config_get enabled "$INTERFACE" enabled 0 [ "${enabled}" = "1" ] || exit 0 env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \ diff --git a/net/mwan3/files/etc/init.d/mwan3 b/net/mwan3/files/etc/init.d/mwan3 new file mode 100755 index 000000000..dac1fb89a --- /dev/null +++ b/net/mwan3/files/etc/init.d/mwan3 @@ -0,0 +1,32 @@ +#!/bin/sh /etc/rc.common + +START=19 + +reload() { + local enabled + + config_load mwan3 + config_get_bool enabled globals 'enabled' 0 + [ ${enabled} -gt 0 ] || { + echo "Warning: mwan3 is global disabled. Usage: /etc/init.d/mwan3 start" + exit 0 + } + mwan3 restart +} + +boot() { + . /lib/config/uci.sh + uci_toggle_state mwan3 globals enabled "1" +} + +start() { + . /lib/config/uci.sh + uci_toggle_state mwan3 globals enabled "1" + mwan3 start +} + +stop() { + . /lib/config/uci.sh + uci_toggle_state mwan3 globals enabled "0" + mwan3 stop +} diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 05ee9eedf..7a4f1f2c8 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -11,17 +11,14 @@ CONNTRACK_FILE="/proc/net/nf_conntrack" MWAN3_STATUS_DIR="/var/run/mwan3" MWAN3TRACK_STATUS_DIR="/var/run/mwan3track" DEFAULT_LOWEST_METRIC=256 +MMX_MASK="" +MMX_DEFAULT="" +MMX_BLACKHOLE="" +MM_BLACKHOLE="" + +MMX_UNREACHABLE="" +MM_UNREACHABLE="" -[ -d $MWAN3_STATUS_DIR ] || mkdir -p $MWAN3_STATUS_DIR/iface_state -# mwan3's MARKing mask (at least 3 bits should be set) -if [ -e "${MWAN3_STATUS_DIR}/mmx_mask" ]; then - MMX_MASK=$(cat "${MWAN3_STATUS_DIR}/mmx_mask") -else - config_load mwan3 - config_get MMX_MASK globals mmx_mask '0xff00' - echo "$MMX_MASK" > "${MWAN3_STATUS_DIR}/mmx_mask" - $LOG notice "Using firewall mask ${MMX_MASK}" -fi # counts how many bits are set to 1 # n&(n-1) clears the lowest bit set to 1 @@ -58,16 +55,34 @@ mwan3_id2mask() printf "0x%x" $result } -# mark mask constants -MM_BIT_CNT=$(mwan3_count_one_bits MMX_MASK) -MM_DEFAULT=$(((1< "${MWAN3_STATUS_DIR}/mmx_mask" + $LOG notice "Using firewall mask ${MMX_MASK}" + fi + + # mark mask constants + bitcnt=$(mwan3_count_one_bits MMX_MASK) + mmdefault=$(((1< /dev/null + for pid in $(pgrep -f "mwan3track $1 $2"); do + kill -TERM "$pid" > /dev/null 2>&1 + sleep 1 + kill -KILL "$pid" > /dev/null 2>&1 + done if [ -n "$track_ips" ]; then [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track "$1" "$2" "$3" "$4" $track_ips & fi diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index 38e80a083..baf109df1 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -54,6 +54,12 @@ ifup() echo "Too many arguments. Usage: mwan3 ifup " && exit 0 fi + config_get_bool enabled globals 'enabled' 0 + [ ${enabled} -gt 0 ] || { + echo "Warning: mwan3 is global disabled. Usage: /etc/init.d/mwan3 start" + exit 0 + } + config_get enabled "$1" enabled 0 device=$(uci -p /var/state get network.$1.ifname) &> /dev/null @@ -112,15 +118,27 @@ status() start() { + local enabled + config_load mwan3 + config_get_bool enabled globals 'enabled' 0 + [ ${enabled} -gt 0 ] || { + echo "Warning: mwan3 is global disabled. Usage: /etc/init.d/mwan3 start" + exit 0 + } + config_foreach ifup interface } stop() { - local ipset route rule table IP IPT + local ipset route rule table IP IPT pid - killall mwan3track &> /dev/null + for pid in $(pgrep -f "mwan3track"); do + kill -TERM "$pid" > /dev/null 2>&1 + sleep 1 + kill -KILL "$pid" > /dev/null 2>&1 + done config_load mwan3 config_foreach mwan3_track_clean interface @@ -169,6 +187,7 @@ restart() { case "$1" in ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart) + mwan3_init $* ;; *) diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 588eb9bf4..2e6f0ffdd 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -62,8 +62,8 @@ main() { STATUS=$3 SRC_IP=$4 mkdir -p /var/run/mwan3track/$1 - trap clean_up SIGINT SIGTERM - trap if_down SIGUSR1 + trap clean_up TERM + trap if_down USR1 config_load mwan3 config_get track_method $1 track_method ping