source: lib/format_legacy.c @ 09d3bef

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

Redo the build system for libtrace3

  • Property mode set to 100644
File size: 8.9 KB
Line 
1/*
2 * This file is part of libtrace
3 *
4 * Copyright (c) 2004 The University of Waikato, Hamilton, New Zealand.
5 * Authors: Daniel Lawson
6 *          Perry Lorier
7 *         
8 * All rights reserved.
9 *
10 * This code has been developed by the University of Waikato WAND
11 * research group. For further information please see http://www.wand.net.nz/
12 *
13 * libtrace is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * libtrace is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with libtrace; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 *
27 * $Id$
28 *
29 */
30#define _GNU_SOURCE
31
32#include "config.h"
33#include "common.h"
34#include "libtrace.h"
35#include "libtrace_int.h"
36#include "format_helper.h"
37#include "parse_cmd.h"
38
39#include <sys/stat.h>
40#include <assert.h>
41#include <errno.h>
42#include <fcntl.h>
43#include <stdio.h>
44#include <string.h>
45#include <stdlib.h>
46
47#ifdef WIN32
48#  include <io.h>
49#  include <share.h>
50#  define snprintf sprintf_s
51#endif
52
53
54/* Catch undefined O_LARGEFILE on *BSD etc */
55#ifndef O_LARGEFILE
56#  define O_LARGEFILE 0
57#endif
58
59static struct libtrace_format_t legacypos;
60static struct libtrace_format_t legacyeth;
61static struct libtrace_format_t legacyatm;
62
63#define DATA(x) ((struct legacy_format_data_t *)x->format_data)
64
65#define INPUT DATA(libtrace)->input
66
67struct legacy_format_data_t {
68        union {
69                int fd;
70                libtrace_io_t *file;
71        } input;
72};
73
74static int legacyeth_get_framing_length(const libtrace_packet_t *packet UNUSED) 
75{
76        return sizeof(legacy_ether_t);
77}
78
79static int legacypos_get_framing_length(const libtrace_packet_t *packet UNUSED) 
80{
81        return sizeof(legacy_pos_t);
82}
83
84static int legacyatm_get_framing_length(const libtrace_packet_t *packet UNUSED) 
85{
86        return sizeof(legacy_cell_t);
87}
88
89static int erf_init_input(libtrace_t *libtrace) 
90{
91        libtrace->format_data = malloc(sizeof(struct legacy_format_data_t));
92
93        return 0;
94}
95
96static int erf_start_input(libtrace_t *libtrace)
97{
98        DATA(libtrace)->input.file = trace_open_file(libtrace);
99
100        if (DATA(libtrace)->input.file)
101                return 0;
102
103        return -1;
104}
105
106static int erf_fin_input(libtrace_t *libtrace) {
107        libtrace_io_close(INPUT.file);
108        free(libtrace->format_data);
109        return 0;
110}
111
112static int legacy_read_packet(libtrace_t *libtrace, libtrace_packet_t *packet) {
113        int numbytes;
114        void *buffer;
115
116        if (!packet->buffer || packet->buf_control == TRACE_CTRL_EXTERNAL) {
117                packet->buf_control = TRACE_CTRL_PACKET;
118                packet->buffer=malloc(LIBTRACE_PACKET_BUFSIZE);
119        }
120        buffer = packet->buffer;
121
122        switch(libtrace->format->type) {
123                case TRACE_FORMAT_LEGACY_ATM:
124                        packet->type = RT_DATA_LEGACY_ATM;
125                        break;
126                case TRACE_FORMAT_LEGACY_POS:
127                        packet->type = RT_DATA_LEGACY_POS;
128                        break;
129                case TRACE_FORMAT_LEGACY_ETH:
130                        packet->type = RT_DATA_LEGACY_ETH;
131                        break;
132                default:
133                        assert(0);
134        }
135       
136        if ((numbytes=libtrace_io_read(INPUT.file,
137                                        buffer,
138                                        64)) == -1) {
139                trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
140                return -1;
141        }
142       
143        packet->header = packet->buffer;
144        packet->payload = (void*)((char*)packet->buffer + 
145                libtrace->format->get_framing_length(packet));
146       
147        return 64;
148       
149}
150
151static libtrace_linktype_t legacypos_get_link_type(const libtrace_packet_t *packet UNUSED) {
152        return TRACE_TYPE_POS;
153}
154
155static libtrace_linktype_t legacyatm_get_link_type(const libtrace_packet_t *packet UNUSED) {
156        return TRACE_TYPE_ATM;
157}
158
159static libtrace_linktype_t legacyeth_get_link_type(const libtrace_packet_t *packet UNUSED) {
160        return TRACE_TYPE_ETH;
161}
162
163static int legacy_get_capture_length(const libtrace_packet_t *packet UNUSED) {
164        return 64;
165}
166
167static int legacypos_get_wire_length(const libtrace_packet_t *packet) {
168        legacy_pos_t *lpos = (legacy_pos_t *)packet->header;
169        return ntohs(lpos->wlen);
170}
171
172static int legacyatm_get_wire_length(const libtrace_packet_t *packet UNUSED) {
173        return 53;
174}
175
176static int legacyeth_get_wire_length(const libtrace_packet_t *packet) {
177        legacy_ether_t *leth = (legacy_ether_t *)packet->header;
178        return ntohs(leth->wlen);
179}
180
181static uint64_t legacy_get_erf_timestamp(const libtrace_packet_t *packet)
182{
183        legacy_ether_t *legacy = (legacy_ether_t*)packet->header;
184        return legacy->ts;
185} 
186
187static void legacypos_help() {
188        printf("legacypos format module: $Revision$\n");
189        printf("Supported input URIs:\n");
190        printf("\tlegacypos:/path/to/file\t(uncompressed)\n");
191        printf("\tlegacypos:/path/to/file.gz\t(gzip-compressed)\n");
192        printf("\tlegacypos:-\t(stdin, either compressed or not)\n");
193        printf("\n");
194        printf("\te.g.: legacypos:/tmp/trace.gz\n");
195        printf("\n");
196}
197
198static void legacyatm_help() {
199        printf("legacyatm format module: $Revision$\n");
200        printf("Supported input URIs:\n");
201        printf("\tlegacyatm:/path/to/file\t(uncompressed)\n");
202        printf("\tlegacyatm:/path/to/file.gz\t(gzip-compressed)\n");
203        printf("\tlegacyatm:-\t(stdin, either compressed or not)\n");
204        printf("\n");
205        printf("\te.g.: legacyatm:/tmp/trace.gz\n");
206        printf("\n");
207}
208
209static void legacyeth_help() {
210        printf("legacyeth format module: $Revision$\n");
211        printf("Supported input URIs:\n");
212        printf("\tlegacyeth:/path/to/file\t(uncompressed)\n");
213        printf("\tlegacyeth:/path/to/file.gz\t(gzip-compressed)\n");
214        printf("\tlegacyeth:-\t(stdin, either compressed or not)\n");
215        printf("\n");
216        printf("\te.g.: legacyeth:/tmp/trace.gz\n");
217        printf("\n");
218}
219
220static struct libtrace_format_t legacyatm = {
221        "legacyatm",
222        "$Id$",
223        TRACE_FORMAT_LEGACY_ATM,
224        erf_init_input,                 /* init_input */       
225        NULL,                           /* config_input */
226        erf_start_input,                /* start_input */
227        NULL,                           /* pause_input */
228        NULL,                           /* init_output */
229        NULL,                           /* config_output */
230        NULL,                           /* start_output */
231        erf_fin_input,                  /* fin_input */
232        NULL,                           /* fin_output */
233        legacy_read_packet,             /* read_packet */
234        NULL,                           /* fin_packet */
235        NULL,                           /* write_packet */
236        legacyatm_get_link_type,        /* get_link_type */
237        NULL,                           /* get_direction */
238        NULL,                           /* set_direction */
239        legacy_get_erf_timestamp,       /* get_erf_timestamp */
240        NULL,                           /* get_timeval */
241        NULL,                           /* get_seconds */
242        NULL,                           /* seek_erf */
243        NULL,                           /* seek_timeval */
244        NULL,                           /* seek_seconds */
245        legacy_get_capture_length,      /* get_capture_length */
246        legacyatm_get_wire_length,      /* get_wire_length */
247        legacyatm_get_framing_length,   /* get_framing_length */
248        NULL,                           /* set_capture_length */
249        NULL,                           /* get_fd */
250        trace_event_trace,              /* trace_event */
251        legacyatm_help,                 /* help */
252        NULL                            /* next pointer */
253};
254
255static struct libtrace_format_t legacyeth = {
256        "legacyeth",
257        "$Id$",
258        TRACE_FORMAT_LEGACY_ETH,
259        erf_init_input,                 /* init_input */       
260        NULL,                           /* config_input */
261        erf_start_input,                /* start_input */
262        NULL,                           /* pause_input */
263        NULL,                           /* init_output */
264        NULL,                           /* config_output */
265        NULL,                           /* start_output */
266        erf_fin_input,                  /* fin_input */
267        NULL,                           /* fin_output */
268        legacy_read_packet,             /* read_packet */
269        NULL,                           /* fin_packet */
270        NULL,                           /* write_packet */
271        legacyeth_get_link_type,        /* get_link_type */
272        NULL,                           /* get_direction */
273        NULL,                           /* set_direction */
274        legacy_get_erf_timestamp,       /* get_erf_timestamp */
275        NULL,                           /* get_timeval */
276        NULL,                           /* get_seconds */
277        NULL,                           /* seek_erf */
278        NULL,                           /* seek_timeval */
279        NULL,                           /* seek_seconds */
280        legacy_get_capture_length,      /* get_capture_length */
281        legacyeth_get_wire_length,      /* get_wire_length */
282        legacyeth_get_framing_length,   /* get_framing_length */
283        NULL,                           /* set_capture_length */
284        NULL,                           /* get_fd */
285        trace_event_trace,              /* trace_event */
286        legacyeth_help,                 /* help */
287        NULL                            /* next pointer */
288};
289
290static struct libtrace_format_t legacypos = {
291        "legacypos",
292        "$Id$",
293        TRACE_FORMAT_LEGACY_POS,
294        erf_init_input,                 /* init_input */       
295        NULL,                           /* config_input */
296        erf_start_input,                /* start_input */
297        NULL,                           /* pause_input */
298        NULL,                           /* init_output */
299        NULL,                           /* config_output */
300        NULL,                           /* start_output */
301        erf_fin_input,                  /* fin_input */
302        NULL,                           /* fin_output */
303        legacy_read_packet,             /* read_packet */
304        NULL,                           /* fin_packet */
305        NULL,                           /* write_packet */
306        legacypos_get_link_type,        /* get_link_type */
307        NULL,                           /* get_direction */
308        NULL,                           /* set_direction */
309        legacy_get_erf_timestamp,       /* get_erf_timestamp */
310        NULL,                           /* get_timeval */
311        NULL,                           /* get_seconds */
312        NULL,                           /* seek_erf */
313        NULL,                           /* seek_timeval */
314        NULL,                           /* seek_seconds */
315        legacy_get_capture_length,      /* get_capture_length */
316        legacypos_get_wire_length,      /* get_wire_length */
317        legacypos_get_framing_length,   /* get_framing_length */
318        NULL,                           /* set_capture_length */
319        NULL,                           /* get_fd */
320        trace_event_trace,              /* trace_event */
321        legacypos_help,                 /* help */
322        NULL,                           /* next pointer */
323};
324
325       
326void CONSTRUCTOR legacy_constructor() {
327        register_format(&legacypos);
328        register_format(&legacyeth);
329        register_format(&legacyatm);
330}
Note: See TracBrowser for help on using the repository browser.