+++ /dev/null
---- a/tools/80211debug.c
-+++ b/tools/80211debug.c
-@@ -48,6 +48,7 @@
- #include <ctype.h>
- #include <getopt.h>
- #include <err.h>
-+#include "do_multi.h"
-
- #undef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-@@ -185,7 +186,7 @@
- #endif /* __linux__ */
-
- int
--main(int argc, char *argv[])
-+CMD(a80211debug)(int argc, char *argv[])
- {
- const char *ifname = "ath0";
- const char *cp, *tp;
---- a/tools/80211stats.c
-+++ b/tools/80211stats.c
-@@ -59,6 +59,7 @@
- #include "net80211/ieee80211.h"
- #include "net80211/ieee80211_crypto.h"
- #include "net80211/ieee80211_ioctl.h"
-+#include "do_multi.h"
-
- #ifndef SIOCG80211STATS
- #define SIOCG80211STATS (SIOCDEVPRIVATE + 2)
-@@ -241,7 +242,7 @@
- }
-
- int
--main(int argc, char *argv[])
-+CMD(a80211stats)(int argc, char *argv[])
- {
- int c, len;
- struct ieee80211req_sta_info *si;
---- a/tools/athchans.c
-+++ b/tools/athchans.c
-@@ -58,6 +58,7 @@
- #include "net80211/ieee80211.h"
- #include "net80211/ieee80211_crypto.h"
- #include "net80211/ieee80211_ioctl.h"
-+#include "do_multi.h"
-
- static int s = -1;
- static const char *progname;
-@@ -140,8 +141,9 @@
- }
-
- #define MAXCHAN ((int)(sizeof(struct ieee80211req_chanlist) * NBBY))
-+
- int
--main(int argc, char *argv[])
-+CMD(athchans)(int argc, char *argv[])
- {
- const char *ifname = "wifi0";
- struct ieee80211req_chanlist chanlist;
---- a/tools/athctrl.c
-+++ b/tools/athctrl.c
-@@ -52,6 +52,7 @@
- #include <err.h>
-
- #include <net/if.h>
-+#include "do_multi.h"
-
- static int
- setsysctrl(const char *dev, const char *control , u_long value)
-@@ -88,7 +89,7 @@
- }
-
- int
--main(int argc, char *argv[])
-+CMD(athctrl)(int argc, char *argv[])
- {
- char device[IFNAMSIZ + 1];
- int distance = -1;
---- a/tools/athdebug.c
-+++ b/tools/athdebug.c
-@@ -51,6 +51,7 @@
- #include <ctype.h>
- #include <getopt.h>
- #include <err.h>
-+#include "do_multi.h"
-
- #undef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-@@ -194,7 +195,7 @@
- #endif /* __linux__ */
-
- int
--main(int argc, char *argv[])
-+CMD(athdebug)(int argc, char *argv[])
- {
- #ifdef __linux__
- const char *ifname = "wifi0";
---- a/tools/athkey.c
-+++ b/tools/athkey.c
-@@ -58,6 +58,7 @@
- #include "net80211/ieee80211.h"
- #include "net80211/ieee80211_crypto.h"
- #include "net80211/ieee80211_ioctl.h"
-+#include "do_multi.h"
-
- static int s = -1;
- static const char *progname;
-@@ -213,8 +214,7 @@
- exit(-1);
- }
-
--int
--main(int argc, char *argv[])
-+int CMD(athkey)(int argc, char *argv[])
- {
- const char *ifname = "wifi0";
- struct ieee80211req_key setkey;
---- a/tools/athstats.c
-+++ b/tools/athstats.c
-@@ -65,6 +65,7 @@
-
- #undef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-+#include "do_multi.h"
-
- static const struct {
- u_int phyerr;
-@@ -228,7 +229,7 @@
- }
-
- int
--main(int argc, char *argv[])
-+CMD(athstats)(int argc, char *argv[])
- {
- #ifdef __linux__
- const char *ifname = "wifi0";
---- /dev/null
-+++ b/tools/do_multi.c
-@@ -0,0 +1,36 @@
-+#include <string.h>
-+#include "do_multi.h"
-+
-+int
-+main(int argc, char *argv[])
-+{
-+ char *progname;
-+ int ret = 0;
-+
-+ progname = basename(argv[0]);
-+
-+ if(strcmp(progname, "80211debug") == 0)
-+ ret = a80211debug_init(argc, argv);
-+ if(strcmp(progname, "80211stats") == 0)
-+ ret = a80211stats_init(argc, argv);
-+ if(strcmp(progname, "athchans") == 0)
-+ ret = athchans_init(argc, argv);
-+ if(strcmp(progname, "athctrl") == 0)
-+ ret = athctrl_init(argc, argv);
-+ if(strcmp(progname, "athdebug") == 0)
-+ ret = athdebug_init(argc, argv);
-+ if(strcmp(progname, "athkey") == 0)
-+ ret = athkey_init(argc, argv);
-+ if(strcmp(progname, "athstats") == 0)
-+ ret = athstats_init(argc, argv);
-+ if(strcmp(progname, "wlanconfig") == 0)
-+ ret = wlanconfig_init(argc, argv);
-+ if(strcmp(progname, "wpakey") == 0)
-+ ret = wpakey_init(argc, argv);
-+ if(strcmp(progname, "athchans") == 0)
-+ ret = athchans_init(argc, argv);
-+ if(strcmp(progname, "ath_info") == 0)
-+ ret = athinfo_init(argc, argv);
-+
-+ return ret;
-+}
---- /dev/null
-+++ b/tools/do_multi.h
-@@ -0,0 +1,15 @@
-+#ifdef DO_MULTI
-+int a80211debug_init(int argc, char *argv[]);
-+int a80211stats_init(int argc, char *argv[]);
-+int athchans_init(int argc, char *argv[]);
-+int athctrl_init(int argc, char *argv[]);
-+int athdebug_init(int argc, char *argv[]);
-+int athkey_init(int argc, char *argv[]);
-+int athstats_init(int argc, char *argv[]);
-+int wlanconfig_init(int argc, char *argv[]);
-+int athinfo_init(int argc, char *argv[]);
-+
-+#define CMD(name) name##_init
-+#else
-+#define CMD(name) main
-+#endif
---- a/tools/Makefile
-+++ b/tools/Makefile
-@@ -50,42 +50,43 @@
- PROGRAMS = athstats 80211stats athkey athchans athctrl \
- athdebug 80211debug wlanconfig wpakey
-
-+OBJS = $(patsubst %,%.o,$(PROGRAMS)) ath_info/ath_info.o
- SUBDIRS = ath_info
-
--INCS = -I. -I$(HAL) -I$(TOP) -I$(ATH_HAL)
-+INCS = -I. -I$(HAL) -I$(TOP) -I$(ATH_HAL) -I$(TOP)/ath
- CFLAGS = -g -O2 -Wall
- ALL_CFLAGS = $(CFLAGS) $(INCS)
- LDFLAGS =
-
--all: all-subdirs $(PROGRAMS)
-+all: all-subdirs compile
-
- all-subdirs:
- for d in $(SUBDIRS); do \
- $(MAKE) -C $$d || exit 1; \
- done
-
--athstats: athstats.c
-- $(CC) -o athstats $(ALL_CFLAGS) -I$(TOP)/ath $(LDFLAGS) athstats.c
--80211stats: 80211stats.c
-- $(CC) -o 80211stats $(ALL_CFLAGS) $(LDFLAGS) 80211stats.c
--athkey: athkey.c
-- $(CC) -o athkey $(ALL_CFLAGS) $(LDFLAGS) athkey.c
--athchans: athchans.c
-- $(CC) -o athchans $(ALL_CFLAGS) $(LDFLAGS) athchans.c
--athctrl: athctrl.c
-- $(CC) -o athctrl $(ALL_CFLAGS) $(LDFLAGS) athctrl.c
--athdebug: athdebug.c
-- $(CC) -o athdebug $(ALL_CFLAGS) $(LDFLAGS) athdebug.c
--wlanconfig: wlanconfig.c
-- $(CC) -o wlanconfig $(ALL_CFLAGS) $(LDFLAGS) wlanconfig.c
--80211debug: 80211debug.c
-- $(CC) -o 80211debug $(ALL_CFLAGS) $(LDFLAGS) 80211debug.c
--wpakey: wpakey.c
-- $(CC) -o wpakey $(ALL_CFLAGS) $(LDFLAGS) wpakey.c
-+%.o: %.c
-+ ${CC} $(ALL_CFLAGS) -c -o $@ $<
-+
-+ifneq ($(DO_MULTI),)
-+ALL_CFLAGS += -DDO_MULTI=1
-+madwifi_multi: $(OBJS) do_multi.o
-+ $(CC) $(LDFLAGS) -o $@ $^
-+
-+compile: madwifi_multi
-+ for i in $(PROGRAMS); do \
-+ ln -sf madwifi_multi $$i; \
-+ done
-+else
-+$(PROGRAMS):
-+ $(CC) $(ALL_CFLAGS) -o $@ $@.c
-+
-+compile: $(PROGRAMS)
-+endif
-
- install: all
- install -d $(DESTDIR)$(BINDIR)
-- for i in $(PROGRAMS); do \
-+ for i in $(PROGRAMS) $(if $(DO_MULTI),madwifi_multi); do \
- install $$i $(DESTDIR)$(BINDIR)/$$i; \
- $(STRIP) $(DESTDIR)$(BINDIR)/$$i; \
- done
-@@ -97,7 +98,7 @@
- done
-
- uninstall:
-- for i in $(PROGRAMS); do \
-+ for i in $(PROGRAMS) $(if $(DO_MULTI),madwifi_multi); do \
- rm -f $(DESTDIR)$(BINDIR)/$$i; \
- done
- for i in $(PROGRAMS:=.8); do \
-@@ -108,7 +109,7 @@
- done
-
- clean:
-- rm -f $(PROGRAMS) core a.out
-+ rm -f $(if $(DO_MULTI), madwifi_multi) $(PROGRAMS) core a.out *.o
- for d in $(SUBDIRS); do \
- $(MAKE) -C $$d clean; \
- done
---- a/tools/wlanconfig.c
-+++ b/tools/wlanconfig.c
-@@ -61,6 +61,7 @@
- #include "net80211/ieee80211.h"
- #include "net80211/ieee80211_crypto.h"
- #include "net80211/ieee80211_ioctl.h"
-+#include "do_multi.h"
-
- /*
- * These are taken from ieee80211_node.h
-@@ -100,7 +101,7 @@
- static int verbose = 0;
-
- int
--main(int argc, char *argv[])
-+CMD(wlanconfig)(int argc, char *argv[])
- {
- const char *ifname, *cmd;
- unsigned char bnounit = 0;
---- a/tools/ath_info/Makefile
-+++ b/tools/ath_info/Makefile
-@@ -17,11 +17,18 @@
-
- all: $(PROGRAMS)
-
-+
-+ifneq ($(DO_MULTI),)
-+ath_info: ath_info.o
-+ rm -f $@
-+ ln -s ../madwifi_multi $@
-+else
- ath_info: ath_info.o
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
-+endif
-
- .c.o:
-- $(CC) $(CFLAGS) -c $<
-+ $(CC) $(CFLAGS) $(if $(DO_MULTI),-DDO_MULTI=1 -I..) -c $<
-
- clean:
- rm -f *.o $(PROGRAMS)
---- a/tools/ath_info/ath_info.c
-+++ b/tools/ath_info/ath_info.c
-@@ -28,6 +28,7 @@
- #include <sys/mman.h>
- #include <endian.h>
- #include <byteswap.h>
-+#include "do_multi.h"
-
- #undef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
-@@ -1982,7 +1983,8 @@
- printf("\n");
- }
-
--int main(int argc, char *argv[])
-+int
-+CMD(athinfo)(int argc, char *argv[])
- {
- unsigned long long dev_addr;
- u_int16_t srev, phy_rev_5ghz, phy_rev_2ghz, ee_magic;
---- a/tools/wpakey.c
-+++ b/tools/wpakey.c
-@@ -25,6 +25,7 @@
-
- #include <unistd.h>
- #include <sys/ioctl.h>
-+#include "do_multi.h"
-
- #define MACS "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx"
- #define MACP(mac) (mac)[0], (mac)[1], (mac)[2], (mac)[3], (mac)[4], (mac)[5]
-@@ -234,7 +235,8 @@
- "", dev);
- }
-
--int main(int argc, char** argv) {
-+int
-+CMD(wpakey)(int argc, char** argv) {
- int keyidx = 0;
- uint8_t mac[6];
- int cipher = IEEE80211_CIPHER_AES_CCM;