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 (mtcp != NULL) ? \ 61 thread_printf(mtcp, mtcp->log_fp, "[%10s:%4d] " \ 62 f, __FUNCTION__, __LINE__, ##m) : \ 63 fprintf(stderr, "[CPU %d][%10s:%4d] " f, 0, __FUNCTION__, __LINE__, ##m); \ 64 } 65 66 #else 67 68 #define TRACE_DBG(f, m...) (void)0 69 70 #endif /* DBGMSG */ 71 72 #ifdef INFO 73 74 #define TRACE_INFO(f, m...) { \ 75 fprintf(stderr, "[%10s:%4d] " f,__FUNCTION__, __LINE__, ##m); \ 76 } 77 78 #else 79 80 #define TRACE_INFO(f, m...) (void)0 81 82 #endif /* INFO */ 83 84 #define TRACE_CONFIG(f, m...) fprintf(stderr, f, ##m) 85 86 #ifdef DBGLOG 87 #define TRACE_LOG(f, m...) TRACE_INFO(f, ##m) 88 #else 89 #define TRACE_LOG(f, m...) (void)0 90 #endif 91 92 #ifdef MONITOR 93 #define TRACE_MONITOR(f, m...) TRACE_FUNC("MONITOR", f, ##m) 94 #else 95 #define TRACE_MONITOR(f, m...) (void)0 96 #endif 97 98 #ifdef STREAM 99 #define TRACE_STREAM(f, m...) TRACE_FUNC("STREAM", f, ##m) 100 #else 101 #define TRACE_STREAM(f, m...) (void)0 102 #endif 103 104 #ifdef STATE 105 #define TRACE_STATE(f, m...) TRACE_FUNC("STATE", f, ##m) 106 #else 107 #define TRACE_STATE(f, m...) (void)0 108 #endif 109 110 #ifdef SNDBUF 111 #define TRACE_SNDBUF(f, m...) TRACE_FUNC("SNDBUF", f, ##m) 112 #else 113 #define TRACE_SNDBUF(f, m...) (void)0 114 #endif 115 116 #ifdef RCVBUF 117 #define TRACE_RCVBUF(f, m...) TRACE_FUNC("RCVBUF", f, ##m) 118 #else 119 #define TRACE_RCVBUF(f, m...) (void)0 120 #endif 121 122 #ifdef CLWND 123 #define TRACE_CLWND(f, m...) TRACE_FUNC("CLWND", f, ##m) 124 #else 125 #define TRACE_CLWND(f, m...) (void)0 126 #endif 127 128 #ifdef LOSS 129 #define TRACE_LOSS(f, m...) TRACE_FUNC("LOSS", f, ##m) 130 #else 131 #define TRACE_LOSS(f, m...) (void)0 132 #endif 133 134 #ifdef SACK 135 #define TRACE_SACK(f, m...) TRACE_FUNC("SACK", f, ##m) 136 #else 137 #define TRACE_SACK(f, m...) (void)0 138 #endif 139 140 #ifdef TSTAMP 141 #define TRACE_TSTAMP(f, m...) TRACE_FUNC("TSTAMP", f, ##m) 142 #else 143 #define TRACE_TSTAMP(f, m...) (void)0 144 #endif 145 146 #ifdef RTT 147 #define TRACE_RTT(f, m...) TRACE_FUNC("RTT", f, ##m) 148 #else 149 #define TRACE_RTT(f, m...) (void)0 150 #endif 151 152 #ifdef RTO 153 #define TRACE_RTO(f, m...) TRACE_FUNC("RTO", f, ##m) 154 #else 155 #define TRACE_RTO(f, m...) (void)0 156 #endif 157 158 #ifdef CONG 159 #define TRACE_CONG(f, m...) TRACE_FUNC("CONG", f, ##m) 160 #else 161 #define TRACE_CONG(f, m...) (void)0 162 #endif 163 164 #ifdef EPOLL 165 #define TRACE_EPOLL(f, m...) TRACE_FUNC("EPOLL", f, ##m) 166 #else 167 #define TRACE_EPOLL(f, m...) (void)0 168 #endif 169 170 #ifdef FSTAT 171 #define TRACE_FSTAT(f, m...) TRACE_FUNC("FSTAT", f, ##m) 172 #else 173 #define TRACE_FSTAT(f, m...) (void)0 174 #endif 175 176 #ifdef APP 177 #define TRACE_APP(f, m...) TRACE_FUNC("APP", f, ##m) 178 #else 179 #define TRACE_APP(f, m...) (void)0 180 #endif 181 182 #ifdef DBGFIN 183 #define TRACE_FIN(f, m...) TRACE_FUNC("FIN", f, ##m) 184 #else 185 #define TRACE_FIN(f, m...) (void)0 186 #endif 187 188 #ifdef TSTAT 189 #define TRACE_TSTAT(f, m...) TRACE_FUNC("TSTAT", f, ##m) 190 #else 191 #define TRACE_TSTAT(f, m...) (void)0 192 #endif 193 194 #ifdef LOOP 195 #define TRACE_LOOP(f, m...) TRACE_FUNC("LOOP", "ts: %u, "f, cur_ts, ##m) 196 #else 197 #define TRACE_LOOP(f, m...) (void)0 198 #endif 199 200 #ifdef ROUND 201 #define TRACE_ROUND(f, m...) TRACE_FUNC("ROUND", f, ##m) 202 #else 203 #define TRACE_ROUND(f, m...) (void)0 204 #endif 205 206 #ifdef SELECT 207 #define TRACE_SELECT(f, m...) TRACE_FUNC("SELECT", f, ##m) 208 #else 209 #define TRACE_SELECT(f, m...) (void)0 210 #endif 211 212 #ifdef API 213 #define TRACE_API(f, m...) TRACE_FUNC("API", f, ##m) 214 #else 215 #define TRACE_API(f, m...) (void)0 216 #endif 217 218 #ifdef DBGFUNC 219 220 #define TRACE_FUNC(n, f, m...) { \ 221 (mtcp != NULL) ? \ 222 thread_printf(mtcp, mtcp->log_fp, "[%6s: %10s:%4d] " \ 223 f, n, __FUNCTION__, __LINE__, ##m) : \ 224 fprintf(stderr, "[CPU %d][%10s:%4d] " f, 0, __FUNCTION__, __LINE__, ##m); \ 225 } 226 227 #else 228 229 #define TRACE_FUNC(f, m...) (void)0 230 231 #endif /* DBGFUNC */ 232 233 void 234 DumpPacket(mtcp_manager_t mtcp, char *buf, int len, char *step, int ifindex); 235 236 void 237 DumpIPPacket(mtcp_manager_t mtcp, const struct iphdr *iph, int len); 238 239 void 240 DumpIPPacketToFile(FILE *fout, const struct iphdr *iph, int len); 241 242 void 243 flush_log_data(mtcp_manager_t mtcp); 244 245 void 246 thread_printf(mtcp_manager_t mtcp, FILE* f_idx, const char* _Format, ...); 247 248 #endif /* __DEBUG_H_ */ 249