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