326 lines
10 KiB
C
326 lines
10 KiB
C
##//######################################################### -*- 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"@
|