source: tools/tracepktdump/tracepktdump.cc @ b6664e8

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since b6664e8 was 83f2cbf, checked in by Shane Alcock <salcock@…>, 14 years ago

Finished converting tracedump to tracepktdump, mostly dealing with Makefile.am's and configure - as well as actually changing the filenames :]

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[fd9d44c]1#include <libtrace.h>
2#include <err.h>
3#include <time.h>
4#include "libpacketdump.h"
5#include <stdio.h>
6#include <stdlib.h>
7#include <getopt.h>
8
9void usage(char *argv0) 
10{
11        fprintf(stderr,"Usage:\n"
12        "%s flags inputfile\n"
13        "-f --filter=expr       BPF filter specification, quoted\n"
14        "-c --count=num         terminate after num packets\n"
[66caf4b]15        "-H --libtrace-help     Print libtrace runtime documentation\n"
[3d4fb8f]16                ,argv0);
[fd9d44c]17        exit(0);
18}
19
20int main(int argc,char **argv)
21{
22        struct libtrace_t *trace = NULL;
[d56089a]23        struct libtrace_packet_t *packet = trace_create_packet();
[fd9d44c]24        struct libtrace_filter_t *filter=NULL;
25        uint64_t count=0;
26        uint64_t numpackets=0;
27       
28
29        if (argc<2)
30                usage(argv[0]);
31
32        while(1) {
33                int option_index;
34                struct option long_options[] = {
[66caf4b]35                        { "filter",        1, 0, 'f' },
36                        { "count",         1, 0, 'c' },
37                        { "libtrace-help", 0, 0, 'H' },
38                        { NULL,            0, 0, 0   },
[fd9d44c]39                };
40
[66caf4b]41                int c=getopt_long(argc,argv,"f:c:H",
[fd9d44c]42                                long_options, &option_index);
43                if (c == -1)
44                        break;
45                switch(c) {
46                        case 'f': 
47                                if (filter!=NULL) {
[e2d49d5]48                                        fprintf(stderr,"You can only have one filter\n");
[fd9d44c]49                                        usage(argv[0]);
50                                }
[853603a]51                                filter=trace_create_filter(optarg);
[fd9d44c]52                                break;
53                        case 'c': count=atol(optarg); break;
[66caf4b]54                        case 'H': 
55                                  trace_help(); 
56                                  exit(1);
57                                  break;
[fd9d44c]58                        default:
59                                  printf("unknown option: %c\n",c);
60                                  usage(argv[0]);
61                }
62        }
63                               
64       
65
66        while(optind <argc) {
67                trace = trace_create(argv[optind]);
[72cc9cc]68                optind ++;
[fd9d44c]69                numpackets = 0;
[3d4fb8f]70                if (trace_is_err(trace)) {
71                        trace_perror(trace,"trace_create");
72                        trace_destroy(trace);
73                        continue;
[fd9d44c]74                }
75
[3d4fb8f]76                trace_start(trace);
[72cc9cc]77                if (trace_is_err(trace)) {
78                        trace_perror(trace,"trace_start");
79                        trace_destroy(trace);
80                        continue;
81                }
[3840760]82                while(trace_read_packet(trace,packet)> 0 ){
[853603a]83                        if (filter && !trace_apply_filter(filter,packet))
[fd9d44c]84                                continue;
[2fbcb26]85                        if (packet->type < TRACE_RT_DATA_SIMPLE)
86                                /* Ignore RT messages */
87                                continue;
[3840760]88                        trace_dump_packet(packet);
[3d4fb8f]89
[fd9d44c]90                        if(count) {
91                                numpackets++;
92                                if (numpackets == count)
93                                        break;
94                        }
95                }
96
[0c9681f]97                printf("\n");
[fd9d44c]98                trace_destroy(trace);
99        }
100        return 0;
101}
Note: See TracBrowser for help on using the repository browser.