From ac75d1363c718d30cec1a43f300da83d0f0aa65d Mon Sep 17 00:00:00 2001
From: jow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Tue, 6 Dec 2011 13:24:47 +0000
Subject: [PATCH] [package] iwinfo: support nl80211 hardware identification
 against radioX pseudo interfaces, useful if radio is not up yet

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29462 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/iwinfo/Makefile             |  2 +-
 package/iwinfo/src/iwinfo_nl80211.c | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/package/iwinfo/Makefile b/package/iwinfo/Makefile
index 471904432..f69b86e8f 100644
--- a/package/iwinfo/Makefile
+++ b/package/iwinfo/Makefile
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libiwinfo
-PKG_RELEASE:=20
+PKG_RELEASE:=21
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
diff --git a/package/iwinfo/src/iwinfo_nl80211.c b/package/iwinfo/src/iwinfo_nl80211.c
index 4b8b37daa..4672b9d64 100644
--- a/package/iwinfo/src/iwinfo_nl80211.c
+++ b/package/iwinfo/src/iwinfo_nl80211.c
@@ -1631,6 +1631,27 @@ int nl80211_get_mbssid_support(const char *ifname, int *buf)
 
 int nl80211_get_hardware_id(const char *ifname, char *buf)
 {
+	int rv;
+	char *res;
+
+	/* Got a radioX pseudo interface, find some interface on it or create one */
+	if (!strncmp(ifname, "radio", 5))
+	{
+		/* Reuse existing interface */
+		if ((res = nl80211_phy2ifname(ifname)) != NULL)
+		{
+			return wext_get_hardware_id(res, buf);
+		}
+
+		/* Need to spawn a temporary iface for finding IDs */
+		else if ((res = nl80211_ifadd(ifname)) != NULL)
+		{
+			rv = wext_get_hardware_id(res, buf);
+			nl80211_ifdel(res);
+			return rv;
+		}
+	}
+
 	return wext_get_hardware_id(ifname, buf);
 }
 
-- 
2.20.1