netSnmpHostsTable.c

00001 /*
00002  * Note: this file originally auto-generated by mib2c using
00003  *        : mib2c.iterate_access.conf,v 1.4 2003/07/01 00:15:11 hardaker Exp $
00004  */
00005 
00006 #include <net-snmp/net-snmp-config.h>
00007 #include <net-snmp/net-snmp-includes.h>
00008 #include <net-snmp/agent/net-snmp-agent-includes.h>
00009 #include "netSnmpHostsTable.h"
00010 #include "netSnmpHostsTable_checkfns.h"
00011 #include "netSnmpHostsTable_access.h"
00012 
00013 static netsnmp_oid_stash_node *undoStorage = NULL;
00014 static netsnmp_oid_stash_node *commitStorage = NULL;
00015 
00016 struct undoInfo {
00017     void           *ptr;
00018     size_t          len;
00019 };
00020 
00021 struct commitInfo {
00022     void           *data_context;
00023     int             have_committed;
00024     int             new_row;
00025 };
00026 
00027 void
00028 netSnmpHostsTable_free_undoInfo(void *vptr)
00029 {
00030     struct undoInfo *ui = vptr;
00031     if (!ui)
00032         return;
00033     SNMP_FREE(ui->ptr);
00034     SNMP_FREE(ui);
00035 }
00036 
00038 void
00039 initialize_table_netSnmpHostsTable(void)
00040 {
00041     static oid      netSnmpHostsTable_oid[] =
00042         { 1, 3, 6, 1, 4, 1, 8072, 2, 2, 2 };
00043     netsnmp_table_registration_info *table_info;
00044     netsnmp_handler_registration *my_handler;
00045     netsnmp_iterator_info *iinfo;
00046 
00048     table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
00049     iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
00050 
00053     my_handler = netsnmp_create_handler_registration("netSnmpHostsTable",
00054                                                      netSnmpHostsTable_handler,
00055                                                      netSnmpHostsTable_oid,
00056                                                      OID_LENGTH
00057                                                      (netSnmpHostsTable_oid),
00058                                                      HANDLER_CAN_RWRITE);
00059 
00060     if (!my_handler || !table_info || !iinfo) {
00061         snmp_log(LOG_ERR,
00062                  "malloc failed in initialize_table_netSnmpHostsTable");
00063         return; 
00064     }
00065 
00066     /***************************************************
00067      * Setting up the table's definition
00068      */
00069     netsnmp_table_helper_add_indexes(table_info, ASN_OCTET_STR,
00071                                      0);
00072 
00075     table_info->min_column = 2;
00076     table_info->max_column = 5;
00077 
00079     iinfo->get_first_data_point = netSnmpHostsTable_get_first_data_point;
00080     iinfo->get_next_data_point = netSnmpHostsTable_get_next_data_point;
00081 
00083     iinfo->make_data_context = netSnmpHostsTable_context_convert_function;
00084     iinfo->free_data_context = netSnmpHostsTable_data_free;
00085     iinfo->free_loop_context_at_end = netSnmpHostsTable_loop_free;
00086 
00088     iinfo->table_reginfo = table_info;
00089 
00090     /***************************************************
00091      * registering the table with the master agent
00092      */
00093     DEBUGMSGTL(("initialize_table_netSnmpHostsTable",
00094                 "Registering table netSnmpHostsTable as a table iterator\n"));
00095     netsnmp_register_table_iterator(my_handler, iinfo);
00096 }
00097 
00099 void
00100 init_netSnmpHostsTable(void)
00101 {
00102 
00104     initialize_table_netSnmpHostsTable();
00105 }
00106 
00108 int
00109 netSnmpHostsTable_handler(netsnmp_mib_handler *handler,
00110                           netsnmp_handler_registration *reginfo,
00111                           netsnmp_agent_request_info *reqinfo,
00112                           netsnmp_request_info *requests)
00113 {
00114 
00115     netsnmp_request_info *request;
00116     netsnmp_table_request_info *table_info;
00117     netsnmp_variable_list *var;
00118     struct commitInfo *ci = NULL;
00119 
00120     void           *data_context = NULL;
00121 
00122     oid            *suffix;
00123     size_t          suffix_len;
00124 
00125     for (request = requests; request; request = request->next) {
00126         /* column and row index encoded portion */
00127         var = request->requestvb;
00128         suffix     = var->name + reginfo->rootoid_len + 1;
00129         suffix_len = var->name_length - (reginfo->rootoid_len + 1);
00130 
00131         if (request->processed != 0)
00132             continue;
00133 
00134         switch (reqinfo->mode) {
00135         case MODE_GET:
00136         case MODE_SET_RESERVE1:
00137             data_context = netsnmp_extract_iterator_context(request);
00138             if (data_context == NULL) {
00139                 if (reqinfo->mode == MODE_GET) {
00140                     netsnmp_set_request_error(reqinfo, request,
00141                                               SNMP_NOSUCHINSTANCE);
00142                     continue;
00143                 }
00144             }
00145             break;
00146 
00147         default:               /* == the other SET modes */
00148             ci = netsnmp_oid_stash_get_data(commitStorage,
00149                                             suffix + 1, suffix_len - 1);
00150             break;
00151 
00152         }
00153 
00155         table_info = netsnmp_extract_table_info(request);
00161         if (table_info == NULL) {
00162             continue;
00163         }
00164 
00165         switch (reqinfo->mode) {
00166         case MODE_GET:
00167             switch (table_info->colnum) {
00168             case COLUMN_NETSNMPHOSTADDRESSTYPE:
00169                 {
00170                     long           *retval;
00171                     size_t          retval_len = 0;
00172                     retval =
00173                         get_netSnmpHostAddressType(data_context,
00174                                                    &retval_len);
00175                     snmp_set_var_typed_value(var, ASN_INTEGER,
00176                                              (const u_char *) retval,
00177                                              retval_len);
00178                 }
00179                 break;
00180 
00181             case COLUMN_NETSNMPHOSTADDRESS:
00182                 {
00183                     char           *retval;
00184                     size_t          retval_len = 0;
00185                     retval =
00186                         get_netSnmpHostAddress(data_context, &retval_len);
00187                     snmp_set_var_typed_value(var, ASN_OCTET_STR,
00188                                              (const u_char *) retval,
00189                                              retval_len);
00190                 }
00191                 break;
00192 
00193             case COLUMN_NETSNMPHOSTSTORAGE:
00194                 {
00195                     long           *retval;
00196                     size_t          retval_len = 0;
00197                     retval =
00198                         get_netSnmpHostStorage(data_context, &retval_len);
00199                     snmp_set_var_typed_value(var, ASN_INTEGER,
00200                                              (const u_char *) retval,
00201                                              retval_len);
00202                 }
00203                 break;
00204 
00205             case COLUMN_NETSNMPHOSTROWSTATUS:
00206                 {
00207                     long           *retval;
00208                     size_t          retval_len = 0;
00209                     retval =
00210                         get_netSnmpHostRowStatus(data_context,
00211                                                  &retval_len);
00212                     snmp_set_var_typed_value(var, ASN_INTEGER,
00213                                              (const u_char *) retval,
00214                                              retval_len);
00215                 }
00216                 break;
00217 
00218             default:
00220                 snmp_log(LOG_ERR,
00221                          "problem encountered in netSnmpHostsTable_handler: unknown column\n");
00222             }
00223             break;
00224 
00225         case MODE_SET_RESERVE1:
00226             ci = netsnmp_oid_stash_get_data(commitStorage,
00227                                             suffix + 1, suffix_len - 1);
00228 
00229             if (!ci) {
00231                 ci = SNMP_MALLOC_STRUCT(commitInfo);
00232                 if (!data_context) {
00233                     ci->data_context =
00234                         netSnmpHostsTable_create_data_context(table_info->
00235                                                               indexes);
00236                     ci->new_row = 1;
00237                 } else {
00238                     ci->data_context = data_context;
00239                 }
00240                 netsnmp_oid_stash_add_data(&commitStorage,
00241                                            suffix + 1, suffix_len - 1, ci);
00242             }
00243             break;
00244 
00245         case MODE_SET_RESERVE2:
00246             switch (table_info->colnum) {
00247             case COLUMN_NETSNMPHOSTADDRESSTYPE:
00248                 {
00249                     long           *retval;
00250                     size_t          retval_len = 0;
00251                     struct undoInfo *ui = NULL;
00252                     int             ret;
00253 
00255                     retval =
00256                         get_netSnmpHostAddressType(ci->data_context,
00257                                                    &retval_len);
00258                     if (retval) {
00259                         ui = SNMP_MALLOC_STRUCT(undoInfo);
00260                         ui->len = retval_len;
00261                         memdup((u_char **) & ui->ptr,
00262                                (u_char *) retval, ui->len);
00263                     }
00264 
00267                     ret =
00268                         check_netSnmpHostAddressType(request->requestvb->
00269                                                      type,
00270                                                      (long *) request->
00271                                                      requestvb->val.string,
00272                                                      request->requestvb->
00273                                                      val_len, retval,
00274                                                      retval_len);
00275                     if (ret != 0) {
00276                         netsnmp_set_request_error(reqinfo, request, ret);
00277                         netSnmpHostsTable_free_undoInfo(ui);
00278                     } else if (ui) {
00280                         netsnmp_oid_stash_add_data(&undoStorage,
00281                                                    suffix, suffix_len, ui);
00282                     }
00283 
00284                 }
00285                 break;
00286             case COLUMN_NETSNMPHOSTADDRESS:
00287                 {
00288                     char           *retval;
00289                     size_t          retval_len = 0;
00290                     struct undoInfo *ui = NULL;
00291                     int             ret;
00292 
00294                     retval =
00295                         get_netSnmpHostAddress(ci->data_context,
00296                                                &retval_len);
00297                     if (retval) {
00298                         ui = SNMP_MALLOC_STRUCT(undoInfo);
00299                         ui->len = retval_len;
00300                         memdup((u_char **) & ui->ptr,
00301                                (u_char *) retval, ui->len);
00302                     }
00303 
00306                     ret =
00307                         check_netSnmpHostAddress(request->requestvb->type,
00308                                                  (char *) request->
00309                                                  requestvb->val.string,
00310                                                  request->requestvb->
00311                                                  val_len, retval,
00312                                                  retval_len);
00313                     if (ret != 0) {
00314                         netsnmp_set_request_error(reqinfo, request, ret);
00315                         netSnmpHostsTable_free_undoInfo(ui);
00316                     } else if (ui) {
00318                         netsnmp_oid_stash_add_data(&undoStorage,
00319                                                    suffix, suffix_len, ui);
00320                     }
00321 
00322                 }
00323                 break;
00324             case COLUMN_NETSNMPHOSTSTORAGE:
00325                 {
00326                     long           *retval;
00327                     size_t          retval_len = 0;
00328                     struct undoInfo *ui = NULL;
00329                     int             ret;
00330 
00332                     retval =
00333                         get_netSnmpHostStorage(ci->data_context,
00334                                                &retval_len);
00335                     if (retval) {
00336                         ui = SNMP_MALLOC_STRUCT(undoInfo);
00337                         ui->len = retval_len;
00338                         memdup((u_char **) & ui->ptr,
00339                                (u_char *) retval, ui->len);
00340                     }
00341 
00344                     ret =
00345                         check_netSnmpHostStorage(request->requestvb->type,
00346                                                  (long *) request->
00347                                                  requestvb->val.string,
00348                                                  request->requestvb->
00349                                                  val_len, retval,
00350                                                  retval_len);
00351                     if (ret != 0) {
00352                         netsnmp_set_request_error(reqinfo, request, ret);
00353                         netSnmpHostsTable_free_undoInfo(ui);
00354                     } else if (ui) {
00356                         netsnmp_oid_stash_add_data(&undoStorage,
00357                                                    suffix, suffix_len, ui);
00358                     }
00359 
00360                 }
00361                 break;
00362             case COLUMN_NETSNMPHOSTROWSTATUS:
00363                 {
00364                     long           *retval;
00365                     size_t          retval_len = 0;
00366                     struct undoInfo *ui = NULL;
00367                     int             ret;
00368 
00370                     retval =
00371                         get_netSnmpHostRowStatus(ci->data_context,
00372                                                  &retval_len);
00373                     if (retval) {
00374                         ui = SNMP_MALLOC_STRUCT(undoInfo);
00375                         ui->len = retval_len;
00376                         memdup((u_char **) & ui->ptr,
00377                                (u_char *) retval, ui->len);
00378                     }
00379 
00382                     ret =
00383                         check_netSnmpHostRowStatus(request->requestvb->
00384                                                    type,
00385                                                    (long *) request->
00386                                                    requestvb->val.string,
00387                                                    request->requestvb->
00388                                                    val_len, retval,
00389                                                    retval_len);
00390                     if (ret != 0) {
00391                         netsnmp_set_request_error(reqinfo, request, ret);
00392                         netSnmpHostsTable_free_undoInfo(ui);
00393                     } else if (ui) {
00395                         netsnmp_oid_stash_add_data(&undoStorage,
00396                                                    suffix, suffix_len, ui);
00397                     }
00398 
00399                 }
00400                 break;
00401             default:
00402                 netsnmp_set_request_error(reqinfo, request,
00403                                           SNMP_ERR_NOTWRITABLE);
00404                 break;
00405             }
00406             break;
00407 
00408         case MODE_SET_ACTION:
00410             switch (table_info->colnum) {
00411             case COLUMN_NETSNMPHOSTADDRESSTYPE:
00412                 {
00413                     int             ret;
00414                     ret = set_netSnmpHostAddressType(ci->data_context,
00415                                                      (long *) request->
00416                                                      requestvb->val.string,
00417                                                      request->requestvb->
00418                                                      val_len);
00419                     if (ret) {
00420                         netsnmp_set_request_error(reqinfo, request, ret);
00421                     }
00422                 }
00423                 break;
00424             case COLUMN_NETSNMPHOSTADDRESS:
00425                 {
00426                     int             ret;
00427                     ret = set_netSnmpHostAddress(ci->data_context,
00428                                                  (char *) request->
00429                                                  requestvb->val.string,
00430                                                  request->requestvb->
00431                                                  val_len);
00432                     if (ret) {
00433                         netsnmp_set_request_error(reqinfo, request, ret);
00434                     }
00435                 }
00436                 break;
00437             case COLUMN_NETSNMPHOSTSTORAGE:
00438                 {
00439                     int             ret;
00440                     ret = set_netSnmpHostStorage(ci->data_context,
00441                                                  (long *) request->
00442                                                  requestvb->val.string,
00443                                                  request->requestvb->
00444                                                  val_len);
00445                     if (ret) {
00446                         netsnmp_set_request_error(reqinfo, request, ret);
00447                     }
00448                 }
00449                 break;
00450             case COLUMN_NETSNMPHOSTROWSTATUS:
00451                 {
00452                     int             ret;
00453                     ret = set_netSnmpHostRowStatus(ci->data_context,
00454                                                    (long *) request->
00455                                                    requestvb->val.string,
00456                                                    request->requestvb->
00457                                                    val_len);
00458                     if (ret) {
00459                         netsnmp_set_request_error(reqinfo, request, ret);
00460                     }
00461                     if (*request->requestvb->val.integer == RS_DESTROY) {
00462                         ci->new_row = -1;
00463                     }
00464                 }
00465                 break;
00466             }
00467             break;
00468 
00469         case MODE_SET_COMMIT:
00470             if (!ci->have_committed) {
00472                 netSnmpHostsTable_commit_row(&ci->data_context,
00473                                              ci->new_row);
00474                 ci->have_committed = 1;
00475             }
00476             break;
00477 
00478         case MODE_SET_UNDO:
00480             switch (table_info->colnum) {
00481             case COLUMN_NETSNMPHOSTADDRESSTYPE:
00482                 {
00483                     int             retval;
00484                     struct undoInfo *ui;
00485                     ui = netsnmp_oid_stash_get_data(undoStorage,
00486                                                     suffix, suffix_len);
00487                     retval =
00488                         set_netSnmpHostAddressType(ci->data_context,
00489                                                    ui->ptr, ui->len);
00490                     if (retval) {
00491                         netsnmp_set_request_error(reqinfo, request,
00492                                                   SNMP_ERR_UNDOFAILED);
00493                     }
00494                 }
00495                 break;
00496             case COLUMN_NETSNMPHOSTADDRESS:
00497                 {
00498                     int             retval;
00499                     struct undoInfo *ui;
00500                     ui = netsnmp_oid_stash_get_data(undoStorage,
00501                                                     suffix, suffix_len);
00502                     retval =
00503                         set_netSnmpHostAddress(ci->data_context, ui->ptr,
00504                                                ui->len);
00505                     if (retval) {
00506                         netsnmp_set_request_error(reqinfo, request,
00507                                                   SNMP_ERR_UNDOFAILED);
00508                     }
00509                 }
00510                 break;
00511             case COLUMN_NETSNMPHOSTSTORAGE:
00512                 {
00513                     int             retval;
00514                     struct undoInfo *ui;
00515                     ui = netsnmp_oid_stash_get_data(undoStorage,
00516                                                     suffix, suffix_len);
00517                     retval =
00518                         set_netSnmpHostStorage(ci->data_context, ui->ptr,
00519                                                ui->len);
00520                     if (retval) {
00521                         netsnmp_set_request_error(reqinfo, request,
00522                                                   SNMP_ERR_UNDOFAILED);
00523                     }
00524                 }
00525                 break;
00526             case COLUMN_NETSNMPHOSTROWSTATUS:
00527                 {
00528                     int             retval;
00529                     struct undoInfo *ui;
00530                     ui = netsnmp_oid_stash_get_data(undoStorage,
00531                                                     suffix, suffix_len);
00532                     retval =
00533                         set_netSnmpHostRowStatus(ci->data_context, ui->ptr,
00534                                                  ui->len);
00535                     if (retval) {
00536                         netsnmp_set_request_error(reqinfo, request,
00537                                                   SNMP_ERR_UNDOFAILED);
00538                     }
00539                 }
00540                 break;
00541             }
00542             break;
00543 
00544         case MODE_SET_FREE:
00545             break;
00546 
00547         default:
00548             snmp_log(LOG_ERR,
00549                      "problem encountered in netSnmpHostsTable_handler: unsupported mode\n");
00550         }
00551     }
00552 
00554     switch (reqinfo->mode) {
00555     case MODE_SET_UNDO:
00556     case MODE_SET_FREE:
00557     case MODE_SET_COMMIT:
00559         netsnmp_oid_stash_free(&undoStorage,
00560                                netSnmpHostsTable_free_undoInfo);
00561         netsnmp_oid_stash_free(&commitStorage, netsnmp_oid_stash_no_free);
00562     }
00563 
00564 
00565     return SNMP_ERR_NOERROR;
00566 }

net-snmpに対してSat Sep 5 13:14:22 2009に生成されました。  doxygen 1.4.7