OSDN Git Service

Add Android.mk
[android-x86/external-wireless-tools.git] / wireless_tools / iwmulticall.c
1 /*
2  *      Wireless Tools
3  *
4  *              Jean II - HPL 04
5  *
6  * Main code for "iwmulticall". This is a wrapper for the multicall version
7  * of the wireless tools.
8  * You need to link this code against "-lm".
9  * Thanks to Ned Ludd <solar@gentoo.org> for the inspiration...
10  *
11  * This file is released under the GPL license.
12  *     Copyright (c) 1997-2004 Jean Tourrilhes <jt@hpl.hp.com>
13  */
14
15 /***************************** INCLUDES *****************************/
16
17 #include <libgen.h>     /* Basename */
18
19 /**************************** PROTOTYPES ****************************/
20
21 /* Prototypes of the main of each tool */
22 extern int
23         main_iwconfig(int       argc,
24                       char **   argv);
25 extern int
26         main_iwlist(int argc,
27                     char **     argv);
28 extern int
29         main_iwspy(int  argc,
30                    char **      argv);
31 extern int
32         main_iwpriv(int argc,
33                     char **     argv);
34 extern int
35         main_iwgetid(int        argc,
36                      char **    argv);
37
38 /************************** MULTICALL HACK **************************/
39 /*
40  * The idea for multicall is to put all the tools and the library in
41  * the same binary. This way, you can save the overhead of the library,
42  * of each tool, can better optimise the code and throw away the stuff
43  * you don't need from the library.
44  * This almost divide the size of the tools by two (without stripping).
45  * On the down side, you no longer have the libiw for other tools to
46  * use, but for the target systems (embedded), this doesn't matter
47  * much, as they just need to configure the card...
48  * Note that splitting the lib and the multicall tools would not
49  * make sense, as most gains are found in the inclusion of the lib...
50  *
51  * Our strategy is to include directly the *.c, rather than compile
52  * them separatly. This allow to simplify compilation and hide the
53  * multicall tweaks from the other tools.
54  * Yeah, this leads to a bit a preprocessor abuse...
55  * Jean II
56  */
57
58 /* We need the library */
59 #include "iwlib.c"
60
61 /* Get iwconfig in there. Mandatory. */
62 #define main(args...) main_iwconfig(args)
63 #define iw_usage(args...) iwconfig_usage(args)
64 #define find_command(args...) iwconfig_find_command(args)
65 #include "iwconfig.c"
66 #undef find_command
67 #undef iw_usage
68 #undef main
69
70 /* Get iwlist in there. Scanning support is pretty sweet. */
71 #define main(args...) main_iwlist(args)
72 #define iw_usage(args...) iwlist_usage(args)
73 #define find_command(args...) iwlist_find_command(args)
74 #include "iwlist.c"
75 #undef find_command
76 #undef iw_usage
77 #undef main
78
79 #ifndef WE_ESSENTIAL
80 /* Get iwspy in there, it's not that big. */
81 #define main(args...) main_iwspy(args)
82 #include "iwspy.c"
83 #undef main
84 #endif  /* WE_ESSENTIAL */
85
86 /* Get iwpriv in there. Mandatory for HostAP and some other drivers. */
87 #define main(args...) main_iwpriv(args)
88 #define iw_usage(args...) iwpriv_usage(args)
89 #include "iwpriv.c"
90 #undef iw_usage
91 #undef main
92
93 /* Do we really need iwgetid ? Well, it's not like it's a big one */
94 #define main(args...) main_iwgetid(args)
95 #define iw_usage(args...) iwgetid_usage(args)
96 #include "iwgetid.c"
97 #undef iw_usage
98 #undef main
99
100 /* iwevent is useless for most people, don't grab it ? */
101
102 /* ifrename is big and useless for those systems */
103
104
105 /******************************* MAIN ********************************/
106
107 /*------------------------------------------------------------------*/
108 /*
109  * The main !
110  */
111 int
112 main(int        argc,
113      char **    argv)
114 {
115   char *        call_name = basename(argv[0]);  /* Strip path */
116
117   /* This is a testing hack */
118   if(!strcmp(call_name, "iwmulticall") && (argc > 0))
119     {
120       argv++;
121       argc--;
122       call_name = basename(argv[0]);
123     }
124
125   /* Just check the name under which we were called... */
126
127   if(!strcmp(call_name, "iwconfig"))
128     return(main_iwconfig(argc, argv));
129   if(!strcmp(call_name, "iwlist"))
130     return(main_iwlist(argc, argv));
131 #ifndef WE_ESSENTIAL
132   if(!strcmp(call_name, "iwspy"))
133     return(main_iwspy(argc, argv));
134 #endif  /* WE_ESSENTIAL */
135   if(!strcmp(call_name, "iwpriv"))
136     return(main_iwpriv(argc, argv));
137   if(!strcmp(call_name, "iwgetid"))
138     return(main_iwgetid(argc, argv));
139
140   /* Uh oh... Not supposed to come here. */
141   printf("iwmulticall : you are not supposed to call me this way...\n");
142   return(0);
143 }