1*76404edcSAsim Jamshed #ifndef __DEBUG_H_
2*76404edcSAsim Jamshed #define __DEBUG_H_
3*76404edcSAsim Jamshed 
4*76404edcSAsim Jamshed #include <errno.h>
5*76404edcSAsim Jamshed #include <stdio.h>
6*76404edcSAsim Jamshed #include <assert.h>
7*76404edcSAsim Jamshed #include "mtcp.h"
8*76404edcSAsim Jamshed #include "tcp_in.h"
9*76404edcSAsim Jamshed 
10*76404edcSAsim Jamshed #ifdef DBGTEMP
11*76404edcSAsim Jamshed 
12*76404edcSAsim Jamshed #define TRACE_TEMP(f, m...) { \
13*76404edcSAsim Jamshed 	fprintf(stderr, "[CPU %d][%10s:%4d] " f, mtcp->ctx->cpu, 		\
14*76404edcSAsim Jamshed 			__FUNCTION__, __LINE__, ##m);	\
15*76404edcSAsim Jamshed 	}
16*76404edcSAsim Jamshed 
17*76404edcSAsim Jamshed #else
18*76404edcSAsim Jamshed 
19*76404edcSAsim Jamshed #define TRACE_TEMP(f, m...)	(void)0
20*76404edcSAsim Jamshed 
21*76404edcSAsim Jamshed #endif /* DBGTEMP*/
22*76404edcSAsim Jamshed 
23*76404edcSAsim Jamshed #ifdef DBGERR
24*76404edcSAsim Jamshed 
25*76404edcSAsim Jamshed #define TRACE_ERROR(f, m...) { \
26*76404edcSAsim Jamshed 	fprintf(stderr, "[%10s:%4d] " f, __FUNCTION__, __LINE__, ##m);	\
27*76404edcSAsim Jamshed 	}
28*76404edcSAsim Jamshed 
29*76404edcSAsim Jamshed #else
30*76404edcSAsim Jamshed 
31*76404edcSAsim Jamshed #define TRACE_ERROR(f, m...)	(void)0
32*76404edcSAsim Jamshed 
33*76404edcSAsim Jamshed #endif /* DBGERR */
34*76404edcSAsim Jamshed 
35*76404edcSAsim Jamshed #ifdef DBGCERR
36*76404edcSAsim Jamshed 
37*76404edcSAsim Jamshed #define CTRACE_ERROR(f, m...) { \
38*76404edcSAsim Jamshed 	fprintf(stderr, "[CPU %d][%10s:%4d] " f, mtcp->ctx->cpu, __FUNCTION__, __LINE__, ##m);	\
39*76404edcSAsim Jamshed 	}
40*76404edcSAsim Jamshed 
41*76404edcSAsim Jamshed #else
42*76404edcSAsim Jamshed 
43*76404edcSAsim Jamshed #define CTRACE_ERROR(f, m...)	(void)0
44*76404edcSAsim Jamshed 
45*76404edcSAsim Jamshed #endif /* DBGERR */
46*76404edcSAsim Jamshed 
47*76404edcSAsim Jamshed #ifdef DBGMSG
48*76404edcSAsim Jamshed 
49*76404edcSAsim Jamshed #define TRACE_DBG(f, m...) {\
50*76404edcSAsim Jamshed 	thread_printf(mtcp, mtcp->log_fp, "[%10s:%4d] " \
51*76404edcSAsim Jamshed 			f, __FUNCTION__, __LINE__, ##m);   \
52*76404edcSAsim Jamshed 	}
53*76404edcSAsim Jamshed 
54*76404edcSAsim Jamshed #else
55*76404edcSAsim Jamshed 
56*76404edcSAsim Jamshed #define TRACE_DBG(f, m...)   (void)0
57*76404edcSAsim Jamshed 
58*76404edcSAsim Jamshed #endif /* DBGMSG */
59*76404edcSAsim Jamshed 
60*76404edcSAsim Jamshed #ifdef INFO
61*76404edcSAsim Jamshed 
62*76404edcSAsim Jamshed #define TRACE_INFO(f, m...) {                                         \
63*76404edcSAsim Jamshed 	fprintf(stderr, "[%10s:%4d] " f,__FUNCTION__, __LINE__, ##m);    \
64*76404edcSAsim Jamshed     }
65*76404edcSAsim Jamshed 
66*76404edcSAsim Jamshed #else
67*76404edcSAsim Jamshed 
68*76404edcSAsim Jamshed #define TRACE_INFO(f, m...) (void)0
69*76404edcSAsim Jamshed 
70*76404edcSAsim Jamshed #endif /* INFO */
71*76404edcSAsim Jamshed 
72*76404edcSAsim Jamshed #define TRACE_CONFIG(f, m...) fprintf(stderr, f, ##m)
73*76404edcSAsim Jamshed 
74*76404edcSAsim Jamshed #ifdef DBGLOG
75*76404edcSAsim Jamshed #define TRACE_LOG(f, m...) TRACE_INFO(f, ##m)
76*76404edcSAsim Jamshed #else
77*76404edcSAsim Jamshed #define TRACE_LOG(f, m...) (void)0
78*76404edcSAsim Jamshed #endif
79*76404edcSAsim Jamshed 
80*76404edcSAsim Jamshed #ifdef MONITOR
81*76404edcSAsim Jamshed #define TRACE_MONITOR(f, m...) TRACE_FUNC("MONITOR", f, ##m)
82*76404edcSAsim Jamshed #else
83*76404edcSAsim Jamshed #define TRACE_MONITOR(f, m...)   (void)0
84*76404edcSAsim Jamshed #endif
85*76404edcSAsim Jamshed 
86*76404edcSAsim Jamshed #ifdef STREAM
87*76404edcSAsim Jamshed #define TRACE_STREAM(f, m...) TRACE_FUNC("STREAM", f, ##m)
88*76404edcSAsim Jamshed #else
89*76404edcSAsim Jamshed #define TRACE_STREAM(f, m...)   (void)0
90*76404edcSAsim Jamshed #endif
91*76404edcSAsim Jamshed 
92*76404edcSAsim Jamshed #ifdef STATE
93*76404edcSAsim Jamshed #define TRACE_STATE(f, m...) TRACE_FUNC("STATE", f, ##m)
94*76404edcSAsim Jamshed #else
95*76404edcSAsim Jamshed #define TRACE_STATE(f, m...)   (void)0
96*76404edcSAsim Jamshed #endif
97*76404edcSAsim Jamshed 
98*76404edcSAsim Jamshed #ifdef SNDBUF
99*76404edcSAsim Jamshed #define TRACE_SNDBUF(f, m...) TRACE_FUNC("SNDBUF", f, ##m)
100*76404edcSAsim Jamshed #else
101*76404edcSAsim Jamshed #define TRACE_SNDBUF(f, m...)   (void)0
102*76404edcSAsim Jamshed #endif
103*76404edcSAsim Jamshed 
104*76404edcSAsim Jamshed #ifdef RCVBUF
105*76404edcSAsim Jamshed #define TRACE_RCVBUF(f, m...) TRACE_FUNC("RCVBUF", f, ##m)
106*76404edcSAsim Jamshed #else
107*76404edcSAsim Jamshed #define TRACE_RCVBUF(f, m...)   (void)0
108*76404edcSAsim Jamshed #endif
109*76404edcSAsim Jamshed 
110*76404edcSAsim Jamshed #ifdef CLWND
111*76404edcSAsim Jamshed #define TRACE_CLWND(f, m...) TRACE_FUNC("CLWND", f, ##m)
112*76404edcSAsim Jamshed #else
113*76404edcSAsim Jamshed #define TRACE_CLWND(f, m...)   (void)0
114*76404edcSAsim Jamshed #endif
115*76404edcSAsim Jamshed 
116*76404edcSAsim Jamshed #ifdef LOSS
117*76404edcSAsim Jamshed #define TRACE_LOSS(f, m...) TRACE_FUNC("LOSS", f, ##m)
118*76404edcSAsim Jamshed #else
119*76404edcSAsim Jamshed #define TRACE_LOSS(f, m...)   (void)0
120*76404edcSAsim Jamshed #endif
121*76404edcSAsim Jamshed 
122*76404edcSAsim Jamshed #ifdef SACK
123*76404edcSAsim Jamshed #define TRACE_SACK(f, m...) TRACE_FUNC("SACK", f, ##m)
124*76404edcSAsim Jamshed #else
125*76404edcSAsim Jamshed #define TRACE_SACK(f, m...)   (void)0
126*76404edcSAsim Jamshed #endif
127*76404edcSAsim Jamshed 
128*76404edcSAsim Jamshed #ifdef TSTAMP
129*76404edcSAsim Jamshed #define TRACE_TSTAMP(f, m...) TRACE_FUNC("TSTAMP", f, ##m)
130*76404edcSAsim Jamshed #else
131*76404edcSAsim Jamshed #define TRACE_TSTAMP(f, m...)   (void)0
132*76404edcSAsim Jamshed #endif
133*76404edcSAsim Jamshed 
134*76404edcSAsim Jamshed #ifdef RTT
135*76404edcSAsim Jamshed #define TRACE_RTT(f, m...) TRACE_FUNC("RTT", f, ##m)
136*76404edcSAsim Jamshed #else
137*76404edcSAsim Jamshed #define TRACE_RTT(f, m...)   (void)0
138*76404edcSAsim Jamshed #endif
139*76404edcSAsim Jamshed 
140*76404edcSAsim Jamshed #ifdef RTO
141*76404edcSAsim Jamshed #define TRACE_RTO(f, m...) TRACE_FUNC("RTO", f, ##m)
142*76404edcSAsim Jamshed #else
143*76404edcSAsim Jamshed #define TRACE_RTO(f, m...)   (void)0
144*76404edcSAsim Jamshed #endif
145*76404edcSAsim Jamshed 
146*76404edcSAsim Jamshed #ifdef CONG
147*76404edcSAsim Jamshed #define TRACE_CONG(f, m...) TRACE_FUNC("CONG", f, ##m)
148*76404edcSAsim Jamshed #else
149*76404edcSAsim Jamshed #define TRACE_CONG(f, m...)   (void)0
150*76404edcSAsim Jamshed #endif
151*76404edcSAsim Jamshed 
152*76404edcSAsim Jamshed #ifdef EPOLL
153*76404edcSAsim Jamshed #define TRACE_EPOLL(f, m...) TRACE_FUNC("EPOLL", f, ##m)
154*76404edcSAsim Jamshed #else
155*76404edcSAsim Jamshed #define TRACE_EPOLL(f, m...)   (void)0
156*76404edcSAsim Jamshed #endif
157*76404edcSAsim Jamshed 
158*76404edcSAsim Jamshed #ifdef FSTAT
159*76404edcSAsim Jamshed #define TRACE_FSTAT(f, m...) TRACE_FUNC("FSTAT", f, ##m)
160*76404edcSAsim Jamshed #else
161*76404edcSAsim Jamshed #define TRACE_FSTAT(f, m...)   (void)0
162*76404edcSAsim Jamshed #endif
163*76404edcSAsim Jamshed 
164*76404edcSAsim Jamshed #ifdef APP
165*76404edcSAsim Jamshed #define TRACE_APP(f, m...) TRACE_FUNC("APP", f, ##m)
166*76404edcSAsim Jamshed #else
167*76404edcSAsim Jamshed #define TRACE_APP(f, m...) (void)0
168*76404edcSAsim Jamshed #endif
169*76404edcSAsim Jamshed 
170*76404edcSAsim Jamshed #ifdef DBGFIN
171*76404edcSAsim Jamshed #define TRACE_FIN(f, m...) TRACE_FUNC("FIN", f, ##m)
172*76404edcSAsim Jamshed #else
173*76404edcSAsim Jamshed #define TRACE_FIN(f, m...) (void)0
174*76404edcSAsim Jamshed #endif
175*76404edcSAsim Jamshed 
176*76404edcSAsim Jamshed #ifdef TSTAT
177*76404edcSAsim Jamshed #define TRACE_TSTAT(f, m...) TRACE_FUNC("TSTAT", f, ##m)
178*76404edcSAsim Jamshed #else
179*76404edcSAsim Jamshed #define TRACE_TSTAT(f, m...) (void)0
180*76404edcSAsim Jamshed #endif
181*76404edcSAsim Jamshed 
182*76404edcSAsim Jamshed #ifdef LOOP
183*76404edcSAsim Jamshed #define TRACE_LOOP(f, m...) TRACE_FUNC("LOOP", "ts: %u, "f, cur_ts, ##m)
184*76404edcSAsim Jamshed #else
185*76404edcSAsim Jamshed #define TRACE_LOOP(f, m...) (void)0
186*76404edcSAsim Jamshed #endif
187*76404edcSAsim Jamshed 
188*76404edcSAsim Jamshed #ifdef ROUND
189*76404edcSAsim Jamshed #define TRACE_ROUND(f, m...) TRACE_FUNC("ROUND", f, ##m)
190*76404edcSAsim Jamshed #else
191*76404edcSAsim Jamshed #define TRACE_ROUND(f, m...) (void)0
192*76404edcSAsim Jamshed #endif
193*76404edcSAsim Jamshed 
194*76404edcSAsim Jamshed #ifdef SELECT
195*76404edcSAsim Jamshed #define TRACE_SELECT(f, m...) TRACE_FUNC("SELECT", f, ##m)
196*76404edcSAsim Jamshed #else
197*76404edcSAsim Jamshed #define TRACE_SELECT(f, m...) (void)0
198*76404edcSAsim Jamshed #endif
199*76404edcSAsim Jamshed 
200*76404edcSAsim Jamshed #ifdef API
201*76404edcSAsim Jamshed #define TRACE_API(f, m...) TRACE_FUNC("API", f, ##m)
202*76404edcSAsim Jamshed #else
203*76404edcSAsim Jamshed #define TRACE_API(f, m...) (void)0
204*76404edcSAsim Jamshed #endif
205*76404edcSAsim Jamshed 
206*76404edcSAsim Jamshed #ifdef DBGFUNC
207*76404edcSAsim Jamshed 
208*76404edcSAsim Jamshed #define TRACE_FUNC(n, f, m...) {                                         \
209*76404edcSAsim Jamshed 	thread_printf(mtcp, mtcp->log_fp, "[%6s: %10s:%4d] " \
210*76404edcSAsim Jamshed 			f, n, __FUNCTION__, __LINE__, ##m);    \
211*76404edcSAsim Jamshed 	}
212*76404edcSAsim Jamshed 
213*76404edcSAsim Jamshed #else
214*76404edcSAsim Jamshed 
215*76404edcSAsim Jamshed #define TRACE_FUNC(f, m...) (void)0
216*76404edcSAsim Jamshed 
217*76404edcSAsim Jamshed #endif /* DBGFUNC */
218*76404edcSAsim Jamshed 
219*76404edcSAsim Jamshed void
220*76404edcSAsim Jamshed DumpPacket(mtcp_manager_t mtcp, char *buf, int len, char *step, int ifindex);
221*76404edcSAsim Jamshed 
222*76404edcSAsim Jamshed void
223*76404edcSAsim Jamshed DumpIPPacket(mtcp_manager_t mtcp, const struct iphdr *iph, int len);
224*76404edcSAsim Jamshed 
225*76404edcSAsim Jamshed void
226*76404edcSAsim Jamshed DumpIPPacketToFile(FILE *fout, const struct iphdr *iph, int len);
227*76404edcSAsim Jamshed 
228*76404edcSAsim Jamshed void
229*76404edcSAsim Jamshed flush_log_data(mtcp_manager_t mtcp);
230*76404edcSAsim Jamshed 
231*76404edcSAsim Jamshed void
232*76404edcSAsim Jamshed thread_printf(mtcp_manager_t mtcp, FILE* f_idx, const char* _Format, ...);
233*76404edcSAsim Jamshed 
234*76404edcSAsim Jamshed #endif /* __DEBUG_H_ */
235