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 */