setSerialNo.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:2k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. /**  
  2.  *  This file implements the snmpSetSerialNo TestAndIncr counter
  3.  */
  4. #include <net-snmp/net-snmp-config.h>
  5. #include <net-snmp/net-snmp-includes.h>
  6. #include <net-snmp/agent/net-snmp-agent-includes.h>
  7. #include "setSerialNo.h"
  8. /*
  9.  * A watched spinlock can be fully implemented by the spinlock helper,
  10.  *  but we still need a suitable variable to hold the value.
  11.  */
  12. static int     setserialno;
  13.     /*
  14.      * TestAndIncr values should persist across agent restarts,
  15.      * so we need config handling routines to load and save the
  16.      * current value (incrementing this whenever it's loaded).
  17.      */
  18. void
  19. setserial_parse_config( const char *token, char *cptr )
  20. {
  21.     setserialno = atoi(cptr);
  22.     setserialno++;
  23.     DEBUGMSGTL(("snmpSetSerialNo",
  24.                 "Re-setting SnmpSetSerialNo to %dn", setserialno));
  25. }
  26. int
  27. setserial_store_config( int a, int b, void *c, void *d )
  28. {
  29.     char line[SNMP_MAXBUF_SMALL];
  30.     snprintf(line, SNMP_MAXBUF_SMALL, "setserialno %d", setserialno);
  31.     snmpd_store_config( line );
  32.     return 0;
  33. }
  34. void
  35. init_setSerialNo(void)
  36. {
  37.     oid set_serial_oid[] = { 1, 3, 6, 1, 6, 3, 1, 1, 6, 1 };
  38.     /*
  39.      * If we can't retain the TestAndIncr value across an agent restart,
  40.      *  then it should be initialised to a pseudo-random value.  So set it
  41.      *  as such, before registering the config handlers to override this.
  42.      */
  43. #ifdef SVR4
  44.     setserialno = lrand48();
  45. #else
  46.     setserialno = random();
  47. #endif
  48.     DEBUGMSGTL(("snmpSetSerialNo",
  49.                 "Initalizing SnmpSetSerialNo to %dn", setserialno));
  50.     snmpd_register_config_handler("setserialno", setserial_parse_config,
  51.                                   NULL, "integer");
  52.     snmp_register_callback(SNMP_CALLBACK_LIBRARY, SNMP_CALLBACK_STORE_DATA,
  53.                            setserial_store_config, NULL);
  54.     /*
  55.      * Register 'setserialno' as a watched spinlock object
  56.      */
  57.     netsnmp_register_watched_spinlock(
  58.         netsnmp_create_handler_registration("snmpSetSerialNo", NULL,
  59.                                    set_serial_oid,
  60.                                    OID_LENGTH(set_serial_oid),
  61.                                    HANDLER_CAN_RWRITE),
  62.                                        &setserialno );
  63.     DEBUGMSGTL(("scalar_int", "Done initalizing example scalar intn"));
  64. }