2 * ap-utils.h from Wireless Access Point Utilites for Unix
3 * Copyright (c) 2002 Roman Festchook <roma at polesye dot net>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License Version 2 from
7 * June 1991 as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License along
13 * with this program; if not, write to the Free Software Foundation, Inc.,
14 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #include <sys/types.h>
26 #endif /* ifdef OS_X */
29 #include <sys/types.h>
32 #if defined (__GLIBC__)
35 typedef unsigned short uint16_t;
36 typedef unsigned int uint32_t;
37 #endif /* if defined (__GLIBC__) */
38 #endif /* ifdef OS_SOLARIS */
39 #endif /* ifdef OS_BSD */
41 #define TITLE "Wireless Access Point Utilites for Unix"
43 #define minimum(x, y) x <= y ? x : y
46 /* GNU gettext stuff*/
48 #include <libgnuintl.h>
49 #define _(String) gettext (String)
51 #define _(String) (String)
54 #include <sys/socket.h>
55 #include <netinet/in.h>
56 #include <arpa/inet.h>
59 #ifdef WORDS_BIGENDIAN
60 /* a quick-and-dirty macro to unconditionally swap bytes in 4-byte integers
61 * between big-endian and little-endian ordering */
62 #define swap2(d) ((((d) >> 8) & 0x00ff) | (((d) << 8) & 0xff00))
63 #define swap4(d) ((((d) >> 24) & 0x000000ff) | (((d) >> 8) & 0x0000ff00) | (((d) << 8) & 0x00ff0000) | (((d) << 24) & 0xff000000))
69 #define rlong(a) ((a) = swap4(a))
70 #define wlong(a) ((a) = swap4(a))
71 #define rshort(a) ((a) = swap2(a))
72 #define wshort(a) ((a) = swap2(a))
74 #define MAC _("MAC address: ")
75 #define TRAPS _("[S] SNMP traps: ")
77 #define CHANNEL _("[C] Frequency channel: ")
79 #define ANTENNA_RX _("Receive antenna:")
80 #define ANTENNA_RX_LEFT _("[U] Left")
81 #define ANTENNA_RX_RIGHT _("[I] Right")
82 #define ANTENNA_TX _("Transmit antenna:")
83 #define ANTENNA_TX_LEFT _("[O] Left")
84 #define ANTENNA_TX_RIGHT _("[P] Right")
85 #define ANTENNA_DV _("Diversity select:")
86 #define ANTENNA_DV_LEFT _("[T] Left")
87 #define ANTENNA_DV_RIGHT _("[Y] Right")
95 #define BASIC _("Basic")
97 #define ANY_KEY _("Press any key to continue.")
99 #define ERR_SET _("Unable to write data to AP. Press any key to continue.")
100 #define ERR_RET _("Unable to retrieve data from AP. Press any key to continue.")
101 #define WAIT_RET _("Retrieving data from AP. Please wait...")
102 #define WAIT_SET _("Writing data to AP. Please wait...")
103 #define DONE_SET _("Configuration written to the AP. Press any key to continue.")
105 #define CREATE_SOCKET_ERROR _("Create socket error. Press any key.")
106 #define BIND_SOCKET_ERROR _("Bind socket error. Press any key.")
108 #define MAIN_MENU _("Back to main menu")
109 #define MENU_EXIT _("Exit program")
110 #define MENU_SHELL _("Run subshell. To return type 'exit'.")
111 #define MENU_ABOUT _("Short info about program")
112 #define MENU_SEARCH _("Find connected Access Points")
113 #define MENU_CONNECT _("Set connection options: ip and community")
114 #define MENU_ENCRYPT _("Set encryption; edit WEP keys")
115 #define MENU_MAC _("Set MAC authorization; edit MAC authorization table")
116 #define MENU_COMMUNITY _("Set SNMP community/password for access to the AP")
117 #define MENU_SYSINFO _("Get info about AP hardware and firmware")
118 #define MENU_WIRELESS _("Get wireless port statistics")
119 #define MENU_STAS _("Get list of currently associated stations (Access Point clients)")
120 #define MENU_INFO _("Get info and statistics from AP")
121 #define MENU_CONFIG _("Set various configuration options")
124 #define INT_VALUE 0x02
125 #define STRING_VALUE 0x04
126 #define NULL_VALUE 0x05
127 #define OID_VALUE 0x06
130 #define GET_NEXT 0xA1
131 #define RESPONSE 0xA2
135 #define ASN_HEADER 0x30
137 #define INT_STRING 0x01
138 #define HEX_STRING 0x02
139 #define ANY_STRING 0x03
141 #define SIZE sizeof(struct sockaddr_in)
142 #define basic(i) (i & 0x80) ? BASIC : (i) ? ON : OFF
145 #define MCOLS 15 /* width of menu window */
146 #define LAST_ROW LINES-5
148 /* Basic distinguished MIB (and AP) types */
153 typedef struct VarBind {
156 unsigned char *value;
168 struct EthernetRxStatistics {
169 uint32_t TotalBytesRx;
170 uint32_t TotalPacketsRx;
171 uint32_t PacketCRCErrorRx;
172 uint32_t MulticastPacketRx;
173 uint32_t BroadcastPacketRx;
174 uint32_t ControlFramesRx;
175 uint32_t PauseFramesRx;
176 uint32_t UnknownOPCodeRx;
177 uint32_t AlignmentRxError;
178 uint32_t LengthOutOfRangeRx;
179 uint32_t CodeErrorRx;
180 uint32_t FalseCarrierRx;
181 uint32_t UndersizePacketsRx;
182 uint32_t OversizePacketsRx;
183 uint32_t TotalFragmentsRx;
184 uint32_t TotalJabberRx;
187 struct EthernetTxStatistics {
188 uint32_t TotalBytesTx;
189 uint32_t TotalPacketsTx;
190 uint32_t PacketCRCErrorTx;
191 uint32_t MulticastPacketTx;
192 uint32_t BroadcastPacketTx;
193 uint32_t UnicastPacketTx;
194 uint32_t PauseFramesTx;
195 uint32_t SingleDeferPacketTx;
196 uint32_t MultiDeferPacketsTx;
197 uint32_t SingleCollisionsTx;
198 uint32_t MultiCollisionsTx;
199 uint32_t LateCollisionsTx;
200 uint32_t ExcessiveCollisionTx;
201 uint32_t TotalCollisionsTx;
204 struct WirelessStatistics {
205 uint32_t UnicastTransmittedPackets;
206 uint32_t BroadcastTransmittedPackets;
207 uint32_t MulticastTransmittedPackets;
208 uint32_t TransmittedBeacon;
209 uint32_t TransmittedACK;
210 uint32_t TransmittedRTS;
211 uint32_t TransmittedCTS;
212 uint32_t UnicastReceivedPackets;
213 uint32_t BroadcastReceivedPackets;
214 uint32_t MulticastReceivedPackets;
215 uint32_t ReceivedBeacon;
216 uint32_t ReceivedACK;
217 uint32_t ReceivedRTS;
218 uint32_t ReceivedCTS;
221 uint32_t RetryPackets;
222 uint32_t ReceivedDuplicate;
223 uint32_t FailedPackets;
224 uint32_t AgedPackets;
226 uint32_t InvalidPLCP;
229 struct SysDeviceInfo_ATMEL410 {
230 /* sysDeviceInfo OID struct for ATMEL 410 */
231 uint32_t StructVersion;
232 unsigned char MacAddress[6];
233 unsigned short Reserved;
234 uint32_t RegulationDomain;
235 uint32_t ProductType;
236 unsigned char OEMName[32];
238 unsigned char ProductName[32];
239 uint32_t HardwareRevision;
242 struct SysDeviceInfo_ATMEL12350 {
243 /* sysDeviceInfo OID struct for ATMEL 12350 */
244 uint32_t StructVersion;
245 unsigned char MacAddress[6];
246 unsigned char Channel;
247 unsigned char RegulationDomain;
248 uint32_t ProductType;
249 unsigned char OEMName[32];
251 unsigned char ProductName[32];
252 uint32_t HardwareRevision;
253 /* The rest is actually dormant. */
255 unsigned char PID_VID[4];
258 unsigned char CountryCode[3];
259 unsigned char Reserved1;
260 uint16_t ChannelInformation;
261 unsigned char Reserved2[2];
262 unsigned char TxPower[14];
263 unsigned char Reserved3[10];
268 unsigned char addr[6];
269 struct MacListStat *next;
273 unsigned char Status;
275 unsigned char ParentMacAddress[6];
279 /* Function prototypes specific/common for both utilites */
282 extern char * oui2manufacturer(char *);
283 extern int ch_list(int, char **);
284 extern void connect_options(unsigned long int, int);
285 extern void about(void);
286 extern void draw_menu_win(void);
287 extern void main_menu(void);
288 extern void print_title(char *);
289 extern void print_viewtype(int);
290 extern void print_menusel(int, int, char *, char *);
291 extern void print_bottom(char *);
292 extern void print_help(char *);
293 extern void print_helperr(char *);
294 extern void clear_main(int);
295 extern void clear_main_new(int, int);
296 extern void get_mac(char *, int, int);
297 extern void get_ip(struct in_addr *, int, int, char *);
298 extern void get_mask(struct in_addr *, int, int, char *);
299 extern void get_value(char *, int, int, int, char, int, int, char *);
300 extern void get_pass(char *, int, int, int);
301 extern int menu_choose(int, int, char **, unsigned int);
302 extern int yes_no(int, int);
303 extern int on_off(int, int);
304 extern void scroll_rows(struct MacListStat *, int, int, int, int);
305 extern void exit_shell(void);
306 extern void exit_program(void);
307 extern int get_opts(void);
308 extern void save_Stations(struct MacListStat *);
309 extern void uni_menu(struct umitems *umenu, int num);
312 extern void AuthorizedSettings(void);
313 extern void bridging(void);
314 extern void wep(void);
315 extern void WirelessStat(void);
316 extern void stations(void);
317 extern void atmel_sysinfo(void);
318 extern void ap_search(void);
321 extern int snmp(varbind *, int, int);
322 extern int ber(char *, varbind *, int, int);
324 /* Function prototypes specific for ATMEL utility */
325 extern void reset(void);
326 extern void defaults(void);
327 extern void upload(void);
328 extern int SysUpload(void);
329 extern int SysReset(void);
330 extern void EthStat(void);
331 extern void APs(void);
332 extern void power(void);
333 extern void test(void);
334 extern void atmel_wireless(void);
335 extern void atmel_auth_mac(void);
337 /* Function prototypes specific for NWN utility */
338 extern void latest(void);
339 extern int get_RegDomain(void);
340 extern void advanced(void);
341 extern void command_menu(void);
342 extern void nwn_sysinfo(void);
343 extern void nwn_wep(void);
344 extern void nwn_stations(void);
345 extern void nwn_wireless_stat(void);
346 extern void nwn_wireless(void);
347 extern void nwn_auth_mac(void);