1 /* $NetBSD: ipf.h,v 1.13 2007/05/15 22:52:21 martin Exp $ */
4 * Copyright (C) 1993-2001, 2003 by Darren Reed.
6 * See the IPFILTER.LICENCE file for details on licencing.
8 * @(#)ipf.h 1.12 6/5/96
9 * Id: ipf.h,v 2.71.2.16 2007/10/26 12:15:14 darrenr Exp
16 # define radix_mask ipf_radix_mask
17 # define radix_node ipf_radix_node
18 # define radix_node_head ipf_radix_node_head
21 #include <sys/param.h>
22 #include <sys/types.h>
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
43 #include <sys/socket.h>
45 #if __FreeBSD_version >= 300000
46 # include <net/if_var.h>
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>
55 #include <netinet/udp.h>
57 #include <arpa/inet.h>
65 #if !defined(__SVR4) && !defined(__svr4__) && defined(sun)
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"
100 # if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \
102 typedef u_int32_t u_32_t
;
104 # if defined(__alpha__) || defined(__alpha) || defined(_LP64)
105 typedef unsigned int u_32_t
;
108 typedef uint32_t u_32_t
;
110 typedef unsigned int u_32_t
;
113 # endif /* __NetBSD__ || __OpenBSD__ || __FreeBSD__ || __sgi */
116 #ifndef MAXHOSTNAMELEN
117 # define MAXHOSTNAMELEN 256
120 #define MAX_ICMPCODE 16
121 #define MAX_ICMPTYPE 19
132 typedef struct alist_s
{
133 struct alist_s
*al_next
;
139 #define al_addr al_i6addr.in4_addr
140 #define al_mask al_i6mask.in4_addr
153 #if defined(__NetBSD__) || defined(__OpenBSD__) || \
154 (_BSDI_VERSION >= 199701) || (__FreeBSD_version >= 300000) || \
155 SOLARIS || defined(__sgi) || defined(__osf__) || defined(linux)
157 typedef int (* ioctlfunc_t
) __P((int, ioctlcmd_t
, ...));
159 typedef int (* ioctlfunc_t
) __P((dev_t
, ioctlcmd_t
, void *));
161 typedef void (* addfunc_t
) __P((int, ioctlfunc_t
, void *));
162 typedef int (* copyfunc_t
) __P((void *, void *, size_t));
168 #if defined(sun) && !defined(__SVR4) && !defined(__svr4__)
169 extern int ioctl
__P((int, int, void *));
172 extern char thishost
[];
173 extern char flagset
[];
174 extern u_char flags
[];
175 extern struct ipopt_names ionames
[];
176 extern struct ipopt_names secclass
[];
177 extern char *icmpcodes
[MAX_ICMPCODE
+ 1];
178 extern char *icmptypes
[MAX_ICMPTYPE
+ 1];
179 extern int use_inet6
;
181 extern struct ipopt_names v6ionames
[];
184 extern int addicmp
__P((char ***, struct frentry
*, int));
185 extern int addipopt
__P((char *, struct ipopt_names
*, int, char *));
186 extern void alist_free
__P((alist_t
*));
187 extern alist_t
*alist_new
__P((int, char *));
188 extern void binprint
__P((void *, size_t));
189 extern void initparse
__P((void));
190 extern u_32_t buildopts
__P((char *, char *, int));
191 extern int checkrev
__P((char *));
192 extern int count6bits
__P((u_32_t
*));
193 extern int count4bits
__P((u_32_t
));
194 extern char *fac_toname
__P((int));
195 extern int fac_findname
__P((char *));
196 extern void fill6bits
__P((int, u_int
*));
197 extern int gethost
__P((char *, u_32_t
*));
198 extern int getport
__P((struct frentry
*, char *, u_short
*));
199 extern int getportproto
__P((char *, int));
200 extern int getproto
__P((char *));
201 extern char *getnattype
__P((struct nat
*, int));
202 extern char *getsumd
__P((u_32_t
));
203 extern u_32_t getoptbyname
__P((char *));
204 extern u_32_t getoptbyvalue
__P((int));
205 extern u_32_t getv6optbyname
__P((char *));
206 extern u_32_t getv6optbyvalue
__P((int));
207 extern void initparse
__P((void));
208 extern void ipf_dotuning
__P((int, char *, ioctlfunc_t
));
209 extern void ipf_addrule
__P((int, ioctlfunc_t
, void *));
210 extern int ipf_parsefile
__P((int, addfunc_t
, ioctlfunc_t
*, char *));
211 extern int ipf_parsesome
__P((int, addfunc_t
, ioctlfunc_t
*, FILE *));
212 extern int ipmon_parsefile
__P((char *));
213 extern int ipmon_parsesome
__P((FILE *));
214 extern void ipnat_addrule
__P((int, ioctlfunc_t
, void *));
215 extern int ipnat_parsefile
__P((int, addfunc_t
, ioctlfunc_t
, char *));
216 extern int ipnat_parsesome
__P((int, addfunc_t
, ioctlfunc_t
, FILE *));
217 extern int ippool_parsefile
__P((int, char *, ioctlfunc_t
));
218 extern int ippool_parsesome
__P((int, FILE *, ioctlfunc_t
));
219 extern int kmemcpywrap
__P((void *, void *, size_t));
220 extern char *kvatoname
__P((ipfunc_t
, ioctlfunc_t
));
221 extern alist_t
*load_file
__P((char *));
222 extern int load_hash
__P((struct iphtable_s
*, struct iphtent_s
*,
224 extern int load_hashnode
__P((int, char *, struct iphtent_s
*, ioctlfunc_t
));
225 extern alist_t
*load_http
__P((char *));
226 extern int load_pool
__P((struct ip_pool_s
*list
, ioctlfunc_t
));
227 extern int load_poolnode
__P((int, char *, ip_pool_node_t
*, ioctlfunc_t
));
228 extern alist_t
*load_url
__P((char *));
229 extern alist_t
*make_range
__P((int, struct in_addr
, struct in_addr
));
230 extern ipfunc_t nametokva
__P((char *, ioctlfunc_t
));
231 extern void nat_setgroupmap
__P((struct ipnat
*));
232 extern int ntomask
__P((int, int, u_32_t
*));
233 extern u_32_t optname
__P((char ***, u_short
*, int));
234 extern struct frentry
*parse
__P((char *, int));
235 extern char *portname
__P((int, int));
236 extern int pri_findname
__P((char *));
237 extern char *pri_toname
__P((int));
238 extern void print_toif
__P((char *, struct frdest
*));
239 extern void printaps
__P((ap_session_t
*, int));
240 extern void printbuf
__P((char *, int, int));
241 extern void printfr
__P((struct frentry
*, ioctlfunc_t
));
242 extern void printtunable
__P((ipftune_t
*));
243 extern struct iphtable_s
*printhash
__P((struct iphtable_s
*, copyfunc_t
,
245 extern struct iphtable_s
*printhash_live
__P((iphtable_t
*, int, char *, int));
246 extern void printhashdata
__P((iphtable_t
*, int));
247 extern struct iphtent_s
*printhashnode
__P((struct iphtable_s
*,
250 extern void printhostmask
__P((int, u_32_t
*, u_32_t
*));
251 extern void printip
__P((u_32_t
*));
252 extern void printlog
__P((struct frentry
*));
253 extern void printlookup
__P((i6addr_t
*addr
, i6addr_t
*mask
));
254 extern void printmask
__P((u_32_t
*));
255 extern void printpacket
__P((struct ip
*));
256 extern void printpacket6
__P((struct ip
*));
257 extern struct ip_pool_s
*printpool
__P((struct ip_pool_s
*, copyfunc_t
,
259 extern struct ip_pool_s
*printpool_live
__P((struct ip_pool_s
*, int,
261 extern void printpooldata
__P((ip_pool_t
*, int));
262 extern struct ip_pool_node
*printpoolnode
__P((struct ip_pool_node
*, int));
263 extern void printproto
__P((struct protoent
*, int, struct ipnat
*));
264 extern void printportcmp
__P((int, struct frpcmp
*));
265 extern void optprint
__P((u_short
*, u_long
, u_long
));
267 extern void optprintv6
__P((u_short
*, u_long
, u_long
));
269 extern int remove_hash
__P((struct iphtable_s
*, ioctlfunc_t
));
270 extern int remove_hashnode
__P((int, char *, struct iphtent_s
*, ioctlfunc_t
));
271 extern int remove_pool
__P((ip_pool_t
*, ioctlfunc_t
));
272 extern int remove_poolnode
__P((int, char *, ip_pool_node_t
*, ioctlfunc_t
));
273 extern u_char tcp_flags
__P((char *, u_char
*, int));
274 extern u_char tcpflags
__P((char *));
275 extern void printc
__P((struct frentry
*));
276 extern void printC
__P((int));
277 extern void emit
__P((int, int, void *, struct frentry
*));
278 extern u_char secbit
__P((int));
279 extern u_char seclevel
__P((char *));
280 extern void printfraginfo
__P((char *, struct ipfr
*));
281 extern void printifname
__P((char *, char *, void *));
282 extern char *hostname
__P((int, void *));
283 extern struct ipstate
*printstate
__P((struct ipstate
*, int, u_long
));
284 extern void printsbuf
__P((char *));
285 extern void printnat
__P((struct ipnat
*, int));
286 extern void printactivenat
__P((struct nat
*, int, int, u_long
));
287 extern void printhostmap
__P((struct hostmap
*, u_int
));
288 extern void printtqtable
__P((ipftq_t
*));
290 extern void set_variable
__P((char *, char *));
291 extern char *get_variable
__P((char *, char **, int));
292 extern void resetlexer
__P((void));
295 extern int gethostname
__P((char *, int ));
296 extern void sync
__P((void));
299 #endif /* __IPF_H__ */