xref: /netbsd-src/sys/external/bsd/ipf/netinet/ip_frag.h (revision 13885a665959c62f13a82b3caedf986eaa17aa31)
1*13885a66Sdarrenr /*	$NetBSD: ip_frag.h,v 1.3 2012/07/22 14:27:51 darrenr Exp $	*/
2c2aa585cSchristos 
3c2aa585cSchristos /*
4*13885a66Sdarrenr  * Copyright (C) 2012 by Darren Reed.
5c2aa585cSchristos  *
6c2aa585cSchristos  * See the IPFILTER.LICENCE file for details on licencing.
7c2aa585cSchristos  *
8c2aa585cSchristos  * @(#)ip_frag.h	1.5 3/24/96
9*13885a66Sdarrenr  * Id: ip_frag.h,v 1.1.1.2 2012/07/22 13:45:17 darrenr Exp
10c2aa585cSchristos  */
11c2aa585cSchristos 
120c6adecaSchristos #ifndef _NETINET_IP_FRAG_H_
130c6adecaSchristos #define _NETINET_IP_FRAG_H_
14c2aa585cSchristos 
15c2aa585cSchristos #define	IPFT_SIZE	257
16c2aa585cSchristos 
17c2aa585cSchristos typedef	struct	ipfr	{
18c2aa585cSchristos 	struct	ipfr	*ipfr_hnext, **ipfr_hprev;
19c2aa585cSchristos 	struct	ipfr	*ipfr_next, **ipfr_prev;
20c2aa585cSchristos 	void	*ipfr_data;
21c2aa585cSchristos 	frentry_t *ipfr_rule;
22c2aa585cSchristos 	u_long	ipfr_ttl;
23c2aa585cSchristos 	u_int	ipfr_pkts;
24c2aa585cSchristos 	u_int	ipfr_bytes;
25c2aa585cSchristos 	u_int	ipfr_badorder;
26c2aa585cSchristos 	int	ipfr_ref;
27c2aa585cSchristos 	u_short	ipfr_off;
28c2aa585cSchristos 	u_short	ipfr_firstend;
29c2aa585cSchristos 	u_char	ipfr_p;
30c2aa585cSchristos 	u_char	ipfr_seen0;
31c2aa585cSchristos 	/*
32c2aa585cSchristos 	 * All of the fields, from ipfr_ifp to ipfr_pass, are compared
33c2aa585cSchristos 	 * using bcmp to see if an identical entry is present.  It is
34c2aa585cSchristos 	 * therefore important for this set to remain together.
35c2aa585cSchristos 	 */
36c2aa585cSchristos 	void	*ipfr_ifp;
37c2aa585cSchristos 	i6addr_t	ipfr_source;
38c2aa585cSchristos 	i6addr_t	ipfr_dest;
39c2aa585cSchristos 	u_32_t	ipfr_optmsk;
40c2aa585cSchristos 	u_short	ipfr_secmsk;
41c2aa585cSchristos 	u_short	ipfr_auth;
42c2aa585cSchristos 	u_32_t	ipfr_id;
43c2aa585cSchristos 	u_32_t	ipfr_pass;
44c2aa585cSchristos 	int	ipfr_v;
45c2aa585cSchristos } ipfr_t;
46c2aa585cSchristos 
47c2aa585cSchristos #define	ipfr_src	ipfr_source.in4
48c2aa585cSchristos #define	ipfr_dst	ipfr_dest.in4
49c2aa585cSchristos 
50c2aa585cSchristos 
51c2aa585cSchristos typedef	struct	ipfrstat {
52c2aa585cSchristos 	u_long	ifs_exists;	/* add & already exists */
53c2aa585cSchristos 	u_long	ifs_nomem;
54c2aa585cSchristos 	u_long	ifs_new;
55c2aa585cSchristos 	u_long	ifs_hits;
56c2aa585cSchristos 	u_long	ifs_expire;
57c2aa585cSchristos 	u_long	ifs_inuse;
58c2aa585cSchristos 	u_long	ifs_retrans0;
59c2aa585cSchristos 	u_long	ifs_short;
60c2aa585cSchristos 	u_long	ifs_bad;
61c2aa585cSchristos 	u_long	ifs_overlap;
62c2aa585cSchristos 	u_long	ifs_unordered;
63c2aa585cSchristos 	u_long	ifs_strict;
64c2aa585cSchristos 	u_long	ifs_miss;
65c2aa585cSchristos 	u_long	ifs_maximum;
66c2aa585cSchristos 	u_long	ifs_newbad;
67c2aa585cSchristos 	u_long	ifs_newrestrictnot0;
68c2aa585cSchristos 	struct	ipfr	**ifs_table;
69c2aa585cSchristos 	struct	ipfr	**ifs_nattab;
70c2aa585cSchristos } ipfrstat_t;
71c2aa585cSchristos 
72c2aa585cSchristos #define	IPFR_CMPSZ	(offsetof(ipfr_t, ipfr_pass) - \
73c2aa585cSchristos 			 offsetof(ipfr_t, ipfr_ifp))
74c2aa585cSchristos 
750c6adecaSchristos extern	void	*ipf_frag_soft_create(ipf_main_softc_t *);
760c6adecaSchristos extern	int	ipf_frag_soft_init(ipf_main_softc_t *, void *);
770c6adecaSchristos extern	int	ipf_frag_soft_fini(ipf_main_softc_t *, void *);
780c6adecaSchristos extern	void	ipf_frag_soft_destroy(ipf_main_softc_t *, void *);
790c6adecaSchristos extern	int	ipf_frag_main_load(void);
800c6adecaSchristos extern	int	ipf_frag_main_unload(void);
810c6adecaSchristos extern	int	ipf_frag_load(void);
820c6adecaSchristos extern	void	ipf_frag_clear(ipf_main_softc_t *);
830c6adecaSchristos extern	void	ipf_frag_expire(ipf_main_softc_t *);
840c6adecaSchristos extern	void	ipf_frag_forget(void *);
850c6adecaSchristos extern	int	ipf_frag_init(void);
860c6adecaSchristos extern	u_32_t	ipf_frag_ipidknown(fr_info_t *);
870c6adecaSchristos extern	int	ipf_frag_ipidnew(fr_info_t *, u_32_t);
880c6adecaSchristos extern	frentry_t *ipf_frag_known(fr_info_t *, u_32_t *);
890c6adecaSchristos extern	void	ipf_frag_natforget(ipf_main_softc_t *, void *);
900c6adecaSchristos extern	int	ipf_frag_natnew(ipf_main_softc_t *, fr_info_t *, u_32_t, struct nat *);
910c6adecaSchristos extern	nat_t	*ipf_frag_natknown(fr_info_t *);
920c6adecaSchristos extern	int	ipf_frag_new(ipf_main_softc_t *, fr_info_t *, u_32_t);
930c6adecaSchristos extern	ipfrstat_t	*ipf_frag_stats(void *);
940c6adecaSchristos extern	void	ipf_frag_setlock(void *, int);
950c6adecaSchristos extern	void	ipf_frag_pkt_deref(ipf_main_softc_t *, void *);
960c6adecaSchristos extern	int	ipf_frag_pkt_next(ipf_main_softc_t *, ipftoken_t *,
970c6adecaSchristos 				       ipfgeniter_t *);
980c6adecaSchristos extern	void	ipf_frag_nat_deref(ipf_main_softc_t *, void *);
990c6adecaSchristos extern	int	ipf_frag_nat_next(ipf_main_softc_t *, ipftoken_t *,
1000c6adecaSchristos 				       ipfgeniter_t *);
1010c6adecaSchristos extern	void	ipf_slowtimer(ipf_main_softc_t *);
102c2aa585cSchristos 
1030c6adecaSchristos #endif /* _NETINET_IP_FRAG_H_ */
104