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