mwan3: optimize the process of copying routing tables
authorChen Minqiang <redacted>
Mon, 10 Sep 2018 12:07:03 +0000 (20:07 +0800)
committerChen Minqiang <redacted>
Fri, 21 Sep 2018 07:35:39 +0000 (15:35 +0800)
 - The original copy process is to delete all routing tables first,
   then add new routing table. This process is too slow and very dirty.
 - We use grep to identify the changes and apply them.
 - ignore ipv6 unreachable routes
 - update version number

Signed-off-by: Chen Minqiang <redacted>
net/mwan3/Makefile
net/mwan3/files/lib/mwan3/mwan3.sh

index 741c92ce72707e0781c86b9b25196259a78bbe7b..0ed7488a705c43f762049b9aad3a0d0a041eb927 100644 (file)
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mwan3
-PKG_VERSION:=2.7.0
+PKG_VERSION:=2.7.1
 PKG_RELEASE:=1
 PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
 PKG_LICENSE:=GPLv2
index f252cb26bac8a2a77e82456de614b7b80eb3b686..541e64d248284e1302f1ddb1f369507b0a7570fa 100644 (file)
@@ -25,27 +25,27 @@ mwan3_rtmon_ipv4()
        local tid=1
        local idx=0
        local ret=1
-       main_tbsum=$($IP4 route list table main  | grep -v ^default | md5sum | head -c32)
+       mkdir -p /tmp/mwan3rtmon
+       ($IP4 route list table main  | grep -v ^default | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv4.main
        while uci get mwan3.@interface[$idx] >/dev/null 2>&1 ; do
                idx=$((idx+1))
                tid=$idx
                [ "$(uci get mwan3.@interface[$((idx-1))].family)" = "ipv4" ] && {
                        if $IP4 route list table $tid | grep -q ^default; then
-                               tbsum=$($IP4 route list table $tid  | grep -v ^default | md5sum | head -c32)
-                               if [ "$tbsum" != "$main_tbsum" ]; then
-                                       $IP4 route list table $tid | grep -v ^default | while read line; do
-                                               $IP4 route del table $tid $line
-                                       done
-                                       $IP4 route list table main  | grep -v ^default | while read line; do
-                                               $IP4 route add table $tid $line
-                                       done
-                               fi
+                               ($IP4 route list table $tid  | grep -v ^default | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv4.$tid
+                               cat /tmp/mwan3rtmon/ipv4.$tid | grep -v -x -F -f /tmp/mwan3rtmon/ipv4.main | while read line; do
+                                       $IP4 route del table $tid $line
+                               done
+                               cat /tmp/mwan3rtmon/ipv4.main | grep -v -x -F -f /tmp/mwan3rtmon/ipv4.$tid | while read line; do
+                                       $IP4 route add table $tid $line
+                               done
                        fi
                }
                if [ "$(uci get mwan3.@interface[$((idx-1))].enabled)" = "1" ]; then
                        ret=0
                fi
        done
+       rm -f /tmp/mwan3rtmon/ipv4.*
        return $ret
 }
 
@@ -54,27 +54,27 @@ mwan3_rtmon_ipv6()
        local tid=1
        local idx=0
        local ret=1
-       main_tbsum=$($IP6 route list table main  | grep -v "^default\|^::/" | md5sum | head -c32)
+       mkdir -p /tmp/mwan3rtmon
+       ($IP6 route list table main  | grep -v "^default\|^::/0\|^unreachable" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv6.main
        while uci get mwan3.@interface[$idx] >/dev/null 2>&1 ; do
                idx=$((idx+1))
                tid=$idx
                [ "$(uci get mwan3.@interface[$((idx-1))].family)" = "ipv6" ] && {
-                       if $IP6 route list table $tid | grep -q ^::/0; then
-                               tbsum=$($IP6 route list table $tid  | grep -v "^default\|^::/" | md5sum | head -c32)
-                               if [ "$tbsum" != "$main_tbsum" ]; then
-                                       $IP6 route list table $tid | grep -v "^default\|^::/" | while read line; do
-                                               $IP6 route del table $tid $line
-                                       done
-                                       $IP6 route list table main  | grep -v "^default\|^::/" | while read line; do
-                                               $IP6 route add table $tid $line
-                                       done
-                               fi
+                       if $IP6 route list table $tid | grep -q "^default\|^::/0"; then
+                               ($IP6 route list table $tid  | grep -v "^default\|^::/0\|^unreachable" | sort -n; echo empty fixup) >/tmp/mwan3rtmon/ipv6.$tid
+                               cat /tmp/mwan3rtmon/ipv6.$tid | grep -v -x -F -f /tmp/mwan3rtmon/ipv6.main | while read line; do
+                                       $IP6 route del table $tid $line
+                               done
+                               cat /tmp/mwan3rtmon/ipv6.main | grep -v -x -F -f /tmp/mwan3rtmon/ipv6.$tid | while read line; do
+                                       $IP6 route add table $tid $line
+                               done
                        fi
                }
                if [ "$(uci get mwan3.@interface[$((idx-1))].enabled)" = "1" ]; then
                        ret=0
                fi
        done
+       rm -f /tmp/mwan3rtmon/ipv6.*
        return $ret
 }
 
git clone https://git.99rst.org/PROJECT