Changeset f9b6f64
- Timestamp:
- 02/21/07 16:49:12 (15 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
- Children:
- 2d99bd2
- Parents:
- 09be643
- Location:
- tools/tracereport
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/tracereport/tracereport.c
r09be643 rf9b6f64 40 40 #include <sys/time.h> 41 41 #include <sys/types.h> 42 #include <time.h> 43 44 #include <netinet/in.h> 45 #include <netinet/in_systm.h> 46 #include <netinet/tcp.h> 47 #include <netinet/ip.h> 48 #include <netinet/ip_icmp.h> 49 #include <arpa/inet.h> 50 #include <sys/socket.h> 42 51 43 #include <getopt.h> 52 44 #include <inttypes.h> … … 58 50 59 51 struct libtrace_t *trace; 52 uint32_t reports_required = 0; 60 53 61 54 /* Process a trace, counting packets that match filter(s) */ … … 64 57 struct libtrace_packet_t *packet = trace_create_packet(); 65 58 66 fprintf(stderr,"%s:\n",uri);67 59 trace = trace_create(uri); 68 60 … … 83 75 for (;;) { 84 76 int psize; 77 78 /* Not convinced we need this count business */ 79 /* 85 80 if (count--<1) 86 81 break; 82 */ 87 83 if ((psize = trace_read_packet(trace, packet)) <1) { 88 84 break; 89 85 } 90 error_per_packet(packet); 91 port_per_packet(packet); 92 protocol_per_packet(packet); 93 tos_per_packet(packet); 94 ttl_per_packet(packet); 95 flow_per_packet(packet); 96 tcpopt_per_packet(packet); 97 nlp_per_packet(packet); 98 dir_per_packet(packet); 99 //ecn_per_packet(packet); 100 //tcpseg_per_packet(packet); 86 if (reports_required & REPORT_TYPE_ERROR) 87 error_per_packet(packet); 88 if (reports_required & REPORT_TYPE_PORT) 89 port_per_packet(packet); 90 if (reports_required & REPORT_TYPE_PROTO) 91 protocol_per_packet(packet); 92 if (reports_required & REPORT_TYPE_TOS) 93 tos_per_packet(packet); 94 if (reports_required & REPORT_TYPE_TTL) 95 ttl_per_packet(packet); 96 if (reports_required & REPORT_TYPE_FLOW) 97 flow_per_packet(packet); 98 if (reports_required & REPORT_TYPE_TCPOPT) 99 tcpopt_per_packet(packet); 100 if (reports_required & REPORT_TYPE_NLP) 101 nlp_per_packet(packet); 102 if (reports_required & REPORT_TYPE_DIR) 103 dir_per_packet(packet); 104 /* 105 if (reports_required & REPORT_TYPE_ECN) 106 ecn_per_packet(packet); 107 if (reports_required & REPORT_TYPE_TCPSEQ) 108 tcpseg_per_packet(packet); 109 */ 101 110 } 102 111 trace_destroy(trace); … … 107 116 fprintf(stderr,"Usage:\n" 108 117 "%s flags traceuri [traceuri...]\n" 109 "-f --filter=bpf Apply BPF filter. Can be specified multiple times\n" 110 "-H --libtrace-help Print libtrace runtime documentation\n" 118 "-f --filter=bpf \tApply BPF filter. Can be specified multiple times\n" 119 "-e --error Report packet errors (e.g. checksum failures, rxerrors)\n" 120 "-F --flow Report flows\n" 121 "-P --protocol Report transport protocols\n" 122 "-p --port Report port numbers\n" 123 "-T --tos Report IP TOS\n" 124 "-O --tcpoptions \tReport TCP Options\n" 125 "-n --nlp Report network layer protocols\n" 126 "-d --direction Report direction\n" 127 "-C --ecn Report TCP ECN information\n" 128 "-s --tcpsegment \tReport TCP segment size\n" 129 "-H --help Print libtrace runtime documentation\n" 111 130 ,argv0); 112 131 exit(1); … … 116 135 117 136 int i; 118 119 /*char *filterstring="host 130.197.127.210"; */137 int opt; 138 char *filterstring=NULL; 120 139 121 140 libtrace_filter_t *filter = NULL;/*trace_bpf_setfilter(filterstring); */ 122 141 123 for(i=1;i<argc;++i) { 142 while (1) { 143 int option_index; 144 struct option long_options[] = { 145 { "filter", 1, 0, 'f' }, 146 { "help", 0, 0, 'H' }, 147 { "error", 0, 0, 'e' }, 148 { "flow", 0, 0, 'F' }, 149 { "protocol", 0, 0, 'P' }, 150 { "port", 0, 0, 'p' }, 151 { "tos", 0, 0, 'T' }, 152 { "ttl", 0, 0, 't' }, 153 { "tcpoptions", 0, 0, 'O' }, 154 { "nlp", 0, 0, 'n' }, 155 { "direction", 0, 0, 'd' }, 156 { "ecn", 0, 0, 'C' }, 157 { "tcpsegment", 0, 0, 's' }, 158 { NULL, 0, 0, 0 } 159 }; 160 opt = getopt_long(argc, argv, "f:HeFPpTtOndCs", long_options, 161 &option_index); 162 if (opt == -1) 163 break; 164 165 switch (opt) { 166 case 'C': 167 reports_required |= REPORT_TYPE_ECN; 168 break; 169 case 'd': 170 reports_required |= REPORT_TYPE_DIR; 171 break; 172 case 'e': 173 reports_required |= REPORT_TYPE_ERROR; 174 break; 175 case 'F': 176 reports_required |= REPORT_TYPE_FLOW; 177 break; 178 case 'f': 179 filterstring = optarg; 180 break; 181 case 'H': 182 usage(argv[0]); 183 break; 184 case 'n': 185 reports_required |= REPORT_TYPE_NLP; 186 break; 187 case 'O': 188 reports_required |= REPORT_TYPE_TCPOPT; 189 break; 190 case 'P': 191 reports_required |= REPORT_TYPE_PROTO; 192 break; 193 case 'p': 194 reports_required |= REPORT_TYPE_PORT; 195 break; 196 case 's': 197 reports_required |= REPORT_TYPE_TCPSEG; 198 break; 199 case 'T': 200 reports_required |= REPORT_TYPE_TOS; 201 break; 202 case 't': 203 reports_required |= REPORT_TYPE_TTL; 204 break; 205 default: 206 usage(argv[0]); 207 } 208 } 209 210 if (filterstring) { 211 filter = trace_create_filter(filterstring); 212 } 213 214 215 for(i=optind;i<argc;++i) { 216 /* This is handy for knowing how far through the traceset 217 * we are - printing to stderr because we use stdout for 218 * genuine output at the moment */ 219 fprintf(stderr, "Reading from trace: %s\n", argv[i]); 124 220 run_trace(argv[i],filter,(1<<30)); 125 221 } 126 222 127 error_report(); 128 flow_report(); 129 tos_report(); 130 protocol_report(); 131 port_report(); 132 ttl_report(); 133 tcpopt_report(); 134 nlp_report(); 135 dir_report(); 136 //ecn_report(); 137 //tcpseg_report(); 223 if (reports_required & REPORT_TYPE_ERROR) 224 error_report(); 225 if (reports_required & REPORT_TYPE_FLOW) 226 flow_report(); 227 if (reports_required & REPORT_TYPE_TOS) 228 tos_report(); 229 if (reports_required & REPORT_TYPE_PROTO) 230 protocol_report(); 231 if (reports_required & REPORT_TYPE_PORT) 232 port_report(); 233 if (reports_required & REPORT_TYPE_TTL) 234 ttl_report(); 235 if (reports_required & REPORT_TYPE_TCPOPT) 236 tcpopt_report(); 237 if (reports_required & REPORT_TYPE_NLP) 238 nlp_report(); 239 if (reports_required & REPORT_TYPE_DIR) 240 dir_report(); 241 /* 242 if (reports_required & REPORT_TYPE_ECN) 243 ecn_report(); 244 if (reports_required & REPORT_TYPE_TCPSEG) 245 tcpseg_report(); 246 */ 138 247 return 0; 139 248 } -
tools/tracereport/tracereport.h
rd3ff1fb rf9b6f64 7 7 } stat_t; 8 8 9 typedef enum { 10 REPORT_TYPE_ERROR = 1, 11 REPORT_TYPE_FLOW = 1 << 1, 12 REPORT_TYPE_TOS = 1 << 2, 13 REPORT_TYPE_PROTO = 1 << 3, 14 REPORT_TYPE_PORT = 1 << 4, 15 REPORT_TYPE_TTL = 1 << 5, 16 REPORT_TYPE_TCPOPT = 1 << 6, 17 REPORT_TYPE_NLP = 1 << 7, 18 REPORT_TYPE_DIR = 1 << 8, 19 REPORT_TYPE_ECN = 1 << 9, 20 REPORT_TYPE_TCPSEG = 1 << 10 21 } report_type_t; 22 9 23 #endif
Note: See TracChangeset
for help on using the changeset viewer.