--- a/tools/80211debug.c +++ b/tools/80211debug.c @@ -48,6 +48,7 @@ #include #include #include +#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 #include +#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 #include #include +#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 +#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 #include #include +#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 #include +#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;