]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/contrib/ipfilter/netinet/ip_frag.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / contrib / ipfilter / netinet / ip_frag.h
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         ipfr_t          *ipfr_list;
82         ipfr_t          **ipfr_tail;
83         ipfr_t          *ipfr_natlist;
84         ipfr_t          **ipfr_nattail;
85         ipfr_t          *ipfr_ipidlist;
86         ipfr_t          **ipfr_ipidtail;
87         ipfr_t          **ipfr_heads;
88         ipfr_t          **ipfr_nattab;
89         ipfr_t          **ipfr_ipidtab;
90         ipfrstat_t      ipfr_stats;
91 } ipf_frag_softc_t;
92
93 #define IPFR_CMPSZ      (offsetof(ipfr_t, ipfr_pass) - \
94                          offsetof(ipfr_t, ipfr_ifp))
95
96 extern  void    *ipf_frag_soft_create __P((ipf_main_softc_t *));
97 extern  int     ipf_frag_soft_init __P((ipf_main_softc_t *, void *));
98 extern  int     ipf_frag_soft_fini __P((ipf_main_softc_t *, void *));
99 extern  void    ipf_frag_soft_destroy __P((ipf_main_softc_t *, void *));
100 extern  int     ipf_frag_main_load __P((void));
101 extern  int     ipf_frag_main_unload __P((void));
102 extern  int     ipf_frag_load __P((void));
103 extern  void    ipf_frag_clear __P((ipf_main_softc_t *));
104 extern  void    ipf_frag_expire __P((ipf_main_softc_t *));
105 extern  void    ipf_frag_forget __P((void *));
106 extern  int     ipf_frag_init __P((void));
107 extern  u_32_t  ipf_frag_ipidknown __P((fr_info_t *));
108 extern  int     ipf_frag_ipidnew __P((fr_info_t *, u_32_t));
109 extern  frentry_t *ipf_frag_known __P((fr_info_t *, u_32_t *));
110 extern  void    ipf_frag_natforget __P((ipf_main_softc_t *, void *));
111 extern  int     ipf_frag_natnew __P((ipf_main_softc_t *, fr_info_t *, u_32_t, struct nat *));
112 extern  nat_t   *ipf_frag_natknown __P((fr_info_t *));
113 extern  int     ipf_frag_new __P((ipf_main_softc_t *, fr_info_t *, u_32_t));
114 extern  ipfrstat_t      *ipf_frag_stats __P((void *));
115 extern  void    ipf_frag_setlock __P((void *, int));
116 extern  void    ipf_frag_pkt_deref __P((ipf_main_softc_t *, void *));
117 extern  int     ipf_frag_pkt_next __P((ipf_main_softc_t *, ipftoken_t *,
118                                        ipfgeniter_t *));
119 extern  void    ipf_frag_nat_deref __P((ipf_main_softc_t *, void *));
120 extern  int     ipf_frag_nat_next __P((ipf_main_softc_t *, ipftoken_t *,
121                                        ipfgeniter_t *));
122 extern  void    ipf_slowtimer __P((ipf_main_softc_t *));
123
124 #endif  /* __IP_FRAG_H__ */