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