source: lib/format_legacy.c @ 566e404

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

WIN32 compile fixes

  • Property mode set to 100644
File size: 9.2 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#if HAVE_DAG
67#define DAG DATA(libtrace)->dag
68#endif
69
70struct legacy_format_data_t {
71        union {
72                int fd;
73#if HAVE_ZLIB
74                gzFile *file;
75#else   
76                /*FILE  *file; */
77                int file;
78#endif
79        } input;
80};
81
82static int legacyeth_get_framing_length(const struct libtrace_packet_t *packet UNUSED) 
83{
84        return sizeof(legacy_ether_t);
85}
86
87static int legacypos_get_framing_length(const struct libtrace_packet_t *packet UNUSED) 
88{
89        return sizeof(legacy_pos_t);
90}
91
92static int legacyatm_get_framing_length(const struct libtrace_packet_t *packet UNUSED) 
93{
94        return sizeof(legacy_cell_t);
95}
96
97static int erf_init_input(struct libtrace_t *libtrace) 
98{
99        libtrace->format_data = malloc(sizeof(struct legacy_format_data_t));
100
101        return 0;
102}
103
104static int erf_start_input(libtrace_t *libtrace)
105{
106        DATA(libtrace)->input.file = trace_open_file(libtrace);
107
108        if (DATA(libtrace)->input.file)
109                return 0;
110
111        return -1;
112}
113
114static int erf_fin_input(struct libtrace_t *libtrace) {
115        LIBTRACE_CLOSE(INPUT.file);
116        free(libtrace->format_data);
117        return 0;
118}
119
120static int legacy_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) {
121        int numbytes;
122        void *buffer;
123
124        if (!packet->buffer || packet->buf_control == TRACE_CTRL_EXTERNAL) {
125                packet->buf_control = TRACE_CTRL_PACKET;
126                packet->buffer=malloc(LIBTRACE_PACKET_BUFSIZE);
127        }
128        buffer = packet->buffer;
129
130        switch(libtrace->format->type) {
131                case TRACE_FORMAT_LEGACY_ATM:
132                        packet->type = RT_DATA_LEGACY_ATM;
133                        break;
134                case TRACE_FORMAT_LEGACY_POS:
135                        packet->type = RT_DATA_LEGACY_POS;
136                        break;
137                case TRACE_FORMAT_LEGACY_ETH:
138                        packet->type = RT_DATA_LEGACY_ETH;
139                        break;
140                default:
141                        assert(0);
142        }
143       
144        if ((numbytes=LIBTRACE_READ(INPUT.file,
145                                        buffer,
146                                        64)) == -1) {
147                trace_set_err(libtrace,errno,"read(%s)",libtrace->uridata);
148                return -1;
149        }
150       
151        packet->header = packet->buffer;
152        packet->payload = (void*)((char*)packet->buffer + 
153                libtrace->format->get_framing_length(packet));
154       
155        return 64;
156       
157}
158
159static libtrace_linktype_t legacypos_get_link_type(const struct libtrace_packet_t *packet UNUSED) {
160        return TRACE_TYPE_LEGACY_POS;
161}
162
163static libtrace_linktype_t legacyatm_get_link_type(const struct libtrace_packet_t *packet UNUSED) {
164        return TRACE_TYPE_LEGACY_ATM;
165}
166
167static libtrace_linktype_t legacyeth_get_link_type(const struct libtrace_packet_t *packet UNUSED) {
168        return TRACE_TYPE_LEGACY_ETH;
169}
170
171static int legacy_get_capture_length(const struct libtrace_packet_t *packet UNUSED) {
172        return 64;
173}
174
175static int legacypos_get_wire_length(const struct libtrace_packet_t *packet) {
176        legacy_pos_t *lpos = (legacy_pos_t *)packet->header;
177        return ntohs(lpos->wlen);
178}
179
180static int legacyatm_get_wire_length(const struct libtrace_packet_t *packet UNUSED) {
181        return 53;
182}
183
184static int legacyeth_get_wire_length(const struct libtrace_packet_t *packet) {
185        legacy_ether_t *leth = (legacy_ether_t *)packet->header;
186        return ntohs(leth->wlen);
187}
188
189static uint64_t legacy_get_erf_timestamp(const struct libtrace_packet_t *packet)
190{
191        legacy_ether_t *legacy = (legacy_ether_t*)packet->header;
192        return legacy->ts;
193} 
194
195static void legacypos_help() {
196        printf("legacypos format module: $Revision$\n");
197        printf("Supported input URIs:\n");
198        printf("\tlegacypos:/path/to/file\t(uncompressed)\n");
199        printf("\tlegacypos:/path/to/file.gz\t(gzip-compressed)\n");
200        printf("\tlegacypos:-\t(stdin, either compressed or not)\n");
201        printf("\n");
202        printf("\te.g.: legacypos:/tmp/trace.gz\n");
203        printf("\n");
204}
205
206static void legacyatm_help() {
207        printf("legacyatm format module: $Revision$\n");
208        printf("Supported input URIs:\n");
209        printf("\tlegacyatm:/path/to/file\t(uncompressed)\n");
210        printf("\tlegacyatm:/path/to/file.gz\t(gzip-compressed)\n");
211        printf("\tlegacyatm:-\t(stdin, either compressed or not)\n");
212        printf("\n");
213        printf("\te.g.: legacyatm:/tmp/trace.gz\n");
214        printf("\n");
215}
216
217static void legacyeth_help() {
218        printf("legacyeth format module: $Revision$\n");
219        printf("Supported input URIs:\n");
220        printf("\tlegacyeth:/path/to/file\t(uncompressed)\n");
221        printf("\tlegacyeth:/path/to/file.gz\t(gzip-compressed)\n");
222        printf("\tlegacyeth:-\t(stdin, either compressed or not)\n");
223        printf("\n");
224        printf("\te.g.: legacyeth:/tmp/trace.gz\n");
225        printf("\n");
226}
227
228static struct libtrace_format_t legacyatm = {
229        "legacyatm",
230        "$Id$",
231        TRACE_FORMAT_LEGACY_ATM,
232        erf_init_input,                 /* init_input */       
233        NULL,                           /* config_input */
234        erf_start_input,                /* start_input */
235        NULL,                           /* pause_input */
236        NULL,                           /* init_output */
237        NULL,                           /* config_output */
238        NULL,                           /* start_output */
239        erf_fin_input,                  /* fin_input */
240        NULL,                           /* fin_output */
241        legacy_read_packet,             /* read_packet */
242        NULL,                           /* fin_packet */
243        NULL,                           /* write_packet */
244        legacyatm_get_link_type,        /* get_link_type */
245        NULL,                           /* get_direction */
246        NULL,                           /* set_direction */
247        legacy_get_erf_timestamp,       /* get_erf_timestamp */
248        NULL,                           /* get_timeval */
249        NULL,                           /* get_seconds */
250        NULL,                           /* seek_erf */
251        NULL,                           /* seek_timeval */
252        NULL,                           /* seek_seconds */
253        legacy_get_capture_length,      /* get_capture_length */
254        legacyatm_get_wire_length,      /* get_wire_length */
255        legacyatm_get_framing_length,   /* get_framing_length */
256        NULL,                           /* set_capture_length */
257        NULL,                           /* get_fd */
258        trace_event_trace,              /* trace_event */
259        legacyatm_help,                 /* help */
260        NULL                            /* next pointer */
261};
262
263static struct libtrace_format_t legacyeth = {
264        "legacyeth",
265        "$Id$",
266        TRACE_FORMAT_LEGACY_ETH,
267        erf_init_input,                 /* init_input */       
268        NULL,                           /* config_input */
269        erf_start_input,                /* start_input */
270        NULL,                           /* pause_input */
271        NULL,                           /* init_output */
272        NULL,                           /* config_output */
273        NULL,                           /* start_output */
274        erf_fin_input,                  /* fin_input */
275        NULL,                           /* fin_output */
276        legacy_read_packet,             /* read_packet */
277        NULL,                           /* fin_packet */
278        NULL,                           /* write_packet */
279        legacyeth_get_link_type,        /* get_link_type */
280        NULL,                           /* get_direction */
281        NULL,                           /* set_direction */
282        legacy_get_erf_timestamp,       /* get_erf_timestamp */
283        NULL,                           /* get_timeval */
284        NULL,                           /* get_seconds */
285        NULL,                           /* seek_erf */
286        NULL,                           /* seek_timeval */
287        NULL,                           /* seek_seconds */
288        legacy_get_capture_length,      /* get_capture_length */
289        legacyeth_get_wire_length,      /* get_wire_length */
290        legacyeth_get_framing_length,   /* get_framing_length */
291        NULL,                           /* set_capture_length */
292        NULL,                           /* get_fd */
293        trace_event_trace,              /* trace_event */
294        legacyeth_help,                 /* help */
295        NULL                            /* next pointer */
296};
297
298static struct libtrace_format_t legacypos = {
299        "legacypos",
300        "$Id$",
301        TRACE_FORMAT_LEGACY_POS,
302        erf_init_input,                 /* init_input */       
303        NULL,                           /* config_input */
304        erf_start_input,                /* start_input */
305        NULL,                           /* pause_input */
306        NULL,                           /* init_output */
307        NULL,                           /* config_output */
308        NULL,                           /* start_output */
309        erf_fin_input,                  /* fin_input */
310        NULL,                           /* fin_output */
311        legacy_read_packet,             /* read_packet */
312        NULL,                           /* fin_packet */
313        NULL,                           /* write_packet */
314        legacypos_get_link_type,        /* get_link_type */
315        NULL,                           /* get_direction */
316        NULL,                           /* set_direction */
317        legacy_get_erf_timestamp,       /* get_erf_timestamp */
318        NULL,                           /* get_timeval */
319        NULL,                           /* get_seconds */
320        NULL,                           /* seek_erf */
321        NULL,                           /* seek_timeval */
322        NULL,                           /* seek_seconds */
323        legacy_get_capture_length,      /* get_capture_length */
324        legacypos_get_wire_length,      /* get_wire_length */
325        legacypos_get_framing_length,   /* get_framing_length */
326        NULL,                           /* set_capture_length */
327        NULL,                           /* get_fd */
328        trace_event_trace,              /* trace_event */
329        legacypos_help,                 /* help */
330        NULL,                           /* next pointer */
331};
332
333       
334static void CONSTRUCTOR legacy_constructor() {
335        register_format(&legacypos);
336        register_format(&legacyeth);
337        register_format(&legacyatm);
338}
Note: See TracBrowser for help on using the repository browser.