source: lib/format_legacy.c @ ab4cb04

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

Cleanup struct libtrace_Format_data_t

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