00001 /*! \file tables.h
00002 Header that difines all the tables structure.
00003 */
00004
00005 #ifdef __cplusplus
00006 extern "C" {
00007 #endif
00008
00009 #ifndef TABLES_HEADER
00010 #define TABLES_HEADER
00011
00012
00013 /*! \brief Maximum number of characters for a radius login.
00014 */
00015
00016 #define LOGIN_RADIUS_SIZE 51
00017
00018 /*! \brief Maximum number of characters for a MyDns login = radius2mydns(login).
00019 You MUST set MYDNS_LOGIN_SIZE > 2*LOGIN_RADIUS_SIZE
00020 */
00021
00022 #define MYDNS_LOGIN_SIZE 128
00023
00024 /*! \brief Maximum number of characters for an IP address (XXX.XXX.XXX.XXX).
00025 */
00026
00027 #define IP_ADDRESS_STR_SIZE 16
00028
00029 /*! \brief Maximum number of characters for the optionnal profile ID.
00030 */
00031
00032 #define OPTIONNAL_PROFILE_SIZE 256
00033
00034 /*! \brief Maximum number of characters for the radius 'ACCT' identifier.
00035 */
00036
00037 #define ACCT_IDENTIFIER_SIZE 36
00038
00039 /*! \brief Maximum number of characters for a label.
00040 */
00041
00042 #define LABEL_SIZE 256
00043
00044 /*! \brief Maximum number of characters for a comment.
00045 */
00046
00047 #define COMMENT_SIZE 256
00048
00049 /*! \brief Maximum number of characters for a CIDR (XXX.XXX.XXX.XXX/N).
00050 */
00051
00052 #define CIDR_SIZE 256
00053
00054 /*! \brief Size, in bytes, for the option's type.
00055 */
00056
00057 #define OPTION_TYPE_SIZE 20
00058
00059 /*! \brief Size, in bytes, for the option's value.
00060 */
00061
00062 #define OPTION_VALUE_SIZE 256
00063
00064 /*! \brief Maximum number of options for a DHCP packet's profile.
00065 */
00066
00067 #define MAX_PROFILE_OPTIONS 256
00068
00069 /*! \brief Size of the buffer used to store the field 'MAC_ADDRESS' of the table 'LOGISTIC_RADIUS'.
00070 */
00071
00072 #define LOGISTIC_MAC_ADDRESS_SIZE 256
00073
00074 /*! \brief Size of the buffer used to store the field 'RADIUS_LOGIN' of the table 'LOGISTIC_RADIUS'.
00075 */
00076
00077 #define LOGISTIC_RADIUS_LOGIN_SIZE 256
00078
00079 /*! \brief Size of the buffer used to store the field 'LOGIN_MODEM' of the table 'LOGISTIC_RADIUS'.
00080 */
00081
00082 #define LOGISTIC_LOGIN_MODEM_SIZE 256
00083
00084 /*! \brief Size of the buffer used to store the field 'LOGIN_MODEM' of the table 'RADONLINE'.
00085 */
00086
00087 #define LOGIN_MODEM_SIZE 128
00088
00089 /*! \brief Number of bytes used to represent a node ID.
00090 \remark <ul>
00091 <li>Alcatel's DSLAMs need up to 20 bytes to represent the node ID.
00092 <li>Utstarcom's DSLAMs need up to 5 bytes (maximum value is "65535" - unsigned shot int).
00093 </ul>
00094 \warning If you modify the value of this constant, you must also modify the value of the constant
00095 NODE_BUFFER_SIZE (see file "packets_data.h").
00096 */
00097
00098 #define NODE_ID_SIZE 20
00099
00100
00101 /*! \brief This data structure represents the table 'abonnes'.
00102 */
00103
00104 struct table_abonnes
00105 {
00106 /*! \brief Auto incremented ID. */
00107
00108 unsigned long int abonnes_id;
00109
00110 /*! \brief DSLAM's node ID. */
00111
00112 char node_id[NODE_ID_SIZE];
00113
00114 /*! \brief DSLAM's shelf number. */
00115
00116 unsigned char shelf;
00117
00118 /*! \brief DSLAM's port number. */
00119
00120 unsigned char numero_port;
00121
00122 /*! \brief DSLAM's slot number. */
00123
00124 unsigned char numero_slot;
00125
00126 /*! \brief Client's radius login. */
00127
00128 char login_radius[LOGIN_RADIUS_SIZE];
00129
00130 /*! \brief First connection flag. */
00131
00132 unsigned char first_connection;
00133
00134 /*! \brief This flag is used if the client should be assigned a specific list of DHCP options.
00135 <ul>
00136 <li>If the field contains the value "STANDARD", it means that the client
00137 will receive the default list of DHCP option (depending in the VLAN tag and
00138 the VALAN gateway).
00139 <li>Otherwise, the value represents the pointer to the list of options that
00140 will be sent to the client (field "profile_optionnel" of table "options").
00141 </ul>
00142 */
00143
00144 char profile[OPTIONNAL_PROFILE_SIZE];
00145
00146 /*! \brief Field 'nack_flag' of the table 'abonnes'.
00147 This flag is used to tell the DHCP to send a NAK.
00148 */
00149
00150 unsigned long int nack_flag;
00151 };
00152
00153 /*! \brief This data structure represents the table 'abonne_ip'.
00154 */
00155
00156 struct table_abonne_ip
00157 {
00158 /*! \brief Auto incremented ID. */
00159
00160 unsigned long int abonne_ip_id;
00161
00162 /*! \brief Joint key to table 'abonnes'. */
00163
00164 unsigned long int abonnes_id;
00165
00166 /*! \brief Joint key to table 'vlan'. */
00167
00168 unsigned long int vlan_id;
00169
00170 /*! \brief Fixed IP address for the user. */
00171
00172 char ip[IP_ADDRESS_STR_SIZE];
00173
00174 /*! \brief Gateway IP address. */
00175
00176 char gateway[IP_ADDRESS_STR_SIZE];
00177
00178 /*! \brief Subnet IP. */
00179
00180 char subnet[IP_ADDRESS_STR_SIZE];
00181 };
00182
00183 /*! \brief This structure represents the table 'vlan'.
00184 */
00185
00186 struct table_vlan
00187 {
00188 /*! \brief Auto incremented ID. */
00189
00190 unsigned long int vlan_id;
00191
00192 /*! \brief Optionnal profile. */
00193
00194 char profile_optionnel[OPTIONNAL_PROFILE_SIZE];
00195
00196 /*! \brief VLAN ID (from Option 82). */
00197
00198 unsigned long int vlan_tag;
00199
00200 /*! \brief VLAN gateway. */
00201
00202 char vlan_gateway[IP_ADDRESS_STR_SIZE];
00203
00204 /*! \brief Radius 'ACCT' identifier. */
00205
00206 char radius_identifiant[ACCT_IDENTIFIER_SIZE];
00207
00208 /*! \brief Label. */
00209
00210 char libelle[LABEL_SIZE];
00211
00212 /*! \brief Comment. */
00213
00214 char comment[COMMENT_SIZE];
00215
00216 /*! \brief Timeout for a DHCP offer. */
00217
00218 unsigned long int offer_timeout;
00219 };
00220
00221 /*! \brief This table represents the table 'options'.
00222 */
00223
00224 struct table_options
00225 {
00226 /*! \brief "Auto incremented" ID. */
00227
00228 unsigned long int options_id;
00229
00230 /*! \brief Profile's ID. */
00231
00232 char profile_optionnel[OPTIONNAL_PROFILE_SIZE];
00233
00234 /*! \brief Option's code. */
00235
00236 unsigned char option_code;
00237
00238 /*! \brief Option's type. */
00239
00240 char option_type[OPTION_TYPE_SIZE];
00241
00242 /*! \brief Option's value. */
00243
00244 char option_value[OPTION_VALUE_SIZE];
00245
00246 /*! \brief Comment. */
00247
00248 char comment[COMMENT_SIZE];
00249 };
00250
00251
00252 /*! \brief This table represents the table 'ip_lease'.
00253 */
00254
00255 struct table_ip_lease
00256 {
00257 /*! \brief "Auto incremented" ID. */
00258
00259 unsigned long int ip_lease_id;
00260
00261 /*! \brief Joint key to the table "vlan". */
00262
00263 unsigned long int vlan_id;
00264
00265 /*! \brief "CIRD", as given from Ogre. */
00266
00267 char cidr[CIDR_SIZE];
00268
00269 /*! \brief Subnet IP. */
00270
00271 char subnet[IP_ADDRESS_STR_SIZE];
00272
00273 /*! \brief Gateway IP address. */
00274
00275 char gateway[IP_ADDRESS_STR_SIZE];
00276 };
00277
00278 /*! \brief This table represents the table 'pool'.
00279 */
00280
00281 struct table_pool
00282 {
00283 /*! \brief "Auto incremented" ID. */
00284
00285 unsigned long int pool_id;
00286
00287 /*! \brief Joint key to the table "ip_lease". */
00288
00289 unsigned long int ip_lease_id;
00290
00291 /*! \brief Joint key to the table "abonnes". */
00292
00293 unsigned long int abonnes_id;
00294
00295 /*! \brief IP address. */
00296
00297 char ip[IP_ADDRESS_STR_SIZE];
00298
00299 /*! \brief Expiration timestamp. */
00300
00301 unsigned long int expiration;
00302
00303 };
00304
00305 /*! \brief This structure represents the table 'LOGISTIC_RADIUS' of the database 'autoconf'.
00306 */
00307
00308 struct table_logistic_radius
00309 {
00310 /*! \brief Field 'MAC_ADDRESS'. */
00311
00312 char MAC_ADDRESS[LOGISTIC_MAC_ADDRESS_SIZE];
00313
00314 /*! \brief Field 'RADIUS_LOGIN'. */
00315
00316 char RADIUS_LOGIN[LOGISTIC_RADIUS_LOGIN_SIZE];
00317
00318 /*! \brief Field 'LOGIN_MODEM'. */
00319
00320 char LOGIN_MODEM[LOGISTIC_LOGIN_MODEM_SIZE];
00321
00322 /*! \brief Field 'FLAG_CHECK_RADIUS'. */
00323
00324 int FLAG_CHECK_RADIUS;
00325
00326 /* -------------------------------------------------------- */
00327 /* The following fields are not part of the DB tables */
00328 /* -------------------------------------------------------- */
00329
00330 /*! \brief This field is not part of the table 'LOGISTIC_RADIUS'. But it will be used when
00331 the server update the Radonline database.
00332 If this string is not empty, then the Radonline ACCT_IDENTIFIER inserted in the
00333 Radonline table will be the value of this string.
00334 */
00335
00336 char radonline_acct_identifier[ACCT_IDENTIFIER_SIZE];
00337
00338 /*! \brief This field is not part of the table 'LOGISTIC_RADIUS'. But it will be used when
00339 the server update the Radonline database.
00340 If this string is not empty, then the USERNAME inserted in the Radonline table
00341 will be the value of this string.
00342 */
00343
00344 char radonline_user_name[LOGIN_RADIUS_SIZE];
00345
00346 /*! \brief This field is not part of the table 'LOGISTIC_RADIUS'. But it will be used when
00347 the server update the Radonline database.
00348 If this string is not empty, then the LOGIN_MODEM inserted in the Radonline table
00349 will be the value of this string.
00350 */
00351
00352 char login_modem[LOGISTIC_LOGIN_MODEM_SIZE];
00353
00354 /*! \brief This field is not part of the table 'LOGISTIC_RADIUS'.
00355 This fields identifies the modem's manufacturor.
00356 */
00357
00358 int modem_manufacturor;
00359 };
00360
00361 /*! \brief This structure contains all the database description.
00362 */
00363
00364 struct mysql_tables
00365 {
00366 /*! \brief Table 'abonnes'. */
00367
00368 struct table_abonnes abonnes;
00369
00370 /*! \brief Table 'abonne_ip'. */
00371
00372 struct table_abonne_ip abonne_ip;
00373
00374 /*! \brief Table 'vlan'. */
00375
00376 struct table_vlan vlan;
00377
00378 /*! \brief Table 'options'. */
00379
00380 struct table_options options[MAX_PROFILE_OPTIONS];
00381
00382 /*! \brief Table 'ip_lease'. */
00383
00384 struct table_ip_lease ip_lease;
00385
00386 /*! \brief Table 'pool'. */
00387
00388 struct table_pool pool;
00389
00390 /*! \brief Table 'logistic'. */
00391
00392 struct table_logistic_radius logistic;
00393
00394 /*! \brief Number of elements in the array of options (field 'options').
00395 */
00396
00397 int option_number;
00398 };
00399
00400 #endif
00401
00402 #ifdef __cplusplus
00403 }
00404 #endif
00405
00406
00407
00408
1.2.15