The attached patch modifies the multiwan script to fix a network name parsing issue that I ran into. Previously, the multiwan script did not differentiate between networks with similar suffixes. For example the script treated 2 networks names "wan" and "testwan" as identical.
The patch alters the parsing and increments the revision/version in the makefile. Signed-off-by: Nick Podolak <[email protected]>
From c8dacaac47259dff35b04da64ef39f0525b8f591 Mon Sep 17 00:00:00 2001 From: Nick Podolak <[email protected]> Date: Wed, 20 Nov 2013 14:38:16 -0500 Subject: [PATCH] multiwan: fixes parsing of network names --- net/multiwan/Makefile | 4 +-- net/multiwan/files/usr/bin/multiwan | 47 +++++++++++++++++------------------ 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/net/multiwan/Makefile b/net/multiwan/Makefile index f5161cc..7ba29ce 100644 --- a/net/multiwan/Makefile +++ b/net/multiwan/Makefile @@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=multiwan -PKG_VERSION:=1.0.22 -PKG_RELEASE:=2 +PKG_VERSION:=1.0.23 +PKG_RELEASE:=3 include $(INCLUDE_DIR)/package.mk diff --git a/net/multiwan/files/usr/bin/multiwan b/net/multiwan/files/usr/bin/multiwan index 34cfa54..3a2108d 100755 --- a/net/multiwan/files/usr/bin/multiwan +++ b/net/multiwan/files/usr/bin/multiwan @@ -27,9 +27,9 @@ failover() { add() { - wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") + wan_fail_map=$(echo $wan_fail_map | sed -e "s/^${1}\[${failchk}\]//g" -e "s/\]${1}\[${failchk}\]/\]/g") wan_fail_map="$wan_fail_map${1}[x]" - wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") + wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/^${1}\[${recvrychk}\]//g" -e "s/\]${1}\[${recvrychk}\]/\]/g") update_cache if [ "$existing_failover" == "2" ]; then @@ -46,8 +46,8 @@ failover() { del() { - wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") - wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") + wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/^${1}\[${recvrychk}\]//g" -e "s/\]${1}\[${recvrychk}\]/\]/g") + wan_fail_map=$(echo $wan_fail_map | sed -e "s/^${1}\[${failchk}\]//g" -e "s/\]${1}\[${failchk}\]/\]/g") update_cache if [ "$existing_failover" == "3" ]; then @@ -64,13 +64,12 @@ failover() { fail_wan() { local new_fail_count - local health_fail_retries=$(uci_get_state multiwan ${1} health_fail_retries) local weight=$(uci_get_state multiwan ${1} weight) local failchk=$(query_config failchk $1) local recvrychk=$(query_config recvrychk $1) - wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]//g") + wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/^${1}\[${recvrychk}\]//g" -e "s/\]${1}\[${recvrychk}\]/\]/g") if [ -z "$failchk" ]; then failchk=1 @@ -80,7 +79,7 @@ fail_wan() { if [ "$failchk" != "x" ]; then new_fail_count=$(($failchk + 1)) if [ "$new_fail_count" -lt "$health_fail_retries" ]; then - wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]/$1\[${new_fail_count}\]/g") + wan_fail_map=$(echo $wan_fail_map | sed -e "s/^${1}\[${failchk}\]/$1\[${new_fail_count}\]/g" -e "s/\]${1}\[${failchk}\]/\]$1\[${new_fail_count}\]/g") else failover add $1 refresh_dns @@ -103,7 +102,7 @@ recover_wan() { local wanid=$(query_config wanid $1) if [ ! -z "$failchk" -a "$failchk" != "x" ]; then - wan_fail_map=$(echo $wan_fail_map | sed -e "s/${1}\[${failchk}\]//g") + wan_fail_map=$(echo $wan_fail_map | sed -e "s/^${1}\[${failchk}\]//g" -e "s/\]${1}\[${failchk}\]/\]/g") update_cache fi @@ -117,7 +116,7 @@ recover_wan() { else new_recovery_count=$(($recvrychk + 1)) if [ "$new_recovery_count" -lt "$health_recovery_retries" ]; then - wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/${1}\[${recvrychk}\]/$1\[${new_recovery_count}\]/g") + wan_recovery_map=$(echo $wan_recovery_map | sed -e "s/^${1}\[${recvrychk}\]/$1\[${new_recovery_count}\]/g" -e "s/\]${1}\[${recvrychk}\]/\]$1\[${new_recovery_count}\]/g") update_cache else failover del $1 @@ -142,7 +141,7 @@ acquire_wan_data() { network_get_ipaddr ipaddr ${1} || ipaddr=x network_get_gateway gateway ${1} || gateway=x - check_old_map=$(echo $wan_id_map 2>&1 | grep -o "$1\[") + check_old_map=$(echo $wan_id_map 2>&1 | grep -o -e "^$1\[" -e "\]$1\[") if [ -z $check_old_map ]; then wancount=$(($wancount + 1)) @@ -160,9 +159,9 @@ acquire_wan_data() { old_ifname=$(query_config ifname $1) get_wanid=$(query_config wanid $1) - wan_if_map=$(echo $wan_if_map | sed -e "s/${1}\[${old_ifname}\]/$1\[${ifname}\]/g") - wan_ip_map=$(echo $wan_ip_map | sed -e "s/${1}\[${old_ipaddr}\]/$1\[${ipaddr}\]/g") - wan_gw_map=$(echo $wan_gw_map | sed -e "s/${1}\[${old_gateway}\]/$1\[${gateway}\]/g") + wan_if_map=$(echo $wan_if_map | sed -e "s/^${1}\[${old_ifname}\]/$1\[${ifname}\]/g" -e "s/\]${1}\[${old_ifname}\]/\]$1\[${ifname}\]/g") + wan_ip_map=$(echo $wan_ip_map | sed -e "s/^${1}\[${old_ipaddr}\]/$1\[${ipaddr}\]/g" -e "s/\]${1}\[${old_ipaddr}\]/\]$1\[${ipaddr}\]/g") + wan_gw_map=$(echo $wan_gw_map | sed -e "s/^${1}\[${old_gateway}\]/$1\[${gateway}\]/g" -e "s/\]${1}\[${old_gateway}\]/\]$1\[${gateway}\]/g") if [ "$old_ifname" != "$ifname" ]; then iptables -D MultiWanPreHandler -t mangle -i $old_$ifname -m state --state NEW -j FW${get_wanid}MARK @@ -205,14 +204,14 @@ update_cache() { query_config() { case $1 in - ifname) echo $wan_if_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - ipaddr) echo $wan_ip_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - gateway) echo $wan_gw_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - wanid) echo $wan_id_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - failchk) echo $wan_fail_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - recvrychk) echo $wan_recovery_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - monitor) echo $wan_monitor_map | grep -o "$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; - group) echo $wan_id_map | grep -o "\w*\[$2\]" | awk -F "[" '{print $1}';; + ifname) echo $wan_if_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + ipaddr) echo $wan_ip_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + gateway) echo $wan_gw_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + wanid) echo $wan_id_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + failchk) echo $wan_fail_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + recvrychk) echo $wan_recovery_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + monitor) echo $wan_monitor_map | grep -o -e "^$2\[\w*.*\]" -e "\]$2\[\w*.*\]" | awk -F "[" '{print $2}' | awk -F "]" '{print $1}';; + group) echo $wan_id_map | grep -o "\w*\[$2\]" | awk -F "[" '{print $1}';; esac } @@ -801,7 +800,7 @@ monitor_wan() { network_get_device ifname ${1} || ifname=x network_get_ipaddr ipaddr ${1} || ipaddr=x network_get_gateway gateway ${1} || gateway=x - + if [ "$ifname_cur" != "$ifname" -o "$ipaddr_cur" != "$ipaddr" -o "$gateway_cur" != "$gateway" ]; then add_task "$1" acquire if [ "${health_monitor%.*}" = 'parallel' ]; then @@ -840,7 +839,7 @@ monitor_wan() { add_task "$1" fail else add_task "$1" pass - fi + fi elif [ "$icmp_hosts" == "disable" ]; then add_task "$1" pass @@ -859,7 +858,7 @@ monitor_wan() { add_task() { local group=$1 local task=$2 - grep -o "$group.$task" $jobfile >&- 2>&- || echo "$group.$task" >> $jobfile + grep -o "^$group.$task" $jobfile >&- 2>&- || echo "$group.$task" >> $jobfile } # For health_monitor "parallel", start a background monitor for each group. -- 1.7.9.5
_______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
