it seems to work now

This commit is contained in:
whottgen 2004-11-05 20:23:03 +00:00
parent 589a4f2f12
commit 326f9f7b19

View File

@ -5,49 +5,136 @@
#include <net-snmp/net-snmp-includes.h> #include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h> #include <net-snmp/agent/net-snmp-agent-includes.h>
#include "stats.h"
#include "smmapd.h"
typedef struct var_cnt_map_s {
char* var;
int cnt;
} var_cnt_map_t;
int number1 = 42; int number1 = 42;
int counter32 = 1;
int integer32 = 1;
var_cnt_map_t *var_cnt_map = NULL;
int num_var_cnt_map = 0;
int int
handle_number1(netsnmp_mib_handler *handler, handle_number1(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo, netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo, netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests) netsnmp_request_info *requests)
{ {
switch(reqinfo->mode) { switch(reqinfo->mode) {
case MODE_GET: case MODE_GET:
snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER,
(u_char *) &number1, (u_char *) &number1,
sizeof(number1)); sizeof(number1));
break; break;
default: default:
return SNMP_ERR_GENERR; return SNMP_ERR_GENERR;
} }
return SNMP_ERR_NOERROR; return SNMP_ERR_NOERROR;
} }
#define NETSNMP_REGISTER_SCALAR(A, B) netsnmp_register_scalar(netsnmp_create_handler_registration(#A, B, A##_oid, OID_LENGTH(A##_oid), HANDLER_CAN_RONLY)); printf("registered: %s\n", #A) int
handle_it(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests,
u_char type)
{
int i, cnt, value;
printf("*** handler: %s\n", reginfo->handlerName);
for (i=0; i<num_var_cnt_map; i++)
if (0 == strcmp(reginfo->handlerName, var_cnt_map[i].var)) {
cnt = var_cnt_map[i].cnt;
break;
}
printf("*** cnt: %d\n", cnt);
switch(reqinfo->mode) {
case MODE_GET:
value = getStatCounter(cnt);
snmp_set_var_typed_value(requests->requestvb, type,
(u_char *) &value,
sizeof(value));
break;
default:
return SNMP_ERR_GENERR;
}
return SNMP_ERR_NOERROR;
}
int
handle_counter32(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
return handle_it(handler, reginfo, reqinfo, requests, ASN_COUNTER);
}
int
handle_integer32(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests)
{
return handle_it(handler, reginfo, reqinfo, requests, ASN_INTEGER);
}
void map_var_cnt(int cnt, char* var) {
var_cnt_map = (var_cnt_map_t*) realloc(var_cnt_map, sizeof(var_cnt_map_t) * (num_var_cnt_map + 1));
var_cnt_map[num_var_cnt_map].var = var;
var_cnt_map[num_var_cnt_map].cnt = cnt;
num_var_cnt_map++;
}
#define NETSNMP_REGISTER_SCALAR(A, B, C) netsnmp_register_scalar(netsnmp_create_handler_registration(#A, B, A##_oid, OID_LENGTH(A##_oid), HANDLER_CAN_RONLY)); map_var_cnt(C, #A); printf("registered: %s\n", #A)
void void
init_dhsMIBObjects(void) init_dhsMIBObjects(void)
{ {
static oid dhsNumber1_oid[] = { 1,3,6,1,4,1,9676,2,1,1 }; static oid dhsNumber1_oid[] = { 1,3,6,1,4,1,9676,2,1,1 };
static oid dhsAccepted_oid[] = { 1,3,6,1,4,1,9676,2,1,2,1 };
static oid dhsFailed_oid[] = { 1,3,6,1,4,1,9676,2,1,2,2 };
static oid dhsRunningNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,3 };
static oid dhsNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,4 };
static oid dhsFailedNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,5 };
static oid dhsOKReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,6 };
static oid dhsTEMPReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,7 };
static oid dhsPERMReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,8 };
static oid dhsNOTFOUNDReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,9 };
static oid dhsIllegalInputFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,10 };
static oid dhsUnknownClassFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,11 };
static oid dhsTimeoutFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,12 };
static oid dhsNetStringFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,13 };
DEBUGMSGTL(("dhsMIBObjects", "Initializing\n")); DEBUGMSGTL(("dhsMIBObjects", "Initializing\n"));
/* NETSNMP_REGISTER_SCALAR(dhsNumber1, handle_number1, 0);
netsnmp_register_scalar( NETSNMP_REGISTER_SCALAR(dhsAccepted, handle_counter32, STAT_CNT_ACCEPTED);
netsnmp_create_handler_registration("dhsNumber1", handle_number1, NETSNMP_REGISTER_SCALAR(dhsFailed, handle_counter32, STAT_CNT_FAILED);
dhsNumber1_oid, OID_LENGTH(dhsNumber1_oid), NETSNMP_REGISTER_SCALAR(dhsRunningNwThreads, handle_integer32, STAT_CNT_NETWORKER_R_THREADS);
HANDLER_CAN_RONLY NETSNMP_REGISTER_SCALAR(dhsNwThreads, handle_counter32, STAT_CNT_NETWORKER_THREADS);
)); NETSNMP_REGISTER_SCALAR(dhsFailedNwThreads, handle_counter32, STAT_CNT_NETWORKER_THREADS_FAILED);
*/ NETSNMP_REGISTER_SCALAR(dhsOKReturned, handle_counter32, SMM_OK+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsNumber1, handle_number1); NETSNMP_REGISTER_SCALAR(dhsTEMPReturned, handle_counter32, SMM_TEMP_NOK+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsPERMReturned, handle_counter32, SMM_PERM_NOK+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsNOTFOUNDReturned, handle_counter32, SMM_NOT_FOUND_NOK+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsIllegalInputFailure, handle_counter32, SMM_ILLEGAL_INPUT+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsUnknownClassFailure, handle_counter32, SMM_UNKNOWN_CLASS+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsTimeoutFailure, handle_counter32, SMM_TIMEOUT_NOK+STAT_CNT_OFFSET);
NETSNMP_REGISTER_SCALAR(dhsNetStringFailure, handle_counter32, SMM_NETSTRING_UNPARSABLE+STAT_CNT_OFFSET);
} }
@ -58,13 +145,10 @@ void snmp_subagent_main () {
init_dhsMIBObjects(); init_dhsMIBObjects();
init_snmp("smmapd_subagent"); init_snmp("smmapd_subagent");
/* main loop here... */
while(1) { while(1) {
printf("*** main loop\n");
agent_check_and_process(1); agent_check_and_process(1);
} }
/* at shutdown time */
snmp_shutdown("mysubagent"); snmp_shutdown("mysubagent");
} }
#endif #endif