include/rp.h
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- EXTDEF
- EXTDEF
- EXTDEF
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;
/* [<][>][^][v][top][bottom][index][help] */
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;
/* [<][>][^][v][top][bottom][index][help] */
83 extern rw_lock_t rx_forest_rwlock;
84 #endif
85
86 EXTDEF (GList *rx_forest, NULL) /* linked list of trees */
/* [<][>][^][v][top][bottom][index][help] */
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 */