source: tools/tracesplit/tracesplit_dir.c @ 2e9df89

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since 2e9df89 was f20d66c, checked in by Perry Lorier <perry@…>, 12 years ago

Fix some warnings found on mroe recent gcc's
Bump version and release 3.0.6

  • Property mode set to 100644
File size: 2.2 KB
Line 
1#include "libtrace.h"
2#include <stdio.h>
3#include <inttypes.h>
4#include "lt_inttypes.h"
5
6static uint64_t ignored = 0;
7
8static struct libtrace_out_t *create_output(char *uri) {
9        struct libtrace_out_t *output = NULL;
10        output = trace_create_output(uri);
11        if (trace_is_err_output(output)) {
12                trace_perror_output(output,"%s",uri);
13                trace_destroy_output(output);
14                return NULL;
15        }
16        /* Default values for now */
17        trace_start_output(output);
18        if (trace_is_err_output(output)) {
19                trace_perror_output(output,"%s",uri);
20                trace_destroy_output(output);
21                return NULL;
22        }
23        return output;
24}
25
26static void usage(char*argv0) {
27        printf("%s inputuri outputuri_incoming outputuri_outgoing\n",argv0);
28}
29
30int main(int argc, char *argv[]) {
31        struct libtrace_t *input = NULL;
32        struct libtrace_out_t *in_write = NULL;
33        struct libtrace_out_t *out_write = NULL;
34        libtrace_err_t trace_err;
35        struct libtrace_packet_t *packet = trace_create_packet();
36       
37        if (argc < 3) {
38                usage(argv[0]);
39                return 1;
40        }
41
42        input = trace_create(argv[1]);
43        if (trace_is_err(input)) {
44                trace_err = trace_get_err(input);
45                printf("Problem reading input trace: %s\n", trace_err.problem);
46                return 1;
47        }
48        if (trace_start(input)==-1) {
49                trace_perror(input,"Unable to start trace: %s",argv[1]);
50                return 1;
51        }
52       
53        while(1) {
54                if (trace_read_packet(input, packet) < 1)
55                        break;
56
57                switch(trace_get_direction(packet)) {
58                        case TRACE_DIR_INCOMING:
59                                if (!out_write) {
60                                        out_write = create_output(argv[3]);
61                                        if (!out_write)
62                                                return 1;
63                                }
64                                if (trace_write_packet(out_write, packet)==-1){
65                                        trace_perror_output(in_write,"write");
66                                        return 1;
67                                }
68                                break;
69                        case TRACE_DIR_OUTGOING:
70                                if (!in_write) {
71                                        in_write = create_output(argv[2]);
72                                        if (!in_write)
73                                                return 1;
74                                }
75                                if (trace_write_packet(in_write, packet)==-1) {
76                                        trace_perror_output(in_write,"write");
77                                        return 1;
78                                }
79                                break;
80                        default:
81                                ignored++;
82                }
83
84        }
85        if (out_write)
86                trace_destroy_output(out_write);
87        if (in_write)
88                trace_destroy_output(in_write);
89        trace_destroy(input);
90        trace_destroy_packet(packet);
91
92        if (ignored)
93                fprintf(stderr,"warning: Ignored %" PRIu64 " packets with unknown directions\n",
94                                ignored);
95       
96        return 0;
97}
98       
Note: See TracBrowser for help on using the repository browser.