📄 parent-set.m2i
字号:
############################################################# -*- 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","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@ # 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","called\n")); /** 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","called\n")); /** 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","called\n")); /** 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 failed\n"); } 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 commit\n", 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","called\n")); /** 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","called\n")); /** 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@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -