source: tools/tracesplit/tracesplit_dir.c @ 548da5c

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

Added a tracesplit_dir tool which will split a trace into two based on direction

  • Property mode set to 100644
File size: 1.7 KB
Line 
1
2
3#include "libtrace.h"
4
5
6struct libtrace_out_t *create_output(char *uri) {
7        struct libtrace_out_t *output = NULL;
8        libtrace_err_t trace_err;
9        output = trace_create_output(uri);
10        if (trace_is_err_output(output)) {
11                trace_err = trace_get_err_output(output);
12                printf("Problem creating output trace (uri=%s): %s\n", 
13                                uri, trace_err.problem);
14                return NULL;
15        }
16        /* Default values for now */
17        trace_start_output(output);
18        return output;
19}
20
21void usage() {
22        printf("tracesplit_dir inputuri outputuri_incoming outputuri_outgoing\n");
23}
24
25int main(int argc, char *argv[]) {
26        struct libtrace_t *input = NULL;
27        struct libtrace_out_t *in_write = NULL;
28        struct libtrace_out_t *out_write = NULL;
29        libtrace_err_t trace_err;
30        struct libtrace_packet_t *packet = trace_create_packet();
31
32       
33        if (argc < 3) {
34                usage(argv[0]);
35                return 1;
36        }
37
38        input = trace_create(argv[1]);
39        if (trace_is_err(input)) {
40                trace_err = trace_get_err(input);
41                printf("Problem reading input trace: %s\n", trace_err.problem);
42                return 1;
43        }
44        trace_start(input);
45       
46        while(1) {
47                if (trace_read_packet(input, packet) < 1)
48                        break;
49
50                printf("%d\n", trace_get_direction(packet));
51                switch(trace_get_direction(packet)) {
52                        case 0:
53                                if (!out_write) {
54                                        out_write = create_output(argv[3]);
55                                        if (!out_write)
56                                                return 1;
57                                }
58                                trace_write_packet(out_write, packet);
59                                break;
60                        case 1:
61                                if (!in_write) {
62                                        in_write = create_output(argv[2]);
63                                        if (!in_write)
64                                                return 1;
65                                }
66                                trace_write_packet(in_write, packet);
67                                break;
68                }
69
70        }
71        if (out_write)
72                trace_destroy_output(out_write);
73        if (in_write)
74                trace_destroy_output(in_write);
75        trace_destroy(input);
76        trace_destroy_packet(packet);
77       
78        return 0;
79}
80       
Note: See TracBrowser for help on using the repository browser.