parent-set.m2i
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:15k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #############################################################  -*- c -*-
  2. ## generic include for XXX. Do not use directly.
  3. ##
  4. ## $Id: parent-set.m2i,v 1.24.2.2 2005/01/06 17:26:27 rstory Exp $
  5. ########################################################################
  6. @if $m2c_mark_boundary == 1@
  7. /** START code generated by $RCSfile: parent-set.m2i,v $ $Revision: 1.24.2.2 $ */
  8. @end@
  9. ########################################################################
  10. ##//####################################################################
  11. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  12. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  13. @if $m2c_processing_type eq 'h'@
  14. @   if $m2c_table_row_creation == 1@
  15. int ${context}_validate_index( ${context}_registration_ptr ${context}_reg,
  16.                                ${context}_rowreq_ctx *rowreq_ctx);
  17. @   end@
  18. int ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx);
  19. int ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx);
  20. int ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx);
  21. int ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx);
  22. @   if $m2c_irreversible_commit == 1@
  23. int ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx);
  24. @   end@
  25. @end@ // m2c_processing_type eq 'h'
  26. ########################################################################
  27. ##//####################################################################
  28. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  29. ##//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  30. @if $m2c_processing_type eq 'c'@
  31. ##
  32. ## MASTER COPY OF THIS FLOWCHART IS IN agent/helpers/baby_steps.c
  33. ##
  34.     /*
  35.      * NOTE: if you update this chart, please update the versions in
  36.      *       local/mib2c-conf.d/parent-set.m2i
  37.      *       agent/mibgroup/helpers/baby_steps.c
  38.      * while you're at it.
  39.      */
  40.     /*
  41.      ***********************************************************************
  42.      * Baby Steps Flow Chart (2004.06.05)                                  *
  43.      *                                                                     *
  44.      * +--------------+    +================+    U = unconditional path    *
  45.      * |optional state|    ||required state||    S = path for success      *
  46.      * +--------------+    +================+    E = path for error        *
  47.      ***********************************************************************
  48.      *
  49.      *                        +--------------+
  50.      *                        |     pre      |
  51.      *                        |   request    |
  52.      *                        +--------------+
  53.      *                               | U
  54. @if $m2c_table_row_creation == 1@
  55.      * +-------------+        +==============+
  56.      * |    row    |f|<-------||  object    ||
  57.      * |  create   |1|      E ||  lookup    ||
  58.      * +-------------+        +==============+
  59.      *     E |   | S                 | S
  60.      *       |   +------------------>|
  61.      *       |                +==============+
  62.      *       |              E ||   check    ||
  63.      *       |<---------------||   values   ||
  64. @else@
  65.      *                        +==============+
  66.      *       +----------------||  object    ||
  67.      *       |              E ||  lookup    ||
  68.      *       |                +==============+
  69.      *       |                       | S
  70.      *       |                +==============+
  71.      *       |              E ||   check    ||
  72.      *       |<---------------||   values   ||
  73. @end@ # row creation
  74.      *       |                +==============+
  75.      *       |                       | S
  76.      *       |                +==============+
  77.      *       |       +<-------||   undo     ||
  78.      *       |       |      E ||   setup    ||
  79.      *       |       |        +==============+
  80.      *       |       |               | S
  81.      *       |       |        +==============+
  82.      *       |       |        ||    set     ||-------------------------->+
  83.      *       |       |        ||   value    || E                         |
  84.      *       |       |        +==============+                           |
  85.      *       |       |               | S                                 |
  86.      *       |       |        +--------------+                           |
  87.      *       |       |        |    check     |-------------------------->|
  88.      *       |       |        |  consistency | E                         |
  89.      *       |       |        +--------------+                           |
  90.      *       |       |               | S                                 |
  91.      *       |       |        +==============+         +==============+  |
  92.      *       |       |        ||   commit   ||-------->||     undo   ||  |
  93.      *       |       |        ||            || E       ||    commit  ||  |
  94.      *       |       |        +==============+         +==============+  |
  95.      *       |       |               | S                     U |<--------+
  96.      *       |       |        +--------------+         +==============+
  97.      *       |       |        | irreversible |         ||    undo    ||
  98.      *       |       |        |    commit    |         ||     set    ||
  99.      *       |       |        +--------------+         +==============+
  100.      *       |       |               | U                     U |
  101.      *       |       +-------------->|<------------------------+
  102.      *       |                +==============+
  103.      *       |                ||   undo     ||
  104.      *       |                ||  cleanup   ||
  105.      *       |                +==============+
  106.      *       +---------------------->| U
  107. @if $m2c_table_row_creation == 1@
  108.      *                               |
  109.      *                          (err && f1)------------------->+
  110.      *                               |                         |
  111.      *                        +--------------+         +--------------+
  112.      *                        |    post      |<--------|      row     |
  113.      *                        |   request    |       U |    release   |
  114.      *                        +--------------+         +--------------+
  115. @else@
  116.      *                        +--------------+
  117.      *                        |    post      |
  118.      *                        |   request    |
  119.      *                        +--------------+
  120. @end@ # row creation
  121.      *
  122.      */
  123. @if $m2c_table_row_creation == 1@
  124. /**
  125.  * verify specified index is valid.
  126.  *
  127.  * This check is independent of whether or not the values specified for
  128.  * the columns of the new row are valid. Column values and row consistency
  129.  * will be checked later. At this point, only the index values should be
  130.  * checked.
  131.  *
  132.  * All of the individual index validation functions have been called, so this
  133.  * is the place to make sure they are valid as a whole when combined. If
  134.  * you only have one index, 
  135.  * 
  136.  *
  137.  *
  138.  * @param ${context}_reg
  139.  *        Pointer to the user registration data
  140.  * @param ${context}_rowreq_ctx
  141.  *        Pointer to the users context.
  142.  * @retval MFD_SUCCESS            : success
  143.  * @retval MFD_CANNOT_CREATE_NOW  : index not valid right now
  144.  * @retval MFD_CANNOT_CREATE_EVER : index never valid
  145.  */
  146. int
  147. ${context}_validate_index( ${context}_registration_ptr ${context}_reg,
  148.                            ${context}_rowreq_ctx *rowreq_ctx)
  149. {
  150.     int rc = MFD_SUCCESS;
  151.     DEBUGMSGTL(("verbose:${context}:${context}_validate_index","calledn"));
  152.     /** we should have a non-NULL pointer */
  153.     netsnmp_assert( NULL != rowreq_ctx );
  154.     /*
  155.      * TODO:430:M: |-> Validate potential $context index.
  156.      */
  157.     if(1) {
  158.         snmp_log(LOG_WARNING,"invalid index for a new row in the "
  159.                  "${context} table.n");
  160.         /*
  161.          * determine failure type.
  162.          *
  163.          * If the index could not ever be created, return MFD_NOT_EVER
  164.          * If the index can not be created under the present circumstances
  165.          * (even though it could be created under other circumstances),
  166.          * return MFD_NOT_NOW.
  167.          */
  168.         if(0) {
  169.             return MFD_CANNOT_CREATE_EVER;
  170.         }
  171.         else {
  172.             return MFD_CANNOT_CREATE_NOW;
  173.         }
  174.     }
  175.     return rc;
  176. } /* ${context}_validate_index */
  177. @end@ # row creation
  178. ##----------------------------------------------------------------------
  179. /**
  180.  * Setup up context with information needed to undo a set request.
  181.  *
  182.  * This function will be called before the individual node undo setup
  183.  * functions are called. If you need to do any undo setup that is not
  184.  * related to a specific column, you can do it here.
  185.  *
  186. @if $m2c_undo_embed == 0@
  187. @   if $m2c_data_init == 1@
  188.  * Note that the undo context has been allocated with
  189.  * ${context}_allocate_data(), but may need extra
  190.  * initialization similar to what you may have done in
  191.  * ${context}_rowreq_ctx_init().
  192. @   end@
  193. @end@
  194.  * Note that an individual node's undo_setup function will only be called
  195.  * if that node is being set to a new value.
  196.  *
  197.  * If there is any setup specific to a particular column (e.g. allocating
  198.  * memory for a string), you should do that setup in the node's undo_setup
  199.  * function, so it won't be done unless it is necessary.
  200.  *
  201.  * @param rowreq_ctx
  202.  *        Pointer to the table context (${context}_rowreq_ctx)
  203.  *
  204.  * @retval MFD_SUCCESS : success
  205.  * @retval MFD_ERROR   : error. set will fail.
  206.  */
  207. int
  208. ${context}_undo_setup( ${context}_rowreq_ctx *rowreq_ctx)
  209. {
  210.     int rc = MFD_SUCCESS;
  211.     DEBUGMSGTL(("verbose:${context}:${context}_undo_setup","calledn"));
  212.     /** we should have a non-NULL pointer */
  213.     netsnmp_assert( NULL != rowreq_ctx );
  214.     /*
  215.      * TODO:451:M: |-> Setup $context undo.
  216.      * set up $context undo information, in preparation for a set.
  217.      */
  218.     return rc;
  219. } /* ${context}_undo_setup */
  220. /**
  221.  * Cleanup up context undo information.
  222.  *
  223.  * This function will be called after set/commit processing. If you
  224.  * allocated any resources in undo_setup, this is the place to release
  225.  * those resources.
  226.  *
  227.  * This function is called regardless of the success or failure of the set
  228.  * request. If you need to perform different steps for cleanup depending
  229.  * on success or failure, you can add a flag to the rowreq_ctx.
  230.  *
  231.  * @param rowreq_ctx
  232.  *        Pointer to the table context (${context}_rowreq_ctx)
  233.  *
  234.  * @retval MFD_SUCCESS : success
  235.  * @retval MFD_ERROR   : error
  236.  */
  237. int
  238. ${context}_undo_cleanup( ${context}_rowreq_ctx *rowreq_ctx)
  239. {
  240.     int rc = MFD_SUCCESS;
  241.     DEBUGMSGTL(("verbose:${context}:${context}_undo_cleanup","calledn"));
  242.     /** we should have a non-NULL pointer */
  243.     netsnmp_assert( NULL != rowreq_ctx );
  244.     /*
  245.      * TODO:452:M: |-> Cleanup $context undo.
  246.      */
  247.     return rc;
  248. } /* ${context}_undo_cleanup */
  249. ##----------------------------------------------------------------------
  250. /**
  251.  * commit new values.
  252.  *
  253.  * At this point, you should have done everything you can to ensure that
  254.  * this commit will not fail.
  255.  *
  256.  * Should you need different behavior depending on which columns were
  257.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  258.  * set. The definitions for the FLAG_* bits can be found in
  259. @if $m2c_create_fewer_files != 1@
  260.  * ${context}_oids.h.
  261. @else@
  262.  * ${context}.h.
  263. @end@
  264.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  265.  *
  266.  * @param ${context}_rowreq_ctx
  267.  *        Pointer to the users context.
  268.  *
  269.  * @retval MFD_SUCCESS : success
  270.  * @retval MFD_ERROR   : error
  271.  */
  272. int
  273. ${context}_commit( ${context}_rowreq_ctx *rowreq_ctx)
  274. {
  275.     int rc = MFD_SUCCESS;
  276.     int             save_flags;
  277.     DEBUGMSGTL(("verbose:${context}:${context}_commit","calledn"));
  278.     /** we should have a non-NULL pointer */
  279.     netsnmp_assert( NULL != rowreq_ctx );
  280.     /*
  281.      * save flags, then clear until we actually do something
  282.      */
  283.     save_flags = rowreq_ctx->column_set_flags;
  284.     rowreq_ctx->column_set_flags = 0;
  285.     /*
  286.      * commit $context data
  287.      * 1) check the column's flag in save_flags to see if it was set.
  288.      * 2) clear the flag when you handle that column
  289.      * 3) set the column's flag in column_set_flags if it needs undo
  290.      *    processing in case of a failure.
  291.      */
  292. ##$example_start
  293. @   foreach $node nonindex@
  294. @      include m2c_setup_node.m2i@
  295. @      if $node.settable == 0@
  296. @          next@
  297. @      end@
  298.     if (save_flags & FLAG_$node.uc) {
  299.        save_flags &= ~FLAG_$node.uc; /* clear $node */
  300.        /*
  301.         * TODO:482:o: |-> commit column $node.
  302.         */
  303.        rc = -1;
  304.        if(-1 == rc) {
  305.            snmp_log(LOG_ERR,"$context column $node commit failedn");
  306.        }
  307.        else {
  308.             /*
  309.              * set flag, in case we need to undo $node
  310.              */
  311.             rowreq_ctx->column_set_flags |= FLAG_$node.uc;
  312.        }
  313.     }
  314. @   end@ # foreach $node
  315.     if (save_flags) {
  316.        snmp_log(LOG_ERR, "unhandled columns (0x%x) in commitn", save_flags);
  317.        return MFD_ERROR;
  318.     }
  319. ##$example_end
  320.     return rc;
  321. } /* ${context}_commit */
  322. /**
  323.  * undo commit new values.
  324.  *
  325.  * Should you need different behavior depending on which columns were
  326.  * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
  327.  * set. The definitions for the FLAG_* bits can be found in
  328. @if $m2c_create_fewer_files != 1@
  329.  * ${context}_oids.h.
  330. @else@
  331.  * ${context}.h.
  332. @end@
  333.  * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
  334.  *
  335.  * @param ${context}_rowreq_ctx
  336.  *        Pointer to the users context.
  337.  *
  338.  * @retval MFD_SUCCESS : success
  339.  * @retval MFD_ERROR   : error
  340.  */
  341. int
  342. ${context}_undo_commit( ${context}_rowreq_ctx *rowreq_ctx)
  343. {
  344.     int rc = MFD_SUCCESS;
  345.     DEBUGMSGTL(("verbose:${context}:${context}_undo_commit","calledn"));
  346.     /** we should have a non-NULL pointer */
  347.     netsnmp_assert( NULL != rowreq_ctx );
  348.     /*
  349.      * TODO:485:M: |-> Undo $context commit.
  350.      * check the column's flag in rowreq_ctx->column_set_flags to see
  351.      * if it was set during commit, then undo it.
  352.      *
  353.      * eg: if (rowreq_ctx->column_set_flags & FLAG_$node.uc) {}
  354.      */
  355. ##$example_start
  356. ##$example_end
  357.     return rc;
  358. } /* ${context}_undo_commit */
  359. @if $m2c_irreversible_commit == 1@
  360. ##----------------------------------------------------------------------
  361. /**
  362.  * perform commit actions that are not reversible
  363.  *
  364.  * THERE IS NO ATTEMPT AT RECOVERY FOR ERRORS FROM THIS STATE!
  365.  *
  366.  * @param ${context}_rowreq_ctx
  367.  *        Pointer to the users context.
  368.  *
  369.  * @retval MFD_SUCCESS : success
  370.  * @retval MFD_ERROR   : other error
  371.  */
  372. int
  373. ${context}_irreversible_commit( ${context}_rowreq_ctx *rowreq_ctx)
  374. {
  375.     int rc;
  376.     DEBUGMSGTL(("verbose:${context}:${context}_irreversible_commit","calledn"));
  377.     /** we should have a non-NULL pointer */
  378.     netsnmp_assert( NULL != rowreq_ctx );
  379.     /*
  380.      * TODO:495:o: Irreversible $context commit.
  381.      */
  382. ##$example_start
  383. ##$example_end
  384.     return MFD_SUCCESS;
  385. } /* ${context}_irreversible_commit */
  386. @end@ // irreversable commit
  387. ##
  388. ########################################################################
  389. @end@ // m2c_processing_type eq 'c'
  390. ########################################################################
  391. @if $m2c_mark_boundary == 1@
  392. /** END code generated by $RCSfile: parent-set.m2i,v $ $Revision: 1.24.2.2 $ */
  393. @end@