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