source: lib/libtrace_int.h @ fba4ca0

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since fba4ca0 was fba4ca0, checked in by Daniel Lawson <dlawson@…>, 15 years ago

documentation cleanups, moved libtrace_packet_t definition into libtrace_int.h

  • Property mode set to 100644
File size: 4.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
31#ifndef LIBTRACE_INT_H
32#define LIBTRACE_INT_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
76static struct {
77        int err_num;    // error code
78        char *problem;  // the format, uri etc that caused the error for reporting purposes
79} trace_err;
80
81/** Opaque structure holding information about a packet */
82#define LIBTRACE_PACKET_BUFSIZE 65536
83struct libtrace_packet_t {
84        struct libtrace_t *trace;
85        //void *buffer;
86        char buffer[LIBTRACE_PACKET_BUFSIZE];
87        size_t size;
88        uint8_t status;
89};
90
91#define RP_BUFSIZE 65536
92
93struct libtrace_format_data_t;
94
95struct libtrace_event_t {
96        struct {
97                void *buffer;
98                int size;
99        } packet;
100        double tdelta;
101        double trace_last_ts;
102};
103
104/** The information about traces that are open
105 * @internal
106 */
107struct libtrace_t {
108        struct libtrace_format_t *format; /**< format driver pointer */
109        struct libtrace_format_data_t *format_data; /**<format data pointer */
110        source_t sourcetype;    /**< The type (device,file, etc */
111
112        struct libtrace_event_t event;
113        char *uridata;
114        struct tracefifo_t *fifo;   
115
116};
117
118struct libtrace_out_t {
119        struct libtrace_format_t *format;
120        struct libtrace_format_data_out_t *format_data;
121
122        char *uridata;
123        struct tracefifo_t *fifo;
124};
125
126
127struct trace_sll_header_t {
128        uint16_t pkttype;               /* packet type */
129        uint16_t hatype;                /* link-layer address type */
130        uint16_t halen;                 /* link-layer address length */
131        char addr[8];                   /* link-layer address */
132        uint16_t protocol;              /* protocol */
133};
134
135#ifndef PF_RULESET_NAME_SIZE
136#define PF_RULESET_NAME_SIZE 16
137#endif
138
139#ifndef IFNAMSIZ
140#define IFNAMSIZ 16
141#endif
142
143struct trace_pflog_header_t {
144        uint8_t    length;
145        sa_family_t   af;
146        uint8_t    action;
147        uint8_t    reason;
148        char       ifname[IFNAMSIZ];
149        char       ruleset[PF_RULESET_NAME_SIZE];
150        uint32_t   rulenr;
151        uint32_t   subrulenr;
152        uint8_t    dir;
153        uint8_t    pad[3];
154};
155
156struct libtrace_format_t {
157        char *name;
158        char *version;
159        char *type;
160        int (*init_input)(struct libtrace_t *libtrace);
161        int (*init_output)(struct libtrace_out_t *libtrace);
162        int (*config_output)(struct libtrace_out_t *libtrace, int argc, char *argv[]);
163        int (*fin_input)(struct libtrace_t *libtrace);
164        int (*fin_output)(struct libtrace_out_t *libtrace);
165        int (*read_packet)(struct libtrace_t *libtrace, struct libtrace_packet_t *packet);
166        int (*write_packet)(struct libtrace_out_t *libtrace, struct libtrace_packet_t *packet);
167        void* (*get_link)(const struct libtrace_packet_t *packet);
168        libtrace_linktype_t (*get_link_type)(const struct libtrace_packet_t *packet);
169        int8_t (*get_direction)(const struct libtrace_packet_t *packet);
170        int8_t (*set_direction)(const struct libtrace_packet_t *packet, int8_t direction);
171        uint64_t (*get_erf_timestamp)(const struct libtrace_packet_t *packet);
172        struct timeval (*get_timeval)(const struct libtrace_packet_t *packet);
173        double (*get_seconds)(const struct libtrace_packet_t *packet);
174        int (*get_capture_length)(const struct libtrace_packet_t *packet);
175        int (*get_wire_length)(const struct libtrace_packet_t *packet);
176        size_t (*truncate_packet)(struct libtrace_packet_t *packet,size_t size);
177        int (*get_fd)(struct libtrace_packet_t *packet);
178        struct libtrace_eventobj_t (*trace_event)(struct libtrace_t *trace, struct libtrace_packet_t *packet); 
179        void (*help)();
180};
181
182extern struct libtrace_format_t *form;
183
184void register_format(struct libtrace_format_t *format);
185       
186#ifdef __cplusplus
187}
188#endif
189
190#endif // LIBTRACE_INT_H
Note: See TracBrowser for help on using the repository browser.