source: examples/skeleton/complete.c @ 48a20e3

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

Add some skeleton programs for people to use as a template

  • Property mode set to 100644
File size: 2.2 KB
Line 
1/* Complete libtrace skeleton program
2 *
3 * This libtrace skeleton includes everything you need for a useful libtrace
4 * program, including command line parsing, dealing with bpf filters etc.
5 *
6 */
7#include "libtrace.h"
8#include <stdio.h>
9#include <getopt.h>
10#include <stdlib.h>
11
12void per_packet(libtrace_packet_t *packet)
13{
14        /* Your code goes here */
15}
16
17void usage(char *argv0)
18{
19        fprintf(stderr,"usage: %s [ --filter | -f bpfexp ]  [ --snaplen | -s snap ]\n\t\t[ --promisc | -p flag] [ --help | -h ] libtraceuri...\n",argv0);
20}
21
22int main(int argc, char *argv[])
23{
24        libtrace_t *trace;
25        libtrace_packet_t *packet;
26        libtrace_filter_t *filter=NULL;
27        int snaplen=-1;
28        int promisc=-1;
29
30        while(1) {
31                int option_index;
32                struct option long_options[] = {
33                        { "filter",     1, 0, 'f' },
34                        { "snaplen",    1, 0, 's' },
35                        { "promisc",    1, 0, 'p' },
36                        { "help",       0, 0, 'h' },
37                        { NULL,         0, 0, 0 }
38                };
39
40                int c= getopt_long(argc, argv, "f:s:p:h",
41                                long_options, &option_index);
42
43                if (c==-1)
44                        break;
45
46                switch (c) {
47                        case 'f':
48                                filter=trace_bpf_setfilter(optarg);
49                                break;
50                        case 's':
51                                snaplen=atoi(optarg);
52                                break;
53                        case 'p':
54                                promisc=atoi(optarg);
55                                break;
56                        default:
57                                fprintf(stderr,"Unknown option: %c\n",c);
58                                /* FALL THRU */
59                        case 'h':
60                                usage(argv[0]);
61                                return 1;
62                }
63        }
64
65        if (optind>=argc) {
66                fprintf(stderr,"Missing input uri\n");
67                usage(argv[0]);
68                return 1;
69        }
70
71        while (optind<argc) {
72                trace = trace_create(argv[optind]);
73                ++optind;
74
75                if (trace_is_err(trace)) {
76                        trace_perror(trace,"Opening trace file");
77                        return 1;
78                }
79
80                if (snaplen>0)
81                        if (trace_config(trace,TRACE_OPTION_SNAPLEN,&snaplen)) {
82                                trace_perror(trace,"ignoring: ");
83                        }
84                if (filter)
85                        if (trace_config(trace,TRACE_OPTION_FILTER,filter)) {
86                                trace_perror(trace,"ignoring: ");
87                        }
88                if (promisc!=-1) {
89                        if (trace_config(trace,TRACE_OPTION_PROMISC,&promisc)) {
90                                trace_perror(trace,"ignoring: ");
91                        }
92                }
93
94                if (trace_start(trace)) {
95                        trace_perror(trace,"Starting trace");
96                        trace_destroy(trace);
97                        return 1;
98                }
99
100                packet = trace_create_packet();
101
102                while (trace_read_packet(trace,packet)>0) {
103                        per_packet(packet);
104                }
105
106                if (trace_is_err(trace)) {
107                        trace_perror(trace,"Reading packets");
108                }
109
110                trace_destroy(trace);
111        }
112
113        return 0;
114}
Note: See TracBrowser for help on using the repository browser.