iwinfo: keep an array of backends, reduce the number of ifdefs and hardcoded strcmp calls
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 40809
This commit is contained in:
parent
55131c5f42
commit
2d06acd6ac
6 changed files with 40 additions and 57 deletions
|
@ -148,6 +148,9 @@ extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[];
|
||||||
|
|
||||||
|
|
||||||
struct iwinfo_ops {
|
struct iwinfo_ops {
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
int (*probe)(const char *ifname);
|
||||||
int (*mode)(const char *, int *);
|
int (*mode)(const char *, int *);
|
||||||
int (*channel)(const char *, int *);
|
int (*channel)(const char *, int *);
|
||||||
int (*frequency)(const char *, int *);
|
int (*frequency)(const char *, int *);
|
||||||
|
|
|
@ -54,6 +54,8 @@ int madwifi_get_hardware_name(const char *ifname, char *buf);
|
||||||
void madwifi_close(void);
|
void madwifi_close(void);
|
||||||
|
|
||||||
static const struct iwinfo_ops madwifi_ops = {
|
static const struct iwinfo_ops madwifi_ops = {
|
||||||
|
.name = "madwifi",
|
||||||
|
.probe = madwifi_probe,
|
||||||
.channel = madwifi_get_channel,
|
.channel = madwifi_get_channel,
|
||||||
.frequency = madwifi_get_frequency,
|
.frequency = madwifi_get_frequency,
|
||||||
.frequency_offset = madwifi_get_frequency_offset,
|
.frequency_offset = madwifi_get_frequency_offset,
|
||||||
|
|
|
@ -96,6 +96,8 @@ int nl80211_get_hardware_name(const char *ifname, char *buf);
|
||||||
void nl80211_close(void);
|
void nl80211_close(void);
|
||||||
|
|
||||||
static const struct iwinfo_ops nl80211_ops = {
|
static const struct iwinfo_ops nl80211_ops = {
|
||||||
|
.name = "nl80211",
|
||||||
|
.probe = nl80211_probe,
|
||||||
.channel = nl80211_get_channel,
|
.channel = nl80211_get_channel,
|
||||||
.frequency = nl80211_get_frequency,
|
.frequency = nl80211_get_frequency,
|
||||||
.frequency_offset = nl80211_get_frequency_offset,
|
.frequency_offset = nl80211_get_frequency_offset,
|
||||||
|
|
|
@ -55,6 +55,8 @@ int wext_get_hardware_name(const char *ifname, char *buf);
|
||||||
void wext_close(void);
|
void wext_close(void);
|
||||||
|
|
||||||
static const struct iwinfo_ops wext_ops = {
|
static const struct iwinfo_ops wext_ops = {
|
||||||
|
.name = "wext",
|
||||||
|
.probe = wext_probe,
|
||||||
.channel = wext_get_channel,
|
.channel = wext_get_channel,
|
||||||
.frequency = wext_get_frequency,
|
.frequency = wext_get_frequency,
|
||||||
.frequency_offset = wext_get_frequency_offset,
|
.frequency_offset = wext_get_frequency_offset,
|
||||||
|
|
|
@ -55,6 +55,8 @@ int wl_get_hardware_name(const char *ifname, char *buf);
|
||||||
void wl_close(void);
|
void wl_close(void);
|
||||||
|
|
||||||
static const struct iwinfo_ops wl_ops = {
|
static const struct iwinfo_ops wl_ops = {
|
||||||
|
.name = "wl",
|
||||||
|
.probe = wl_probe,
|
||||||
.channel = wl_get_channel,
|
.channel = wl_get_channel,
|
||||||
.frequency = wl_get_frequency,
|
.frequency = wl_get_frequency,
|
||||||
.frequency_offset = wl_get_frequency_offset,
|
.frequency_offset = wl_get_frequency_offset,
|
||||||
|
|
|
@ -313,77 +313,49 @@ const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[] = {
|
||||||
{ 0, "" }
|
{ 0, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef ARRAY_SIZE
|
||||||
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const struct iwinfo_ops *backends[] = {
|
||||||
|
#ifdef USE_NL80211
|
||||||
|
&nl80211_ops,
|
||||||
|
#endif
|
||||||
|
#ifdef USE_MADWIFI
|
||||||
|
&madwifi_ops,
|
||||||
|
#endif
|
||||||
|
#ifdef USE_WL
|
||||||
|
&wl_ops,
|
||||||
|
#endif
|
||||||
|
&wext_ops,
|
||||||
|
};
|
||||||
|
|
||||||
const char * iwinfo_type(const char *ifname)
|
const char * iwinfo_type(const char *ifname)
|
||||||
{
|
{
|
||||||
#ifdef USE_NL80211
|
const struct iwinfo_ops *ops = iwinfo_backend(ifname);
|
||||||
if (nl80211_probe(ifname))
|
if (!ops)
|
||||||
return "nl80211";
|
return NULL;
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_MADWIFI
|
return ops->name;
|
||||||
if (madwifi_probe(ifname))
|
|
||||||
return "madwifi";
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_WL
|
|
||||||
if (wl_probe(ifname))
|
|
||||||
return "wl";
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (wext_probe(ifname))
|
|
||||||
return "wext";
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct iwinfo_ops * iwinfo_backend(const char *ifname)
|
const struct iwinfo_ops * iwinfo_backend(const char *ifname)
|
||||||
{
|
{
|
||||||
const char *type;
|
int i;
|
||||||
struct iwinfo_ops *ops;
|
|
||||||
|
|
||||||
type = iwinfo_type(ifname);
|
for (i = 0; i < ARRAY_SIZE(backends); i++)
|
||||||
if (!type)
|
if (backends[i]->probe(ifname))
|
||||||
return NULL;
|
return backends[i];
|
||||||
|
|
||||||
#ifdef USE_NL80211
|
|
||||||
if (!strcmp(type, "nl80211"))
|
|
||||||
return &nl80211_ops;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_MADWIFI
|
|
||||||
if (!strcmp(type, "madwifi"))
|
|
||||||
return &madwifi_ops;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef USE_WL
|
|
||||||
if (!strcmp(type, "wl"))
|
|
||||||
return &wl_ops;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!strcmp(type, "wext"))
|
|
||||||
return &wext_ops;
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwinfo_finish(void)
|
void iwinfo_finish(void)
|
||||||
{
|
{
|
||||||
#ifdef USE_WL
|
int i;
|
||||||
wl_close();
|
|
||||||
#endif
|
for (i = 0; i < ARRAY_SIZE(backends); i++)
|
||||||
#ifdef USE_MADWIFI
|
backends[i]->close();
|
||||||
madwifi_close();
|
|
||||||
#endif
|
|
||||||
#ifdef USE_NL80211
|
|
||||||
nl80211_close();
|
|
||||||
#endif
|
|
||||||
wext_close();
|
|
||||||
iwinfo_close();
|
iwinfo_close();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue