diff options
Diffstat (limited to 'local/mib2c-conf.d/mfd-data-access.m2c')
-rw-r--r-- | local/mib2c-conf.d/mfd-data-access.m2c | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/local/mib2c-conf.d/mfd-data-access.m2c b/local/mib2c-conf.d/mfd-data-access.m2c new file mode 100644 index 0000000..bcff9bb --- /dev/null +++ b/local/mib2c-conf.d/mfd-data-access.m2c @@ -0,0 +1,331 @@ +##//######################################################### -*- c -*- +##//generic include for XXX. Do not use directly. +## +##//$Id$ +##//#################################################################### +##//#################################################################### +## +## 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@ +@eval $hack = "Id"@ +/* + * Note: this file originally auto-generated by mib2c using + * version $Revision$ of $RCSfile$ + * + * $$hack:$ + */ +@if $m2c_mark_boundary == 1@ +/** START code generated by $RCSfile$ $Revision$ */ +@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 + * version $Revision$ of $RCSfile$ + * + * $$hack:$ + */ +@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 $RCSfile$ $Revision$ */ +@end@ +@eval $m2c_processing_type = "$mfd_data_access_processing_type"@ |