From 35d6f3a18220cdebd1fc2bc0fc3139220ab19a24 Mon Sep 17 00:00:00 2001 From: Saverio Proto Date: Tue, 19 Feb 2013 17:01:38 +0000 Subject: [PATCH] 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 SVN-Revision: 35680 --- net/olsrd/files/olsrd.init | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/net/olsrd/files/olsrd.init b/net/olsrd/files/olsrd.init index 6d08b69b2..18cd42f54 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) -- 2.30.2