xref: /netbsd/sys/external/bsd/ipf/netinet/ip_lookup.h (revision f52ace7a)
1 /*	$NetBSD: ip_lookup.h,v 1.3 2012/07/22 14:27:51 darrenr Exp $	*/
2 
3 /*
4  * Copyright (C) 2012 by Darren Reed.
5  *
6  * See the IPFILTER.LICENCE file for details on licencing.
7  *
8  * Id: ip_lookup.h,v 1.1.1.2 2012/07/22 13:45:21 darrenr Exp
9  */
10 #ifndef __IP_LOOKUP_H__
11 #define __IP_LOOKUP_H__
12 
13 #if defined(__STDC__) || defined(__GNUC__) || defined(_AIX51)
14 # define	SIOCLOOKUPADDTABLE	_IOWR('r', 60, struct iplookupop)
15 # define	SIOCLOOKUPDELTABLE	_IOWR('r', 61, struct iplookupop)
16 # define	SIOCLOOKUPSTAT		_IOWR('r', 64, struct iplookupop)
17 # define	SIOCLOOKUPSTATW		_IOW('r', 64, struct iplookupop)
18 # define	SIOCLOOKUPFLUSH		_IOWR('r', 65, struct iplookupflush)
19 # define	SIOCLOOKUPADDNODE	_IOWR('r', 67, struct iplookupop)
20 # define	SIOCLOOKUPADDNODEW	_IOW('r', 67, struct iplookupop)
21 # define	SIOCLOOKUPDELNODE	_IOWR('r', 68, struct iplookupop)
22 # define	SIOCLOOKUPDELNODEW	_IOW('r', 68, struct iplookupop)
23 #else
24 # define	SIOCLOOKUPADDTABLE	_IOWR(r, 60, struct iplookupop)
25 # define	SIOCLOOKUPDELTABLE	_IOWR(r, 61, struct iplookupop)
26 # define	SIOCLOOKUPSTAT		_IOWR(r, 64, struct iplookupop)
27 # define	SIOCLOOKUPSTATW		_IOW(r, 64, struct iplookupop)
28 # define	SIOCLOOKUPFLUSH		_IOWR(r, 65, struct iplookupflush)
29 # define	SIOCLOOKUPADDNODE	_IOWR(r, 67, struct iplookupop)
30 # define	SIOCLOOKUPADDNODEW	_IOW(r, 67, struct iplookupop)
31 # define	SIOCLOOKUPDELNODE	_IOWR(r, 68, struct iplookupop)
32 # define	SIOCLOOKUPDELNODEW	_IOW(r, 68, struct iplookupop)
33 #endif
34 
35 #define	LOOKUP_POOL_MAX	(IPL_LOGSIZE)
36 #define	LOOKUP_POOL_SZ	(IPL_LOGSIZE + 1)
37 
38 typedef	struct	iplookupop	{
39 	int	iplo_type;	/* IPLT_* */
40 	int	iplo_unit;	/* IPL_LOG* */
41 	u_int	iplo_arg;
42 	char	iplo_name[FR_GROUPLEN];
43 	size_t	iplo_size;	/* sizeof struct at iplo_struct */
44 	void	*iplo_struct;
45 } iplookupop_t;
46 
47 #define	LOOKUP_ANON	0x80000000
48 
49 
50 typedef	struct	iplookupflush	{
51 	int	iplf_type;	/* IPLT_* */
52 	int	iplf_unit;	/* IPL_LOG* */
53 	u_int	iplf_arg;
54 	u_int	iplf_count;
55 	char	iplf_name[FR_GROUPLEN];
56 } iplookupflush_t;
57 
58 typedef	struct	iplookuplink	{
59 	int	ipll_type;	/* IPLT_* */
60 	int	ipll_unit;	/* IPL_LOG* */
61 	u_int	ipll_num;
62 	char	ipll_group[FR_GROUPLEN];
63 } iplookuplink_t;
64 
65 #define	IPLT_ALL	-1
66 #define	IPLT_NONE	0
67 #define	IPLT_POOL	1
68 #define	IPLT_HASH	2
69 #define	IPLT_DSTLIST	3
70 
71 
72 #define	IPLT_ANON	0x80000000
73 
74 
75 typedef	union	{
76 	struct	iplookupiterkey {
77 		u_char	ilik_ival;
78 		u_char	ilik_type;	/* IPLT_* */
79 		u_char	ilik_otype;
80 		signed char	ilik_unit;	/* IPL_LOG* */
81 	} ilik_unstr;
82 	u_32_t	ilik_key;
83 } iplookupiterkey_t;
84 
85 typedef	struct	ipflookupiter	{
86 	int			ili_nitems;
87 	iplookupiterkey_t	ili_lkey;
88 	char			ili_name[FR_GROUPLEN];
89 	void			*ili_data;
90 } ipflookupiter_t;
91 
92 #define	ili_key		ili_lkey.ilik_key
93 #define	ili_ival	ili_lkey.ilik_unstr.ilik_ival
94 #define	ili_unit	ili_lkey.ilik_unstr.ilik_unit
95 #define	ili_type	ili_lkey.ilik_unstr.ilik_type
96 #define	ili_otype	ili_lkey.ilik_unstr.ilik_otype
97 
98 #define	IPFLOOKUPITER_LIST	0
99 #define	IPFLOOKUPITER_NODE	1
100 
101 
102 typedef struct ipf_lookup {
103 	int	ipfl_type;
104 	void	*(*ipfl_create)(ipf_main_softc_t *);
105 	void	(*ipfl_destroy)(ipf_main_softc_t *, void *);
106 	int	(*ipfl_init)(ipf_main_softc_t *, void *);
107 	void	(*ipfl_fini)(ipf_main_softc_t *, void *);
108 	int	(*ipfl_addr_find)(ipf_main_softc_t *, void *,
109 				       int, void *, u_int);
110 	size_t	(*ipfl_flush)(ipf_main_softc_t *, void *,
111 				   iplookupflush_t *);
112 	int	(*ipfl_iter_deref)(ipf_main_softc_t *, void *,
113 					int, int, void *);
114 	int	(*ipfl_iter_next)(ipf_main_softc_t *, void *,
115 				       ipftoken_t *, ipflookupiter_t *);
116 	int	(*ipfl_node_add)(ipf_main_softc_t *, void *,
117 				      iplookupop_t *, int);
118 	int	(*ipfl_node_del)(ipf_main_softc_t *, void *,
119 				      iplookupop_t *, int);
120 	int	(*ipfl_stats_get)(ipf_main_softc_t *, void *,
121 				       iplookupop_t *);
122 	int	(*ipfl_table_add)(ipf_main_softc_t *, void *,
123 				       iplookupop_t *);
124 	int	(*ipfl_table_del)(ipf_main_softc_t *, void *,
125 				       iplookupop_t *);
126 	int	(*ipfl_table_deref)(ipf_main_softc_t *, void *, void *);
127 	void	*(*ipfl_table_find)(void *, int, char *);
128 	void	*(*ipfl_select_add_ref)(void *, int, char *);
129 	int	(*ipfl_select_node)(fr_info_t *, void *, u_32_t *,
130 					 frdest_t *);
131 	void	(*ipfl_expire)(ipf_main_softc_t *, void *);
132 	void	(*ipfl_sync)(ipf_main_softc_t *, void *);
133 } ipf_lookup_t;
134 
135 extern int ipf_lookup_init(void);
136 extern int ipf_lookup_ioctl(ipf_main_softc_t *, void *, ioctlcmd_t, int, int, void *);
137 extern void ipf_lookup_main_unload(void);
138 extern void ipf_lookup_deref(ipf_main_softc_t *, int, void *);
139 extern void ipf_lookup_iterderef(ipf_main_softc_t *, u_32_t, void *);
140 extern void *ipf_lookup_res_name(ipf_main_softc_t *, int, u_int, char *,
141 				      lookupfunc_t *);
142 extern void *ipf_lookup_res_num(ipf_main_softc_t *, int, u_int, u_int,
143 				     lookupfunc_t *);
144 extern void ipf_lookup_soft_destroy(ipf_main_softc_t *, void *);
145 extern void *ipf_lookup_soft_create(ipf_main_softc_t *);
146 extern int ipf_lookup_soft_init(ipf_main_softc_t *, void *);
147 extern int ipf_lookup_soft_fini(ipf_main_softc_t *, void *);
148 extern void *ipf_lookup_find_htable(ipf_main_softc_t *, int, char *);
149 extern void ipf_lookup_expire(ipf_main_softc_t *);
150 extern void ipf_lookup_sync(ipf_main_softc_t *, void *);
151 #ifndef _KERNEL
152 extern	void	ipf_lookup_dump(ipf_main_softc_t *, void *);
153 #endif
154 #endif /* __IP_LOOKUP_H__ */
155