1 | /***************************************
2 | $Revision: 1.8 $
3 |
4 | Radix tree (rx). rx_global.h - header file with definition of
5 | global vars for radix
6 |
7 | Status: NOT REVUED, TESTED, INCOMPLETE
8 |
9 | Design and implementation by: Marek Bukowy
10 |
11 | ******************/ /******************
12 | Copyright (c) 1999 RIPE NCC
13 |
14 | All Rights Reserved
15 |
16 | Permission to use, copy, modify, and distribute this software and its
17 | documentation for any purpose and without fee is hereby granted,
18 | provided that the above copyright notice appear in all copies and that
19 | both that copyright notice and this permission notice appear in
20 | supporting documentation, and that the name of the author not be
21 | used in advertising or publicity pertaining to distribution of the
22 | software without specific, written prior permission.
23 |
24 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
25 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
26 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
27 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
28 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
29 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
30 | ***************************************/
31 |
32 | #ifndef RP_H
33 | #define RP_H
34 |
35 | #include <stddef.h> /* definition of NULL */
36 | #include <glib.h>
37 | #include <pthread.h>
38 | /*#include <DF_attribute_enum.def> / * attribute codes */
39 |
40 | #include <defs.h>
41 |
42 | #include <iproutines.h>
43 | #include <erroutines.h>
44 | #include <rxroutines.h>
45 | #include <mysql_driver.h>
46 |
47 |
48 | #include "ca_defs.h"
49 | #include <thread.h>
50 |
51 |
52 | typedef struct {
53 | rx_fam_t fam;
54 | ip_space_t space;
55 | union {
56 | ip_prefix_t rt;
57 | ip_range_t in;
58 | } u;
59 | } rp_uni_t;
60 |
61 |
62 |
63 | typedef ca_dbSource_t * rp_regid_t;
64 | typedef A_Type_t rp_attr_t;
65 |
66 |
67 | typedef struct {
68 | rp_attr_t type;
69 | rp_uni_t uni;
70 | sql_key_t key;
71 | union {
72 | char *origin;
73 | char *domain;
74 | } d;
75 | } rp_upd_pack_t;
76 |
77 | #ifdef RP_IMPL
78 | #define EXTDEF(a,b) a = b;
79 | /* forest read write lock */
80 | rw_lock_t rx_forest_rwlock = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 };
81 | #else
82 | #define EXTDEF(a,b) extern a;
83 | extern rw_lock_t rx_forest_rwlock;
84 | #endif
85 |
86 | EXTDEF (GList *rx_forest, NULL) /* linked list of trees */
87 |
88 | typedef struct {
89 | rp_regid_t reg_id; /*+ registry id +*/
90 | rp_attr_t attr; /*+ extra tree attribute (within the same reg/spc/fam), allows
91 | using the same tree type for different object trees +*/
92 |
93 | rx_tree_t *tree; /*+ tree +*/
94 | } rp_tentry_t;
95 |
96 | er_ret_t RP_asc_load(char *filename, int maxobj,
97 | int operation, rp_regid_t reg_id);
98 | er_ret_t
99 | RP_tree_get ( rx_tree_t **treeptr, /*+ answer goes here, please +*/
100 | rp_regid_t reg_id, /*+ id of the registry +*/
101 | ip_space_t spc_id, /*+ type of space (ipv4/ipv6) +*/
102 | rp_attr_t attr /*+ extra tree id (within the same reg/spc/fam +*/
103 | );
104 | er_ret_t
105 | RP_tree_add (
106 | rp_regid_t reg_id, /*+ id of the registry +*/
107 | rp_attr_t attr, /*+ extra tree id (within the same registry/space/family +*/
108 | char *prefixstr, /*+ prefix the tree will cover (string) +*/
109 | rx_mem_mt mem_mode, /* memory only, memory+sql, sql only +*/
110 | rx_subtree_mt subtrees /*+ one of NONE, AUTO, HAND +*/
111 | );
112 |
113 | er_ret_t
114 | RP_tree_del (rx_tree_t *treeptr); /* pointer to a tree structrute */
115 |
116 | er_ret_t
117 | RP_init_trees( rp_regid_t reg_id );
118 |
119 |
120 | er_ret_t
121 | RP_asc_search (
122 | rx_srch_mt search_mode,
123 | int par_a,
124 | int par_b,
125 | char *key, /*+ search term: (string) prefix/range/IP +*/
126 | rp_regid_t reg_id,
127 | rp_attr_t attr, /*+ extra tree id (within the same reg/spc/fam +*/
128 | GList **anslist, /*+ answers go here, please +*/
129 | int max_count /*+ max # of answers. RX_ALLANS == unlimited +*/
130 | );
131 | er_ret_t
132 | RP_uni_node ( rx_oper_mt mode, /*+ MODE={cre|mod|del} +*/
133 | rp_uni_t *uni, /*+ unified argument structure +*/
134 | rp_attr_t attr, /*+ additional tree attribute +*/
135 | rp_regid_t reg_id, /*+ id of the registry +*/
136 | void *data, /*+ pointer to the payload +*/
137 | unsigned datalen, /*+ length of the payload +*/
138 | sql_key_t key /*+ the key to the SQL full-text +*/
139 | );
140 | er_ret_t
141 | RP_asc_node( rx_oper_mt mode, /*+ MODE={cre|mod|del} +*/
142 | char *rangstr, /*+ string prefix/range/IP/inaddr +*/
143 | rp_attr_t attr, /*+ additional tree attribute +*/
144 | rp_regid_t reg_id, /*+ id of the registry +*/
145 | void *data, /*+ pointer to the payload +*/
146 | unsigned datalen, /*+ length of the payload +*/
147 | sql_key_t key /*+ the key to the SQL full-text +*/
148 | );
149 |
150 | rx_fam_t RP_attr2fam( rp_attr_t type );
151 | int RP_attr2spc(rp_attr_t type, ip_space_t space);
152 | er_ret_t
153 | RP_asc2uni(char *astr, /*+ string prefix/range/IP/inaddr +*/
154 | rp_attr_t attr,
155 | rp_uni_t *uni); /* destination pointer */
156 | er_ret_t
157 | RP_asc2pack(rp_upd_pack_t *pack, rp_attr_t type, char *string);
158 |
159 |
160 | void RP_pack_set_orig( rp_attr_t attr,rp_upd_pack_t *pack, char *origin);
161 | void RP_pack_set_pref4(rp_attr_t attr,char *avalue, rp_upd_pack_t *pack,
162 | unsigned *prefix, unsigned *prefix_length);
163 | void RP_pack_set_revd( rp_attr_t attr,char *avalue, rp_upd_pack_t *pack);
164 | void RP_pack_set_pref6(rp_attr_t attr,char *avalue, rp_upd_pack_t *pack,
165 | ip_v6word_t *high, ip_v6word_t *low, unsigned *prefix_length);
166 | void RP_pack_set_rang( rp_attr_t attr,char *avalue, rp_upd_pack_t *pack,
167 | unsigned *begin_in, unsigned *end_in);
168 |
169 | er_ret_t
170 | RP_pack_update(rx_oper_mt mode,
171 | rp_upd_pack_t *pack,
172 | rp_regid_t reg_id); /*+ id of the registry +*/
173 |
174 |
175 | er_ret_t
176 | RP_pack_node(rx_oper_mt mode,
177 | rp_upd_pack_t *pack,
178 | rp_regid_t reg_id);
179 | er_ret_t
180 | RP_pack_node_l(rx_oper_mt mode,
181 | rp_upd_pack_t *pack,
182 | rx_tree_t *mytree);
183 |
184 | void rp_make_short(rp_upd_pack_t *pack, char **ptr, unsigned *len);
185 |
186 | er_ret_t RP_sql_load_reg(rp_regid_t reg_id);
187 | er_ret_t RP_asc_load(char *filename, int maxobj, int operation,
188 | rp_regid_t reg_id);
189 | int RP_attr2spc(rp_attr_t type, ip_space_t space);
190 | #undef EXTDEF
191 | #endif /* RP_H */