Merge from vendor branch MALINEN:
[dragonfly/port-amd64.git] / usr.sbin / 802_11 / wpa_supplicant / common.h
blob3bae3dd3ae1f9627574017ae50e93169dc338540
1 /*
2 * wpa_supplicant/hostapd / common helper functions, etc.
3 * Copyright (c) 2002-2005, Jouni Malinen <jkmaline@cc.hut.fi>
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 as
7 * published by the Free Software Foundation.
9 * Alternatively, this software may be distributed under the terms of BSD
10 * license.
12 * See README and COPYING for more details.
14 * $DragonFly: src/usr.sbin/802_11/wpa_supplicant/Attic/common.h,v 1.1 2006/06/24 07:29:44 sephe Exp $
17 #ifndef COMMON_H
18 #define COMMON_H
20 #ifdef __linux__
21 #include <endian.h>
22 #include <byteswap.h>
23 #endif /* __linux__ */
25 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
26 #include <sys/types.h>
27 #include <sys/endian.h>
28 #define __BYTE_ORDER _BYTE_ORDER
29 #define __LITTLE_ENDIAN _LITTLE_ENDIAN
30 #define __BIG_ENDIAN _BIG_ENDIAN
31 #define bswap_16 bswap16
32 #define bswap_32 bswap32
33 #define bswap_64 bswap64
34 #endif /* defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) */
36 #ifdef CONFIG_NATIVE_WINDOWS
37 #include <winsock2.h>
39 static inline int daemon(int nochdir, int noclose)
41 printf("Windows - daemon() not supported yet\n");
42 return -1;
45 static inline void sleep(int seconds)
47 Sleep(seconds * 1000);
50 static inline void usleep(unsigned long usec)
52 Sleep(usec / 1000);
55 #ifndef timersub
56 #define timersub(a, b, res) do { \
57 (res)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
58 (res)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
59 if ((res)->tv_usec < 0) { \
60 (res)->tv_sec--; \
61 (res)->tv_usec += 1000000; \
62 } \
63 } while (0)
64 #endif
66 struct timezone {
67 int tz_minuteswest;
68 int tz_dsttime;
71 int gettimeofday(struct timeval *tv, struct timezone *tz);
73 static inline long int random(void)
75 return rand();
78 typedef int gid_t;
79 typedef int socklen_t;
81 #ifndef MSG_DONTWAIT
82 #define MSG_DONTWAIT 0 /* not supported */
83 #endif
85 #endif /* CONFIG_NATIVE_WINDOWS */
87 #if defined(__CYGWIN__) || defined(CONFIG_NATIVE_WINDOWS)
89 static inline unsigned short wpa_swap_16(unsigned short v)
91 return ((v & 0xff) << 8) | (v >> 8);
94 static inline unsigned int wpa_swap_32(unsigned int v)
96 return ((v & 0xff) << 24) | ((v & 0xff00) << 8) |
97 ((v & 0xff0000) >> 8) | (v >> 24);
100 #define le_to_host16(n) (n)
101 #define host_to_le16(n) (n)
102 #define be_to_host16(n) wpa_swap_16(n)
103 #define host_to_be16(n) wpa_swap_16(n)
104 #define le_to_host32(n) (n)
105 #define be_to_host32(n) wpa_swap_32(n)
106 #define host_to_be32(n) wpa_swap_32(n)
108 #else /* __CYGWIN__ */
110 #if __BYTE_ORDER == __LITTLE_ENDIAN
111 #define le_to_host16(n) (n)
112 #define host_to_le16(n) (n)
113 #define be_to_host16(n) bswap_16(n)
114 #define host_to_be16(n) bswap_16(n)
115 #define le_to_host32(n) (n)
116 #define be_to_host32(n) bswap_32(n)
117 #define host_to_be32(n) bswap_32(n)
118 #elif __BYTE_ORDER == __BIG_ENDIAN
119 #define le_to_host16(n) bswap_16(n)
120 #define host_to_le16(n) bswap_16(n)
121 #define be_to_host16(n) (n)
122 #define host_to_be16(n) (n)
123 #define le_to_host32(n) bswap_32(n)
124 #define be_to_host32(n) (n)
125 #define host_to_be32(n) (n)
126 #ifndef WORDS_BIGENDIAN
127 #define WORDS_BIGENDIAN
128 #endif
129 #else
130 #error Could not determine CPU byte order
131 #endif
133 #endif /* __CYGWIN__ */
135 /* Macros for handling unaligned 16-bit variables */
136 #define WPA_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1]))
137 #define WPA_PUT_BE16(a, val) \
138 do { \
139 (a)[0] = ((u16) (val)) >> 8; \
140 (a)[1] = ((u16) (val)) & 0xff; \
141 } while (0)
143 #define WPA_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))
144 #define WPA_PUT_LE16(a, val) \
145 do { \
146 (a)[1] = ((u16) (val)) >> 8; \
147 (a)[0] = ((u16) (val)) & 0xff; \
148 } while (0)
150 #define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
151 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
154 #ifndef ETH_ALEN
155 #define ETH_ALEN 6
156 #endif
158 #include <stdint.h>
159 typedef uint64_t u64;
160 typedef uint32_t u32;
161 typedef uint16_t u16;
162 typedef uint8_t u8;
163 typedef int64_t s64;
164 typedef int32_t s32;
165 typedef int16_t s16;
166 typedef int8_t s8;
168 int hostapd_get_rand(u8 *buf, size_t len);
169 void hostapd_hexdump(const char *title, const u8 *buf, size_t len);
170 int hwaddr_aton(const char *txt, u8 *addr);
171 int hexstr2bin(const char *hex, u8 *buf, size_t len);
172 char * rel2abs_path(const char *rel_path);
173 void inc_byte_array(u8 *counter, size_t len);
174 void print_char(char c);
175 void fprint_char(FILE *f, char c);
178 /* Debugging function - conditional printf and hex dump. Driver wrappers can
179 * use these for debugging purposes. */
181 enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };
183 #ifdef CONFIG_NO_STDOUT_DEBUG
185 #define wpa_debug_print_timestamp() do { } while (0)
186 #define wpa_printf(args...) do { } while (0)
187 #define wpa_hexdump(args...) do { } while (0)
188 #define wpa_hexdump_key(args...) do { } while (0)
189 #define wpa_hexdump_ascii(args...) do { } while (0)
190 #define wpa_hexdump_ascii_key(args...) do { } while (0)
192 #else /* CONFIG_NO_STDOUT_DEBUG */
195 * wpa_debug_printf_timestamp - Print timestamp for debug output
197 * This function prints a timestamp in <seconds from 1970>.<microsoconds>
198 * format if debug output has been configured to include timestamps in debug
199 * messages.
201 void wpa_debug_print_timestamp(void);
204 * wpa_printf - conditional printf
205 * @level: priority level (MSG_*) of the message
206 * @fmt: printf format string, followed by optional arguments
208 * This function is used to print conditional debugging and error messages. The
209 * output may be directed to stdout, stderr, and/or syslog based on
210 * configuration.
212 * Note: New line '\n' is added to the end of the text when printing to stdout.
214 void wpa_printf(int level, char *fmt, ...)
215 __attribute__ ((format (printf, 2, 3)));
218 * wpa_hexdump - conditional hex dump
219 * @level: priority level (MSG_*) of the message
220 * @title: title of for the message
221 * @buf: data buffer to be dumped
222 * @len: length of the buf
224 * This function is used to print conditional debugging and error messages. The
225 * output may be directed to stdout, stderr, and/or syslog based on
226 * configuration. The contents of buf is printed out has hex dump.
228 void wpa_hexdump(int level, const char *title, const u8 *buf, size_t len);
231 * wpa_hexdump_key - conditional hex dump, hide keys
232 * @level: priority level (MSG_*) of the message
233 * @title: title of for the message
234 * @buf: data buffer to be dumped
235 * @len: length of the buf
237 * This function is used to print conditional debugging and error messages. The
238 * output may be directed to stdout, stderr, and/or syslog based on
239 * configuration. The contents of buf is printed out has hex dump. This works
240 * like wpa_hexdump(), but by default, does not include secret keys (passwords,
241 * etc.) in debug output.
243 void wpa_hexdump_key(int level, const char *title, const u8 *buf, size_t len);
246 * wpa_hexdump_ascii - conditional hex dump
247 * @level: priority level (MSG_*) of the message
248 * @title: title of for the message
249 * @buf: data buffer to be dumped
250 * @len: length of the buf
252 * This function is used to print conditional debugging and error messages. The
253 * output may be directed to stdout, stderr, and/or syslog based on
254 * configuration. The contents of buf is printed out has hex dump with both
255 * the hex numbers and ASCII characters (for printable range) are shown. 16
256 * bytes per line will be shown.
258 void wpa_hexdump_ascii(int level, const char *title, const u8 *buf,
259 size_t len);
262 * wpa_hexdump_ascii_key - conditional hex dump, hide keys
263 * @level: priority level (MSG_*) of the message
264 * @title: title of for the message
265 * @buf: data buffer to be dumped
266 * @len: length of the buf
268 * This function is used to print conditional debugging and error messages. The
269 * output may be directed to stdout, stderr, and/or syslog based on
270 * configuration. The contents of buf is printed out has hex dump with both
271 * the hex numbers and ASCII characters (for printable range) are shown. 16
272 * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by
273 * default, does not include secret keys (passwords, etc.) in debug output.
275 void wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf,
276 size_t len);
278 #endif /* CONFIG_NO_STDOUT_DEBUG */
281 #ifdef EAPOL_TEST
282 #define WPA_ASSERT(a) \
283 do { \
284 if (!(a)) { \
285 printf("WPA_ASSERT FAILED '" #a "' " \
286 "%s %s:%d\n", \
287 __FUNCTION__, __FILE__, __LINE__); \
288 exit(1); \
290 } while (0)
291 #else
292 #define WPA_ASSERT(a) do { } while (0)
293 #endif
295 #endif /* COMMON_H */