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