1/*	$FreeBSD$	*/
2
3/*
4 * Copyright (C) 1993-2001 by Darren Reed.
5 *
6 * See the IPFILTER.LICENCE file for details on licencing.
7 *
8 * @(#)ip_frag.h	1.5 3/24/96
9 * $FreeBSD$
10 * Id: ip_frag.h,v 2.23.2.1 2004/03/29 16:21:56 darrenr Exp
11 */
12
13#ifndef	__IP_FRAG_H__
14#define	__IP_FRAG_H__
15
16#define	IPFT_SIZE	257
17
18typedef	struct	ipfr	{
19	struct	ipfr	*ipfr_hnext, **ipfr_hprev;
20	struct	ipfr	*ipfr_next, **ipfr_prev;
21	void	*ipfr_data;
22	frentry_t *ipfr_rule;
23	u_long	ipfr_ttl;
24	int	ipfr_ref;
25	u_short	ipfr_off;
26	u_short	ipfr_seen0;
27	/*
28	 * All of the fields, from ipfr_ifp to ipfr_pass, are compared
29	 * using bcmp to see if an identical entry is present.  It is
30	 * therefore important for this set to remain together.
31	 */
32	void	*ipfr_ifp;
33	struct	in_addr	ipfr_src;
34	struct	in_addr	ipfr_dst;
35	u_32_t	ipfr_optmsk;
36	u_short	ipfr_secmsk;
37	u_short	ipfr_auth;
38	u_short	ipfr_id;
39	u_char	ipfr_p;
40	u_char	ipfr_tos;
41	u_32_t	ipfr_pass;
42} ipfr_t;
43
44
45typedef	struct	ipfrstat {
46	u_long	ifs_exists;	/* add & already exists */
47	u_long	ifs_nomem;
48	u_long	ifs_new;
49	u_long	ifs_hits;
50	u_long	ifs_expire;
51	u_long	ifs_inuse;
52	u_long	ifs_retrans0;
53	u_long	ifs_short;
54	struct	ipfr	**ifs_table;
55	struct	ipfr	**ifs_nattab;
56} ipfrstat_t;
57
58#define	IPFR_CMPSZ	(offsetof(ipfr_t, ipfr_pass) - \
59			 offsetof(ipfr_t, ipfr_ifp))
60
61extern	ipfr_t	*ipfr_list, **ipfr_tail;
62extern	ipfr_t	*ipfr_natlist, **ipfr_nattail;
63extern	int	ipfr_size;
64extern	int	fr_ipfrttl;
65extern	int	fr_frag_lock;
66extern	int	fr_fraginit __P((void));
67extern	void	fr_fragunload __P((void));
68extern	ipfrstat_t	*fr_fragstats __P((void));
69
70extern	int	fr_newfrag __P((fr_info_t *, u_32_t));
71extern	frentry_t *fr_knownfrag __P((fr_info_t *, u_32_t *));
72
73extern	int	fr_nat_newfrag __P((fr_info_t *, u_32_t, struct nat *));
74extern	nat_t	*fr_nat_knownfrag __P((fr_info_t *));
75
76extern	int	fr_ipid_newfrag __P((fr_info_t *, u_32_t));
77extern	u_32_t	fr_ipid_knownfrag __P((fr_info_t *));
78#ifdef USE_MUTEXES
79extern	void	fr_fragderef __P((ipfr_t **, ipfrwlock_t *));
80extern	int	fr_nextfrag __P((ipftoken_t *, ipfgeniter_t *, ipfr_t **, \
81				 ipfr_t ***, ipfrwlock_t *));
82#else
83extern	void	fr_fragderef __P((ipfr_t **));
84extern	int	fr_nextfrag __P((ipftoken_t *, ipfgeniter_t *, ipfr_t **, \
85				 ipfr_t ***));
86#endif
87
88extern	void	fr_forget __P((void *));
89extern	void	fr_forgetnat __P((void *));
90extern	void	fr_fragclear __P((void));
91extern	void	fr_fragexpire __P((void));
92
93#if     defined(_KERNEL) && ((BSD >= 199306) || SOLARIS || defined(__sgi) \
94	        || defined(__osf__) || (defined(__sgi) && (IRIX >= 60500)))
95# if defined(SOLARIS2) && (SOLARIS2 < 7)
96extern	void	fr_slowtimer __P((void));
97# else
98extern	void	fr_slowtimer __P((void *));
99# endif
100#else
101# if defined(linux) && defined(_KERNEL)
102extern	void	fr_slowtimer __P((long));
103# else
104extern	int	fr_slowtimer __P((void));
105# endif
106#endif
107
108#endif	/* __IP_FRAG_H__ */
109