source: tools/tracesplit/tracesplit_dir.c @ 63b9bd4

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

More warnings squashed, tracesplit_dir now reports the count of packets that
weren't written to the output traces

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