parent-set.m2i
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:15k
- ############################################################# -*- c -*-
- ## generic include for XXX. Do not use directly.
- ##
- ## $Id: parent-set.m2i,v 1.24.2.2 2005/01/06 17:26:27 rstory Exp $
- ########################################################################
- @if $m2c_mark_boundary == 1@
- /** START code generated by $RCSfile: parent-set.m2i,v $ $Revision: 1.24.2.2 $ */
- @end@
- ########################################################################
- ##//####################################################################
- ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @if $m2c_processing_type eq 'h'@
- @ if $m2c_table_row_creation == 1@
- int ${context}_validate_index( ${context}_registration_ptr ${context}_reg,
- ${context}_rowreq_ctx *rowreq_ctx);
- @ end@
- int ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx);
- int ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx);
- int ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx);
- int ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx);
- @ if $m2c_irreversible_commit == 1@
- int ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx);
- @ end@
- @end@ // m2c_processing_type eq 'h'
- ########################################################################
- ##//####################################################################
- ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @if $m2c_processing_type eq 'c'@
- ##
- ## MASTER COPY OF THIS FLOWCHART IS IN agent/helpers/baby_steps.c
- ##
- /*
- * NOTE: if you update this chart, please update the versions in
- * local/mib2c-conf.d/parent-set.m2i
- * agent/mibgroup/helpers/baby_steps.c
- * while you're at it.
- */
- /*
- ***********************************************************************
- * Baby Steps Flow Chart (2004.06.05) *
- * *
- * +--------------+ +================+ U = unconditional path *
- * |optional state| ||required state|| S = path for success *
- * +--------------+ +================+ E = path for error *
- ***********************************************************************
- *
- * +--------------+
- * | pre |
- * | request |
- * +--------------+
- * | U
- @if $m2c_table_row_creation == 1@
- * +-------------+ +==============+
- * | row |f|<-------|| object ||
- * | create |1| E || lookup ||
- * +-------------+ +==============+
- * E | | S | S
- * | +------------------>|
- * | +==============+
- * | E || check ||
- * |<---------------|| values ||
- @else@
- * +==============+
- * +----------------|| object ||
- * | E || lookup ||
- * | +==============+
- * | | S
- * | +==============+
- * | E || check ||
- * |<---------------|| values ||
- @end@ # row creation
- * | +==============+
- * | | S
- * | +==============+
- * | +<-------|| undo ||
- * | | E || setup ||
- * | | +==============+
- * | | | S
- * | | +==============+
- * | | || set ||-------------------------->+
- * | | || value || E |
- * | | +==============+ |
- * | | | S |
- * | | +--------------+ |
- * | | | check |-------------------------->|
- * | | | consistency | E |
- * | | +--------------+ |
- * | | | S |
- * | | +==============+ +==============+ |
- * | | || commit ||-------->|| undo || |
- * | | || || E || commit || |
- * | | +==============+ +==============+ |
- * | | | S U |<--------+
- * | | +--------------+ +==============+
- * | | | irreversible | || undo ||
- * | | | commit | || set ||
- * | | +--------------+ +==============+
- * | | | U U |
- * | +-------------->|<------------------------+
- * | +==============+
- * | || undo ||
- * | || cleanup ||
- * | +==============+
- * +---------------------->| U
- @if $m2c_table_row_creation == 1@
- * |
- * (err && f1)------------------->+
- * | |
- * +--------------+ +--------------+
- * | post |<--------| row |
- * | request | U | release |
- * +--------------+ +--------------+
- @else@
- * +--------------+
- * | post |
- * | request |
- * +--------------+
- @end@ # row creation
- *
- */
- @if $m2c_table_row_creation == 1@
- /**
- * 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,
- *
- *
- *
- * @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_ptr ${context}_reg,
- ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:${context}:${context}_validate_index","calledn"));
- /** 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@ # row creation
- ##----------------------------------------------------------------------
- /**
- * Setup up context with information needed to undo a set request.
- *
- * This function will be called before the individual node undo setup
- * functions are called. If you need to do any undo setup that is not
- * related to a specific column, you can do it here.
- *
- @if $m2c_undo_embed == 0@
- @ if $m2c_data_init == 1@
- * Note that the undo context has been allocated with
- * ${context}_allocate_data(), but may need extra
- * initialization similar to what you may have done in
- * ${context}_rowreq_ctx_init().
- @ end@
- @end@
- * Note that an individual node's undo_setup function will only be called
- * if that node is being set to a new value.
- *
- * If there is any setup specific to a particular column (e.g. allocating
- * memory for a string), you should do that setup in the node's undo_setup
- * function, so it won't be done unless it is necessary.
- *
- * @param rowreq_ctx
- * Pointer to the table context (${context}_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error. set will fail.
- */
- int
- ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:${context}:${context}_undo_setup","calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert( NULL != rowreq_ctx );
- /*
- * TODO:451:M: |-> Setup $context undo.
- * set up $context undo information, in preparation for a set.
- */
- return rc;
- } /* ${context}_undo_setup */
- /**
- * Cleanup up context undo information.
- *
- * This function will be called after set/commit processing. If you
- * allocated any resources in undo_setup, this is the place to release
- * those resources.
- *
- * This function is called regardless of the success or failure of the set
- * request. If you need to perform different steps for cleanup depending
- * on success or failure, you can add a flag to the rowreq_ctx.
- *
- * @param rowreq_ctx
- * Pointer to the table context (${context}_rowreq_ctx)
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:${context}:${context}_undo_cleanup","calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert( NULL != rowreq_ctx );
- /*
- * TODO:452:M: |-> Cleanup $context undo.
- */
- return rc;
- } /* ${context}_undo_cleanup */
- ##----------------------------------------------------------------------
- /**
- * commit new values.
- *
- * At this point, you should have done everything you can to ensure that
- * this commit will not fail.
- *
- * Should you need different behavior depending on which columns were
- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
- * set. The definitions for the FLAG_* bits can be found in
- @if $m2c_create_fewer_files != 1@
- * ${context}_oids.h.
- @else@
- * ${context}.h.
- @end@
- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
- *
- * @param ${context}_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- int save_flags;
- DEBUGMSGTL(("verbose:${context}:${context}_commit","calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert( NULL != rowreq_ctx );
- /*
- * save flags, then clear until we actually do something
- */
- save_flags = rowreq_ctx->column_set_flags;
- rowreq_ctx->column_set_flags = 0;
- /*
- * commit $context data
- * 1) check the column's flag in save_flags to see if it was set.
- * 2) clear the flag when you handle that column
- * 3) set the column's flag in column_set_flags if it needs undo
- * processing in case of a failure.
- */
- ##$example_start
- @ foreach $node nonindex@
- @ include m2c_setup_node.m2i@
- @ if $node.settable == 0@
- @ next@
- @ end@
- if (save_flags & FLAG_$node.uc) {
- save_flags &= ~FLAG_$node.uc; /* clear $node */
- /*
- * TODO:482:o: |-> commit column $node.
- */
- rc = -1;
- if(-1 == rc) {
- snmp_log(LOG_ERR,"$context column $node commit failedn");
- }
- else {
- /*
- * set flag, in case we need to undo $node
- */
- rowreq_ctx->column_set_flags |= FLAG_$node.uc;
- }
- }
- @ end@ # foreach $node
- if (save_flags) {
- snmp_log(LOG_ERR, "unhandled columns (0x%x) in commitn", save_flags);
- return MFD_ERROR;
- }
- ##$example_end
- return rc;
- } /* ${context}_commit */
- /**
- * undo commit new values.
- *
- * Should you need different behavior depending on which columns were
- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
- * set. The definitions for the FLAG_* bits can be found in
- @if $m2c_create_fewer_files != 1@
- * ${context}_oids.h.
- @else@
- * ${context}.h.
- @end@
- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
- *
- * @param ${context}_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : error
- */
- int
- ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc = MFD_SUCCESS;
- DEBUGMSGTL(("verbose:${context}:${context}_undo_commit","calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert( NULL != rowreq_ctx );
- /*
- * TODO:485:M: |-> Undo $context commit.
- * check the column's flag in rowreq_ctx->column_set_flags to see
- * if it was set during commit, then undo it.
- *
- * eg: if (rowreq_ctx->column_set_flags & FLAG_$node.uc) {}
- */
- ##$example_start
- ##$example_end
- return rc;
- } /* ${context}_undo_commit */
- @if $m2c_irreversible_commit == 1@
- ##----------------------------------------------------------------------
- /**
- * perform commit actions that are not reversible
- *
- * THERE IS NO ATTEMPT AT RECOVERY FOR ERRORS FROM THIS STATE!
- *
- * @param ${context}_rowreq_ctx
- * Pointer to the users context.
- *
- * @retval MFD_SUCCESS : success
- * @retval MFD_ERROR : other error
- */
- int
- ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx)
- {
- int rc;
- DEBUGMSGTL(("verbose:${context}:${context}_irreversible_commit","calledn"));
- /** we should have a non-NULL pointer */
- netsnmp_assert( NULL != rowreq_ctx );
- /*
- * TODO:495:o: Irreversible $context commit.
- */
- ##$example_start
- ##$example_end
- return MFD_SUCCESS;
- } /* ${context}_irreversible_commit */
- @end@ // irreversable commit
- ##
- ########################################################################
- @end@ // m2c_processing_type eq 'c'
- ########################################################################
- @if $m2c_mark_boundary == 1@
- /** END code generated by $RCSfile: parent-set.m2i,v $ $Revision: 1.24.2.2 $ */
- @end@