Compare commits

...

3 Commits

Author SHA1 Message Date
Alex Oprea
60b31e43c8 multiwan: use dns entries from alias interfaces refs #11167 2017-01-18 18:15:29 +01:00
Alex Oprea
07adfe806f multiwan: allow overlapping interface names refs #11167
Overlapping interface names: wan and wwan

fixed wan_id_map

wan_if_map

all the query_config

wan_ip_map and wan_gw_map

wan_fail_map

wan_recorevery_map

wan_monitor_map

fix closing parantheses
2017-01-13 17:13:24 +01:00
Reidar Cederqvist
7a4766a2f7 multiwan-script: added some network_flush_cache to get fresh data 2017-01-13 17:13:20 +01:00

View File

@@ -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}\]/\1/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}\]/\1/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}\]/\1/g")
wan_fail_map=$(echo $wan_fail_map | sed -e "s/\(^\|.*\]\)${1}\[${failchk}\]/\1/g")
update_cache
if [ "$existing_failover" == "3" ]; then
@@ -70,7 +70,7 @@ fail_wan() {
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}\]/\1/g")
if [ -z "$failchk" ]; then
failchk=1
@@ -80,7 +80,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${1}\[${new_fail_count}\]/g")
else
failover add $1
refresh_dns
@@ -103,7 +103,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}\]/\1/g")
update_cache
fi
@@ -117,7 +117,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${1}\[${new_recovery_count}\]/g")
update_cache
else
failover del $1
@@ -138,11 +138,12 @@ acquire_wan_data() {
local old_gateway
local ifname ipaddr gateway
network_flush_cache
network_get_device ifname ${1} || ifname=x
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 +161,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${1}\[${ifname}\]/g")
wan_ip_map=$(echo $wan_ip_map | sed -e "s/\(^\|.*\]\)${1}\[${old_ipaddr}\]/\1${1}\[${ipaddr}\]/g")
wan_gw_map=$(echo $wan_gw_map | sed -e "s/\(^\|.*\]\)${1}\[${old_gateway}\]/\1${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 +206,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
}
@@ -435,6 +436,34 @@ mwanrule() {
add_rule
}
get_dns_servers() {
local group=$1
local groups=$1
local dns=""
local dnss=""
local aliases=""
local g
aliases="$(uci show network| grep =\'@$group\')"
for g in $aliases ; do
g=${g#*.}; g=${g%%.*}
[ "$(uci -q get network.$g)" == "interface" ] || continue
groups="$groups $g"
done
groups="$(echo $groups | tr ' ' '\n' | sort -u | tr '\n' ' ')"
for group in $groups ; do
network_get_dnsserver dns ${group}
dnss="$dnss $dns"
done
echo $dnss
}
refresh_dns() {
local dns
local group
@@ -445,6 +474,8 @@ refresh_dns() {
local compile_dns
local dns_server
network_flush_cache
iptables -F MultiWanDNS -t mangle
rm /tmp/resolv.conf.auto
@@ -461,7 +492,7 @@ refresh_dns() {
failchk=$(query_config failchk $group)
dns=$(uci_get_state multiwan ${group} dns 'auto')
[ "$dns" == "auto" ] && network_get_dnsserver dns ${group}
[ "$dns" == "auto" ] && dns=$(get_dns_servers $group)
dns=$(echo $dns | sed -e "s/ /\n/g")
if [ ! -z "$dns" -a "$failchk" != "x" -a "$ipaddr" != "x" -a "$gateway" != "x" -a "$ifname" != "x" ]; then
@@ -822,6 +853,7 @@ monitor_wan() {
while :; do
[ "${health_monitor%.*}" = 'parallel' ] && sleep $health_interval
network_flush_cache
network_get_device ifname ${1} || ifname=x
network_get_ipaddr ipaddr ${1} || ipaddr=x
network_get_gateway gateway ${1} || gateway=x
@@ -892,7 +924,7 @@ monitor_wan() {
fi
[ "$health_monitor" = 'serial' ] && {
wan_monitor_map=$(echo $wan_monitor_map | sed -e "s/$1\[\w*\]/$1\[$(date +%s)\]/g")
wan_monitor_map=$(echo $wan_monitor_map | sed -e "s/\(^\|.*\]\)${1}\[\w*\]/\1${1}\[$(date +%s)\]/g")
update_cache
break
}