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