263 lines
14 KiB
C
263 lines
14 KiB
C
/*
|
|
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
* are permitted provided that the following conditions are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* 3. The name of the author may not be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
|
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
|
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
|
* OF SUCH DAMAGE.
|
|
*
|
|
* This file is part of the lwIP TCP/IP stack.
|
|
*
|
|
* Author: Adam Dunkels <adam@sics.se>
|
|
*
|
|
*/
|
|
#ifndef __LWIP_DEBUG_H__
|
|
#define __LWIP_DEBUG_H__
|
|
|
|
#include "arch.h"
|
|
#include "opt.h"
|
|
|
|
//extern Log_ConfigS log_config;
|
|
extern u8_t lwip_urt_debug;
|
|
void sys_msleep(u32_t ms);
|
|
extern void lwip_record_assert(const char *string, unsigned int line);
|
|
|
|
/** lower two bits indicate debug level
|
|
* - 0 all
|
|
* - 1 warning
|
|
* - 2 serious
|
|
* - 3 severe
|
|
*/
|
|
#define LWIP_DBG_LEVEL_ALL 0x00
|
|
#define LWIP_DBG_LEVEL_OFF LWIP_DBG_LEVEL_ALL /* compatibility define only */
|
|
#define LWIP_DBG_LEVEL_INFO 0x01 /* normal info */
|
|
#define LWIP_DBG_LEVEL_WARNING 0x02 /* bad checksums, dropped packets, ... */
|
|
#define LWIP_DBG_LEVEL_SERIOUS 0x03 /* memory allocation failures, ... */
|
|
#define LWIP_DBG_LEVEL_SEVERE 0x04
|
|
#define LWIP_DBG_LEVEL_END (LWIP_DBG_LEVEL_SEVERE + 1)
|
|
|
|
#define LWIP_DBG_MASK_LEVEL 0x000F /*low 4 bit mask for level*/
|
|
#define LWIP_DBG_MASK_MODUL 0xFF00 /*high 8 bit mask for modul */
|
|
|
|
/** flag for LWIP_DEBUGF to enable that debug message */
|
|
#define LWIP_DBG_ON 0x80U
|
|
/** flag for LWIP_DEBUGF to disable that debug message */
|
|
#define LWIP_DBG_OFF 0x00U
|
|
|
|
/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */
|
|
#define LWIP_DBG_TRACE 0x40U
|
|
/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */
|
|
#define LWIP_DBG_STATE 0x20U
|
|
/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */
|
|
#define LWIP_DBG_FRESH 0x10U
|
|
/** flag for LWIP_DEBUGF to halt after printing this debug message */
|
|
#define LWIP_DBG_HALT 0x08U
|
|
|
|
#if 0
|
|
#ifndef LWIP_NOASSERT
|
|
#define LWIP_ASSERT(assertion) ASSERT(assertion);
|
|
|
|
// LWIP_PLATFORM_ASSERT(message); } while(0)
|
|
#else /* LWIP_NOASSERT */
|
|
#define LWIP_ASSERT(message, assertion)
|
|
#endif /* LWIP_NOASSERT */
|
|
#endif
|
|
#define LWIP_ASSERT_MSG(message, assertion) do { if (!(assertion)) { \
|
|
LWIP_PLATFORM_ERROR(message);\
|
|
sys_msleep(2000); \
|
|
ASSERT(assertion);}} while(0)
|
|
#if 0
|
|
#define LWIP_ASSERT(assertion) do { if (!(assertion)) { \
|
|
sys_msleep(2000); \
|
|
ASSERT(assertion);}} while(0)
|
|
#endif
|
|
#define LWIP_ASSERT_NOW(assertion) do { if (!(assertion)) { \
|
|
ASSERT(assertion);}} while(0)
|
|
|
|
/** if "expression" isn't true, then print "message" and execute "handler" expression */
|
|
#if 0
|
|
#ifndef LWIP_ERROR
|
|
#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \
|
|
LWIP_PLATFORM_ASSERT(message); handler;}} while(0)
|
|
#endif /* LWIP_ERROR */
|
|
#endif
|
|
#ifndef LWIP_ERROR
|
|
#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \
|
|
LWIP_PLATFORM_ERROR(message); handler;}} while(0)
|
|
#endif /* LWIP_ERROR */
|
|
|
|
struct moduleDebugSettingT {
|
|
char *name;
|
|
u8_t onoff;
|
|
u8_t level;
|
|
u8_t type;
|
|
};
|
|
|
|
#ifndef lwipModuleSwitchSize
|
|
#define lwipModuleSwitchSize 64
|
|
#endif
|
|
#ifndef QUEC_PATCH_10922_11761
|
|
extern int lwip_log_switch(u8_t log_lv);
|
|
/* Log levels */
|
|
#define LWIP_INFO_LV (0x04)
|
|
#define LWIP_API_LV (0x02)
|
|
#define LWIP_ERROR_LV (0x01)
|
|
#ifndef QUEC_PATCH_1802S_FIX_PASSIVE_CLOSE_WDBLOCK_7000
|
|
extern void lwip_set_log_lv(UINT8 lv);
|
|
extern UINT8 lwip_get_log_lv(void);
|
|
#endif
|
|
#endif
|
|
#ifdef LWIP_DEBUGF_MODUL_DATA_DEFINE
|
|
/**
|
|
* !!! order of array member !!!
|
|
* refer to macro(DIAG_ON_DEBUG/ETHARP_DEBUG...) in lwipopt.h
|
|
**/
|
|
struct moduleDebugSettingT g_moduleDebugSettings[lwipModuleSwitchSize] = {
|
|
{"diag", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, DIAG_ON_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"arp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, ETHARP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"netif", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, NETIF_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"pbuf", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, PBUF_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"apilib", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, API_LIB_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"apimsg", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, API_MSG_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"sockets", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, SOCKETS_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"netconn", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, NETCONN_DEBUG >> LWIP_DEBUG_HIGH_BITS}, // 7
|
|
{"icmp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, ICMP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"igmp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IGMP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"inet", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, INET_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ip", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ipreass", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IP_REASS_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"raw", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, RAW_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"mem", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, MEM_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"memp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, MEMP_DEBUG >> LWIP_DEBUG_HIGH_BITS}, // 15
|
|
{"sys", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, SYS_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"timers", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TIMERS_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpslowtmr", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, TCP_SLOWTMR_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpinput", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_INPUT_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpfr", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_FR_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcprto", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_RTO_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpcwnd", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_CWND_DEBUG >> LWIP_DEBUG_HIGH_BITS}, // 23
|
|
{"tcpwnd", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_WND_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpoutput", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_OUTPUT_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcprst", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_RST_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpqlen", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCP_QLEN_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"udp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, UDP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tcpip", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TCPIP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ppp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, LWIP_PPP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"slip", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, SLIP_DEBUG >> LWIP_DEBUG_HIGH_BITS}, // 31
|
|
{"dhcp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, DHCP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"autoip", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, AUTOIP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"snmpmsg", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, SNMP_MSG_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"snmpmib", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, SNMP_MIB_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"dns", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, DNS_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ip6", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IP6_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ipnat", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IP_NAT_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"lwipapi", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, LWIP_API_DEBUG >> LWIP_DEBUG_HIGH_BITS}, // 39
|
|
{"nd6", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, ND6_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"iptrace", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, IP_TRACE >> LWIP_DEBUG_HIGH_BITS},
|
|
{"bridge", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IF_BRIDGE_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ifusb", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IF_USB_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ifwifi", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IF_WIFI_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ifpdp", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, IF_PDP_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"ipsec", LWIP_DBG_ON, LWIP_DBG_LEVEL_ALL, IP_SEC_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"tft", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, TFT_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
{"redirect", LWIP_DBG_OFF, LWIP_DBG_LEVEL_ALL, REDIRECT_DEBUG >> LWIP_DEBUG_HIGH_BITS},
|
|
};
|
|
|
|
#else
|
|
extern struct moduleDebugSettingT g_moduleDebugSettings[lwipModuleSwitchSize];
|
|
#endif
|
|
|
|
#if LWIP_DEBUG
|
|
/** Print debug message only if debug message type is enabled...
|
|
* AND is of correct type AND is at least LWIP_DBG_LEVEL
|
|
* 8 bits module id | 4 bit type | 4 bits level id
|
|
* eg. socket module id SOCKETS_DEBUG = 0x01 << 8 = 0x0100
|
|
* level id LWIP_DBG_LEVEL_WARNING = 0x01
|
|
* so debug = SOCKETS_DEBUG| LWIP_DBG_LEVEL_WARNING
|
|
*
|
|
* !!!!!!note!!!!!
|
|
* CPUartLogPrintf message; not CPUartLogPrintf(message);
|
|
* because CPUartLogPrintf input is "const char *fmt, ..."
|
|
* so, if using (message), then will beome one variable
|
|
**/
|
|
#define LWIP_DEBUGF_SWITCH_CHECK_S(debug) ((!IS_DIAG_BLOCKED) \
|
|
&& (((g_moduleDebugSettings[(debug & LWIP_DBG_MASK_MODUL) >> LWIP_DEBUG_HIGH_BITS].onoff) == LWIP_DBG_ON) ? 1 : 0))
|
|
|
|
#define LWIP_DEBUGF_SWITCH_CHECK(debug) ((!IS_DIAG_BLOCKED)\
|
|
&& (((g_moduleDebugSettings[(debug & LWIP_DBG_MASK_MODUL) >> LWIP_DEBUG_HIGH_BITS].onoff) == LWIP_DBG_ON) ? 1 : 0) \
|
|
&& (LOG_DISABLE != log_config.log_cfg) \
|
|
&& (log_config.msg_cfg == ACAT_MSG_ENABLE) \
|
|
&& (booting_done))
|
|
|
|
#define LWIP_DEBUGF(debug, message) do { \
|
|
if (LWIP_DEBUGF_SWITCH_CHECK(debug)) { \
|
|
LWIP_LOG message; \
|
|
break; \
|
|
}\
|
|
} while(0)
|
|
|
|
|
|
#else /* LWIP_DEBUG */
|
|
#define LWIP_DEBUGF(debug, message)
|
|
#define LWIP_DEBUGF_SWITCH_CHECK(debug) (0)
|
|
#define LWIP_DEBUGF_SWITCH_CHECK_S(debug) (0)
|
|
#define LWIP_DEBUGF_SWITCH_CHECK_URT(debug) (0)
|
|
#endif /* LWIP_DEBUG */
|
|
|
|
#if 0
|
|
#if (LWIP_DBG_OFF == LWIP_DEBUG)
|
|
#if LWIP_DEBUG_DISABLE_ALL
|
|
/*no need redefine here*/
|
|
#else
|
|
#undef LWIP_DEBUGF_SWITCH_CHECK
|
|
#undef LWIP_DEBUGF
|
|
#undef LWIP_DIAG
|
|
|
|
#define LWIP_DEBUGF_SWITCH_CHECK(debug) ((!IS_DIAG_BLOCKED)\
|
|
&& (((g_moduleDebugSettings[(debug & LWIP_DBG_MASK_MODUL) >> LWIP_DEBUG_HIGH_BITS].onoff) == LWIP_DBG_ON) ? 1 : 0) \
|
|
&& (LOG_DISABLE != log_config.log_cfg) \
|
|
&& (log_config.msg_cfg == ACAT_MSG_ENABLE) \
|
|
&& (booting_done))
|
|
|
|
/*using for inline function*/
|
|
#define LWIP_DEBUGF(debug, message) do { \
|
|
if (LWIP_DEBUGF_SWITCH_CHECK(debug)) { \
|
|
LWIP_LOG message; \
|
|
break; \
|
|
}\
|
|
} while(0)
|
|
|
|
#define LWIP_DIAG(debug, cat3, fmt, args...) \
|
|
{ \
|
|
if (LWIP_DEBUGF_SWITCH_CHECK(debug)) \
|
|
{ \
|
|
DIAG_FILTER(MIFI, LWIP, cat3, DIAG_INFORMATION) \
|
|
diagPrintf(fmt, ##args); \
|
|
} \
|
|
}
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#endif /* __LWIP_DEBUG_H__ */
|
|
|