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>
git-svn-id: svn://svn.openwrt.org/openwrt/packages@35680
3c298f89-4303-0410-b956-
a3cf2f4a3e73
+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
olsrd_setup_smartgw_rules() {
local funcname="olsrd_setup_smartgw_rules"
# Check if ipip is installed
- 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
if [ -z "$wanifnames" ]; then
nowan=1
fi
IP4T=$(which iptables)
fi
IP4T=$(which iptables)