From f942701b1a919ca6da9d3f2b28af81b414f9a7b8 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Thu, 13 Jul 2017 15:45:36 +0200 Subject: [PATCH 01/15] net/mwan3: add process PID to LOG output Update log output macro to show PID during logging Signed-off-by: Florian Eckert --- net/mwan3/files/lib/mwan3/mwan3.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 72091829b..27e0d0175 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -5,7 +5,7 @@ IP6="ip -6" IPS="ipset" IPT4="iptables -t mangle -w" IPT6="ip6tables -t mangle -w" -LOG="logger -t mwan3 -p" +LOG="logger -t mwan3[$$] -p" CONNTRACK_FILE="/proc/net/nf_conntrack" # mwan3's MARKing mask (at least 3 bits should be set) From a7a2464d9e9ab332d3b2f2c66de06826f56c8448 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Thu, 20 Jul 2017 08:55:55 +0200 Subject: [PATCH 02/15] net/mwan3: add option keep_failure_interval on failure Add new boolean interface config param to keep ping failure interval during interface failure state. Signed-off-by: Florian Eckert --- net/mwan3/files/usr/sbin/mwan3track | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index d168578df..718c2cb27 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -51,6 +51,7 @@ validate_track_method() { main() { local reliability count timeout interval failure_interval local recovery_interval down up size + local keep_failure_interval [ -z "$3" ] && echo "Error: should not be started manually" && exit 0 @@ -74,6 +75,7 @@ main() { config_get up $1 up 5 config_get size $1 size 56 config_get failure_interval $1 failure_interval $interval + config_get_bool keep_failure_interval $1 keep_failure_interval 0 config_get recovery_interval $1 recovery_interval $interval local score=$(($down+$up)) @@ -111,6 +113,9 @@ main() { if [ $score -lt $up ]; then score=0 + [ ${keep_failure_interval} -eq 1 ] && { + sleep_time=$failure_interval + } else sleep_time=$failure_interval fi From 9df6e9dd98ffd005f2e62526d76cfb2d1646e5ee Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Thu, 20 Jul 2017 13:31:07 +0200 Subject: [PATCH 03/15] net/mwan3: change logging output on hotplug interface event Change logging output on hotplug interface event Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index d82fe01aa..ec0b27289 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -43,7 +43,7 @@ if [ "$ACTION" == "ifup" ]; then fi mwan3_lock -$LOG notice "$ACTION interface $INTERFACE (${DEVICE:-unknown})" +$LOG notice "Execute "$ACTION" event on interface $INTERFACE (${DEVICE:-unknown})" case "$ACTION" in ifup) From 487278dcd12c01a67214996a4b8943a65061bfe0 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 21 Jul 2017 15:07:46 +0200 Subject: [PATCH 04/15] net/mwan3: fix ubus output for mwan3track running state Fix ubus output for mwan3track running state Signed-off-by: Florian Eckert --- net/mwan3/files/usr/libexec/rpcd/mwan3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index bbc570f6c..f4d59220b 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -37,7 +37,7 @@ get_mwan3_status() { local pid if [ "${iface}" = "${iface_select}" ] || [ "${iface_select}" = "" ]; then - pid="$(pgrep -f "mwan3track $iface_selected")" + pid="$(pgrep -f "mwan3track $iface")" if [ "${pid}" != "" ]; then running="1" fi From 0b44ca505bdb882b7b2d68431ca8b2a739f6cc97 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 31 Jul 2017 11:46:21 +0200 Subject: [PATCH 05/15] net/mwan3: fix mwan3track kill execution If two interface have the same prefix "wan" for example "wan" and "wan1" pgrep returns the PID for wan1 also "pgrep -f mwan3track wan". Before this fix "wan1" was also killed! This is not what we want. Signed-off-by: Florian Eckert --- net/mwan3/files/lib/mwan3/mwan3.sh | 6 +++--- net/mwan3/files/usr/libexec/rpcd/mwan3 | 7 +++++-- net/mwan3/files/usr/sbin/mwan3 | 2 +- net/mwan3/files/usr/sbin/mwan3track | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 27e0d0175..f08f89914 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -449,7 +449,7 @@ mwan3_track() } config_list_foreach $1 track_ip mwan3_list_track_ips - kill $(pgrep -f "mwan3track $1") &> /dev/null + kill $(pgrep -f "mwan3track $1 $2") &> /dev/null if [ -n "$track_ips" ]; then [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track "$1" "$2" "$3" $track_ips & fi @@ -459,7 +459,7 @@ mwan3_track_signal() { local pid - pid="$(pgrep -f "mwan3track $1")" + pid="$(pgrep -f "mwan3track $1 $2")" if [ "${pid}" != "" ]; then kill -USR1 "${pid}" else @@ -789,7 +789,7 @@ mwan3_report_iface_status() config_list_foreach $1 track_ip mwan3_list_track_ips if [ -n "$track_ips" ]; then - if [ -n "$(pgrep -f "mwan3track $1")" ]; then + if [ -n "$(pgrep -f "mwan3track $1 $device")" ]; then tracking="active" else tracking="down" diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index f4d59220b..313ebdaf1 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -1,6 +1,7 @@ #!/bin/sh . /lib/functions.sh +. /lib/functions/network.sh . /usr/share/libubox/jshn.sh MWAN3_STATUS_DIR="/var/run/mwan3track" @@ -34,10 +35,12 @@ get_mwan3_status() { local iface="${1}" local iface_select="${2}" local running="0" - local pid + local pid device + + network_get_device device $1 if [ "${iface}" = "${iface_select}" ] || [ "${iface_select}" = "" ]; then - pid="$(pgrep -f "mwan3track $iface")" + pid="$(pgrep -f "mwan3track $iface $device")" if [ "${pid}" != "" ]; then running="1" fi diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index f23d2e71b..043f8ec48 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -36,7 +36,7 @@ ifdown() ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface - kill $(pgrep -f "mwan3track $1") &> /dev/null + kill $(pgrep -f "mwan3track $1 $2") &> /dev/null } ifup() diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 718c2cb27..7e695ed77 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -10,7 +10,7 @@ IFDOWN_EVENT=0 clean_up() { $LOG notice "Stopping mwan3track for interface \"${INTERFACE}\"" - if [ "$(pgrep -f "mwan3track ${INTERFACE}")" = "" ]; then + if [ "$(pgrep -f "mwan3track ${INTERFACE} ${DEVICE}")" = "" ]; then rm -rf "/var/run/mwan3track/${INTERFACE}" &> /dev/null fi if [ -z "$(ls -A "/var/run/mwan3track")" ]; then From 96760e66dd202ce4ff258ea6782901a2ff65bd2b Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 24 Jul 2017 10:15:02 +0200 Subject: [PATCH 06/15] net/mwan3: remove unused global definition Signed-off-by: Florian Eckert --- net/mwan3/files/usr/libexec/rpcd/mwan3 | 1 - 1 file changed, 1 deletion(-) diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index 313ebdaf1..1342894b6 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -5,7 +5,6 @@ . /usr/share/libubox/jshn.sh MWAN3_STATUS_DIR="/var/run/mwan3track" -MWAN3_PID_FILE="/var/run/mwan3track" IPS="ipset" IPT4="iptables -t mangle -w" From 5e123852bc2fc6970e9502ca01a697b2fb394e23 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 24 Jul 2017 10:20:46 +0200 Subject: [PATCH 07/15] net/mwan3: move mwan3track clean up to mwan3 cmd This is usefull to see the last state of the interface with ubus. Signed-off-by: Florian Eckert --- net/mwan3/files/lib/mwan3/mwan3.sh | 16 ++++++++++++++++ net/mwan3/files/usr/sbin/mwan3 | 6 ++++++ net/mwan3/files/usr/sbin/mwan3track | 7 ------- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index f08f89914..596d3e759 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -8,6 +8,8 @@ IPT6="ip6tables -t mangle -w" LOG="logger -t mwan3[$$] -p" CONNTRACK_FILE="/proc/net/nf_conntrack" +MWAN3_STATUS_DIR="/var/run/mwan3track" + # mwan3's MARKing mask (at least 3 bits should be set) MMX_MASK=0xff00 @@ -65,6 +67,10 @@ 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 @@ -919,3 +925,13 @@ mwan3_flush_conntrack() $LOG warning "connection tracking not enabled" fi } + +mwan3_track_clean() +{ + rm -rf "$MWAN3_STATUS_DIR/${1}" &> /dev/null + [ -d "$MWAN3_STATUS_DIR" ] && { + if [ -z "$(ls -A "$MWAN3_STATUS_DIR")" ]; then + rm -rf "$MWAN3_STATUS_DIR" + fi + } +} diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index 043f8ec48..41d78a3f2 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -37,6 +37,7 @@ ifdown() ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface kill $(pgrep -f "mwan3track $1 $2") &> /dev/null + mwan3_track_clean $1 } ifup() @@ -121,6 +122,9 @@ stop() killall mwan3track &> /dev/null + config_load mwan3 + config_foreach mwan3_track_clean interface + for IP in "$IP4" "$IP6"; do for route in $($IP route list table all | sed 's/.*table \([^ ]*\) .*/\1/' | awk '{print $1}' | awk '{for(i=1;i<=NF;i++) if($i+0>0) if($i+0<255) {print;break}}'); do @@ -153,6 +157,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 7e695ed77..1495afa63 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -10,12 +10,6 @@ IFDOWN_EVENT=0 clean_up() { $LOG notice "Stopping mwan3track for interface \"${INTERFACE}\"" - if [ "$(pgrep -f "mwan3track ${INTERFACE} ${DEVICE}")" = "" ]; then - rm -rf "/var/run/mwan3track/${INTERFACE}" &> /dev/null - fi - if [ -z "$(ls -A "/var/run/mwan3track")" ]; then - rm -rf "/var/run/mwan3track" - fi exit 0 } @@ -144,7 +138,6 @@ main() { if [ $score -eq $up ]; then $LOG notice "Interface $1 ($2) is online" env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface - rm -rf "/var/run/mwan3track/${1}" &> /dev/null exit 0 fi fi From 6d99b602fd3425df7b9a3f8d583a2092bb5e1b94 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 31 Jul 2017 12:04:18 +0200 Subject: [PATCH 08/15] net/mwan3: fix ping issue if last interface recovers from failure Even though error was fixed the interface checks still fails, if last_resort was set to blackhole or unreachable. To fix this issue do not remove failure interface from iptables change on down event. Reported-by: Colby Whitney Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 1 - net/mwan3/files/usr/sbin/mwan3 | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index ec0b27289..b09d80c21 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -59,7 +59,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_track_signal $INTERFACE $DEVICE diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index 41d78a3f2..1168ba37c 100755 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -37,6 +37,7 @@ ifdown() ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface kill $(pgrep -f "mwan3track $1 $2") &> /dev/null + mwan3_delete_iface_iptables $1 mwan3_track_clean $1 } From 815e83d46178f7f57044d0a6a8efb292d9106c93 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 24 Jul 2017 10:59:50 +0200 Subject: [PATCH 09/15] net/mwan3: on startup mark interface online only if track_ip are reachable Add new interface config option "inital_state". If interface comeing up the first time(mwan3 start, boot), there are now two option for interface behaviour: - online (default as is now) Set up interface regardless wether tracking ip are reachable or not. - offline Set up interface first to ping tracking ip and if they are reachable set up the interface completely. Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 30 ++++++++++++++++---- net/mwan3/files/lib/mwan3/mwan3.sh | 2 +- net/mwan3/files/usr/sbin/mwan3track | 13 +++++++-- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index b09d80c21..cd4bdb3b1 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -3,6 +3,7 @@ . /lib/functions.sh . /lib/functions/network.sh . /lib/mwan3/mwan3.sh +. /usr/share/libubox/jshn.sh [ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 @@ -15,6 +16,7 @@ mwan3_set_connected_iptables config_load mwan3 config_get enabled $INTERFACE enabled 0 +config_get initial_state $INTERFACE initial_state "online" [ "$enabled" == "1" ] || exit 0 if [ "$ACTION" == "ifup" ]; then @@ -42,6 +44,17 @@ if [ "$ACTION" == "ifup" ]; then [ -n "$gateway" ] || exit 9 fi +if [ "$initial_state" = "offline" ]; then + json_load "$(ubus call mwan3 status '{"section":"interfaces"}')" + json_select "interfaces" + json_select "${INTERFACE}" + json_get_var running running + json_get_var status status +else + status=online + running=1 +fi + mwan3_lock $LOG notice "Execute "$ACTION" event on interface $INTERFACE (${DEVICE:-unknown})" @@ -49,13 +62,18 @@ case "$ACTION" in ifup) mwan3_set_general_rules mwan3_set_general_iptables - mwan3_create_iface_rules $INTERFACE $DEVICE mwan3_create_iface_iptables $INTERFACE $DEVICE - mwan3_create_iface_route $INTERFACE $DEVICE - mwan3_track $INTERFACE $DEVICE ${src_ip} - mwan3_set_policies_iptables - mwan3_set_user_rules - mwan3_flush_conntrack $INTERFACE $DEVICE "ifup" + if [ ${running} -eq 1 -a "${status}" = "online" ]; then + mwan3_create_iface_rules $INTERFACE $DEVICE + mwan3_create_iface_route $INTERFACE $DEVICE + mwan3_track $INTERFACE $DEVICE ${src_ip} "online" + mwan3_set_policies_iptables + mwan3_set_user_rules + mwan3_flush_conntrack $INTERFACE $DEVICE "ifup" + else + $LOG notice "Starting tracker on interface $INTERFACE (${DEVICE:-unknown})" + mwan3_track $INTERFACE $DEVICE "offline" + fi ;; ifdown) mwan3_delete_iface_rules $INTERFACE diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 596d3e759..43600568f 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -457,7 +457,7 @@ mwan3_track() kill $(pgrep -f "mwan3track $1 $2") &> /dev/null if [ -n "$track_ips" ]; then - [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track "$1" "$2" "$3" $track_ips & + [ -x /usr/sbin/mwan3track ] && /usr/sbin/mwan3track "$1" "$2" "$3" "$4" $track_ips & fi } diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 1495afa63..f9909dd0e 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -47,10 +47,11 @@ main() { local recovery_interval down up size local keep_failure_interval - [ -z "$3" ] && echo "Error: should not be started manually" && exit 0 + [ -z "$5" ] && echo "Error: should not be started manually" && exit 0 INTERFACE=$1 DEVICE=$2 + STATUS=$3 mkdir -p /var/run/mwan3track/$1 trap clean_up SIGINT SIGTERM trap if_down SIGUSR1 @@ -73,13 +74,18 @@ main() { config_get recovery_interval $1 recovery_interval $interval local score=$(($down+$up)) - local track_ips=$(echo $* | cut -d ' ' -f 4-99) + local track_ips=$(echo $* | cut -d ' ' -f 5-99) local host_up_count=0 local lost=0 local sleep_time=0 local turn=0 - echo "offline" > /var/run/mwan3track/$1/STATUS + if [ "$STATUS" = "offline" ]; then + echo "offline" > /var/run/mwan3track/$1/STATUS + score=0 + else + echo "online" > /var/run/mwan3track/$1/STATUS + fi while true; do sleep_time=$interval @@ -137,6 +143,7 @@ main() { if [ $score -eq $up ]; then $LOG notice "Interface $1 ($2) is online" + echo "online" > /var/run/mwan3track/$1/STATUS env -i ACTION=ifup INTERFACE=$1 DEVICE=$2 /sbin/hotplug-call iface exit 0 fi From 929bec64021e5e3f07c7ab59b668b43c6dd2f0d8 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Mon, 31 Jul 2017 13:57:51 +0200 Subject: [PATCH 10/15] net/mwan3: expand ubus to show when last mwan3track check was done To know how old the ubus output is, add an age parameter which indicats how old the check informations on the interface are. Signed-off-by: Florian Eckert --- net/mwan3/files/usr/libexec/rpcd/mwan3 | 10 +++++++++- net/mwan3/files/usr/sbin/mwan3track | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index 1342894b6..6bb6f8dd1 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -34,7 +34,8 @@ get_mwan3_status() { local iface="${1}" local iface_select="${2}" local running="0" - local pid device + local age=0 + local pid device time_p time_n network_get_device device $1 @@ -44,7 +45,14 @@ get_mwan3_status() { running="1" fi + time_p="$(cat "$MWAN3_STATUS_DIR/${iface}/TIME")" + [ -z "${time_p}" ] || { + time_n="$(date +'%s')" + let age=time_n-time_p + } + json_add_object "${iface}" + json_add_int age "$age" json_add_string "score" "$(cat "$MWAN3_STATUS_DIR/${iface}/SCORE")" json_add_string "lost" "$(cat "$MWAN3_STATUS_DIR/${iface}/LOST")" json_add_string "turn" "$(cat "$MWAN3_STATUS_DIR/${iface}/TURN")" diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index f9909dd0e..bdb793b59 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -154,6 +154,7 @@ main() { echo "${lost}" > /var/run/mwan3track/$1/LOST echo "${score}" > /var/run/mwan3track/$1/SCORE echo "${turn}" > /var/run/mwan3track/$1/TURN + echo "$(date +'%s')" > /var/run/mwan3track/$1/TIME host_up_count=0 sleep "${sleep_time}" & From a934a25f2113b8f655df783ebbd47ff5b69b9538 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 1 Aug 2017 09:24:32 +0200 Subject: [PATCH 11/15] net/mwan3: fix ubus json datatyp Signed-off-by: Florian Eckert --- net/mwan3/files/usr/libexec/rpcd/mwan3 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 index 6bb6f8dd1..8b7b14ea6 100755 --- a/net/mwan3/files/usr/libexec/rpcd/mwan3 +++ b/net/mwan3/files/usr/libexec/rpcd/mwan3 @@ -53,9 +53,9 @@ get_mwan3_status() { json_add_object "${iface}" json_add_int age "$age" - json_add_string "score" "$(cat "$MWAN3_STATUS_DIR/${iface}/SCORE")" - json_add_string "lost" "$(cat "$MWAN3_STATUS_DIR/${iface}/LOST")" - json_add_string "turn" "$(cat "$MWAN3_STATUS_DIR/${iface}/TURN")" + json_add_int "score" "$(cat "$MWAN3_STATUS_DIR/${iface}/SCORE")" + json_add_int "lost" "$(cat "$MWAN3_STATUS_DIR/${iface}/LOST")" + json_add_int "turn" "$(cat "$MWAN3_STATUS_DIR/${iface}/TURN")" json_add_string "status" "$(cat "$MWAN3_STATUS_DIR/${iface}/STATUS")" json_add_boolean "running" "${running}" json_add_array "track_ip" From a4fbc7eba670c2622c47ee9fe3d60d89909ea559 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 2 Aug 2017 14:53:18 +0200 Subject: [PATCH 12/15] net/mwan3: fix ipset generation in hotplug script with an lock Fix critical section during hotplug events. Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index cd4bdb3b1..f9638e62b 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -12,7 +12,9 @@ if [ "$ACTION" == "ifup" ]; then [ -n "$DEVICE" ] || exit 3 fi +mwan3_lock mwan3_set_connected_iptables +mwan3_unlock config_load mwan3 config_get enabled $INTERFACE enabled 0 From 44eb0a7c9ded2756fbce0da055f081176b6cd2da Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Tue, 8 Aug 2017 09:31:34 +0200 Subject: [PATCH 13/15] net/mwan3: add Makefile postinst and postrm for rpcd Restart rpcd on package install/remove Signed-off-by: Florian Eckert --- net/mwan3/Makefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index e32882dd6..17606e64d 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -39,6 +39,22 @@ endef define Build/Compile endef +define Package/mwan3/postinst +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + /etc/init.d/rpcd restart +fi +exit 0 +endef + +define Package/mwan3/postrm +#!/bin/sh +if [ -z "$${IPKG_INSTROOT}" ]; then + /etc/init.d/rpcd restart +fi +exit 0 +endef + define Package/mwan3/install $(CP) ./files/* $(1) endef From c872189d666f92a1611cd389a1a1f0eb2ae880df Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 4 Aug 2017 13:23:39 +0200 Subject: [PATCH 14/15] net/mwan3: add hotplug script for hidden self interface generation Add new globals config section with option local_source. With this config option the self interface generation will be done now automatically on hotplug event. You can specify which interface (ip) sould be used for router traffic. To replace the self intereface in the config set local_source to "lan". The default option is none, so it will not change default behavior if a "self" interface is configured in the network section. Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/14-mwan3 | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 net/mwan3/files/etc/hotplug.d/iface/14-mwan3 diff --git a/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 new file mode 100644 index 000000000..1ddf0acca --- /dev/null +++ b/net/mwan3/files/etc/hotplug.d/iface/14-mwan3 @@ -0,0 +1,45 @@ +#!/bin/sh + +. /lib/functions.sh +. /lib/mwan3/mwan3.sh +. /lib/functions/network.sh + +[ "$ACTION" = "ifup" -o "$ACTION" = "ifdown" ] || exit 1 +[ -n "$INTERFACE" ] || exit 2 + +if [ "$ACTION" = "ifup" ]; then + [ -n "$DEVICE" ] || exit 3 +fi + +config_load mwan3 +config_get local_source globals local_source 'none' +[ "${local_source}" = "none" ] && { + exit 0 +} + +[ "${local_source}" = "$INTERFACE" ] || { + exit 0 +} + +mwan3_lock +src_ip=$(uci -q -P /var/state get mwan3.globals.src_ip 2>/dev/null) +[ "${src_ip}" != "" ] && { + ip route del default via "${src_ip}" dev lo 1>/dev/null 2>&1 + ip addr del "${src_ip}/32" dev lo 1>/dev/null 2>&1 +} + +usleep 10000 + +[ "$ACTION" = "ifup" ] && { + network_get_ipaddr src_ip "${local_source}" + if [ "${src_ip}" = "" ]; then + $LOG warn "Unable to set source ip for own initiated traffic (${local_source})" + else + ip addr add "${src_ip}/32" dev lo + ip route add default via "${src_ip}" dev lo + uci -q -P /var/state set mwan3.globals.src_ip="${src_ip}" + fi +} +mwan3_unlock + +exit 0 From a0e8010e7ac23a8c8d98fe86f707426870f25958 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Thu, 10 Aug 2017 12:36:21 +0200 Subject: [PATCH 15/15] net/mwan3: update version Signed-off-by: Florian Eckert --- net/mwan3/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 17606e64d..339cfb64a 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.6.1 -PKG_RELEASE:=1 +PKG_VERSION:=2.6.2 +PKG_RELEASE:=2 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPLv2