olsrd: init: cleanup an expensive/forky call
authorSaverio Proto <zioproto@gmail.com>
Tue, 19 Feb 2013 17:01:38 +0000 (17:01 +0000)
committerSaverio Proto <zioproto@gmail.com>
Tue, 19 Feb 2013 17:01:38 +0000 (17:01 +0000)
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 <bittorf@bluebottle.com>
SVN-Revision: 35680

net/olsrd/files/olsrd.init

index 6d08b69b2e93cebdb735a9ff7c74d4d67986d8cf..18cd42f54bcc8b2a07306b84aa53f0f015fdcc81 100644 (file)
@@ -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)