[packages] olsrd: init: cleanup an expensive/forky call

for determining all gateways in all routing tables
1) write out the ip-call, never ever abbreviate in scripts
2) avoid forks: sorting/uniq is not needed, if we only append
   yet unappended words
3) use an extra function() for this, better readable
4) check for installed ip-command

Signed-off-by: Bastian Bittorf <bitt...@bluebottle.com>
---
 net/olsrd/files/olsrd.init |   37 +++++++++++++++++++++++++++++++++++--
 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/net/olsrd/files/olsrd.init b/net/olsrd/files/olsrd.init
index 0656247..725f149 100644
--- a/net/olsrd/files/olsrd.init
+++ b/net/olsrd/files/olsrd.init
@@ -558,6 +558,37 @@ olsrd_write_config() {
        return 0
 }
 
+get_wan_ifnames()
+{
+       local wanifnames word catch_next
+
+       which ip >/dev/null || return 1
+
+       set -- $( ip route list exact 0.0.0.0/0 table all )
+       for word in $*; do
+               case "$word" in
+                       dev)
+                               catch_next="true"
+                       ;;
+                       *)
+                               [ -n "$catch_next" ] && {
+                                       case "$wanifnames" in
+                                               *" $word "*)
+                                               ;;
+                                               *)
+                                                       wanifnames="$wanifnames 
$word "
+                                               ;;
+                                       esac
+
+                                       catch_next=
+                               }
+                       ;;
+               esac
+       done
+
+       echo "$wanifnames"
+}
+
 olsrd_setup_smartgw_rules() {
        local funcname="olsrd_setup_smartgw_rules"
        # Check if ipip is installed
@@ -566,10 +597,12 @@ olsrd_setup_smartgw_rules() {
                return 1
        }
 
-       wanifnames=$(ip r l e 0/0 t all | sed -e 's/^.* dev //' |cut -d " " -f 
1 | sort | uniq)
-       nowan=0
+       local wanifnames="$( get_wan_ifnames )"
+
        if [ -z "$wanifnames" ]; then
                nowan=1
+       else
+               nowan=0
        fi
 
        IP4T=$(which iptables)
-- 
1.7.2.5

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to