##//######################################################### -*- c -*- ##//generic include for XXX. Do not use directly. ## ##//#################################################################### ##//#################################################################### ## ## lower conf files get confused with multiple processing types, so ## set single options @eval $mfd_data_access_processing_type = "$m2c_processing_type"@ @eval $m2c_processing_type = 'h'@ @open ${name}_data_access.h@ /* * Note: this file originally auto-generated by mib2c * using mfd-data-access.m2c */ @if $m2c_mark_boundary == 1@ /** START code generated by mfd-data-access.m2c */ @end@ @eval $m2c_save = "$name"@ @eval $name = "${name}_DATA_ACCESS"@ @include generic-header-top.m2i@ @eval $name = "$m2c_save"@ /* ********************************************************************* * function declarations */ /* ********************************************************************* * Table declarations */ @foreach $table table@ @ include m2c_setup_table.m2i@ @ include details-table.m2i@ ##@ eval $m2c_tmp=""@ ##@ foreach $node index@ ##@ include m2c_setup_node.m2i@ ##@ eval $m2c_tmp="$m2c_tmp, $m2c_node_param_val"@ ##@ end@ // for each index int ${context}_init_data(${context}_registration * ${context}_reg); @ include mfd-access-${m2c_table_access}-defines.m2i@ int ${context}_row_prep( ${context}_rowreq_ctx *rowreq_ctx); @ if ($m2c_table_row_creation == 1) || ($m2c_table_persistent == 1)@ int ${context}_validate_index( ${context}_registration * ${context}_reg, ${context}_rowreq_ctx *rowreq_ctx); @ foreach $node externalindex@ @ include m2c_setup_node.m2i@ int ${context}_${node}_check_index( ${context}_rowreq_ctx *rowreq_ctx ); /* external */ @ end@ # foreach externalindex @ foreach $node internalindex@ @ include m2c_setup_node.m2i@ int ${node}_check_index( ${context}_rowreq_ctx *rowreq_ctx ); /* internal */ @ end@ # foreach internalindex @ end@ # row creation/persistent @end@ @eval $m2c_save = "$name"@ @eval $name = "${name}_DATA_ACCESS"@ @include generic-header-bottom.m2i@ @eval $name = "$m2c_save"@ ##//################################################################## ##//Do the .c file ##//################################################################## @eval $m2c_processing_type = 'c'@ @open ${name}_data_access.c@ /* * Note: this file originally auto-generated by mib2c * using mfd-data-access.m2c */ @include generic-source-includes.m2i@ #include "${name}_data_access.h" /** @ingroup interface * @addtogroup data_access data_access: Routines to access data * * These routines are used to locate the data used to satisfy * requests. * * @{ */ @foreach $table table@ @ include m2c_setup_table.m2i@ @ include details-table.m2i@ /** * initialization for ${context} data access * * This function is called during startup to allow you to * allocate any resources you need for the data table. * * @param ${context}_reg * Pointer to ${context}_registration * * @retval MFD_SUCCESS : success. * @retval MFD_ERROR : unrecoverable error. */ int ${context}_init_data(${context}_registration * ${context}_reg) { DEBUGMSGTL(("verbose:${context}:${context}_init_data","called\n")); /* * TODO:303:o: Initialize $context data. */ @ifconf ${table}_init_data.m2i@ @ include ${table}_init_data.m2i@ @else@ @ if $m2c_include_examples == 1@ $example_start /* * if you are the sole writer for the file, you could * open it here. However, as stated earlier, we are assuming * the worst case, which in this case means that the file is * written to by someone else, and might not even exist when * we start up. So we can't do anything here. */ $example_end @ end@ return MFD_SUCCESS; @end@ #ifconf } /* ${context}_init_data */ @ include mfd-access-${m2c_table_access}-defines.m2i@ /** * prepare row for processing. * * When the agent has located the row for a request, this function is * called to prepare the row for processing. If you fully populated * the data context during the index setup phase, you may not need to * do anything. * * @param rowreq_ctx pointer to a context. * * @retval MFD_SUCCESS : success. * @retval MFD_ERROR : other error. */ int ${context}_row_prep( ${context}_rowreq_ctx *rowreq_ctx) { DEBUGMSGTL(("verbose:${context}:${context}_row_prep","called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:390:o: Prepare row for request. * If populating row data was delayed, this is the place to * fill in the row for this request. */ return MFD_SUCCESS; } /* ${context}_row_prep */ ##//#################################################################### @ if ($m2c_table_row_creation == 1) || ($m2c_table_persistent == 1)@ /* * TODO:420:r: Implement $context index validation. */ @ foreach $node externalindex@ @ include m2c_setup_node.m2i@ @ if $m2c_report_progress == 1@ @ print | | +-> Processing index $node@ @ end@ @ include details-node.m2i@ /** * check validity of ${node} external index portion * * NOTE: this is not the place to do any checks for the sanity * of multiple indexes. Those types of checks should be done in the * ${context}_validate_index() function. * * @retval MFD_SUCCESS : the incoming value is legal * @retval MFD_ERROR : the incoming value is NOT legal */ int ${context}_${node}_check_index( ${context}_rowreq_ctx *rowreq_ctx ) { DEBUGMSGTL(("verbose:${context}:${context}_${node}_check_index","called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:424:M: |-> Check $context external index $node. * check that index value in the table context (rowreq_ctx) * for the external index $node is legal. */ return MFD_SUCCESS; /* external index $node ok */ } /* ${context}_${node}_check_index */ @ end@ # foreach externalindex @ foreach $node internalindex@ @ include m2c_setup_node.m2i@ @ if $m2c_report_progress == 1@ @ print | | +-> Processing index $node@ @ end@ @ include details-node.m2i@ /** * check validity of ${node} index portion * * @retval MFD_SUCCESS : the incoming value is legal * @retval MFD_ERROR : the incoming value is NOT legal * * @note this is not the place to do any checks for the sanity * of multiple indexes. Those types of checks should be done in the * ${context}_validate_index() function. * * @note Also keep in mind that if the index refers to a row in this or * some other table, you can't check for that row here to make * decisions, since that row might not be created yet, but may * be created during the processing this request. If you have * such checks, they should be done in the check_dependencies * function, because any new/deleted/changed rows should be * available then. * * The following checks have already been done for you: @if $node.enums == 1@ * The value is one of $m2c_evals @elsif $node.ranges == 1@ @ if ("$node.decl" eq "long") || ("$node.decl" eq "u_long")@ @ eval $m2c_tmp_ns = "value"@ @ else@ @ eval $m2c_tmp_ns = "length"@ @ end@ * The $m2c_tmp_ns is in (one of) the range set(s): $m2c_evals @end@ * * If there a no other checks you need to do, simply return MFD_SUCCESS. */ int ${node}_check_index( ${context}_rowreq_ctx *rowreq_ctx ) { DEBUGMSGTL(("verbose:${context}:${node}_check_index","called\n")); netsnmp_assert(NULL != rowreq_ctx); /* * TODO:426:M: |-> Check $context index $node. * check that index value in the table context is legal. * (rowreq_ctx->tbl_index.$node) */ return MFD_SUCCESS; /* $node index ok */ } /* ${node}_check_index */ @ end@ # foreach internalindex /** * verify specified index is valid. * * This check is independent of whether or not the values specified for * the columns of the new row are valid. Column values and row consistency * will be checked later. At this point, only the index values should be * checked. * * All of the individual index validation functions have been called, so this * is the place to make sure they are valid as a whole when combined. If * you only have one index, then you probably don't need to do anything else * here. * * @note Keep in mind that if the indexes refer to a row in this or * some other table, you can't check for that row here to make * decisions, since that row might not be created yet, but may * be created during the processing this request. If you have * such checks, they should be done in the check_dependencies * function, because any new/deleted/changed rows should be * available then. * * * @param ${context}_reg * Pointer to the user registration data * @param ${context}_rowreq_ctx * Pointer to the users context. * @retval MFD_SUCCESS : success * @retval MFD_CANNOT_CREATE_NOW : index not valid right now * @retval MFD_CANNOT_CREATE_EVER : index never valid */ int ${context}_validate_index( ${context}_registration * ${context}_reg, ${context}_rowreq_ctx *rowreq_ctx) { int rc = MFD_SUCCESS; DEBUGMSGTL(("verbose:${context}:${context}_validate_index","called\n")); /** we should have a non-NULL pointer */ netsnmp_assert( NULL != rowreq_ctx ); /* * TODO:430:M: |-> Validate potential $context index. */ if(1) { snmp_log(LOG_WARNING,"invalid index for a new row in the " "${context} table.\n"); /* * determine failure type. * * If the index could not ever be created, return MFD_NOT_EVER * If the index can not be created under the present circumstances * (even though it could be created under other circumstances), * return MFD_NOT_NOW. */ if(0) { return MFD_CANNOT_CREATE_EVER; } else { return MFD_CANNOT_CREATE_NOW; } } return rc; } /* ${context}_validate_index */ @ end@ # persistent/row creation @end@ ## /** @} */ ##//#################################################################### @if $m2c_mark_boundary == 1@ /** END code generated by mfd-data-access.m2c */ @end@ @eval $m2c_processing_type = "$mfd_data_access_processing_type"@