18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant/hostapd / Debug prints 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2002-2007, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_DEBUG_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_DEBUG_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wpabuf.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* Debugging function - conditional printf and hex dump. Driver wrappers can 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * use these for debugging purposes. */ 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum { 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt MSG_EXCESSIVE, MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NO_STDOUT_DEBUG 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_debug_print_timestamp() do { } while (0) 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_printf(args...) do { } while (0) 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump(l,t,b,le) do { } while (0) 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump_buf(l,t,b) do { } while (0) 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump_key(l,t,b,le) do { } while (0) 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump_buf_key(l,t,b) do { } while (0) 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump_ascii(l,t,b,le) do { } while (0) 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_hexdump_ascii_key(l,t,b,le) do { } while (0) 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_debug_open_file(p) do { } while (0) 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_debug_close_file() do { } while (0) 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_dbg(args...) do { } while (0) 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_debug_reopen_file(void) 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_NO_STDOUT_DEBUG */ 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_debug_open_file(const char *path); 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_debug_reopen_file(void); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_debug_close_file(void); 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_debug_printf_timestamp - Print timestamp for debug output 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function prints a timestamp in seconds_from_1970.microsoconds 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * format if debug output has been configured to include timestamps in debug 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * messages. 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_debug_print_timestamp(void); 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_printf - conditional printf 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @fmt: printf format string, followed by optional arguments 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Note: New line '\n' is added to the end of the text when printing to stdout. 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_printf(int level, const char *fmt, ...) 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtPRINTF_FORMAT(2, 3); 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_hexdump - conditional hex dump 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @title: title of for the message 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: data buffer to be dumped 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @len: length of the buf 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. The contents of buf is printed out has hex dump. 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_hexdump(int level, const char *title, const u8 *buf, size_t len); 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_hexdump_buf(int level, const char *title, 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *buf) 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_hexdump(level, title, buf ? wpabuf_head(buf) : NULL, 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt buf ? wpabuf_len(buf) : 0); 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_hexdump_key - conditional hex dump, hide keys 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @title: title of for the message 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: data buffer to be dumped 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @len: length of the buf 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. The contents of buf is printed out has hex dump. This works 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * like wpa_hexdump(), but by default, does not include secret keys (passwords, 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * etc.) in debug output. 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_hexdump_key(int level, const char *title, const u8 *buf, size_t len); 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_hexdump_buf_key(int level, const char *title, 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *buf) 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1071f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt wpa_hexdump_key(level, title, buf ? wpabuf_head(buf) : NULL, 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt buf ? wpabuf_len(buf) : 0); 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_hexdump_ascii - conditional hex dump 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @title: title of for the message 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: data buffer to be dumped 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @len: length of the buf 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. The contents of buf is printed out has hex dump with both 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * the hex numbers and ASCII characters (for printable range) are shown. 16 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * bytes per line will be shown. 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_hexdump_ascii(int level, const char *title, const u8 *buf, 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len); 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_hexdump_ascii_key - conditional hex dump, hide keys 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @title: title of for the message 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @buf: data buffer to be dumped 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @len: length of the buf 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. The contents of buf is printed out has hex dump with both 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * the hex numbers and ASCII characters (for printable range) are shown. 16 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * bytes per line will be shown. This works like wpa_hexdump_ascii(), but by 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * default, does not include secret keys (passwords, etc.) in debug output. 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_hexdump_ascii_key(int level, const char *title, const u8 *buf, 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len); 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_dbg() behaves like wpa_msg(), but it can be removed from build to reduce 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * binary size. As such, it should be used with debugging messages that are not 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * needed in the control interface while wpa_msg() has to be used for anything 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * that needs to shown to control interface monitors. 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_dbg(args...) wpa_msg(args) 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NO_STDOUT_DEBUG */ 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NO_WPA_MSG 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_msg(args...) do { } while (0) 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_msg_ctrl(args...) do { } while (0) 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_msg_register_cb(f) do { } while (0) 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define wpa_msg_register_ifname_cb(f) do { } while (0) 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_NO_WPA_MSG */ 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_msg - Conditional printf for default target and ctrl_iface monitors 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Pointer to context data; this is the ctx variable registered 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * with struct wpa_driver_ops::init() 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @fmt: printf format string, followed by optional arguments 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. The 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * output may be directed to stdout, stderr, and/or syslog based on 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * configuration. This function is like wpa_printf(), but it also sends the 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * same message to all attached ctrl_iface monitors. 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Note: New line '\n' is added to the end of the text when printing to stdout. 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_msg(void *ctx, int level, const char *fmt, ...) PRINTF_FORMAT(3, 4); 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_msg_ctrl - Conditional printf for ctrl_iface monitors 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @ctx: Pointer to context data; this is the ctx variable registered 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * with struct wpa_driver_ops::init() 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @level: priority level (MSG_*) of the message 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @fmt: printf format string, followed by optional arguments 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is used to print conditional debugging and error messages. 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This function is like wpa_msg(), but it sends the output only to the 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * attached ctrl_iface monitors. In other words, it can be used for frequent 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * events that do not need to be sent to syslog. 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_msg_ctrl(void *ctx, int level, const char *fmt, ...) 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry ShmidtPRINTF_FORMAT(3, 4); 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef void (*wpa_msg_cb_func)(void *ctx, int level, const char *txt, 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t len); 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_msg_register_cb - Register callback function for wpa_msg() messages 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @func: Callback function (%NULL to unregister) 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_msg_register_cb(wpa_msg_cb_func func); 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef const char * (*wpa_msg_get_ifname_func)(void *ctx); 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_msg_register_ifname_cb(wpa_msg_get_ifname_func func); 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NO_WPA_MSG */ 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_NO_HOSTAPD_LOGGER 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define hostapd_logger(args...) do { } while (0) 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define hostapd_logger_register_cb(f) do { } while (0) 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_NO_HOSTAPD_LOGGER */ 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid hostapd_logger(void *ctx, const u8 *addr, unsigned int module, int level, 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *fmt, ...) PRINTF_FORMAT(5, 6); 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidttypedef void (*hostapd_logger_cb_func)(void *ctx, const u8 *addr, 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int module, int level, 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *txt, size_t len); 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * hostapd_logger_register_cb - Register callback function for hostapd_logger() 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * @func: Callback function (%NULL to unregister) 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid hostapd_logger_register_cb(hostapd_logger_cb_func func); 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_NO_HOSTAPD_LOGGER */ 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_IEEE80211 0x00000001 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_IEEE8021X 0x00000002 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_RADIUS 0x00000004 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_WPA 0x00000008 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_DRIVER 0x00000010 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_IAPP 0x00000020 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define HOSTAPD_MODULE_MLME 0x00000040 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtenum hostapd_logger_level { 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG_VERBOSE = 0, 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_DEBUG = 1, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_INFO = 2, 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_NOTICE = 3, 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt HOSTAPD_LEVEL_WARNING = 4 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_DEBUG_SYSLOG 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_debug_open_syslog(void); 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_debug_close_syslog(void); 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else /* CONFIG_DEBUG_SYSLOG */ 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_debug_open_syslog(void) 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_debug_close_syslog(void) 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_DEBUG_SYSLOG */ 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 25804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#ifdef CONFIG_DEBUG_LINUX_TRACING 25904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 26004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtint wpa_debug_open_linux_tracing(void); 26104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpa_debug_close_linux_tracing(void); 26204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 26304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#else /* CONFIG_DEBUG_LINUX_TRACING */ 26404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 26504949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline int wpa_debug_open_linux_tracing(void) 26604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 26704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt return 0; 26804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 26904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 27004949598a23f501be6eec21697465fd46a28840aDmitry Shmidtstatic inline void wpa_debug_close_linux_tracing(void) 27104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{ 27204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt} 27304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 27404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif /* CONFIG_DEBUG_LINUX_TRACING */ 27504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef EAPOL_TEST 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_ASSERT(a) \ 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt do { \ 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!(a)) { \ 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt printf("WPA_ASSERT FAILED '" #a "' " \ 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt "%s %s:%d\n", \ 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt __FUNCTION__, __FILE__, __LINE__); \ 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt exit(1); \ 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } \ 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } while (0) 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#else 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_ASSERT(a) do { } while (0) 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_DEBUG_H */ 292