File: ncap_pvt.h

package info (click to toggle)
ncap 1.9.2-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,704 kB
  • sloc: sh: 10,135; ansic: 5,829; perl: 68; makefile: 42; python: 33
file content (168 lines) | stat: -rw-r--r-- 3,993 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
 * Copyright (c) 2007 by Internet Systems Consortium, Inc. ("ISC")
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef __ncap_pvt_h
#define __ncap_pvt_h 1

#define ISC_CHECK_NONE 1

#include "asprintf.h"
#include "ncap_port.h"
#include "ncap.h"
#include "ipreasm.h"

#include <sys/types.h>

#include <pcap.h>

#include "ncap_list.h"

#define	IN4SZ		4
#define	IN6SZ		16
#define	BUFSZ		4096

struct ncap_if {
	ISC_LINK(struct ncap_if)  link;
	ncap_t			ncap;
	pcap_t *		pcap;
	int			dlt;
	int			fdes;
	int *			vlans;
	int			nvlan;
	char *			label;
};
typedef struct ncap_if *ncap_if_ptr;
typedef ISC_LIST(struct ncap_if) ncap_if_list;

struct ncap_nf {
	ISC_LINK(struct ncap_nf)  link;
	ncap_t			ncap;
	int			fdes;
	char *			label;
	unsigned		vers;
	u_char			fb[BUFSZ];
	size_t			fblen;
	unsigned		fbcur;
	u_char			fixedbuf[NCAP_MSGHDR];
	u_char *		varbuf;
	size_t			varsiz, siz;
	size_t			len, netlen, tplen;
	int			saving;
	struct ncap_msg		msg;
};
typedef struct ncap_nf *ncap_nf_ptr;
typedef ISC_LIST(struct ncap_nf) ncap_nf_list;

struct ncap_pf {
	ISC_LINK(struct ncap_pf)  link;
	ncap_t			ncap;
	FILE *			fp;
	char *			label;
	pcap_t *		pcap;
	int			fdes;
	int			dlt;
};
typedef struct ncap_pf *ncap_pf_ptr;
typedef ISC_LIST(struct ncap_pf) ncap_pf_list;

struct ncap_dg {
	ISC_LINK(struct ncap_dg)  link;
	ncap_t			ncap;
	int			fdes;
	unsigned		vers;
	char *			label;
};
typedef struct ncap_dg *ncap_dg_ptr;
typedef ISC_LIST(struct ncap_dg) ncap_dg_list;

struct ncap_rule;
typedef struct ncap_rule *ncap_rule_ptr;
typedef ISC_LIST(struct ncap_rule) ncap_rule_list;
typedef int (*ncap_match_ptr)(ncap_rule_ptr, ncap_msg_ct);
struct ncap_rule {
	ISC_LINK(struct ncap_rule)  link;
	ncap_match_ptr		match;
	void *			payload;
	unsigned		argument;
};

struct ncap_filter;
typedef struct ncap_filter *ncap_filter_ptr;
typedef ISC_LIST(struct ncap_filter) ncap_filter_list;
struct ncap_filter {
	ISC_LINK(struct ncap_filter)  link;
	ncap_rule_list		rules;
	char *			bpf;
};

struct ncap_filtermaker;
typedef struct ncap_filtermaker *ncap_filtermaker_ptr;
typedef	char *(*ncap_rulemaker_ptr)(ncap_t, const char *, char, const char *);
struct ncap_filtermaker {
	const char *		name;
	ncap_rulemaker_ptr	rulemaker;
};

struct ncap_pvt {
	int			maxmsg;
	u_char *		msgbuf;
	ncap_if_list		ifs;
	ncap_nf_list		nfs;
	ncap_pf_list		pfs;
	ncap_dg_list		dgs;
	fd_set			fdset;
	int			highest_fd;
	int			flags;
	struct reasm_ip *	reasm_ip;
	ncap_filter_list	filters;
};

#define	NCAP_STOPPING	0x0001
#define	NCAP_FAILURE	0x0002

struct ncap_if_closure {
	ncap_callback_t	callback;
	void *		closure;
	ncap_if_ptr	ifp;
};
typedef struct ncap_if_closure *ncap_if_closure_t;

struct ncap_nf_closure {
	ncap_callback_t	callback;
	void *		closure;
	ncap_nf_ptr	nfp;
};
typedef struct ncap_nf_closure *ncap_nf_closure_t;

struct ncap_pf_closure {
	ncap_callback_t	callback;
	void *		closure;
	ncap_pf_ptr	pfp;
};
typedef struct ncap_pf_closure *ncap_pf_closure_t;

#define NCAP_SETERR(m) do { \
	if (ncap->errstr != NULL) \
		free(ncap->errstr); \
	ncap->errstr = strdup(m); \
	ncap->pvt->flags |= NCAP_FAILURE; \
} while (0)

char *		ncap_filter_dns(ncap_t, const char *, char, const char *);
char *		ncap_filter_icmp(ncap_t, const char *, char, const char *);
void		ncap_addrule(ncap_t, ncap_match_ptr, void *, unsigned);

#endif