⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 hostapd源代码
💻 H
字号:
/* * wpa_supplicant/hostapd / common helper functions, etc. * Copyright (c) 2002-2006, Jouni Malinen <jkmaline@cc.hut.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Alternatively, this software may be distributed under the terms of BSD * license. * * See README and COPYING for more details. */#ifndef COMMON_H#define COMMON_H#include "os.h"#ifdef __linux__#include <endian.h>#include <byteswap.h>#endif /* __linux__ */#if defined(__FreeBSD__) || defined(__NetBSD__)#include <sys/types.h>#include <sys/endian.h>#define __BYTE_ORDER	_BYTE_ORDER#define	__LITTLE_ENDIAN	_LITTLE_ENDIAN#define	__BIG_ENDIAN	_BIG_ENDIAN#define bswap_16 bswap16#define bswap_32 bswap32#define bswap_64 bswap64#endif /* defined(__FreeBSD__) || defined(__NetBSD__) */#ifdef CONFIG_NATIVE_WINDOWS#include <winsock.h>typedef int gid_t;typedef int socklen_t;#ifndef MSG_DONTWAIT#define MSG_DONTWAIT 0 /* not supported */#endif#endif /* CONFIG_NATIVE_WINDOWS */#if defined(__CYGWIN__) || defined(CONFIG_NATIVE_WINDOWS)#ifdef _MSC_VER#define inline __inline#endif /* _MSC_VER */static inline unsigned short wpa_swap_16(unsigned short v){	return ((v & 0xff) << 8) | (v >> 8);}static inline unsigned int wpa_swap_32(unsigned int v){	return ((v & 0xff) << 24) | ((v & 0xff00) << 8) |		((v & 0xff0000) >> 8) | (v >> 24);}#define le_to_host16(n) (n)#define host_to_le16(n) (n)#define be_to_host16(n) wpa_swap_16(n)#define host_to_be16(n) wpa_swap_16(n)#define le_to_host32(n) (n)#define be_to_host32(n) wpa_swap_32(n)#define host_to_be32(n) wpa_swap_32(n)#else /* __CYGWIN__ */#ifndef __BYTE_ORDER#ifndef __LITTLE_ENDIAN#ifndef __BIG_ENDIAN#define __LITTLE_ENDIAN 1234#define __BIG_ENDIAN 4321#if defined(sparc)#define __BYTE_ORDER __BIG_ENDIAN#endif#endif /* __BIG_ENDIAN */#endif /* __LITTLE_ENDIAN */#endif /* __BYTE_ORDER */#if __BYTE_ORDER == __LITTLE_ENDIAN#define le_to_host16(n) (n)#define host_to_le16(n) (n)#define be_to_host16(n) bswap_16(n)#define host_to_be16(n) bswap_16(n)#define le_to_host32(n) (n)#define be_to_host32(n) bswap_32(n)#define host_to_be32(n) bswap_32(n)#define le_to_host64(n) (n)#define host_to_le64(n) (n)#define be_to_host64(n) bswap_64(n)#define host_to_be64(n) bswap_64(n)#elif __BYTE_ORDER == __BIG_ENDIAN#define le_to_host16(n) bswap_16(n)#define host_to_le16(n) bswap_16(n)#define be_to_host16(n) (n)#define host_to_be16(n) (n)#define le_to_host32(n) bswap_32(n)#define be_to_host32(n) (n)#define host_to_be32(n) (n)#define le_to_host64(n) bswap_64(n)#define host_to_le64(n) bswap_64(n)#define be_to_host64(n) (n)#define host_to_be64(n) (n)#ifndef WORDS_BIGENDIAN#define WORDS_BIGENDIAN#endif#else#error Could not determine CPU byte order#endif#endif /* __CYGWIN__ *//* Macros for handling unaligned 16-bit variables */#define WPA_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1]))#define WPA_PUT_BE16(a, val)			\	do {					\		(a)[0] = ((u16) (val)) >> 8;	\		(a)[1] = ((u16) (val)) & 0xff;	\	} while (0)#define WPA_GET_LE16(a) ((u16) (((a)[1] << 8) | (a)[0]))#define WPA_PUT_LE16(a, val)			\	do {					\		(a)[1] = ((u16) (val)) >> 8;	\		(a)[0] = ((u16) (val)) & 0xff;	\	} while (0)#define WPA_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \			 ((u32) (a)[2]))#define WPA_PUT_BE24(a, val)				\	do {						\		(a)[0] = (u8) (((u32) (val)) >> 16);	\		(a)[1] = (u8) (((u32) (val)) >> 8);	\		(a)[2] = (u8) (((u32) (val)) & 0xff);	\	} while (0)#define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \			 (((u32) (a)[2]) << 8) | ((u32) (a)[3]))#define WPA_PUT_BE32(a, val)				\	do {						\		(a)[0] = (u8) (((u32) (val)) >> 24);	\		(a)[1] = (u8) (((u32) (val)) >> 16);	\		(a)[2] = (u8) (((u32) (val)) >> 8);	\		(a)[3] = (u8) (((u32) (val)) & 0xff);	\	} while (0)#ifndef ETH_ALEN#define ETH_ALEN 6#endif#ifdef _MSC_VERtypedef UINT64 u64;typedef UINT32 u32;typedef UINT16 u16;typedef UINT8 u8;typedef INT64 s64;typedef INT32 s32;typedef INT16 s16;typedef INT8 s8;#define WPA_TYPES_DEFINED#endif /* _MSC_VER */#ifdef __vxworkstypedef unsigned long long u64;typedef UINT32 u32;typedef UINT16 u16;typedef UINT8 u8;typedef long long s64;typedef INT32 s32;typedef INT16 s16;typedef INT8 s8;#define WPA_TYPES_DEFINED#endif /* __vxworks */#ifndef WPA_TYPES_DEFINED#ifdef CONFIG_USE_INTTYPES_H#include <inttypes.h>#else#include <stdint.h>#endiftypedef uint64_t u64;typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;typedef int64_t s64;typedef int32_t s32;typedef int16_t s16;typedef int8_t s8;#define WPA_TYPES_DEFINED#endif /* !WPA_TYPES_DEFINED */#define hostapd_get_rand os_get_randomint hwaddr_aton(const char *txt, u8 *addr);int hexstr2bin(const char *hex, u8 *buf, size_t len);void inc_byte_array(u8 *counter, size_t len);void wpa_get_ntp_timestamp(u8 *buf);#ifdef __GNUC__#define PRINTF_FORMAT(a,b) __attribute__ ((format (printf, (a), (b))))#define STRUCT_PACKED __attribute__ ((packed))#else#define PRINTF_FORMAT(a,b)#define STRUCT_PACKED#endif/* Debugging function - conditional printf and hex dump. Driver wrappers can *  use these for debugging purposes. */enum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };#ifdef CONFIG_NO_STDOUT_DEBUG#define wpa_debug_print_timestamp() do { } while (0)#define wpa_printf(args...) do { } while (0)#define wpa_hexdump(l,t,b,le) do { } while (0)#define wpa_hexdump_key(l,t,b,le) do { } while (0)#define wpa_hexdump_ascii(l,t,b,le) do { } while (0)#define wpa_hexdump_ascii_key(l,t,b,le) do { } while (0)#else /* CONFIG_NO_STDOUT_DEBUG *//** * wpa_debug_printf_timestamp - Print timestamp for debug output * * This function prints a timestamp in <seconds from 1970>.<microsoconds> * format if debug output has been configured to include timestamps in debug * messages. */void wpa_debug_print_timestamp(void);/** * wpa_printf - conditional printf * @level: priority level (MSG_*) of the message * @fmt: printf format string, followed by optional arguments * * This function is used to print conditional debugging and error messages. The * output may be directed to stdout, stderr, and/or syslog based on * configuration. * * Note: New line '\n' is added to the end of the text when printing to stdout. */void wpa_printf(int level, char *fmt, ...)PRINTF_FORMAT(2, 3);/** * wpa_hexdump - conditional hex dump * @level: priority level (MSG_*) of the message * @title: title of for the message * @buf: data buffer to be dumped * @len: length of the buf * * This function is used to print conditional debugging and error messages. The * output may be directed to stdout, stderr, and/or syslog based on * configuration. The contents of buf is printed out has hex dump. */void wpa_hexdump(int level, const char *title, const u8 *buf, size_t len);/** * wpa_hexdump_key - conditional hex dump, hide keys * @level: priority level (MSG_*) of the message * @title: title of for the message * @buf: data buffer to be dumped * @len: length of the buf * * This function is used to print conditional debugging and error messages. The * output may be directed to stdout, stderr, and/or syslog based on * configuration. The contents of buf is printed out has hex dump. This works * like wpa_hexdump(), but by default, does not include secret keys (passwords, * etc.) in debug output. */void wpa_hexdump_key(int level, const char *title, const u8 *buf, size_t len);/** * wpa_hexdump_ascii - conditional hex dump * @level: priority level (MSG_*) of the message * @title: title of for the message * @buf: data buffer to be dumped * @len: length of the buf * * This function is used to print conditional debugging and error messages. The * output may be directed to stdout, stderr, and/or syslog based on * configuration. The contents of buf is printed out has hex dump with both * the hex numbers and ASCII characters (for printable range) are shown. 16 * bytes per line will be shown. */void wpa_hexdump_ascii(int level, const char *title, const u8 *buf,		       size_t len);/** * wpa_hexdump_ascii_key - conditional hex dump, hide keys * @level: priority level (MSG_*) of the message * @title: title of for the message * @buf: data buffer to be dumped * @len: length of the buf * * This function is used to print conditional debugging and error messages. The * output may be directed to stdout, stderr, and/or syslog based on * configuration. The contents of buf is printed out has hex dump with both * the hex numbers and ASCII characters (for printable range) are shown. 16 * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by * default, does not include secret keys (passwords, etc.) in debug output. */void wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf,			   size_t len);#endif /* CONFIG_NO_STDOUT_DEBUG */int wpa_snprintf_hex(char *buf, size_t buf_size, const u8 *data, size_t len);int wpa_snprintf_hex_uppercase(char *buf, size_t buf_size, const u8 *data,			       size_t len);#ifdef EAPOL_TEST#define WPA_ASSERT(a)						       \	do {							       \		if (!(a)) {					       \			printf("WPA_ASSERT FAILED '" #a "' "	       \			       "%s %s:%d\n",			       \			       __FUNCTION__, __FILE__, __LINE__);      \			exit(1);				       \		}						       \	} while (0)#else#define WPA_ASSERT(a) do { } while (0)#endif#ifdef _MSC_VER#undef snprintf#define snprintf _snprintf#undef vsnprintf#define vsnprintf _vsnprintf#undef close#define close closesocket#undef strdup#define strdup _strdup#endif /* _MSC_VER */#ifdef CONFIG_ANSI_C_EXTRA/* * Following non-ANSI C functions may need to be defined either as a macro to * native function with identical behavior or as a separate implementation, * e.g., in common.c or in a new OS / C library specific file, if needed. */#if 0/* List of used C library functions *//* Memory allocation */void free(void *ptr);void *malloc(size_t size);void *realloc(void *ptr, size_t size);/* Memory/string processing */void *memcpy(void *dest, const void *src, size_t n);void *memmove(void *dest, const void *src, size_t n);void *memset(void *s, int c, size_t n);int memcmp(const void *s1, const void *s2, size_t n);char *strchr(const char *s, int c);char *strrchr(const char *s, int c);int strcmp(const char *s1, const char *s2);size_t strlen(const char *s);char *strncpy(char *dest, const char *src, size_t n);char *strstr(const char *haystack, const char *needle);char *strdup(const char *s);/* printf like functions for writing to memory buffer */int snprintf(char *str, size_t size, const char *format, ...);int vsnprintf(char *str, size_t size, const char *format, va_list ap);/* vsnprintf is only used for wpa_msg(); not needed if ctrl_iface is not used * and stdout debugging is disabled */#endif/* strdup - used in number of places - simple example implementation in * common.c */char * strdup(const char *s);/* strcasecmp - used in couple of places; not critical, so can be defined to * use strcmp instead */#if 0int strcasecmp(const char *s1, const char *s2);#else#define strcasecmp strcmp#endif/* strncasecmp - used only in wpa_cli.c; not critical, so can be defined to * use strncmp instead */#if 0int strncasecmp(const char *s1, const char *s2, size_t n);#else#define strncasecmp strncmp#endif/* snprintf - used in number of places; sprintf() is _not_ a good replacement * due to possible buffer overflow; see, e.g., * http://www.ijs.si/software/snprintf/ for portable implementation of * snprintf. */int snprintf(char *str, size_t size, const char *format, ...);/* vsnprintf - only used for wpa_msg() in wpa_supplicant.c */int vsnprintf(char *str, size_t size, const char *format, va_list ap);/* getopt - only used in main.c */int getopt(int argc, char *const argv[], const char *optstring);extern char *optarg;extern int optind;/* gid_t - used in config.h, just typedef it to int here */#ifndef CONFIG_NO_GID_T_TYPEDEF#ifdef CONFIG_CTRL_IFACE#ifndef CONFIG_CTRL_IFACE_UDP#ifndef __gid_t_defined#ifndef _GID_Ttypedef int gid_t;#endif#endif#endif#endif#endif#ifndef CONFIG_NO_SOCKLEN_T_TYPEDEF#ifndef __socklen_t_definedtypedef int socklen_t;#endif#endif/* inline - define as __inline or just define it to be empty, if needed */#ifdef CONFIG_NO_INLINE#define inline#else#define inline __inline#endif#ifndef __func__#define __func__ "__func__ not defined"#endif#ifndef bswap_16#define bswap_16(a) ((((u16) (a) << 8) & 0xff00) | (((u16) (a) >> 8) & 0xff))#endif#ifndef bswap_32#define bswap_16(a) ((((u16) (a) << 8) & 0xff00) | (((u16) (a) >> 8) & 0xff))#define bswap_16(a) ((((u16) (a) << 8) & 0xff00) | (((u16) (a) >> 8) & 0xff))#define bswap_32(a) ((((u32) (a) << 24) & 0xff000000) | \		     (((u32) (a) << 8) & 0xff0000) | \     		     (((u32) (a) >> 8) & 0xff00) | \     		     (((u32) (a) >> 24) & 0xff))#endif#ifndef MSG_DONTWAIT#define MSG_DONTWAIT 0#endif#ifdef _WIN32_WCEvoid perror(const char *s);#endif /* _WIN32_WCE */#endif /* CONFIG_ANSI_C_EXTRA */void *wpa_zalloc(size_t size);#endif /* COMMON_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -