176404edcSAsim Jamshed #ifndef __DEBUG_H_
276404edcSAsim Jamshed #define __DEBUG_H_
376404edcSAsim Jamshed 
4cafe7743SAsim Jamshed #ifdef DBGMSG
5cafe7743SAsim Jamshed #define _GNU_SOURCE
6cafe7743SAsim Jamshed #include <sched.h>
7cafe7743SAsim Jamshed #endif
876404edcSAsim Jamshed #include <errno.h>
976404edcSAsim Jamshed #include <stdio.h>
1076404edcSAsim Jamshed #include <assert.h>
1176404edcSAsim Jamshed #include "mtcp.h"
1276404edcSAsim Jamshed #include "tcp_in.h"
1376404edcSAsim Jamshed 
1476404edcSAsim Jamshed #ifdef DBGTEMP
1576404edcSAsim Jamshed 
1676404edcSAsim Jamshed #define TRACE_TEMP(f, m...) { \
1776404edcSAsim Jamshed 	fprintf(stderr, "[CPU %d][%10s:%4d] " f, mtcp->ctx->cpu, 		\
1876404edcSAsim Jamshed 			__FUNCTION__, __LINE__, ##m);	\
1976404edcSAsim Jamshed 	}
2076404edcSAsim Jamshed 
2176404edcSAsim Jamshed #else
2276404edcSAsim Jamshed 
2376404edcSAsim Jamshed #define TRACE_TEMP(f, m...)	(void)0
2476404edcSAsim Jamshed 
2576404edcSAsim Jamshed #endif /* DBGTEMP*/
2676404edcSAsim Jamshed 
2776404edcSAsim Jamshed #ifdef DBGERR
2876404edcSAsim Jamshed 
2976404edcSAsim Jamshed #define TRACE_ERROR(f, m...) { \
3076404edcSAsim Jamshed 	fprintf(stderr, "[%10s:%4d] " f, __FUNCTION__, __LINE__, ##m);	\
3176404edcSAsim Jamshed 	}
3276404edcSAsim Jamshed 
3376404edcSAsim Jamshed #else
3476404edcSAsim Jamshed 
3576404edcSAsim Jamshed #define TRACE_ERROR(f, m...)	(void)0
3676404edcSAsim Jamshed 
3776404edcSAsim Jamshed #endif /* DBGERR */
3876404edcSAsim Jamshed 
3976404edcSAsim Jamshed #ifdef DBGCERR
4076404edcSAsim Jamshed 
4176404edcSAsim Jamshed #define CTRACE_ERROR(f, m...) { \
4276404edcSAsim Jamshed 	fprintf(stderr, "[CPU %d][%10s:%4d] " f, mtcp->ctx->cpu, __FUNCTION__, __LINE__, ##m);	\
4376404edcSAsim Jamshed 	}
4476404edcSAsim Jamshed 
4576404edcSAsim Jamshed #else
4676404edcSAsim Jamshed 
4776404edcSAsim Jamshed #define CTRACE_ERROR(f, m...)	(void)0
4876404edcSAsim Jamshed 
4976404edcSAsim Jamshed #endif /* DBGERR */
5076404edcSAsim Jamshed 
5176404edcSAsim Jamshed #ifdef DBGMSG
528176a49fSAsim Jamshed #define __PREPARE_DBGLOGGING()			\
53cafe7743SAsim Jamshed 	struct mtcp_context mctx = {		\
54cafe7743SAsim Jamshed 		.cpu = sched_getcpu(),		\
55cafe7743SAsim Jamshed 	};						\
56cafe7743SAsim Jamshed 							\
57cafe7743SAsim Jamshed 	mtcp_manager_t mtcp = GetMTCPManager(&mctx);
5876404edcSAsim Jamshed 
5976404edcSAsim Jamshed #define TRACE_DBG(f, m...) {\
60*4cb4e140SAsim Jamshed 		(mtcp != NULL) ?			   \
6176404edcSAsim Jamshed 			thread_printf(mtcp, mtcp->log_fp, "[%10s:%4d] "	\
62*4cb4e140SAsim Jamshed 				      f, __FUNCTION__, __LINE__, ##m) : \
63*4cb4e140SAsim Jamshed 			fprintf(stderr, "[CPU %d][%10s:%4d] " f, 0, __FUNCTION__, __LINE__, ##m); \
6476404edcSAsim Jamshed 	}
6576404edcSAsim Jamshed 
6676404edcSAsim Jamshed #else
6776404edcSAsim Jamshed 
6876404edcSAsim Jamshed #define TRACE_DBG(f, m...)   (void)0
6976404edcSAsim Jamshed 
7076404edcSAsim Jamshed #endif /* DBGMSG */
7176404edcSAsim Jamshed 
7276404edcSAsim Jamshed #ifdef INFO
7376404edcSAsim Jamshed 
7476404edcSAsim Jamshed #define TRACE_INFO(f, m...) {                                         \
7576404edcSAsim Jamshed 	fprintf(stderr, "[%10s:%4d] " f,__FUNCTION__, __LINE__, ##m);    \
7676404edcSAsim Jamshed     }
7776404edcSAsim Jamshed 
7876404edcSAsim Jamshed #else
7976404edcSAsim Jamshed 
8076404edcSAsim Jamshed #define TRACE_INFO(f, m...) (void)0
8176404edcSAsim Jamshed 
8276404edcSAsim Jamshed #endif /* INFO */
8376404edcSAsim Jamshed 
8476404edcSAsim Jamshed #define TRACE_CONFIG(f, m...) fprintf(stderr, f, ##m)
8576404edcSAsim Jamshed 
8676404edcSAsim Jamshed #ifdef DBGLOG
8776404edcSAsim Jamshed #define TRACE_LOG(f, m...) TRACE_INFO(f, ##m)
8876404edcSAsim Jamshed #else
8976404edcSAsim Jamshed #define TRACE_LOG(f, m...) (void)0
9076404edcSAsim Jamshed #endif
9176404edcSAsim Jamshed 
9276404edcSAsim Jamshed #ifdef MONITOR
9376404edcSAsim Jamshed #define TRACE_MONITOR(f, m...) TRACE_FUNC("MONITOR", f, ##m)
9476404edcSAsim Jamshed #else
9576404edcSAsim Jamshed #define TRACE_MONITOR(f, m...)   (void)0
9676404edcSAsim Jamshed #endif
9776404edcSAsim Jamshed 
9876404edcSAsim Jamshed #ifdef STREAM
9976404edcSAsim Jamshed #define TRACE_STREAM(f, m...) TRACE_FUNC("STREAM", f, ##m)
10076404edcSAsim Jamshed #else
10176404edcSAsim Jamshed #define TRACE_STREAM(f, m...)   (void)0
10276404edcSAsim Jamshed #endif
10376404edcSAsim Jamshed 
10476404edcSAsim Jamshed #ifdef STATE
10576404edcSAsim Jamshed #define TRACE_STATE(f, m...) TRACE_FUNC("STATE", f, ##m)
10676404edcSAsim Jamshed #else
10776404edcSAsim Jamshed #define TRACE_STATE(f, m...)   (void)0
10876404edcSAsim Jamshed #endif
10976404edcSAsim Jamshed 
11076404edcSAsim Jamshed #ifdef SNDBUF
11176404edcSAsim Jamshed #define TRACE_SNDBUF(f, m...) TRACE_FUNC("SNDBUF", f, ##m)
11276404edcSAsim Jamshed #else
11376404edcSAsim Jamshed #define TRACE_SNDBUF(f, m...)   (void)0
11476404edcSAsim Jamshed #endif
11576404edcSAsim Jamshed 
11676404edcSAsim Jamshed #ifdef RCVBUF
11776404edcSAsim Jamshed #define TRACE_RCVBUF(f, m...) TRACE_FUNC("RCVBUF", f, ##m)
11876404edcSAsim Jamshed #else
11976404edcSAsim Jamshed #define TRACE_RCVBUF(f, m...)   (void)0
12076404edcSAsim Jamshed #endif
12176404edcSAsim Jamshed 
12276404edcSAsim Jamshed #ifdef CLWND
12376404edcSAsim Jamshed #define TRACE_CLWND(f, m...) TRACE_FUNC("CLWND", f, ##m)
12476404edcSAsim Jamshed #else
12576404edcSAsim Jamshed #define TRACE_CLWND(f, m...)   (void)0
12676404edcSAsim Jamshed #endif
12776404edcSAsim Jamshed 
12876404edcSAsim Jamshed #ifdef LOSS
12976404edcSAsim Jamshed #define TRACE_LOSS(f, m...) TRACE_FUNC("LOSS", f, ##m)
13076404edcSAsim Jamshed #else
13176404edcSAsim Jamshed #define TRACE_LOSS(f, m...)   (void)0
13276404edcSAsim Jamshed #endif
13376404edcSAsim Jamshed 
13476404edcSAsim Jamshed #ifdef SACK
13576404edcSAsim Jamshed #define TRACE_SACK(f, m...) TRACE_FUNC("SACK", f, ##m)
13676404edcSAsim Jamshed #else
13776404edcSAsim Jamshed #define TRACE_SACK(f, m...)   (void)0
13876404edcSAsim Jamshed #endif
13976404edcSAsim Jamshed 
14076404edcSAsim Jamshed #ifdef TSTAMP
14176404edcSAsim Jamshed #define TRACE_TSTAMP(f, m...) TRACE_FUNC("TSTAMP", f, ##m)
14276404edcSAsim Jamshed #else
14376404edcSAsim Jamshed #define TRACE_TSTAMP(f, m...)   (void)0
14476404edcSAsim Jamshed #endif
14576404edcSAsim Jamshed 
14676404edcSAsim Jamshed #ifdef RTT
14776404edcSAsim Jamshed #define TRACE_RTT(f, m...) TRACE_FUNC("RTT", f, ##m)
14876404edcSAsim Jamshed #else
14976404edcSAsim Jamshed #define TRACE_RTT(f, m...)   (void)0
15076404edcSAsim Jamshed #endif
15176404edcSAsim Jamshed 
15276404edcSAsim Jamshed #ifdef RTO
15376404edcSAsim Jamshed #define TRACE_RTO(f, m...) TRACE_FUNC("RTO", f, ##m)
15476404edcSAsim Jamshed #else
15576404edcSAsim Jamshed #define TRACE_RTO(f, m...)   (void)0
15676404edcSAsim Jamshed #endif
15776404edcSAsim Jamshed 
15876404edcSAsim Jamshed #ifdef CONG
15976404edcSAsim Jamshed #define TRACE_CONG(f, m...) TRACE_FUNC("CONG", f, ##m)
16076404edcSAsim Jamshed #else
16176404edcSAsim Jamshed #define TRACE_CONG(f, m...)   (void)0
16276404edcSAsim Jamshed #endif
16376404edcSAsim Jamshed 
16476404edcSAsim Jamshed #ifdef EPOLL
16576404edcSAsim Jamshed #define TRACE_EPOLL(f, m...) TRACE_FUNC("EPOLL", f, ##m)
16676404edcSAsim Jamshed #else
16776404edcSAsim Jamshed #define TRACE_EPOLL(f, m...)   (void)0
16876404edcSAsim Jamshed #endif
16976404edcSAsim Jamshed 
17076404edcSAsim Jamshed #ifdef FSTAT
17176404edcSAsim Jamshed #define TRACE_FSTAT(f, m...) TRACE_FUNC("FSTAT", f, ##m)
17276404edcSAsim Jamshed #else
17376404edcSAsim Jamshed #define TRACE_FSTAT(f, m...)   (void)0
17476404edcSAsim Jamshed #endif
17576404edcSAsim Jamshed 
17676404edcSAsim Jamshed #ifdef APP
17776404edcSAsim Jamshed #define TRACE_APP(f, m...) TRACE_FUNC("APP", f, ##m)
17876404edcSAsim Jamshed #else
17976404edcSAsim Jamshed #define TRACE_APP(f, m...) (void)0
18076404edcSAsim Jamshed #endif
18176404edcSAsim Jamshed 
18276404edcSAsim Jamshed #ifdef DBGFIN
18376404edcSAsim Jamshed #define TRACE_FIN(f, m...) TRACE_FUNC("FIN", f, ##m)
18476404edcSAsim Jamshed #else
18576404edcSAsim Jamshed #define TRACE_FIN(f, m...) (void)0
18676404edcSAsim Jamshed #endif
18776404edcSAsim Jamshed 
18876404edcSAsim Jamshed #ifdef TSTAT
18976404edcSAsim Jamshed #define TRACE_TSTAT(f, m...) TRACE_FUNC("TSTAT", f, ##m)
19076404edcSAsim Jamshed #else
19176404edcSAsim Jamshed #define TRACE_TSTAT(f, m...) (void)0
19276404edcSAsim Jamshed #endif
19376404edcSAsim Jamshed 
19476404edcSAsim Jamshed #ifdef LOOP
19576404edcSAsim Jamshed #define TRACE_LOOP(f, m...) TRACE_FUNC("LOOP", "ts: %u, "f, cur_ts, ##m)
19676404edcSAsim Jamshed #else
19776404edcSAsim Jamshed #define TRACE_LOOP(f, m...) (void)0
19876404edcSAsim Jamshed #endif
19976404edcSAsim Jamshed 
20076404edcSAsim Jamshed #ifdef ROUND
20176404edcSAsim Jamshed #define TRACE_ROUND(f, m...) TRACE_FUNC("ROUND", f, ##m)
20276404edcSAsim Jamshed #else
20376404edcSAsim Jamshed #define TRACE_ROUND(f, m...) (void)0
20476404edcSAsim Jamshed #endif
20576404edcSAsim Jamshed 
20676404edcSAsim Jamshed #ifdef SELECT
20776404edcSAsim Jamshed #define TRACE_SELECT(f, m...) TRACE_FUNC("SELECT", f, ##m)
20876404edcSAsim Jamshed #else
20976404edcSAsim Jamshed #define TRACE_SELECT(f, m...) (void)0
21076404edcSAsim Jamshed #endif
21176404edcSAsim Jamshed 
21276404edcSAsim Jamshed #ifdef API
21376404edcSAsim Jamshed #define TRACE_API(f, m...) TRACE_FUNC("API", f, ##m)
21476404edcSAsim Jamshed #else
21576404edcSAsim Jamshed #define TRACE_API(f, m...) (void)0
21676404edcSAsim Jamshed #endif
21776404edcSAsim Jamshed 
21876404edcSAsim Jamshed #ifdef DBGFUNC
21976404edcSAsim Jamshed 
22076404edcSAsim Jamshed #define TRACE_FUNC(n, f, m...) {			     \
221*4cb4e140SAsim Jamshed 		(mtcp != NULL) ?			     \
22276404edcSAsim Jamshed 			thread_printf(mtcp, mtcp->log_fp, "[%6s: %10s:%4d] " \
223*4cb4e140SAsim Jamshed 				      f, n, __FUNCTION__, __LINE__, ##m) : \
224*4cb4e140SAsim Jamshed 			fprintf(stderr, "[CPU %d][%10s:%4d] " f, 0, __FUNCTION__, __LINE__, ##m); \
22576404edcSAsim Jamshed 	}
22676404edcSAsim Jamshed 
22776404edcSAsim Jamshed #else
22876404edcSAsim Jamshed 
22976404edcSAsim Jamshed #define TRACE_FUNC(f, m...) (void)0
23076404edcSAsim Jamshed 
23176404edcSAsim Jamshed #endif /* DBGFUNC */
23276404edcSAsim Jamshed 
23376404edcSAsim Jamshed void
23476404edcSAsim Jamshed DumpPacket(mtcp_manager_t mtcp, char *buf, int len, char *step, int ifindex);
23576404edcSAsim Jamshed 
23676404edcSAsim Jamshed void
23776404edcSAsim Jamshed DumpIPPacket(mtcp_manager_t mtcp, const struct iphdr *iph, int len);
23876404edcSAsim Jamshed 
23976404edcSAsim Jamshed void
24076404edcSAsim Jamshed DumpIPPacketToFile(FILE *fout, const struct iphdr *iph, int len);
24176404edcSAsim Jamshed 
24276404edcSAsim Jamshed void
24376404edcSAsim Jamshed flush_log_data(mtcp_manager_t mtcp);
24476404edcSAsim Jamshed 
24576404edcSAsim Jamshed void
24676404edcSAsim Jamshed thread_printf(mtcp_manager_t mtcp, FILE* f_idx, const char* _Format, ...);
24776404edcSAsim Jamshed 
24876404edcSAsim Jamshed #endif /* __DEBUG_H_ */
249