summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-04 20:37:01 +0000
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-12-04 20:37:01 +0000
commitde1bb6ef97ddd71db237578bd5f7ed8c5a61fb82 (patch)
tree454302aa37566a7b2a7f06ddba356f9e221038d1
parent8465aaa53c9b6865fab1f39b31ab9737f1112304 (diff)
[package] iwinfo: expose txpower and frequency offset information
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@29425 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/iwinfo/Makefile2
-rw-r--r--package/iwinfo/src/include/iwinfo.h2
-rw-r--r--package/iwinfo/src/include/iwinfo/madwifi.h50
-rw-r--r--package/iwinfo/src/include/iwinfo/nl80211.h50
-rw-r--r--package/iwinfo/src/include/iwinfo/wext.h50
-rw-r--r--package/iwinfo/src/include/iwinfo/wl.h50
-rw-r--r--package/iwinfo/src/iwinfo_cli.c34
-rw-r--r--package/iwinfo/src/iwinfo_lib.c2
-rw-r--r--package/iwinfo/src/iwinfo_lua.c16
-rw-r--r--package/iwinfo/src/iwinfo_madwifi.c53
-rw-r--r--package/iwinfo/src/iwinfo_nl80211.c41
-rw-r--r--package/iwinfo/src/iwinfo_wext.c14
-rw-r--r--package/iwinfo/src/iwinfo_wl.c25
13 files changed, 281 insertions, 108 deletions
diff --git a/package/iwinfo/Makefile b/package/iwinfo/Makefile
index db11844cf..471904432 100644
--- a/package/iwinfo/Makefile
+++ b/package/iwinfo/Makefile
@@ -7,7 +7,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=libiwinfo
-PKG_RELEASE:=19
+PKG_RELEASE:=20
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
diff --git a/package/iwinfo/src/include/iwinfo.h b/package/iwinfo/src/include/iwinfo.h
index 86bf8b1b6..198d57c9d 100644
--- a/package/iwinfo/src/include/iwinfo.h
+++ b/package/iwinfo/src/include/iwinfo.h
@@ -120,7 +120,9 @@ extern const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[];
struct iwinfo_ops {
int (*channel)(const char *, int *);
int (*frequency)(const char *, int *);
+ int (*frequency_offset)(const char *, int *);
int (*txpower)(const char *, int *);
+ int (*txpower_offset)(const char *, int *);
int (*bitrate)(const char *, int *);
int (*signal)(const char *, int *);
int (*noise)(const char *, int *);
diff --git a/package/iwinfo/src/include/iwinfo/madwifi.h b/package/iwinfo/src/include/iwinfo/madwifi.h
index ecbe749c8..9acbc3646 100644
--- a/package/iwinfo/src/include/iwinfo/madwifi.h
+++ b/package/iwinfo/src/include/iwinfo/madwifi.h
@@ -32,7 +32,9 @@ int madwifi_get_bssid(const char *ifname, char *buf);
int madwifi_get_country(const char *ifname, char *buf);
int madwifi_get_channel(const char *ifname, int *buf);
int madwifi_get_frequency(const char *ifname, int *buf);
+int madwifi_get_frequency_offset(const char *ifname, int *buf);
int madwifi_get_txpower(const char *ifname, int *buf);
+int madwifi_get_txpower_offset(const char *ifname, int *buf);
int madwifi_get_bitrate(const char *ifname, int *buf);
int madwifi_get_signal(const char *ifname, int *buf);
int madwifi_get_noise(const char *ifname, int *buf);
@@ -51,29 +53,31 @@ int madwifi_get_hardware_name(const char *ifname, char *buf);
void madwifi_close(void);
static const struct iwinfo_ops madwifi_ops = {
- .channel = madwifi_get_channel,
- .frequency = madwifi_get_frequency,
- .txpower = madwifi_get_txpower,
- .bitrate = madwifi_get_bitrate,
- .signal = madwifi_get_signal,
- .noise = madwifi_get_noise,
- .quality = madwifi_get_quality,
- .quality_max = madwifi_get_quality_max,
- .mbssid_support = madwifi_get_mbssid_support,
- .hwmodelist = madwifi_get_hwmodelist,
- .mode = madwifi_get_mode,
- .ssid = madwifi_get_ssid,
- .bssid = madwifi_get_bssid,
- .country = madwifi_get_country,
- .hardware_id = madwifi_get_hardware_id,
- .hardware_name = madwifi_get_hardware_name,
- .encryption = madwifi_get_encryption,
- .assoclist = madwifi_get_assoclist,
- .txpwrlist = madwifi_get_txpwrlist,
- .scanlist = madwifi_get_scanlist,
- .freqlist = madwifi_get_freqlist,
- .countrylist = madwifi_get_countrylist,
- .close = madwifi_close
+ .channel = madwifi_get_channel,
+ .frequency = madwifi_get_frequency,
+ .frequency_offset = madwifi_get_frequency_offset,
+ .txpower = madwifi_get_txpower,
+ .txpower_offset = madwifi_get_txpower_offset,
+ .bitrate = madwifi_get_bitrate,
+ .signal = madwifi_get_signal,
+ .noise = madwifi_get_noise,
+ .quality = madwifi_get_quality,
+ .quality_max = madwifi_get_quality_max,
+ .mbssid_support = madwifi_get_mbssid_support,
+ .hwmodelist = madwifi_get_hwmodelist,
+ .mode = madwifi_get_mode,
+ .ssid = madwifi_get_ssid,
+ .bssid = madwifi_get_bssid,
+ .country = madwifi_get_country,
+ .hardware_id = madwifi_get_hardware_id,
+ .hardware_name = madwifi_get_hardware_name,
+ .encryption = madwifi_get_encryption,
+ .assoclist = madwifi_get_assoclist,
+ .txpwrlist = madwifi_get_txpwrlist,
+ .scanlist = madwifi_get_scanlist,
+ .freqlist = madwifi_get_freqlist,
+ .countrylist = madwifi_get_countrylist,
+ .close = madwifi_close
};
#endif
diff --git a/package/iwinfo/src/include/iwinfo/nl80211.h b/package/iwinfo/src/include/iwinfo/nl80211.h
index 3df25d34b..fd0ddb43a 100644
--- a/package/iwinfo/src/include/iwinfo/nl80211.h
+++ b/package/iwinfo/src/include/iwinfo/nl80211.h
@@ -63,7 +63,9 @@ int nl80211_get_bssid(const char *ifname, char *buf);
int nl80211_get_country(const char *ifname, char *buf);
int nl80211_get_channel(const char *ifname, int *buf);
int nl80211_get_frequency(const char *ifname, int *buf);
+int nl80211_get_frequency_offset(const char *ifname, int *buf);
int nl80211_get_txpower(const char *ifname, int *buf);
+int nl80211_get_txpower_offset(const char *ifname, int *buf);
int nl80211_get_bitrate(const char *ifname, int *buf);
int nl80211_get_signal(const char *ifname, int *buf);
int nl80211_get_noise(const char *ifname, int *buf);
@@ -82,29 +84,31 @@ int nl80211_get_hardware_name(const char *ifname, char *buf);
void nl80211_close(void);
static const struct iwinfo_ops nl80211_ops = {
- .channel = nl80211_get_channel,
- .frequency = nl80211_get_frequency,
- .txpower = nl80211_get_txpower,
- .bitrate = nl80211_get_bitrate,
- .signal = nl80211_get_signal,
- .noise = nl80211_get_noise,
- .quality = nl80211_get_quality,
- .quality_max = nl80211_get_quality_max,
- .mbssid_support = nl80211_get_mbssid_support,
- .hwmodelist = nl80211_get_hwmodelist,
- .mode = nl80211_get_mode,
- .ssid = nl80211_get_ssid,
- .bssid = nl80211_get_bssid,
- .country = nl80211_get_country,
- .hardware_id = nl80211_get_hardware_id,
- .hardware_name = nl80211_get_hardware_name,
- .encryption = nl80211_get_encryption,
- .assoclist = nl80211_get_assoclist,
- .txpwrlist = nl80211_get_txpwrlist,
- .scanlist = nl80211_get_scanlist,
- .freqlist = nl80211_get_freqlist,
- .countrylist = nl80211_get_countrylist,
- .close = nl80211_close
+ .channel = nl80211_get_channel,
+ .frequency = nl80211_get_frequency,
+ .frequency_offset = nl80211_get_frequency_offset,
+ .txpower = nl80211_get_txpower,
+ .txpower_offset = nl80211_get_txpower_offset,
+ .bitrate = nl80211_get_bitrate,
+ .signal = nl80211_get_signal,
+ .noise = nl80211_get_noise,
+ .quality = nl80211_get_quality,
+ .quality_max = nl80211_get_quality_max,
+ .mbssid_support = nl80211_get_mbssid_support,
+ .hwmodelist = nl80211_get_hwmodelist,
+ .mode = nl80211_get_mode,
+ .ssid = nl80211_get_ssid,
+ .bssid = nl80211_get_bssid,
+ .country = nl80211_get_country,
+ .hardware_id = nl80211_get_hardware_id,
+ .hardware_name = nl80211_get_hardware_name,
+ .encryption = nl80211_get_encryption,
+ .assoclist = nl80211_get_assoclist,
+ .txpwrlist = nl80211_get_txpwrlist,
+ .scanlist = nl80211_get_scanlist,
+ .freqlist = nl80211_get_freqlist,
+ .countrylist = nl80211_get_countrylist,
+ .close = nl80211_close
};
#endif
diff --git a/package/iwinfo/src/include/iwinfo/wext.h b/package/iwinfo/src/include/iwinfo/wext.h
index 4d2f4aa0a..8412ef39b 100644
--- a/package/iwinfo/src/include/iwinfo/wext.h
+++ b/package/iwinfo/src/include/iwinfo/wext.h
@@ -33,7 +33,9 @@ int wext_get_bssid(const char *ifname, char *buf);
int wext_get_country(const char *ifname, char *buf);
int wext_get_channel(const char *ifname, int *buf);
int wext_get_frequency(const char *ifname, int *buf);
+int wext_get_frequency_offset(const char *ifname, int *buf);
int wext_get_txpower(const char *ifname, int *buf);
+int wext_get_txpower_offset(const char *ifname, int *buf);
int wext_get_bitrate(const char *ifname, int *buf);
int wext_get_signal(const char *ifname, int *buf);
int wext_get_noise(const char *ifname, int *buf);
@@ -52,29 +54,31 @@ int wext_get_hardware_name(const char *ifname, char *buf);
void wext_close(void);
static const struct iwinfo_ops wext_ops = {
- .channel = wext_get_channel,
- .frequency = wext_get_frequency,
- .txpower = wext_get_txpower,
- .bitrate = wext_get_bitrate,
- .signal = wext_get_signal,
- .noise = wext_get_noise,
- .quality = wext_get_quality,
- .quality_max = wext_get_quality_max,
- .mbssid_support = wext_get_mbssid_support,
- .hwmodelist = wext_get_hwmodelist,
- .mode = wext_get_mode,
- .ssid = wext_get_ssid,
- .bssid = wext_get_bssid,
- .country = wext_get_country,
- .hardware_id = wext_get_hardware_id,
- .hardware_name = wext_get_hardware_name,
- .encryption = wext_get_encryption,
- .assoclist = wext_get_assoclist,
- .txpwrlist = wext_get_txpwrlist,
- .scanlist = wext_get_scanlist,
- .freqlist = wext_get_freqlist,
- .countrylist = wext_get_countrylist,
- .close = wext_close
+ .channel = wext_get_channel,
+ .frequency = wext_get_frequency,
+ .frequency_offset = wext_get_frequency_offset,
+ .txpower = wext_get_txpower,
+ .txpower_offset = wext_get_txpower_offset,
+ .bitrate = wext_get_bitrate,
+ .signal = wext_get_signal,
+ .noise = wext_get_noise,
+ .quality = wext_get_quality,
+ .quality_max = wext_get_quality_max,
+ .mbssid_support = wext_get_mbssid_support,
+ .hwmodelist = wext_get_hwmodelist,
+ .mode = wext_get_mode,
+ .ssid = wext_get_ssid,
+ .bssid = wext_get_bssid,
+ .country = wext_get_country,
+ .hardware_id = wext_get_hardware_id,
+ .hardware_name = wext_get_hardware_name,
+ .encryption = wext_get_encryption,
+ .assoclist = wext_get_assoclist,
+ .txpwrlist = wext_get_txpwrlist,
+ .scanlist = wext_get_scanlist,
+ .freqlist = wext_get_freqlist,
+ .countrylist = wext_get_countrylist,
+ .close = wext_close
};
#endif
diff --git a/package/iwinfo/src/include/iwinfo/wl.h b/package/iwinfo/src/include/iwinfo/wl.h
index 10be96aeb..47dda4710 100644
--- a/package/iwinfo/src/include/iwinfo/wl.h
+++ b/package/iwinfo/src/include/iwinfo/wl.h
@@ -32,7 +32,9 @@ int wl_get_bssid(const char *ifname, char *buf);
int wl_get_country(const char *ifname, char *buf);
int wl_get_channel(const char *ifname, int *buf);
int wl_get_frequency(const char *ifname, int *buf);
+int wl_get_frequency_offset(const char *ifname, int *buf);
int wl_get_txpower(const char *ifname, int *buf);
+int wl_get_txpower_offset(const char *ifname, int *buf);
int wl_get_bitrate(const char *ifname, int *buf);
int wl_get_signal(const char *ifname, int *buf);
int wl_get_noise(const char *ifname, int *buf);
@@ -52,29 +54,31 @@ int wl_get_hardware_name(const char *ifname, char *buf);
void wl_close(void);
static const struct iwinfo_ops wl_ops = {
- .channel = wl_get_channel,
- .frequency = wl_get_frequency,
- .txpower = wl_get_txpower,
- .bitrate = wl_get_bitrate,
- .signal = wl_get_signal,
- .noise = wl_get_noise,
- .quality = wl_get_quality,
- .quality_max = wl_get_quality_max,
- .mbssid_support = wl_get_mbssid_support,
- .hwmodelist = wl_get_hwmodelist,
- .mode = wl_get_mode,
- .ssid = wl_get_ssid,
- .bssid = wl_get_bssid,
- .country = wl_get_country,
- .hardware_id = wl_get_hardware_id,
- .hardware_name = wl_get_hardware_name,
- .encryption = wl_get_encryption,
- .assoclist = wl_get_assoclist,
- .txpwrlist = wl_get_txpwrlist,
- .scanlist = wl_get_scanlist,
- .freqlist = wl_get_freqlist,
- .countrylist = wl_get_countrylist,
- .close = wl_close
+ .channel = wl_get_channel,
+ .frequency = wl_get_frequency,
+ .frequency_offset = wl_get_frequency_offset,
+ .txpower = wl_get_txpower,
+ .txpower_offset = wl_get_txpower_offset,
+ .bitrate = wl_get_bitrate,
+ .signal = wl_get_signal,
+ .noise = wl_get_noise,
+ .quality = wl_get_quality,
+ .quality_max = wl_get_quality_max,
+ .mbssid_support = wl_get_mbssid_support,
+ .hwmodelist = wl_get_hwmodelist,
+ .mode = wl_get_mode,
+ .ssid = wl_get_ssid,
+ .bssid = wl_get_bssid,
+ .country = wl_get_country,
+ .hardware_id = wl_get_hardware_id,
+ .hardware_name = wl_get_hardware_name,
+ .encryption = wl_get_encryption,
+ .assoclist = wl_get_assoclist,
+ .txpwrlist = wl_get_txpwrlist,
+ .scanlist = wl_get_scanlist,
+ .freqlist = wl_get_freqlist,
+ .countrylist = wl_get_countrylist,
+ .close = wl_close
};
#endif
diff --git a/package/iwinfo/src/iwinfo_cli.c b/package/iwinfo/src/iwinfo_cli.c
index bfa1d88ef..d5be084bd 100644
--- a/package/iwinfo/src/iwinfo_cli.c
+++ b/package/iwinfo/src/iwinfo_cli.c
@@ -311,6 +311,36 @@ static char * print_hardware_name(const struct iwinfo_ops *iw, const char *ifnam
return buf;
}
+static char * print_txpower_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->txpower_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%d dB", off);
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+
+static char * print_frequency_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->frequency_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%.3f GHz", ((float)off / 1000.0));
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+
static char * print_ssid(const struct iwinfo_ops *iw, const char *ifname)
{
char buf[IWINFO_ESSID_MAX_SIZE+1] = { 0 };
@@ -473,6 +503,10 @@ static void print_info(const struct iwinfo_ops *iw, const char *ifname)
printf(" Hardware: %s [%s]\n",
print_hardware_id(iw, ifname),
print_hardware_name(iw, ifname));
+ printf(" TX power offset: %s\n",
+ print_txpower_offset(iw, ifname));
+ printf(" Frequency offset: %s\n",
+ print_frequency_offset(iw, ifname));
printf(" Supports VAPs: %s\n",
print_mbssid_supp(iw, ifname));
}
diff --git a/package/iwinfo/src/iwinfo_lib.c b/package/iwinfo/src/iwinfo_lib.c
index e088d03f0..e33c79507 100644
--- a/package/iwinfo/src/iwinfo_lib.c
+++ b/package/iwinfo/src/iwinfo_lib.c
@@ -347,7 +347,7 @@ const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[] = {
{ VENDOR_UBNT, "SR71A", 0x168c, 0x0027, 0x168c, 0x2082, 10, 0 },
{ VENDOR_UBNT, "SR71", 0x168c, 0x0027, 0x0777, 0x4082, 10, 0 },
#endif
-#ifdef NL80211
+#ifdef USE_NL80211
{ VENDOR_UBNT, "NanoStation M2", 0x168c, 0x002a, 0x0777, 0xe012, 10, 0 }, /* ToDo: confirm offset */
{ VENDOR_UBNT, "NanoStation M5", 0x168c, 0x002a, 0x0777, 0xe005, 5, 0 }, /* ToDo: confirm offset */
{ VENDOR_UBNT, "Bullet M2", 0x168c, 0x002a, 0x0777, 0xe202, 12, 0 },
diff --git a/package/iwinfo/src/iwinfo_lua.c b/package/iwinfo/src/iwinfo_lua.c
index 08eec18bd..533236b4d 100644
--- a/package/iwinfo/src/iwinfo_lua.c
+++ b/package/iwinfo/src/iwinfo_lua.c
@@ -558,7 +558,9 @@ static int iwinfo_L_countrylist(lua_State *L, int (*func)(const char *, char *,
/* Broadcom */
LUA_WRAP_INT(wl,channel)
LUA_WRAP_INT(wl,frequency)
+LUA_WRAP_INT(wl,frequency_offset)
LUA_WRAP_INT(wl,txpower)
+LUA_WRAP_INT(wl,txpower_offset)
LUA_WRAP_INT(wl,bitrate)
LUA_WRAP_INT(wl,signal)
LUA_WRAP_INT(wl,noise)
@@ -584,7 +586,9 @@ LUA_WRAP_STRUCT(wl,hardware_id)
/* Madwifi */
LUA_WRAP_INT(madwifi,channel)
LUA_WRAP_INT(madwifi,frequency)
+LUA_WRAP_INT(madwifi,frequency_offset)
LUA_WRAP_INT(madwifi,txpower)
+LUA_WRAP_INT(madwifi,txpower_offset)
LUA_WRAP_INT(madwifi,bitrate)
LUA_WRAP_INT(madwifi,signal)
LUA_WRAP_INT(madwifi,noise)
@@ -610,7 +614,9 @@ LUA_WRAP_STRUCT(madwifi,hardware_id)
/* NL80211 */
LUA_WRAP_INT(nl80211,channel)
LUA_WRAP_INT(nl80211,frequency)
+LUA_WRAP_INT(nl80211,frequency_offset)
LUA_WRAP_INT(nl80211,txpower)
+LUA_WRAP_INT(nl80211,txpower_offset)
LUA_WRAP_INT(nl80211,bitrate)
LUA_WRAP_INT(nl80211,signal)
LUA_WRAP_INT(nl80211,noise)
@@ -635,7 +641,9 @@ LUA_WRAP_STRUCT(nl80211,hardware_id)
/* Wext */
LUA_WRAP_INT(wext,channel)
LUA_WRAP_INT(wext,frequency)
+LUA_WRAP_INT(wext,frequency_offset)
LUA_WRAP_INT(wext,txpower)
+LUA_WRAP_INT(wext,txpower_offset)
LUA_WRAP_INT(wext,bitrate)
LUA_WRAP_INT(wext,signal)
LUA_WRAP_INT(wext,noise)
@@ -661,7 +669,9 @@ LUA_WRAP_STRUCT(wext,hardware_id)
static const luaL_reg R_wl[] = {
LUA_REG(wl,channel),
LUA_REG(wl,frequency),
+ LUA_REG(wl,frequency_offset),
LUA_REG(wl,txpower),
+ LUA_REG(wl,txpower_offset),
LUA_REG(wl,bitrate),
LUA_REG(wl,signal),
LUA_REG(wl,noise),
@@ -690,7 +700,9 @@ static const luaL_reg R_wl[] = {
static const luaL_reg R_madwifi[] = {
LUA_REG(madwifi,channel),
LUA_REG(madwifi,frequency),
+ LUA_REG(madwifi,frequency_offset),
LUA_REG(madwifi,txpower),
+ LUA_REG(madwifi,txpower_offset),
LUA_REG(madwifi,bitrate),
LUA_REG(madwifi,signal),
LUA_REG(madwifi,noise),
@@ -719,7 +731,9 @@ static const luaL_reg R_madwifi[] = {
static const luaL_reg R_nl80211[] = {
LUA_REG(nl80211,channel),
LUA_REG(nl80211,frequency),
+ LUA_REG(nl80211,frequency_offset),
LUA_REG(nl80211,txpower),
+ LUA_REG(nl80211,txpower_offset),
LUA_REG(nl80211,bitrate),
LUA_REG(nl80211,signal),
LUA_REG(nl80211,noise),
@@ -747,7 +761,9 @@ static const luaL_reg R_nl80211[] = {
static const luaL_reg R_wext[] = {
LUA_REG(wext,channel),
LUA_REG(wext,frequency),
+ LUA_REG(wext,frequency_offset),
LUA_REG(wext,txpower),
+ LUA_REG(wext,txpower_offset),
LUA_REG(wext,bitrate),
LUA_REG(wext,signal),
LUA_REG(wext,noise),
diff --git a/package/iwinfo/src/iwinfo_madwifi.c b/package/iwinfo/src/iwinfo_madwifi.c
index 50793c493..732cfe56f 100644
--- a/package/iwinfo/src/iwinfo_madwifi.c
+++ b/package/iwinfo/src/iwinfo_madwifi.c
@@ -1060,20 +1060,59 @@ int madwifi_get_hardware_id(const char *ifname, char *buf)
return 0;
}
-int madwifi_get_hardware_name(const char *ifname, char *buf)
+static const struct iwinfo_hardware_entry *
+madwifi_get_hardware_entry(const char *ifname)
{
struct iwinfo_hardware_id id;
- struct iwinfo_hardware_entry *hw;
if (madwifi_get_hardware_id(ifname, (char *)&id))
- return -1;
+ return NULL;
- hw = iwinfo_hardware(&id);
+ return iwinfo_hardware(&id);
+}
- if (hw)
- sprintf(buf, "%s %s", hw->vendor_name, hw->device_name);
+int madwifi_get_hardware_name(const char *ifname, char *buf)
+{
+ char vendor[64];
+ char device[64];
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ {
+ madwifi_proc_file(ifname, "dev_vendor", vendor, sizeof(vendor));
+ madwifi_proc_file(ifname, "dev_name", device, sizeof(device));
+
+ if (vendor[0] && device[0])
+ sprintf(buf, "%s %s", vendor, device);
+ else
+ sprintf(buf, "Generic Atheros");
+ }
else
- sprintf(buf, "Generic Atheros");
+ {
+ sprintf(buf, "%s %s", hw->vendor_name, hw->device_name);
+ }
+
+ return 0;
+}
+
+int madwifi_get_txpower_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ return -1;
+
+ *buf = hw->txpower_offset;
+ return 0;
+}
+
+int madwifi_get_frequency_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ return -1;
+ *buf = hw->frequency_offset;
return 0;
}
diff --git a/package/iwinfo/src/iwinfo_nl80211.c b/package/iwinfo/src/iwinfo_nl80211.c
index d3726821f..4b8b37daa 100644
--- a/package/iwinfo/src/iwinfo_nl80211.c
+++ b/package/iwinfo/src/iwinfo_nl80211.c
@@ -1634,20 +1634,47 @@ int nl80211_get_hardware_id(const char *ifname, char *buf)
return wext_get_hardware_id(ifname, buf);
}
-int nl80211_get_hardware_name(const char *ifname, char *buf)
+static const struct iwinfo_hardware_entry *
+nl80211_get_hardware_entry(const char *ifname)
{
struct iwinfo_hardware_id id;
- struct iwinfo_hardware_entry *hw;
if (nl80211_get_hardware_id(ifname, (char *)&id))
- return -1;
+ return NULL;
- hw = iwinfo_hardware(&id);
+ return iwinfo_hardware(&id);
+}
- if (hw)
- sprintf(buf, "%s %s", hw->vendor_name, hw->device_name);
- else
+int nl80211_get_hardware_name(const char *ifname, char *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = nl80211_get_hardware_entry(ifname)))
sprintf(buf, "Generic MAC80211");
+ else
+ sprintf(buf, "%s %s", hw->vendor_name, hw->device_name);
+
+ return 0;
+}
+
+int nl80211_get_txpower_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = nl80211_get_hardware_entry(ifname)))
+ return -1;
+
+ *buf = hw->txpower_offset;
+ return 0;
+}
+
+int nl80211_get_frequency_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = nl80211_get_hardware_entry(ifname)))
+ return -1;
+ *buf = hw->frequency_offset;
return 0;
}
diff --git a/package/iwinfo/src/iwinfo_wext.c b/package/iwinfo/src/iwinfo_wext.c
index 3923c9e76..c74785f87 100644
--- a/package/iwinfo/src/iwinfo_wext.c
+++ b/package/iwinfo/src/iwinfo_wext.c
@@ -515,3 +515,17 @@ int wext_get_hardware_name(const char *ifname, char *buf)
sprintf(buf, "Generic WEXT");
return 0;
}
+
+int wext_get_txpower_offset(const char *ifname, int *buf)
+{
+ /* Stub */
+ *buf = 0;
+ return -1;
+}
+
+int wext_get_frequency_offset(const char *ifname, int *buf)
+{
+ /* Stub */
+ *buf = 0;
+ return -1;
+}
diff --git a/package/iwinfo/src/iwinfo_wl.c b/package/iwinfo/src/iwinfo_wl.c
index 76984de33..7b39a9b86 100644
--- a/package/iwinfo/src/iwinfo_wl.c
+++ b/package/iwinfo/src/iwinfo_wl.c
@@ -585,3 +585,28 @@ int wl_get_hardware_name(const char *ifname, char *buf)
return 0;
}
+
+int wl_get_txpower_offset(const char *ifname, int *buf)
+{
+ FILE *p;
+ char off[8];
+
+ *buf = 0;
+
+ if ((p = popen("/usr/sbin/nvram get opo", "r")) != NULL)
+ {
+ if (fread(off, 1, sizeof(off), p))
+ *buf = strtoul(off, NULL, 16);
+
+ pclose(p);
+ }
+
+ return 0;
+}
+
+int wl_get_frequency_offset(const char *ifname, int *buf)
+{
+ /* Stub */
+ *buf = 0;
+ return -1;
+}