modules/admin-full: rework luci-bwc/libiwinfo integration
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
This commit is contained in:
parent
f835fc1edf
commit
89678917bd
2 changed files with 31 additions and 46 deletions
|
@ -9,7 +9,7 @@ PKG_BUILD_PARALLEL:=0
|
|||
|
||||
PKG_VERSION:=$(shell $(LUCI_TOPDIR)/build/mkrevision.sh 2>/dev/null || echo unknown)
|
||||
|
||||
PKG_BUILD_DEPENDS:=$(if $(STAGING_DIR_ROOT),lua/host)
|
||||
PKG_BUILD_DEPENDS:=$(if $(STAGING_DIR_ROOT),lua/host) iwinfo
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
|
||||
PKG_USE_MIPS16:=0
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <arpa/inet.h>
|
||||
|
||||
#include <dlfcn.h>
|
||||
#include <iwinfo.h>
|
||||
|
||||
#define STEP_COUNT 60
|
||||
#define STEP_TIME 1
|
||||
|
@ -140,9 +141,7 @@ static void reset_countdown(int sig)
|
|||
static char *progname;
|
||||
static int prognamelen;
|
||||
|
||||
static int (*iw_get_rate)(const char *, int *) = NULL;
|
||||
static int (*iw_get_rssi)(const char *, int *) = NULL;
|
||||
static int (*iw_get_noise)(const char *, int *) = NULL;
|
||||
static struct iwinfo_ops *backend = NULL;
|
||||
|
||||
|
||||
static int init_directory(char *path)
|
||||
|
@ -252,59 +251,45 @@ static void umap_file(struct file_map *m)
|
|||
close(m->fd);
|
||||
}
|
||||
|
||||
static void * iwinfo_open(void)
|
||||
static void * iw_open(void)
|
||||
{
|
||||
return dlopen("/usr/lib/libiwinfo.so", RTLD_LAZY);
|
||||
}
|
||||
|
||||
static int iwinfo_update(
|
||||
static int iw_update(
|
||||
void *iw, const char *ifname, uint16_t *rate, uint8_t *rssi, uint8_t *noise
|
||||
) {
|
||||
int (*probe)(const char *);
|
||||
struct iwinfo_ops *(*probe)(const char *);
|
||||
int val;
|
||||
|
||||
if (!iw_get_rate)
|
||||
if (!backend)
|
||||
{
|
||||
if ((probe = dlsym(iw, "nl80211_probe")) != NULL && probe(ifname))
|
||||
{
|
||||
iw_get_rate = dlsym(iw, "nl80211_get_bitrate");
|
||||
iw_get_rssi = dlsym(iw, "nl80211_get_signal");
|
||||
iw_get_noise = dlsym(iw, "nl80211_get_noise");
|
||||
}
|
||||
else if ((probe = dlsym(iw, "madwifi_probe")) != NULL && probe(ifname))
|
||||
{
|
||||
iw_get_rate = dlsym(iw, "madwifi_get_bitrate");
|
||||
iw_get_rssi = dlsym(iw, "madwifi_get_signal");
|
||||
iw_get_noise = dlsym(iw, "madwifi_get_noise");
|
||||
}
|
||||
else if ((probe = dlsym(iw, "wl_probe")) != NULL && probe(ifname))
|
||||
{
|
||||
iw_get_rate = dlsym(iw, "wl_get_bitrate");
|
||||
iw_get_rssi = dlsym(iw, "wl_get_signal");
|
||||
iw_get_noise = dlsym(iw, "wl_get_noise");
|
||||
}
|
||||
else
|
||||
{
|
||||
probe = dlsym(iw, "iwinfo_backend");
|
||||
|
||||
if (!probe)
|
||||
return 0;
|
||||
|
||||
backend = probe(ifname);
|
||||
|
||||
if (!backend)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
*rate = (iw_get_rate && !iw_get_rate(ifname, &val)) ? val : 0;
|
||||
*rssi = (iw_get_rssi && !iw_get_rssi(ifname, &val)) ? val : 0;
|
||||
*noise = (iw_get_noise && !iw_get_noise(ifname, &val)) ? val : 0;
|
||||
*rate = (backend->bitrate && !backend->bitrate(ifname, &val)) ? val : 0;
|
||||
*rssi = (backend->signal && !backend->signal(ifname, &val)) ? val : 0;
|
||||
*noise = (backend->noise && !backend->noise(ifname, &val)) ? val : 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void iwinfo_close(void *iw)
|
||||
static void iw_close(void *iw)
|
||||
{
|
||||
void (*do_close)(void);
|
||||
void (*finish)(void);
|
||||
|
||||
if ((do_close = dlsym(iw, "nl80211_close")) != NULL) do_close();
|
||||
if ((do_close = dlsym(iw, "madwifi_close")) != NULL) do_close();
|
||||
if ((do_close = dlsym(iw, "wl_close")) != NULL) do_close();
|
||||
if ((do_close = dlsym(iw, "wext_close")) != NULL) do_close();
|
||||
if ((do_close = dlsym(iw, "iwinfo_close")) != NULL) do_close();
|
||||
finish = dlsym(iw, "iwinfo_finish");
|
||||
|
||||
if (finish)
|
||||
finish();
|
||||
|
||||
dlclose(iw);
|
||||
}
|
||||
|
@ -479,7 +464,7 @@ static int run_daemon(void)
|
|||
}
|
||||
|
||||
/* initialize iwinfo */
|
||||
iw = iwinfo_open();
|
||||
iw = iw_open();
|
||||
|
||||
/* go */
|
||||
for (reset_countdown(0); countdown >= 0; countdown--)
|
||||
|
@ -509,19 +494,19 @@ static int run_daemon(void)
|
|||
{
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
#define iwinfo_checkif(pattern) \
|
||||
#define iw_checkif(pattern) \
|
||||
do { \
|
||||
snprintf(ifname, sizeof(ifname), pattern, i); \
|
||||
if (iwinfo_update(iw, ifname, &rate, &rssi, &noise)) \
|
||||
if (iw_update(iw, ifname, &rate, &rssi, &noise)) \
|
||||
{ \
|
||||
update_radiostat(ifname, rate, rssi, noise); \
|
||||
continue; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
iwinfo_checkif("wlan%d");
|
||||
iwinfo_checkif("ath%d");
|
||||
iwinfo_checkif("wl%d");
|
||||
iw_checkif("wlan%d");
|
||||
iw_checkif("ath%d");
|
||||
iw_checkif("wl%d");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -574,7 +559,7 @@ static int run_daemon(void)
|
|||
unlink(PID_PATH);
|
||||
|
||||
if (iw)
|
||||
iwinfo_close(iw);
|
||||
iw_close(iw);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue