[packages] wavemon: update to 0.7.3, remove obsolete patches, use PKG_INSTALL & MAKE_FLAGS

git-svn-id: svn://svn.openwrt.org/openwrt/packages@29740 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
swalker 2012-01-14 02:00:22 +00:00
parent b5406d06c3
commit 768939d668
5 changed files with 15 additions and 577 deletions

View File

@ -1,5 +1,5 @@
#
# Copyright (C) 2008 OpenWrt.org
#
# Copyright (C) 2008-2012 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
@ -8,12 +8,14 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wavemon
PKG_VERSION:=0.7.2
PKG_VERSION:=0.7.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=http://eden-feed.erg.abdn.ac.uk/wavemon/stable-releases
PKG_MD5SUM:=0dec700364df7bfb2e066624d0acf7bb
PKG_MD5SUM:=a96bad0359592ac56532067002b9e862
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
@ -21,29 +23,24 @@ define Package/wavemon
SECTION:=net
CATEGORY:=Network
TITLE:=N-curses based wireless network devices monitor
DEPENDS:= +libncurses
DEPENDS:=+libncurses
SUBMENU:=wireless
URL:=http://eden-feed.erg.abdn.ac.uk/wavemon/
endef
define Package/wavemon/description
wavemon is a ncurses-based monitoring application for wireless network
devices. It currently works under Linux with devices that are supported
by the wireless extensions by Jean Tourrilhes (included in Kernel 2.4
and higher), e.g. the Lucent Orinoco cards.
wavemon is a ncurses-based monitoring application for wireless network
devices. It currently works under Linux with devices that are supported
by the wireless extensions by Jean Tourrilhes (included in Kernel 2.4
and higher), e.g. the Lucent Orinoco cards.
endef
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
$(TARGET_CONFIGURE_OPTS) \
CFLAGS="$(TARGET_CFLAGS) -L${STAGING_DIR}/usr/lib -I${STAGING_DIR}/usr/include" \
DESTDIR="$(PKG_INSTALL_DIR)" \
all
endef
MAKE_FLAGS += \
CFLAGS="$(TARGET_CFLAGS) -L$(STAGING_DIR)/usr/lib -I$(STAGING_DIR)/usr/include"
define Package/wavemon/install
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_BUILD_DIR)/wavemon $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/bin
$(CP) $(PKG_INSTALL_DIR)/usr/bin/wavemon $(1)/usr/bin/
endef
$(eval $(call BuildPackage,wavemon))

View File

@ -1,32 +0,0 @@
From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Date: Sat, 12 Mar 2011 19:32:56 +0000 (+0100)
Subject: Configuration screen: memorize last active line
X-Git-Url: http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=wavemon.git;a=commitdiff_plain;h=094538edab8a590ffb14af2101725563d2453104
Configuration screen: memorize last active line
This fixes a bug in the configuration menu - the last active line was not
reset properly when switching back from another window. Changed it in such
a way that it now memorizes the last active position, which is handy when
trying out different values for a given parameter.
---
diff --git a/conf_scr.c b/conf_scr.c
index b9aba23..a338771 100644
--- a/conf_scr.c
+++ b/conf_scr.c
@@ -165,9 +165,11 @@ void scr_conf_init(void)
w_conf = newwin_title(0, WAV_HEIGHT, "Preferences", false);
w_confpad = newpad(num_items + 1, CONF_SCREEN_WIDTH);
- while ((item = ll_get(conf_items, active_item)) && item->type == t_sep)
- active_item++;
- first_item = active_item;
+ if (first_item) /* already initialized */
+ return;
+ while ((item = ll_get(conf_items, first_item)) && item->type == t_sep)
+ first_item++;
+ active_item = first_item;
}
int scr_conf_loop(WINDOW *w_menu)

View File

@ -1,40 +0,0 @@
From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Date: Sat, 12 Mar 2011 19:00:32 +0000 (+0100)
Subject: Info screen: fix a bug in the random level code
X-Git-Url: http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=wavemon.git;a=commitdiff_plain;h=cc8235c4b4ab30898fd60f3ad71b7899cf1bdd66
Info screen: fix a bug in the random level code
The link quality was not converted back correctly, causing negative
values, which then overran the maximum value.
---
diff --git a/iw_if.c b/iw_if.c
index ae5950a..2008c14 100644
--- a/iw_if.c
+++ b/iw_if.c
@@ -369,7 +369,6 @@ static int rand_wave(float *rlvl, float *step, float *rlvl_next, float range)
static void iw_getstat_random(struct iw_stat *iw)
{
static float rnd_sig, snext, sstep = 1.0, rnd_noise, nnext, nstep = 1.0;
- uint8_t smin = dbm_to_u8(conf.sig_min), smax = dbm_to_u8(conf.sig_max);
rand_wave(&rnd_sig, &sstep, &snext, conf.sig_max - conf.sig_min);
rand_wave(&rnd_noise, &nstep, &nnext, conf.noise_max - conf.noise_min);
@@ -377,11 +376,12 @@ static void iw_getstat_random(struct iw_stat *iw)
if (iw->range.max_qual.qual == 0)
iw->range.max_qual.qual = WAVE_RAND_QUAL_MAX;
- iw->stat.qual.level = smin + rnd_sig;
- iw->stat.qual.noise = dbm_to_u8(conf.noise_min) + rnd_noise;
- iw->stat.qual.qual = map_range(iw->stat.qual.level, smin, smax,
- 0, iw->range.max_qual.qual);
+ iw->stat.qual.level = dbm_to_u8(conf.sig_min + rnd_sig);
+ iw->stat.qual.noise = dbm_to_u8(conf.noise_min + rnd_noise);
iw->stat.qual.updated = IW_QUAL_DBM;
+ iw->stat.qual.qual = map_range(conf.sig_min + rnd_sig,
+ conf.sig_min, conf.sig_max,
+ 0, iw->range.max_qual.qual);
}
static void iw_getstat_real(struct iw_statistics *stat)

View File

@ -1,90 +0,0 @@
From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Date: Sun, 27 Feb 2011 20:41:48 +0000 (+0100)
Subject: Better termination
X-Git-Url: http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=wavemon.git;a=commitdiff_plain;h=633c66a214c68af9a54d123307dc1e1209240472
Better termination
This fixes two flaws in the attempt to terminate the other wavemon processes
on error: (i) it was not ensured that wavemon runs in its own process group;
(ii) sending the signal to self is ugly.
---
diff --git a/error.c b/error.c
index 592d3e4..5408c07 100644
--- a/error.c
+++ b/error.c
@@ -59,6 +59,34 @@ void err_msg(const char *format, ...)
sleep(WARN_DISPLAY_DELAY);
}
+/**
+ * terminate_all_processes - terminate wavemon and reset screen
+ * @fmt: printf-like format string
+ * @strerr: set to non-0 if termination is due to failed system call
+ * @ap: argument list for @fmt
+ */
+static void terminate_all_processes(const char *fmt, int strerr, va_list ap)
+{
+ int saved_errno = strerr ? errno : 0;
+ /*
+ * wavemon runs in its own process group. Block TERM in this process,
+ * but send to all others (parent or child), which by default do not
+ * block TERM.
+ */
+ xsignal(SIGTERM, SIG_IGN);
+ endwin();
+ kill(0, SIGTERM);
+ reset_shell_mode();
+ if (saved_errno) {
+ errno = saved_errno;
+ vwarn(fmt, ap);
+ } else {
+ vwarnx(fmt, ap);
+ }
+ va_end(ap);
+ exit(EXIT_FAILURE);
+}
+
/*
* Abort on fatal error unrelated to system call.
*/
@@ -66,13 +94,8 @@ void err_quit(const char *format, ...)
{
va_list argp;
- endwin();
-
va_start(argp, format);
- vwarnx(format, argp);
- va_end(argp);
- /* Exit via kill to terminate any child processes. */
- kill(0, SIGTERM);
+ terminate_all_processes(format, false, argp);
}
/*
@@ -82,10 +105,6 @@ void err_sys(const char *format, ...)
{
va_list argp;
- endwin();
-
va_start(argp, format);
- vwarn(format, argp);
- va_end(argp);
- kill(0, SIGTERM);
+ terminate_all_processes(format, true, argp);
}
diff --git a/wavemon.c b/wavemon.c
index 6c3196e..4e1f492 100644
--- a/wavemon.c
+++ b/wavemon.c
@@ -139,6 +139,7 @@ int main(int argc, char *argv[])
if (!isatty(STDIN_FILENO))
errx(1, "input is not from a terminal");
+ setpgid(0, 0);
/* honour numeric separators if the environment defines them */
setlocale(LC_NUMERIC, "");

View File

@ -1,397 +0,0 @@
From: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Date: Sun, 13 Mar 2011 17:39:40 +0000 (+0100)
Subject: Configuration: decouple configuration items
X-Git-Url: http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=wavemon.git;a=commitdiff_plain;h=74610068abe331927f72aa617689566a2b2a7771
Configuration: decouple configuration items
This puts access to WiFi interface list and currently selected interface
into wrapper functions, to better separate the code blocks.
---
diff --git a/conf.c b/conf.c
index 4004c73..45fa42e 100644
--- a/conf.c
+++ b/conf.c
@@ -22,6 +22,7 @@
#include <sys/types.h>
/* GLOBALS */
+static char **if_list; /* array of WiFi interface names */
int conf_items; /* index into array storing menu items */
static char *on_off_names[] = { [false] = "Off", [true] = "On", NULL };
@@ -116,6 +117,39 @@ static void getargs(int argc, char *argv[])
}
}
+/** Populate interface list */
+void conf_get_interface_list(void)
+{
+ char *old_if = NULL;
+ int idx;
+
+ if (if_list) {
+ for (idx = 0; if_list[idx]; idx++)
+ if (idx == conf.if_idx)
+ old_if = if_list[idx];
+ else
+ free(if_list[idx]);
+ free(if_list);
+ }
+ if_list = iw_get_interface_list();
+ if (if_list == NULL)
+ err_quit("no wireless interfaces found!");
+
+ conf.if_idx = 0;
+ if (old_if) {
+ idx = argv_find(if_list, old_if);
+ if (idx > 0)
+ conf.if_idx = idx;
+ free(old_if);
+ }
+}
+
+/** Return currently selected interface name */
+const char *conf_ifname(void)
+{
+ return if_list ? if_list[conf.if_idx] : "(none)";
+}
+
/* Return full path of rcfile. Allocates string which must bee free()-d. */
static char *get_confname(void)
{
@@ -520,7 +554,7 @@ static void init_conf_items(void)
void getconf(int argc, char *argv[])
{
- iw_get_interface_list();
+ conf_get_interface_list();
init_conf_items();
read_cf();
getargs(argc, argv);
diff --git a/conf_scr.c b/conf_scr.c
index a338771..674137c 100644
--- a/conf_scr.c
+++ b/conf_scr.c
@@ -159,7 +159,7 @@ static int m_pref(WINDOW *w_conf, int list_offset, int active_item, int num_item
void scr_conf_init(void)
{
- iw_get_interface_list(); /* may have changed in the meantime */
+ conf_get_interface_list(); /* may have changed in the meantime */
num_items = ll_size(conf_items);
w_conf = newwin_title(0, WAV_HEIGHT, "Preferences", false);
diff --git a/info_scr.c b/info_scr.c
index 8171373..d17fdfa 100644
--- a/info_scr.c
+++ b/info_scr.c
@@ -30,7 +30,7 @@ void sampling_init(void (*sampling_handler)(int))
div_t d = div(conf.stat_iv, 1000); /* conf.stat_iv in msec */
xsignal(SIGALRM, SIG_IGN);
- iw_getinf_range(if_list[conf.if_idx], &cur.range);
+ iw_getinf_range(conf_ifname(), &cur.range);
i.it_interval.tv_sec = i.it_value.tv_sec = d.quot;
i.it_interval.tv_usec = i.it_value.tv_usec = d.rem * 1000;
xsignal(SIGALRM, sampling_handler);
@@ -139,7 +139,7 @@ static void display_stats(void)
struct if_stat nstat;
char tmp[0x100];
- if_getstat(if_list[conf.if_idx], &nstat);
+ if_getstat(conf_ifname(), &nstat);
/*
* Interface RX stats
@@ -197,10 +197,10 @@ static void display_info(WINDOW *w_if, WINDOW *w_info)
char tmp[0x100];
int i;
- dyn_info_get(&info, if_list[conf.if_idx], &cur.range);
+ dyn_info_get(&info, conf_ifname(), &cur.range);
wmove(w_if, 1, 1);
- waddstr_b(w_if, if_list[conf.if_idx]);
+ waddstr_b(w_if, conf_ifname());
if (cur.range.enc_capa & IW_WPA_MASK)
sprintf(tmp, " (%s, %s)", info.name, format_wpa(&cur.range));
else
@@ -416,11 +416,11 @@ static void display_netinfo(WINDOW *w_net)
struct if_info info;
char tmp[0x40];
- if_getinf(if_list[conf.if_idx], &info);
+ if_getinf(conf_ifname(), &info);
wmove(w_net, 1, 1);
if (getmaxy(w_net) == WH_NET_MAX) {
- waddstr(w_net, if_list[conf.if_idx]);
+ waddstr(w_net, conf_ifname());
waddstr_b(w_net, " (");
waddstr(w_net, info.flags & IFF_UP ? "UP" : "DOWN");
diff --git a/iw_if.c b/iw_if.c
index 2008c14..708ff85 100644
--- a/iw_if.c
+++ b/iw_if.c
@@ -24,9 +24,6 @@
/* Fallback maximum quality level when using random samples. */
#define WAVE_RAND_QUAL_MAX 100
-/* GLOBALS */
-char **if_list = NULL; /* array of WiFi interface names */
-
/*
* Obtain network device information
*/
@@ -65,7 +62,7 @@ int if_set_up(int skfd, const char *ifname)
}
/* Interface information */
-void if_getinf(char *ifname, struct if_info *info)
+void if_getinf(const char *ifname, struct if_info *info)
{
struct ifreq ifr;
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -114,49 +111,27 @@ static FILE *open_proc_net(const char *filename)
}
/**
- * iw_get_interface_list - Populate NULL-terminated array of WiFi interfaces.
- * Rebuild if already set, exit if no interfaces present.
+ * iw_get_interface_list - Return NULL-terminated array of WiFi interfaces.
*/
-void iw_get_interface_list(void)
+char **iw_get_interface_list(void)
{
- char *p, tmp[IFNAMSIZ], *old_if = NULL;
- int idx, nifs;
+ char **if_list = NULL, *p, tmp[BUFSIZ];
+ int nifs = 1; /* if_list[nifs-1] = NULL */
FILE *fp = open_proc_net("wireless");
- if (if_list) {
- for (idx = 0; if_list[idx]; idx++)
- if (idx == conf.if_idx)
- old_if = if_list[idx];
- else
- free(if_list[idx]);
- free(if_list);
- }
-
- for (nifs = 0; fgets(tmp, sizeof(tmp), fp); )
- nifs += strchr(tmp, ':') != NULL;
- if (!nifs)
- err_quit("no wireless interfaces found!");
- rewind(fp);
-
- if_list = calloc(nifs + 1, sizeof(*if_list));
- if (if_list == NULL)
- err_sys("unable to memorize %d interfaces", nifs);
-
- for (conf.if_idx = idx = 0; fgets(tmp, sizeof(tmp), fp); ) {
+ while (fgets(tmp, sizeof(tmp), fp))
if ((p = strchr(tmp, ':'))) {
+ if_list = realloc(if_list, sizeof(char *) * (nifs + 1));
for (*p = '\0', p = tmp; isspace(*p); )
p++;
- if (old_if && strcmp(old_if, p) == 0)
- conf.if_idx = idx;
- if_list[idx++] = strdup(p);
+ if_list[nifs-1] = strdup(p);
+ if_list[nifs++] = NULL;
}
- }
- assert(idx == nifs);
fclose(fp);
- free(old_if);
+ return if_list;
}
-void if_getstat(char *ifname, struct if_stat *stat)
+void if_getstat(const char *ifname, struct if_stat *stat)
{
char line[0x100];
unsigned long d;
@@ -187,7 +162,8 @@ void if_getstat(char *ifname, struct if_stat *stat)
* @ifname: interface name
* @if: range information to use (number of encryption keys)
*/
-void dyn_info_get(struct iw_dyn_info *info, char *ifname, struct iw_range *ir)
+void dyn_info_get(struct iw_dyn_info *info,
+ const char *ifname, struct iw_range *ir)
{
struct iwreq iwr;
int i, skfd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -321,7 +297,7 @@ void dyn_info_cleanup(struct iw_dyn_info *info)
/*
* get range information
*/
-void iw_getinf_range(char *ifname, struct iw_range *range)
+void iw_getinf_range(const char *ifname, struct iw_range *range)
{
struct iwreq iwr;
int skfd = socket(AF_INET, SOCK_DGRAM, 0);
@@ -395,7 +371,7 @@ static void iw_getstat_real(struct iw_statistics *stat)
wrq.u.data.pointer = (caddr_t) stat;
wrq.u.data.length = sizeof(*stat);
wrq.u.data.flags = 0;
- strncpy(wrq.ifr_name, if_list[conf.if_idx], IFNAMSIZ);
+ strncpy(wrq.ifr_name, conf_ifname(), IFNAMSIZ);
if (ioctl(skfd, SIOCGIWSTATS, &wrq) < 0) {
/*
@@ -490,13 +466,13 @@ void dump_parameters(void)
struct if_stat nstat;
int i;
- iw_getinf_range(if_list[conf.if_idx], &iw.range);
- dyn_info_get(&info, if_list[conf.if_idx], &iw.range);
+ iw_getinf_range(conf_ifname(), &iw.range);
+ dyn_info_get(&info, conf_ifname(), &iw.range);
iw_getstat(&iw);
- if_getstat(if_list[conf.if_idx], &nstat);
+ if_getstat(conf_ifname(), &nstat);
printf("\n");
- printf("Configured device: %s (%s)\n", if_list[conf.if_idx], info.name);
+ printf("Configured device: %s (%s)\n", conf_ifname(), info.name);
printf(" Security: %s\n", iw.range.enc_capa ?
format_enc_capab(iw.range.enc_capa, ", ") : "WEP");
if (iw.range.num_encoding_sizes &&
diff --git a/iw_if.h b/iw_if.h
index 80e6595..636a63a 100644
--- a/iw_if.h
+++ b/iw_if.h
@@ -71,7 +71,7 @@ struct if_info {
};
extern bool if_is_up(int skfd, const char *ifname);
extern int if_set_up(int skfd, const char *ifname);
-extern void if_getinf(char *ifname, struct if_info *info);
+extern void if_getinf(const char *ifname, struct if_info *info);
/**
* struct iw_key - Encoding information
@@ -174,7 +174,8 @@ static inline uint8_t dyn_info_wep_keys(struct iw_dyn_info *info)
info->keys[i].size == 13;
return num_wep;
}
-extern void dyn_info_get(struct iw_dyn_info *, char *ifname, struct iw_range *);
+extern void dyn_info_get(struct iw_dyn_info *info,
+ const char *ifname, struct iw_range *ir);
extern void dyn_info_cleanup(struct iw_dyn_info *info);
@@ -188,7 +189,7 @@ struct if_stat {
tx_bytes;
};
-extern void if_getstat(char *ifname, struct if_stat *stat);
+extern void if_getstat(const char *ifname, struct if_stat *stat);
/*
* Structs to communicate WiFi statistics
@@ -200,7 +201,7 @@ struct iw_levelstat {
};
#define IW_LSTAT_INIT { 0, 0, IW_QUAL_LEVEL_INVALID | IW_QUAL_NOISE_INVALID }
-extern void iw_getinf_range(char *ifname, struct iw_range *range);
+extern void iw_getinf_range(const char *ifname, struct iw_range *range);
extern void iw_sanitize(struct iw_range *range,
struct iw_quality *qual,
struct iw_levelstat *dbm);
@@ -250,7 +251,7 @@ struct scan_result {
struct scan_result *next;
};
-extern struct scan_result *get_scan_list(int skfd, char *ifname, int weversion);
+extern struct scan_result *get_scan_list(int skfd, const char *ifname, int ver);
extern void free_scan_result(struct scan_result *head);
diff --git a/iw_scan.c b/iw_scan.c
index d75ab6b..8423e6a 100644
--- a/iw_scan.c
+++ b/iw_scan.c
@@ -553,7 +553,7 @@ static int cmp_scan_sig(struct scan_result *a, struct scan_result *b)
return a->qual.level - b->qual.level;
}
-struct scan_result *get_scan_list(int skfd, char *ifname, int we_version)
+struct scan_result *get_scan_list(int skfd, const char *ifname, int we_version)
{
struct scan_result *head = NULL;
struct iwreq wrq;
diff --git a/scan_scr.c b/scan_scr.c
index 879c2f6..b9a4eee 100644
--- a/scan_scr.c
+++ b/scan_scr.c
@@ -80,9 +80,9 @@ static void display_aplist(WINDOW *w_aplst)
if (skfd < 0)
err_sys("%s: can not open socket", __func__);
- iw_getinf_range(if_list[conf.if_idx], &range);
+ iw_getinf_range(conf_ifname(), &range);
- head = get_scan_list(skfd, if_list[conf.if_idx], range.we_version_compiled);
+ head = get_scan_list(skfd, conf_ifname(), range.we_version_compiled);
if (head) {
;
} else if (errno == EPERM || !has_net_admin_capability()) {
@@ -93,13 +93,13 @@ static void display_aplist(WINDOW *w_aplst)
} else if (errno == EINTR || errno == EAGAIN || errno == EBUSY) {
/* Ignore temporary errors */
goto done;
- } else if (!if_is_up(skfd, if_list[conf.if_idx])) {
- sprintf(s, "Interface '%s' is down ", if_list[conf.if_idx]);
+ } else if (!if_is_up(skfd, conf_ifname())) {
+ sprintf(s, "Interface '%s' is down ", conf_ifname());
if (!has_net_admin_capability())
strcat(s, "- can not scan");
- else if (if_set_up(skfd, if_list[conf.if_idx]) < 0)
+ else if (if_set_up(skfd, conf_ifname()) < 0)
sprintf(s, "Can not bring up '%s' for scanning: %s",
- if_list[conf.if_idx], strerror(errno));
+ conf_ifname(), strerror(errno));
else
strcat(s, "- setting it up ...");
} else if (errno == EFAULT) {
@@ -110,9 +110,9 @@ static void display_aplist(WINDOW *w_aplst)
*/
goto done;
} else if (errno) {
- sprintf(s, "No scan on %s: %s", if_list[conf.if_idx], strerror(errno));
+ sprintf(s, "No scan on %s: %s", conf_ifname(), strerror(errno));
} else {
- sprintf(s, "No scan results on %s", if_list[conf.if_idx]);
+ sprintf(s, "No scan results on %s", conf_ifname());
}
for (i = 1; i <= MAXYLEN; i++)
diff --git a/wavemon.h b/wavemon.h
index 22a783f..ad0b488 100644
--- a/wavemon.h
+++ b/wavemon.h
@@ -103,7 +103,7 @@ static inline void threshold_action(enum threshold_action action)
* Global in-memory representation of current wavemon configuration state
*/
extern struct wavemon_conf {
- int if_idx; /* Index into if_list */
+ int if_idx; /* Index into interface list */
int stat_iv,
info_iv;
@@ -256,8 +256,9 @@ static inline int cp_from_scale(float value, const char *cscale, bool reverse)
/*
* Wireless interfaces
*/
-extern char **if_list;
-extern void iw_get_interface_list(void);
+extern const char *conf_ifname(void);
+extern void conf_get_interface_list(void);
+extern char **iw_get_interface_list(void);
extern void dump_parameters(void);
/*