From 329d18a25c11aead0bbc09546715b9af6fed5ead Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Wed, 16 May 2012 13:37:49 +0000
Subject: [PATCH] firewall: rework interface address determination to skip ipv6
 addresses

SVN-Revision: 31755
---
 package/firewall/files/reflection.hotplug | 28 +++++++++++++++--------
 1 file changed, 19 insertions(+), 9 deletions(-)

diff --git a/package/firewall/files/reflection.hotplug b/package/firewall/files/reflection.hotplug
index 73d9c61df8..62f5097291 100644
--- a/package/firewall/files/reflection.hotplug
+++ b/package/firewall/files/reflection.hotplug
@@ -9,24 +9,34 @@ find_iface_address()
 	local ipaddr="$2"
 	local prefix="$3"
 
+	local idx=1
 	local tmp="$(ubus call network.interface."$iface" status 2>/dev/null)"
 
 	json_load "${tmp:-{}}"
 	json_get_type tmp address
 
 	if [ "$tmp" = array ]; then
-
 		json_select address
-		json_get_type tmp 1
-
-		if [ "$tmp" = object ]; then
 
-			json_select 1
-			[ -n "$ipaddr" ] && json_get_var "$ipaddr" address
-			[ -n "$prefix" ] && json_get_var "$prefix" mask
-
-		fi
+		while true; do
+			json_get_type tmp $idx
+			[ "$tmp" = object ] || break
+
+			json_select $((idx++))
+			json_get_var tmp address
+
+			case "$tmp" in
+				*:*) json_select .. ;;
+				*)
+					[ -n "$ipaddr" ] && json_get_var $ipaddr address
+					[ -n "$prefix" ] && json_get_var $prefix mask
+					return 0 
+				;;
+			esac
+		done
 	fi
+
+	return 1
 }
 
 if [ "$ACTION" = "add" ] && [ "$INTERFACE" = "wan" ]; then
-- 
GitLab