1 | /* $NetBSD: ipf.h,v 1.3 2012/10/21 22:57:48 christos Exp $ */ |
2 | |
3 | /* |
4 | * Copyright (C) 2012 by Darren Reed. |
5 | * |
6 | * See the IPFILTER.LICENCE file for details on licencing. |
7 | * |
8 | * @(#)ipf.h 1.12 6/5/96 |
9 | * Id: ipf.h,v 1.1.1.2 2012/07/22 13:44:25 darrenr Exp $ |
10 | */ |
11 | |
12 | #ifndef __IPF_H__ |
13 | #define __IPF_H__ |
14 | |
15 | #if defined(__osf__) |
16 | # define radix_mask ipf_radix_mask |
17 | # define radix_node ipf_radix_node |
18 | # define radix_node_head ipf_radix_node_head |
19 | #endif |
20 | |
21 | #include <sys/param.h> |
22 | #include <sys/types.h> |
23 | #include <sys/file.h> |
24 | /* |
25 | * This is a workaround for <sys/uio.h> troubles on FreeBSD, HPUX, OpenBSD. |
26 | * Needed here because on some systems <sys/uio.h> gets included by things |
27 | * like <sys/socket.h> |
28 | */ |
29 | #ifndef _KERNEL |
30 | # define ADD_KERNEL |
31 | # define _KERNEL |
32 | # define KERNEL |
33 | #endif |
34 | #ifdef __OpenBSD__ |
35 | struct file; |
36 | #endif |
37 | #include <sys/uio.h> |
38 | #ifdef ADD_KERNEL |
39 | # undef _KERNEL |
40 | # undef KERNEL |
41 | #endif |
42 | #include <sys/time.h> |
43 | #include <sys/socket.h> |
44 | #include <net/if.h> |
45 | #if __FreeBSD_version >= 300000 |
46 | # include <net/if_var.h> |
47 | #endif |
48 | #include <netinet/in.h> |
49 | #include <netinet/in_systm.h> |
50 | #include <netinet/ip.h> |
51 | #include <netinet/ip_icmp.h> |
52 | #ifndef TCP_PAWS_IDLE /* IRIX */ |
53 | # include <netinet/tcp.h> |
54 | #endif |
55 | #include <netinet/udp.h> |
56 | |
57 | #include <arpa/inet.h> |
58 | |
59 | #include <errno.h> |
60 | #include <limits.h> |
61 | #include <netdb.h> |
62 | #include <stdlib.h> |
63 | #include <stddef.h> |
64 | #include <stdio.h> |
65 | #if !defined(__SVR4) && !defined(__svr4__) && defined(sun) |
66 | # include <strings.h> |
67 | #endif |
68 | #include <string.h> |
69 | #include <unistd.h> |
70 | |
71 | #include "netinet/ip_compat.h" |
72 | #include "netinet/ip_fil.h" |
73 | #include "netinet/ip_nat.h" |
74 | #include "netinet/ip_frag.h" |
75 | #include "netinet/ip_state.h" |
76 | #include "netinet/ip_proxy.h" |
77 | #include "netinet/ip_auth.h" |
78 | #include "netinet/ip_lookup.h" |
79 | #include "netinet/ip_pool.h" |
80 | #include "netinet/ip_scan.h" |
81 | #include "netinet/ip_htable.h" |
82 | #include "netinet/ip_sync.h" |
83 | #include "netinet/ip_dstlist.h" |
84 | |
85 | #include "opts.h" |
86 | |
87 | #ifndef __P |
88 | # ifdef __STDC__ |
89 | # define __P(x) x |
90 | # else |
91 | # define __P(x) () |
92 | # endif |
93 | #endif |
94 | #ifndef __STDC__ |
95 | # undef const |
96 | # define const |
97 | #endif |
98 | |
99 | #ifndef U_32_T |
100 | # define U_32_T 1 |
101 | # if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \ |
102 | defined(__sgi) |
103 | typedef u_int32_t u_32_t; |
104 | # else |
105 | # if defined(__alpha__) || defined(__alpha) || defined(_LP64) |
106 | typedef unsigned int u_32_t; |
107 | # else |
108 | # if SOLARIS2 >= 6 |
109 | typedef uint32_t u_32_t; |
110 | # else |
111 | typedef unsigned int u_32_t; |
112 | # endif |
113 | # endif |
114 | # endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __sgi */ |
115 | #endif /* U_32_T */ |
116 | |
117 | #ifndef MAXHOSTNAMELEN |
118 | # define MAXHOSTNAMELEN 256 |
119 | #endif |
120 | |
121 | #define MAX_ICMPCODE 16 |
122 | #define MAX_ICMPTYPE 19 |
123 | |
124 | #define PRINTF (void)printf |
125 | #define FPRINTF (void)fprintf |
126 | |
127 | |
128 | struct ipopt_names { |
129 | int on_value; |
130 | int on_bit; |
131 | int on_siz; |
132 | char *on_name; |
133 | }; |
134 | |
135 | |
136 | typedef struct alist_s { |
137 | struct alist_s *al_next; |
138 | int al_not; |
139 | int al_family; |
140 | i6addr_t al_i6addr; |
141 | i6addr_t al_i6mask; |
142 | } alist_t; |
143 | |
144 | #define al_addr al_i6addr.in4_addr |
145 | #define al_mask al_i6mask.in4_addr |
146 | #define al_1 al_addr |
147 | #define al_2 al_mask |
148 | |
149 | |
150 | typedef struct plist_s { |
151 | struct plist_s *pl_next; |
152 | int pl_compare; |
153 | u_short pl_port1; |
154 | u_short pl_port2; |
155 | } plist_t; |
156 | |
157 | |
158 | typedef struct { |
159 | u_short fb_c; |
160 | u_char fb_t; |
161 | u_char fb_f; |
162 | u_32_t fb_k; |
163 | } fakebpf_t; |
164 | |
165 | |
166 | typedef struct { |
167 | char *it_name; |
168 | int it_v4; |
169 | int it_v6; |
170 | } icmptype_t; |
171 | |
172 | |
173 | typedef struct wordtab { |
174 | char *w_word; |
175 | int w_value; |
176 | } wordtab_t; |
177 | |
178 | |
179 | typedef struct namelist { |
180 | struct namelist *na_next; |
181 | char *na_name; |
182 | int na_value; |
183 | } namelist_t; |
184 | |
185 | |
186 | typedef struct proxyrule { |
187 | struct proxyrule *pr_next; |
188 | char *pr_proxy; |
189 | char *pr_conf; |
190 | namelist_t *pr_names; |
191 | int pr_proto; |
192 | } proxyrule_t; |
193 | |
194 | |
195 | #if defined(__NetBSD__) || defined(__OpenBSD__) || \ |
196 | (_BSDI_VERSION >= 199701) || (__FreeBSD_version >= 300000) || \ |
197 | SOLARIS || defined(__sgi) || defined(__osf__) || defined(linux) |
198 | # include <stdarg.h> |
199 | typedef int (* ioctlfunc_t) __P((int, ioctlcmd_t, ...)); |
200 | #else |
201 | typedef int (* ioctlfunc_t) __P((dev_t, ioctlcmd_t, void *)); |
202 | #endif |
203 | typedef int (* addfunc_t) __P((int, ioctlfunc_t, void *)); |
204 | typedef int (* copyfunc_t) __P((void *, void *, size_t)); |
205 | |
206 | |
207 | /* |
208 | * SunOS4 |
209 | */ |
210 | #if defined(sun) && !defined(__SVR4) && !defined(__svr4__) |
211 | extern int ioctl __P((int, int, void *)); |
212 | #endif |
213 | |
214 | extern char thishost[]; |
215 | extern char flagset[]; |
216 | extern u_char flags[]; |
217 | extern struct ipopt_names ionames[]; |
218 | extern struct ipopt_names secclass[]; |
219 | extern char *icmpcodes[MAX_ICMPCODE + 1]; |
220 | extern char *icmptypes[MAX_ICMPTYPE + 1]; |
221 | extern int use_inet6; |
222 | extern int lineNum; |
223 | extern int debuglevel; |
224 | extern struct ipopt_names v6ionames[]; |
225 | extern icmptype_t icmptypelist[]; |
226 | extern wordtab_t statefields[]; |
227 | extern wordtab_t natfields[]; |
228 | extern wordtab_t poolfields[]; |
229 | |
230 | |
231 | extern int addicmp __P((char ***, struct frentry *, int)); |
232 | extern int addipopt __P((char *, struct ipopt_names *, int, char *)); |
233 | extern int addkeep __P((char ***, struct frentry *, int)); |
234 | extern alist_t *alist_new __P((int, char *)); |
235 | extern void alist_free __P((alist_t *)); |
236 | extern void assigndefined __P((char *)); |
237 | extern void binprint __P((void *, size_t)); |
238 | extern u_32_t buildopts __P((char *, char *, int)); |
239 | extern int checkrev __P((char *)); |
240 | extern int connecttcp __P((char *, int)); |
241 | extern int count6bits __P((u_32_t *)); |
242 | extern int count4bits __P((u_32_t)); |
243 | extern char *fac_toname __P((int)); |
244 | extern int fac_findname __P((char *)); |
245 | extern const char *familyname __P((const int)); |
246 | extern void fill6bits __P((int, u_int *)); |
247 | extern wordtab_t *findword __P((wordtab_t *, char *)); |
248 | extern int ftov __P((int)); |
249 | extern char *ipf_geterror __P((int, ioctlfunc_t *)); |
250 | extern int genmask __P((int, char *, i6addr_t *)); |
251 | extern int gethost __P((int, char *, i6addr_t *)); |
252 | extern int geticmptype __P((int, char *)); |
253 | extern int getport __P((struct frentry *, char *, u_short *, char *)); |
254 | extern int getportproto __P((char *, int)); |
255 | extern int getproto __P((char *)); |
256 | extern char *getnattype __P((struct nat *)); |
257 | extern char *getsumd __P((u_32_t)); |
258 | extern u_32_t getoptbyname __P((char *)); |
259 | extern u_32_t getoptbyvalue __P((int)); |
260 | extern u_32_t getv6optbyname __P((char *)); |
261 | extern u_32_t getv6optbyvalue __P((int)); |
262 | extern char *icmptypename __P((int, int)); |
263 | extern void initparse __P((void)); |
264 | extern void ipf_dotuning __P((int, char *, ioctlfunc_t)); |
265 | extern int ipf_addrule __P((int, ioctlfunc_t, void *)); |
266 | extern void ipf_mutex_clean __P((void)); |
267 | extern int ipf_parsefile __P((int, addfunc_t, ioctlfunc_t *, char *)); |
268 | extern int ipf_parsesome __P((int, addfunc_t, ioctlfunc_t *, FILE *)); |
269 | extern void ipf_perror __P((int, char *)); |
270 | extern int ipf_perror_fd __P(( int, ioctlfunc_t, char *)); |
271 | extern void ipf_rwlock_clean __P((void)); |
272 | extern char *ipf_strerror __P((int)); |
273 | extern void ipferror __P((int, char *)); |
274 | extern int ipmon_parsefile __P((char *)); |
275 | extern int ipmon_parsesome __P((FILE *)); |
276 | extern int ipnat_addrule __P((int, ioctlfunc_t, void *)); |
277 | extern int ipnat_parsefile __P((int, addfunc_t, ioctlfunc_t, char *)); |
278 | extern int ipnat_parsesome __P((int, addfunc_t, ioctlfunc_t, FILE *)); |
279 | extern int ippool_parsefile __P((int, char *, ioctlfunc_t)); |
280 | extern int ippool_parsesome __P((int, FILE *, ioctlfunc_t)); |
281 | extern int kmemcpywrap __P((void *, void *, size_t)); |
282 | extern char *kvatoname __P((ipfunc_t, ioctlfunc_t)); |
283 | extern int load_dstlist __P((struct ippool_dst *, ioctlfunc_t, |
284 | ipf_dstnode_t *)); |
285 | extern int load_dstlistnode __P((int, char *, struct ipf_dstnode *, |
286 | ioctlfunc_t)); |
287 | extern alist_t *load_file __P((char *)); |
288 | extern int load_hash __P((struct iphtable_s *, struct iphtent_s *, |
289 | ioctlfunc_t)); |
290 | extern int load_hashnode __P((int, char *, struct iphtent_s *, int, |
291 | ioctlfunc_t)); |
292 | extern alist_t *load_http __P((char *)); |
293 | extern int load_pool __P((struct ip_pool_s *list, ioctlfunc_t)); |
294 | extern int load_poolnode __P((int, char *, ip_pool_node_t *, int, ioctlfunc_t)); |
295 | extern alist_t *load_url __P((char *)); |
296 | extern alist_t *make_range __P((int, struct in_addr, struct in_addr)); |
297 | extern void mb_hexdump __P((mb_t *, FILE *)); |
298 | extern ipfunc_t nametokva __P((char *, ioctlfunc_t)); |
299 | extern void nat_setgroupmap __P((struct ipnat *)); |
300 | extern int ntomask __P((int, int, u_32_t *)); |
301 | extern u_32_t optname __P((char ***, u_short *, int)); |
302 | extern wordtab_t *parsefields __P((wordtab_t *, char *)); |
303 | extern int *parseipfexpr __P((char *, char **)); |
304 | extern int parsewhoisline __P((char *, addrfamily_t *, addrfamily_t *)); |
305 | extern void pool_close __P((void)); |
306 | extern int pool_fd __P((void)); |
307 | extern int pool_ioctl __P((ioctlfunc_t, ioctlcmd_t, void *)); |
308 | extern int pool_open __P((void)); |
309 | extern char *portname __P((int, int)); |
310 | extern int pri_findname __P((char *)); |
311 | extern char *pri_toname __P((int)); |
312 | extern void print_toif __P((int, char *, char *, struct frdest *)); |
313 | extern void printaps __P((ap_session_t *, int, int)); |
314 | extern void printaddr __P((int, int, char *, int, u_32_t *, u_32_t *)); |
315 | extern void printbuf __P((char *, int, int)); |
316 | extern void printfieldhdr __P((wordtab_t *, wordtab_t *)); |
317 | extern void printfr __P((struct frentry *, ioctlfunc_t)); |
318 | extern struct iphtable_s *printhash __P((struct iphtable_s *, copyfunc_t, |
319 | char *, int, wordtab_t *)); |
320 | extern struct iphtable_s *printhash_live __P((iphtable_t *, int, char *, |
321 | int, wordtab_t *)); |
322 | extern ippool_dst_t *printdstl_live __P((ippool_dst_t *, int, char *, |
323 | int, wordtab_t *)); |
324 | extern void printhashdata __P((iphtable_t *, int)); |
325 | extern struct iphtent_s *printhashnode __P((struct iphtable_s *, |
326 | struct iphtent_s *, |
327 | copyfunc_t, int, wordtab_t *)); |
328 | extern void printhost __P((int, u_32_t *)); |
329 | extern void printhostmask __P((int, u_32_t *, u_32_t *)); |
330 | extern void printip __P((int, u_32_t *)); |
331 | extern void printlog __P((struct frentry *)); |
332 | extern void printlookup __P((char *, i6addr_t *addr, i6addr_t *mask)); |
333 | extern void printmask __P((int, u_32_t *)); |
334 | extern void printnataddr __P((int, char *, nat_addr_t *, int)); |
335 | extern void printnatfield __P((nat_t *, int)); |
336 | extern void printnatside __P((char *, nat_stat_side_t *)); |
337 | extern void printpacket __P((int, mb_t *)); |
338 | extern void printpacket6 __P((int, mb_t *)); |
339 | extern struct ippool_dst *printdstlist __P((struct ippool_dst *, copyfunc_t, |
340 | char *, int, ipf_dstnode_t *, |
341 | wordtab_t *)); |
342 | extern void printdstlistdata __P((ippool_dst_t *, int)); |
343 | extern ipf_dstnode_t *printdstlistnode __P((ipf_dstnode_t *, copyfunc_t, |
344 | int, wordtab_t *)); |
345 | extern void printdstlistpolicy __P((ippool_policy_t)); |
346 | extern struct ip_pool_s *printpool __P((struct ip_pool_s *, copyfunc_t, |
347 | char *, int, wordtab_t *)); |
348 | extern struct ip_pool_s *printpool_live __P((struct ip_pool_s *, int, |
349 | char *, int, wordtab_t *)); |
350 | extern void printpooldata __P((ip_pool_t *, int)); |
351 | extern void printpoolfield __P((void *, int, int)); |
352 | extern struct ip_pool_node *printpoolnode __P((struct ip_pool_node *, |
353 | int, wordtab_t *)); |
354 | extern void printproto __P((struct protoent *, int, struct ipnat *)); |
355 | extern void printportcmp __P((int, struct frpcmp *)); |
356 | extern void printstatefield __P((ipstate_t *, int)); |
357 | extern void printtqtable __P((ipftq_t *)); |
358 | extern void printtunable __P((ipftune_t *)); |
359 | extern void printunit __P((int)); |
360 | extern void optprint __P((u_short *, u_long, u_long)); |
361 | #ifdef USE_INET6 |
362 | extern void optprintv6 __P((u_short *, u_long, u_long)); |
363 | #endif |
364 | extern int remove_hash __P((struct iphtable_s *, ioctlfunc_t)); |
365 | extern int remove_hashnode __P((int, char *, struct iphtent_s *, ioctlfunc_t)); |
366 | extern int remove_pool __P((ip_pool_t *, ioctlfunc_t)); |
367 | extern int remove_poolnode __P((int, char *, ip_pool_node_t *, ioctlfunc_t)); |
368 | extern u_char tcpflags __P((char *)); |
369 | extern void printc __P((struct frentry *)); |
370 | extern void printC __P((int)); |
371 | extern void emit __P((int, int, void *, struct frentry *)); |
372 | extern u_char secbit __P((int)); |
373 | extern u_char seclevel __P((char *)); |
374 | extern void printfraginfo __P((char *, struct ipfr *)); |
375 | extern void printifname __P((char *, char *, void *)); |
376 | extern char *hostname __P((int, const void *)); |
377 | extern struct ipstate *printstate __P((struct ipstate *, int, u_long)); |
378 | extern void printsbuf __P((char *)); |
379 | extern void printnat __P((struct ipnat *, int)); |
380 | extern void printactiveaddress __P((int, char *, i6addr_t *, char *)); |
381 | extern void printactivenat __P((struct nat *, int, u_long)); |
382 | extern void printhostmap __P((struct hostmap *, u_int)); |
383 | extern void printtcpflags __P((u_32_t, u_32_t)); |
384 | extern void printipfexpr __P((int *)); |
385 | extern void printstatefield __P((ipstate_t *, int)); |
386 | extern void printstatefieldhdr __P((int)); |
387 | extern int sendtrap_v1_0 __P((int, char *, char *, int, time_t)); |
388 | extern int sendtrap_v2_0 __P((int, char *, char *, int)); |
389 | extern int vtof __P((int)); |
390 | |
391 | extern void set_variable __P((char *, char *)); |
392 | extern char *get_variable __P((char *, char **, int)); |
393 | extern void resetlexer __P((void)); |
394 | |
395 | extern void debug __P((int, char *, ...)); |
396 | extern void verbose __P((int, char *, ...)); |
397 | extern void ipfkdebug __P((char *, ...)); |
398 | extern void ipfkverbose __P((char *, ...)); |
399 | |
400 | #if SOLARIS |
401 | extern int gethostname __P((char *, int )); |
402 | extern void sync __P((void)); |
403 | #endif |
404 | |
405 | #endif /* __IPF_H__ */ |
406 | |