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