]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/contrib/ipfilter/netinet/ip_lookup.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / contrib / ipfilter / netinet / ip_lookup.h
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__ */