1 | #ifndef READ_OBJECTS
2 | #define READ_OBJECTS
3 |
4 | /***************************************
5 | $Revision: 1.6 $
6 |
7 | Objects module (ob) - this _should_ eventually get merged in with the
8 | config module.
9 |
10 | Status: NOT REVUED, NOT TESTED
11 |
12 | ******************/ /******************
13 | Copyright (c) 1999 RIPE NCC
14 |
15 | All Rights Reserved
16 |
17 | Permission to use, copy, modify, and distribute this software and its
18 | documentation for any purpose and without fee is hereby granted,
19 | provided that the above copyright notice appear in all copies and that
20 | both that copyright notice and this permission notice appear in
21 | supporting documentation, and that the name of the author not be
22 | used in advertising or publicity pertaining to distribution of the
23 | software without specific, written prior permission.
24 |
25 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
26 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
27 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
28 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
29 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
30 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
31 | ***************************************/
32 | #include "bitmask.h"
33 | #include "attributes.h"
34 |
35 | /*
36 | NB. These were grabbed from /ncc/dbcon/config-2.1.3 on (Tue Jul 6 15:20:10 CEST 1999)
37 |
38 | # ATSQ - all defined attributes in this object, also defines print order
39 | # MAND - these attributes are mandatory
40 | # MULT - these attributes can appear more than once per object
41 | # UNIQ - these attributes define the unique key
42 | # KEYS - these attributes define all possible keys
43 | # REC - these attributes must be looked up if referenced
44 | # INV - these attributes may be used in inverse look-ups
45 | */
46 | typedef struct Object_t {
47 | AT_Type attr_index;
48 | char *description;
49 | int attr_order[100]; /* XXX Don't need - because order is not important. */
50 | mask_t ATSQ;
51 | mask_t MAND;
52 | mask_t MULT;
53 | mask_t UNIQ;
54 | mask_t KEYS;
55 | mask_t REC;
56 | mask_t INV;
57 | } Object;
58 |
59 | /* Objects */
60 |
61 | #define OBJECT_MASK A_AN, A_AS, A_DC, A_DN, A_FS, A_KC, A_I6, A_IN, A_IR, A_IS, A_LI, A_MT, A_PN, A_PS, A_RO, A_RS, A_RT, MA_END
62 |
63 | /*
64 | * aut_nums
65 | */
66 | #define O_AN 0
67 | /* XXX - some undefined attributes.
68 | #define O_AN_ATSQ A_AN, A_AA, A_DE, A_AI, A_AO, A_CN, A_CT, A_IT, A_IO, A_AE, A_AV, A_DF, A_GD, A_AC, A_TC, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
69 | */
70 | #define O_AN_ATSQ A_AN, A_AA, A_DE, A_CN, A_CT, A_DF, A_AC, A_TC, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
71 | #define O_AN_MAND A_AN, A_DE, A_AC, A_TC, A_MB, A_CH, A_SO, MA_END
72 | /* XXX - some undefined attributes.
73 | #define O_AN_MULT A_DE, A_AI, A_AO, A_CN, A_CT, A_IT, A_IO, A_AE, A_DF, A_AC, A_TC, A_RM, A_CH, A_NY, A_MB, MA_END
74 | */
75 | #define O_AN_MULT A_DE, A_CN, A_CT, A_DF, A_AC, A_TC, A_RM, A_CH, A_NY, A_MB, MA_END
76 | #define O_AN_UNIQ A_AN, MA_END
77 | #define O_AN_KEYS A_AN, MA_END
78 | #define O_AN_REC A_AC, A_TC, MA_END
79 | #define O_AN_INV A_AC, A_TC, A_NY, A_MB, MA_END
80 |
81 | /*
82 | * as_set
83 | */
84 | #define O_AS 1
85 | #define O_AS_ATSQ MA_END
86 | #define O_AS_MAND MA_END
87 | #define O_AS_MULT MA_END
88 | #define O_AS_UNIQ MA_END
89 | #define O_AS_KEYS MA_END
90 | #define O_AS_REC MA_END
91 | #define O_AS_INV MA_END
92 |
93 | /*
94 | * dictionary
95 | */
96 | #define O_DC 2
97 | #define O_DC_ATSQ MA_END
98 | #define O_DC_MAND MA_END
99 | #define O_DC_MULT MA_END
100 | #define O_DC_UNIQ MA_END
101 | #define O_DC_KEYS MA_END
102 | #define O_DC_REC MA_END
103 | #define O_DC_INV MA_END
104 |
105 | /*
106 | * domains
107 | */
108 | #define O_DN 3
109 | #define O_DN_ATSQ A_DN, A_DE, A_AC, A_TC, A_ZC, A_NS, A_SD, A_DI, A_RM, A_NY, A_MB, A_ML, A_RF, A_CH, A_SO, MA_END
110 | #define O_DN_MAND A_DN, A_DE, A_AC, A_TC, A_ZC, A_CH, A_SO, MA_END
111 | #define O_DN_MULT A_AC, A_CH, A_DE, A_DI, A_NS, A_RM, A_SD, A_TC, A_ZC, A_NY, A_MB, A_ML, MA_END
112 | #define O_DN_UNIQ A_DN, MA_END
113 | #define O_DN_KEYS A_DN, MA_END
114 | #define O_DN_REC A_AC, A_TC, A_ZC, MA_END
115 | #define O_DN_INV A_AC, A_TC, A_ZC, A_NS, A_SD, A_NY, A_MB, MA_END
116 |
117 | /*
118 | * filter_set
119 | */
120 | #define O_FS 4
121 | #define O_FS_ATSQ MA_END
122 | #define O_FS_MAND MA_END
123 | #define O_FS_MULT MA_END
124 | #define O_FS_UNIQ MA_END
125 | #define O_FS_KEYS MA_END
126 | #define O_FS_REC MA_END
127 | #define O_FS_INV MA_END
128 |
129 | /*
130 | * key_cert
131 | */
132 | #define O_KC 5
133 | #define O_KC_ATSQ MA_END
134 | #define O_KC_ATSQ MA_END
135 | #define O_KC_MAND MA_END
136 | #define O_KC_MULT MA_END
137 | #define O_KC_UNIQ MA_END
138 | #define O_KC_KEYS MA_END
139 | #define O_KC_REC MA_END
140 | #define O_KC_INV MA_END
141 |
142 | /*
143 | * inet6num (experimental IPv6 allocation/assignment object)
144 | * XXX NB Carefully check anything to do with IP6 - my vim macros don't like a number in the name. XXX - ottrey.
145 | */
146 | #define O_I6 6
147 | #define O_I6_ATSQ A_I6, A_NA, A_DE, A_CY, A_AC, A_TC, A_RZ, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
148 | #define O_I6_MAND A_I6, A_AC, A_CH, A_CY, A_DE, A_NA, A_SO, A_TC, MA_END
149 | #define O_I6_MULT A_AC, A_CH, A_DE, A_CY, A_RM, A_RZ, A_TC, A_NY, A_MB, MA_END
150 | #define O_I6_UNIQ A_I6
151 | #define O_I6_KEYS A_I6, A_NA, MA_END
152 | #define O_I6_REC A_AC, A_TC, MA_END
153 | #define O_I6_INV A_AC, A_TC, A_NY, A_MB, MA_END
154 |
155 | /*
156 | * inetnum
157 | */
158 | #define O_IN 7
159 | /* XXX - some undefined attributes.
160 | #define O_IN_ATSQ A_IN, A_NA, A_DE, A_CY, A_AC, A_TC, A_AS, A_CL, A_II, A_GW, A_RZ, A_ST, A_RM, A_NY, A_MB, A_ML, A_CH, A_SO, MA_END
161 | */
162 | #define O_IN_ATSQ A_IN, A_NA, A_DE, A_CY, A_AC, A_TC, A_AS, A_RZ, A_ST, A_RM, A_NY, A_MB, A_ML, A_CH, A_SO, MA_END
163 | #define O_IN_MAND A_AC, A_CH, A_DE, A_CY, A_IN, A_NA, A_SO, A_TC, A_ST, MA_END
164 | #define O_IN_MULT A_AC, A_CH, A_DE, A_CY, A_RM, A_RZ, A_TC, A_NY, A_MB, A_ML, MA_END
165 | #define O_IN_UNIQ A_IN, MA_END
166 | #define O_IN_KEYS A_IN, A_NA, MA_END
167 | #define O_IN_REC A_AC, A_TC, MA_END
168 | #define O_IN_INV A_AC, A_TC, A_NY, A_MB, MA_END
169 |
170 | /*
171 | * inet_rtr
172 | */
173 | #define O_IR 8
174 | #define O_IR_ATSQ A_IR, A_LA, A_IF, A_PE, A_AC, A_TC, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
175 | #define O_IR_MAND A_IR, A_LA, A_IF, A_TC, A_AC, A_MB, A_CH, A_SO, MA_END
176 | #define O_IR_MULT A_IF, A_PE, A_TC, A_AC, A_RM, A_NY, A_CH, A_MB, MA_END
177 | #define O_IR_UNIQ A_IR, MA_END
178 | #define O_IR_KEYS A_IR, A_IF, MA_END
179 | #define O_IR_REC A_TC, A_AC, MA_END
180 | #define O_IR_INV A_AC, A_TC, A_NY, A_MB, MA_END
181 |
182 | /*
183 | * rtr_set
184 | */
185 | #define O_IS 9
186 | #define O_IS_ATSQ MA_END
187 | #define O_IS_MAND MA_END
188 | #define O_IS_MULT MA_END
189 | #define O_IS_UNIQ MA_END
190 | #define O_IS_KEYS MA_END
191 | #define O_IS_REC MA_END
192 | #define O_IS_INV MA_END
193 |
194 | /*
195 | * limerick - RIPE special ;-)
196 | */
197 | #define O_LI 10
198 | #define O_LI_ATSQ A_LI, A_DE, A_TX, A_AC, A_AH, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
199 | #define O_LI_MAND A_LI, A_TX, A_AC, A_AH, A_CH, A_SO, A_MB, MA_END
200 | #define O_LI_MULT A_DE, A_TX, A_AC, A_AH, A_RM, A_NY, A_MB, A_CH, MA_END
201 | #define O_LI_UNIQ A_LI, MA_END
202 | #define O_LI_KEYS A_LI, MA_END
203 | #define O_LI_REC A_AH, MA_END
204 | #define O_LI_INV A_AH, A_NY, A_MB, MA_END
205 |
206 | /*
207 | * maintainer
208 | */
209 | #define O_MT 11
210 | #define O_MT_ATSQ A_MT, A_DE, A_AC, A_TC, A_DT, A_MN, A_AT, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
211 | #define O_MT_MAND A_MT, A_DE, A_AC, A_DT, A_AT, A_MB, A_CH, A_SO, MA_END
212 | #define O_MT_MULT A_DE, A_AC, A_TC, A_DT, A_MN, A_AT, A_RM, A_NY, A_MB, A_CH, MA_END
213 | #define O_MT_UNIQ A_MT, MA_END
214 | #define O_MT_KEYS A_MT, MA_END
215 | #define O_MT_REC A_AC, A_TC, MA_END
216 | #define O_MT_INV A_AC, A_TC, A_NY, A_MB, MA_END
217 |
218 | /*
219 | * person
220 | */
221 | #define O_PN 12
222 | #define O_PN_ATSQ A_PN, A_AD, A_PH, A_FX, A_EM, A_NH, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
223 | #define O_PN_MAND A_PN, A_AD, A_PH, A_NH, A_CH, A_SO, MA_END
224 | #define O_PN_MULT A_AD, A_CH, A_EM, A_FX, A_PH, A_RM, A_NY, A_MB, MA_END
225 | #define O_PN_UNIQ A_PN, A_NH, MA_END
226 | #define O_PN_KEYS A_PN, A_NH, A_EM, MA_END
227 | #define O_PN_REC MA_END
228 | #define O_PN_INV A_NY, A_MB, MA_END
229 |
230 | /*
231 | * peering_set
232 | */
233 | #define O_PS 13
234 | #define O_PS_ATSQ MA_END
235 | #define O_PS_MAND MA_END
236 | #define O_PS_MULT MA_END
237 | #define O_PS_UNIQ MA_END
238 | #define O_PS_KEYS MA_END
239 | #define O_PS_REC MA_END
240 | #define O_PS_INV MA_END
241 |
242 | /*
243 | * role
244 | */
245 | #define O_RO 14
246 | #define O_RO_ATSQ A_RO, A_AD, A_PH, A_FX, A_EM, A_TB, A_AC, A_TC, A_NH, A_RM, A_NY, A_MB, A_CH, A_SO, MA_END
247 | #define O_RO_MAND A_RO, A_AD, A_CH, A_EM, A_AC, A_TC, A_SO, A_NH, MA_END
248 | #define O_RO_MULT A_AD, A_CH, A_EM, A_FX, A_PH, A_RM, A_NY, A_MB, A_AC, A_TC, A_TB, MA_END
249 | #define O_RO_UNIQ A_RO, A_NH, MA_END
250 | #define O_RO_KEYS A_RO, A_NH, A_EM, MA_END
251 | #define O_RO_REC A_AC, A_TC, MA_END
252 | #define O_RO_INV A_AC, A_TC, A_NY, A_MB, MA_END
253 |
254 | /*
255 | * route_set
256 | */
257 | #define O_RS 15
258 | #define O_RS_ATSQ MA_END
259 | #define O_RS_MAND MA_END
260 | #define O_RS_MULT MA_END
261 | #define O_RS_UNIQ MA_END
262 | #define O_RS_KEYS MA_END
263 | #define O_RS_REC MA_END
264 | #define O_RS_INV MA_END
265 |
266 | /*
267 | * route
268 | */
269 | #define O_RT 16
270 | /* XXX - some undefined attributes.
271 | #define O_RT_ATSQ A_RT, A_DE, A_OR, A_HO, A_WD, A_CL, A_AV, A_RM, A_CN, A_CM, A_CT, A_NY, A_MB, A_CH, A_SO, MA_END
272 | */
273 | #define O_RT_ATSQ A_RT, A_DE, A_OR, A_HO, A_WD, A_RM, A_CN, A_CT, A_NY, A_MB, A_CH, A_SO, MA_END
274 | #define O_RT_MAND A_RT, A_DE, A_OR, A_MB, A_CH, A_SO, MA_END
275 | /* XXX - some undefined attributes.
276 | #define O_RT_MULT A_DE, A_HO, A_CL, A_RM, A_NY, A_CH, A_MB, A_AV, A_CN, A_CM, A_CT, MA_END
277 | */
278 | /* XXX - some undefined attributes.
279 | #define O_RT_MULT A_DE, A_HO, A_CL, A_RM, A_NY, A_CH, A_MB, A_AV, A_CN, A_CT, MA_END
280 | */
281 | #define O_RT_MULT A_DE, A_HO, A_RM, A_NY, A_CH, A_MB, A_CN, A_CT, MA_END
282 | #define O_RT_UNIQ A_RT, A_OR, MA_END
283 | #define O_RT_KEYS A_RT, MA_END
284 | #define O_RT_REC MA_END
285 | #define O_RT_INV A_OR, A_NY, A_MB, MA_END
286 |
287 | mask_t OB_get_inv_attr_mask(void);
288 | mask_t OB_get_object_mask(void);
289 | char *OB_object_to_string1(Object object);
290 | char *OB_object_to_string2(Object object, int verbose);
291 | char *OB_objects_to_string();
292 | char *OB_object_i_to_string(int obj_index, int format);
293 | char *OB_attribute_i_to_string(int attr_index, int format);
294 | void OB_init(void);
295 |
296 | #endif /* READ_OBJECTS */