source: lib/format.h @ 91ebc50

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

config option support added + zlib compression level

  • Property mode set to 100644
File size: 5.5 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
31#ifndef FORMAT_H
32#define FORMAT_H
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
38#include "common.h"
39#include "config.h"
40#include "libtrace.h"
41#include "fifo.h"
42#include "rtserver.h"
43
44#if HAVE_PCAP_BPF_H
45#  include <pcap-bpf.h>
46#else
47#  ifdef HAVE_NET_BPF_H
48#    include <net/bpf.h>
49#  endif
50#endif
51
52#if HAVE_PCAP_H
53#  include <pcap.h>
54#  ifdef HAVE_PCAP_INT_H
55#    include <pcap-int.h>
56#  endif
57#endif
58
59#ifdef HAVE_ZLIB_H
60#  include <zlib.h>
61#endif
62
63
64#include "wag.h"
65
66#ifdef HAVE_DAG_API
67#  include "dagnew.h"
68#  include "dagapi.h"
69#else
70#  include "dagformat.h"
71#endif
72
73typedef enum {SOCKET, TRACE, STDIN, DEVICE, INTERFACE, RT } source_t;
74
75#define RP_BUFSIZE 65536
76
77/** The information about traces that are open
78 * @internal
79 */
80struct libtrace_t {
81        struct format_t *format; /**< format driver pointer */
82        source_t sourcetype;    /**< The type (device,file, etc */
83
84        union {
85                /** Information about rtclients */
86                struct {
87                        char *hostname;
88                        short port;
89                } rt;
90                char *path;             /**< information for local sockets */
91                char *interface;        /**< intormation for reading of network
92                                             interfaces */
93        } conn_info;
94        /** Information about the current state of the input device */
95        union {
96                int fd;
97#if HAVE_ZLIB
98                gzFile *file;
99#else   
100                FILE *file;
101#endif
102#if HAVE_PCAP
103                pcap_t *pcap;
104#endif
105        } input;
106
107        struct fifo_t *fifo;   
108        struct {
109                void *buf; 
110                unsigned bottom;
111                unsigned top;
112                unsigned diff;
113                unsigned curr;
114                unsigned offset;
115        } dag;
116        struct {
117                void *buffer;
118                int size;
119        } packet;
120        double tdelta;
121        double trace_start_ts;
122        double real_start_ts;
123        double trace_last_ts;
124
125        double last_ts;
126        double start_ts;
127};
128
129struct libtrace_out_t {
130        struct format_t * format;
131
132        char *uridata;
133        union {
134                struct {
135                        char *hostname;
136                        short port;
137                } rt;
138                char *path;
139                char *interface;
140        } conn_info;
141
142        union {
143                struct {
144                        int level;
145                } erf;
146               
147        } options;
148       
149        union {
150                int fd;
151                struct rtserver_t * rtserver;
152#if HAVE_ZLIB
153                gzFile *file;
154#else
155                FILE *file;
156#endif
157#if HAVE_PCAP
158                pcap_t *pcap;
159#endif
160        } output;
161
162        struct fifo_t *fifo;
163
164
165};
166
167
168struct trace_sll_header_t {
169        uint16_t pkttype;               /* packet type */
170        uint16_t hatype;                /* link-layer address type */
171        uint16_t halen;                 /* link-layer address length */
172        char addr[8];                   /* link-layer address */
173        uint16_t protocol;              /* protocol */
174};
175
176#ifndef PF_RULESET_NAME_SIZE
177#define PF_RULESET_NAME_SIZE 16
178#endif
179
180#ifndef IFNAMSIZ
181#define IFNAMSIZ 16
182#endif
183
184struct trace_pflog_header_t {
185        uint8_t    length;
186        sa_family_t   af;
187        uint8_t    action;
188        uint8_t    reason;
189        char       ifname[IFNAMSIZ];
190        char       ruleset[PF_RULESET_NAME_SIZE];
191        uint32_t   rulenr;
192        uint32_t   subrulenr;
193        uint8_t    dir;
194        uint8_t    pad[3];
195};
196
197struct format_t {
198        char *name;
199        char *version;
200        int (*init_input)(struct libtrace_t *libtrace);
201        int (*init_output)(struct libtrace_out_t *libtrace);
202        int (*config_output)(struct libtrace_out_t *libtrace, int argc, char *argv[]);
203        int (*fin_input)(struct libtrace_t *libtrace);
204        int (*fin_output)(struct libtrace_out_t *libtrace);
205        int (*read)(struct libtrace_t *libtrace, void *buffer, size_t len);
206        int (*read_packet)(struct libtrace_t *libtrace, struct libtrace_packet_t *packet);
207        int (*write_packet)(struct libtrace_out_t *libtrace, struct libtrace_packet_t *packet);
208        void* (*get_link)(const struct libtrace_packet_t *packet);
209        libtrace_linktype_t (*get_link_type)(const struct libtrace_packet_t *packet);
210        int8_t (*get_direction)(const struct libtrace_packet_t *packet);
211        int8_t (*set_direction)(const struct libtrace_packet_t *packet, int8_t direction);
212        uint64_t (*get_erf_timestamp)(const struct libtrace_packet_t *packet);
213        struct timeval (*get_timeval)(const struct libtrace_packet_t *packet);
214        double (*get_seconds)(const struct libtrace_packet_t *packet);
215        int (*get_capture_length)(const struct libtrace_packet_t *packet);
216        int (*get_wire_length)(const struct libtrace_packet_t *packet);
217        size_t (*truncate_packet)(const struct libtrace_packet_t *packet,size_t size);
218};
219
220extern struct format_t *form;
221
222void register_format(struct format_t *format);
223       
224#ifdef __cplusplus
225}
226#endif
227
228#endif // FORMAT_H
Note: See TracBrowser for help on using the repository browser.