1 /* $FreeBSD$ */
2
3 /*
4 * Copyright (C) 2012 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
18 typedef 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 u_int ipfr_pkts;
25 u_int ipfr_bytes;
26 u_int ipfr_badorder;
27 int ipfr_ref;
28 u_short ipfr_off;
29 u_short ipfr_firstend;
30 u_char ipfr_p;
31 u_char ipfr_seen0;
32 /*
33 * All of the fields, from ipfr_ifp to ipfr_pass, are compared
34 * using bcmp to see if an identical entry is present. It is
35 * therefore important for this set to remain together.
36 */
37 void *ipfr_ifp;
38 i6addr_t ipfr_source;
39 i6addr_t ipfr_dest;
40 u_32_t ipfr_optmsk;
41 u_short ipfr_secmsk;
42 u_short ipfr_auth;
43 u_32_t ipfr_id;
44 u_32_t ipfr_pass;
45 int ipfr_v;
46 } ipfr_t;
47
48 #define ipfr_src ipfr_source.in4
49 #define ipfr_dst ipfr_dest.in4
50
51
52 typedef struct ipfrstat {
53 u_long ifs_exists; /* add & already exists */
54 u_long ifs_nomem;
55 u_long ifs_new;
56 u_long ifs_hits;
57 u_long ifs_expire;
58 u_long ifs_inuse;
59 u_long ifs_retrans0;
60 u_long ifs_short;
61 u_long ifs_bad;
62 u_long ifs_overlap;
63 u_long ifs_unordered;
64 u_long ifs_strict;
65 u_long ifs_miss;
66 u_long ifs_maximum;
67 u_long ifs_newbad;
68 u_long ifs_newrestrictnot0;
69 struct ipfr **ifs_table;
70 struct ipfr **ifs_nattab;
71 } ipfrstat_t;
72
73 typedef struct ipf_frag_softc_s {
74 ipfrwlock_t ipfr_ipidfrag;
75 ipfrwlock_t ipfr_frag;
76 ipfrwlock_t ipfr_natfrag;
77 int ipfr_size;
78 int ipfr_ttl;
79 int ipfr_lock;
80 int ipfr_inited;
81 ipftuneable_t *ipf_frag_tune;
82 ipfr_t *ipfr_list;
83 ipfr_t **ipfr_tail;
84 ipfr_t *ipfr_natlist;
85 ipfr_t **ipfr_nattail;
86 ipfr_t *ipfr_ipidlist;
87 ipfr_t **ipfr_ipidtail;
88 ipfr_t **ipfr_heads;
89 ipfr_t **ipfr_nattab;
90 ipfr_t **ipfr_ipidtab;
91 ipfrstat_t ipfr_stats;
92 } ipf_frag_softc_t;
93
94 #define IPFR_CMPSZ (offsetof(ipfr_t, ipfr_pass) - \
95 offsetof(ipfr_t, ipfr_ifp))
96
97 extern void *ipf_frag_soft_create(ipf_main_softc_t *);
98 extern int ipf_frag_soft_init(ipf_main_softc_t *, void *);
99 extern int ipf_frag_soft_fini(ipf_main_softc_t *, void *);
100 extern void ipf_frag_soft_destroy(ipf_main_softc_t *, void *);
101 extern int ipf_frag_main_load(void);
102 extern int ipf_frag_main_unload(void);
103 extern int ipf_frag_load(void);
104 extern void ipf_frag_clear(ipf_main_softc_t *);
105 extern void ipf_frag_expire(ipf_main_softc_t *);
106 extern void ipf_frag_forget(void *);
107 extern int ipf_frag_init(void);
108 extern u_32_t ipf_frag_ipidknown(fr_info_t *);
109 extern int ipf_frag_ipidnew(fr_info_t *, u_32_t);
110 extern frentry_t *ipf_frag_known(fr_info_t *, u_32_t *);
111 extern void ipf_frag_natforget(ipf_main_softc_t *, void *);
112 extern int ipf_frag_natnew(ipf_main_softc_t *, fr_info_t *, u_32_t, struct nat *);
113 extern nat_t *ipf_frag_natknown(fr_info_t *);
114 extern int ipf_frag_new(ipf_main_softc_t *, fr_info_t *, u_32_t);
115 extern ipfrstat_t *ipf_frag_stats(void *);
116 extern void ipf_frag_setlock(void *, int);
117 extern void ipf_frag_pkt_deref(ipf_main_softc_t *, void *);
118 extern int ipf_frag_pkt_next(ipf_main_softc_t *, ipftoken_t *,
119 ipfgeniter_t *);
120 extern void ipf_frag_nat_deref(ipf_main_softc_t *, void *);
121 extern int ipf_frag_nat_next(ipf_main_softc_t *, ipftoken_t *,
122 ipfgeniter_t *);
123 extern void ipf_slowtimer(ipf_main_softc_t *);
124
125 #endif /* __IP_FRAG_H__ */
Cache object: f6f29202577b3bae9b0bea4f23924fa2
|