mib2c.scalar.conf
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. ## -*- c -*-
  2. ######################################################################
  3. ## Do the .h file
  4. ######################################################################
  5. @open ${name}.h@
  6. /*
  7.  * Note: this file originally auto-generated by mib2c using
  8.  *        $Id: mib2c.scalar.conf,v 1.8 2004/10/14 12:57:34 dts12 Exp $
  9.  */
  10. #ifndef $name.uc_H
  11. #define $name.uc_H
  12. /* function declarations */
  13. void init_$name(void);
  14. @foreach $i scalar@
  15. Netsnmp_Node_Handler handle_${i};
  16. @end@
  17. #endif /* $name.uc_H */
  18. ######################################################################
  19. ## Do the .c file
  20. ######################################################################
  21. @open ${name}.c@
  22. /*
  23.  * Note: this file originally auto-generated by mib2c using
  24.  *        $Id: mib2c.scalar.conf,v 1.8 2004/10/14 12:57:34 dts12 Exp $
  25.  */
  26. #include <net-snmp/net-snmp-config.h>
  27. #include <net-snmp/net-snmp-includes.h>
  28. #include <net-snmp/agent/net-snmp-agent-includes.h>
  29. #include "${name}.h"
  30. /** Initializes the $name module */
  31. void
  32. init_$name(void)
  33. {
  34.   @foreach $i scalar@
  35.     static oid ${i}_oid[] = { $i.commaoid };
  36.   @end@
  37.   DEBUGMSGTL(("$name", "Initializingn"));
  38.   @foreach $i scalar@
  39.     netsnmp_register_scalar(
  40.         netsnmp_create_handler_registration("$i", handle_$i,
  41.                                ${i}_oid, OID_LENGTH(${i}_oid),
  42.     @if !$i.settable@
  43.                                HANDLER_CAN_RONLY
  44.     @end@
  45.     @if $i.settable@
  46.                                HANDLER_CAN_RWRITE
  47.     @end@
  48.         ));
  49.   @end@
  50. }
  51. @foreach $i scalar@
  52. int
  53. handle_$i(netsnmp_mib_handler *handler,
  54.                           netsnmp_handler_registration *reginfo,
  55.                           netsnmp_agent_request_info   *reqinfo,
  56.                           netsnmp_request_info         *requests)
  57. {
  58.     /* We are never called for a GETNEXT if it's registered as a
  59.        "instance", as it's "magically" handled for us.  */
  60.     /* a instance handler also only hands us one request at a time, so
  61.        we don't need to loop over a list of requests; we'll only get one. */
  62.     
  63.     switch(reqinfo->mode) {
  64.         case MODE_GET:
  65.             snmp_set_var_typed_value(requests->requestvb, $i.type,
  66.                                      (u_char *) /* XXX: a pointer to the scalar's data */,
  67.                                      /* XXX: the length of the data in bytes */);
  68.             break;
  69.         @if $i.settable@
  70.         /*
  71.          * SET REQUEST
  72.          *
  73.          * multiple states in the transaction.  See:
  74.          * http://www.net-snmp.org/tutorial-5/toolkit/mib_module/set-actions.jpg
  75.          */
  76.         case MODE_SET_RESERVE1:
  77.             if (/* XXX: check incoming data in requests->requestvb->val.XXX for failures, like an incorrect type or an illegal value or ... */) {
  78.                 netsnmp_set_request_error(reqinfo, requests, /* XXX: set error code depending on problem (like SNMP_ERR_WRONGTYPE or SNMP_ERR_WRONGVALUE or ... */);
  79.             }
  80.             break;
  81.         case MODE_SET_RESERVE2:
  82.             /* XXX malloc "undo" storage buffer */
  83.             if (/* XXX if malloc, or whatever, failed: */) {
  84.                 netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_RESOURCEUNAVAILABLE);
  85.             }
  86.             break;
  87.         case MODE_SET_FREE:
  88.             /* XXX: free resources allocated in RESERVE1 and/or
  89.                RESERVE2.  Something failed somewhere, and the states
  90.                below won't be called. */
  91.             break;
  92.         case MODE_SET_ACTION:
  93.             /* XXX: perform the value change here */
  94.             if (/* XXX: error? */) {
  95.                 netsnmp_set_request_error(reqinfo, requests, /* some error */);
  96.             }
  97.             break;
  98.         case MODE_SET_COMMIT:
  99.             /* XXX: delete temporary storage */
  100.             if (/* XXX: error? */) {
  101.                 /* try _really_really_ hard to never get to this point */
  102.                 netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
  103.             }
  104.             break;
  105.         case MODE_SET_UNDO:
  106.             /* XXX: UNDO and return to previous value for the object */
  107.             if (/* XXX: error? */) {
  108.                 /* try _really_really_ hard to never get to this point */
  109.                 netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_UNDOFAILED);
  110.             }
  111.             break;
  112.         @end@
  113.         default:
  114.             /* we should never get here, so this is a really bad error */
  115.             snmp_log(LOG_ERR, "unknown mode (%d) in handle_${i}n", reqinfo->mode );
  116.             return SNMP_ERR_GENERR;
  117.     }
  118.     return SNMP_ERR_NOERROR;
  119. }
  120. @end@