snmp stuff

This commit is contained in:
whottgen 2004-11-05 12:55:43 +00:00
parent 82e2f931e7
commit 44719d72e5
2 changed files with 159 additions and 141 deletions

View File

@ -35,6 +35,7 @@ DhsServerStat ::=
dhsAccepted Counter32, dhsAccepted Counter32,
dhsFailed Counter32, dhsFailed Counter32,
dhsRunningNwThreads Integer32, dhsRunningNwThreads Integer32,
dhsNwThreads Counter32,
dhsFailedNwThreads Counter32, dhsFailedNwThreads Counter32,
dhsOKReturned Counter32, dhsOKReturned Counter32,
dhsTEMPReturned Counter32, dhsTEMPReturned Counter32,
@ -63,95 +64,103 @@ dhsAccepted OBJECT-TYPE
"Connections accepted by the server" "Connections accepted by the server"
::= { dhsServerStat 1 } ::= { dhsServerStat 1 }
-- dhsFailed OBJECT-TYPE dhsFailed OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Connections the server failed to accept" "Connections the server failed to accept"
-- ::= { dhsServerStat 2 } ::= { dhsServerStat 2 }
--
-- dhsRunningNwThreads OBJECT-TYPE dhsRunningNwThreads OBJECT-TYPE
-- SYNTAX Integer32 SYNTAX Integer32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Running networker threads" "Running networker threads"
-- ::= { dhsServerStat 3 } ::= { dhsServerStat 3 }
--
-- dhsFailedNwThreads OBJECT-TYPE dhsNwThreads OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Networker threads failed to start" "Networker threads"
-- ::= { dhsServerStat 4 } ::= { dhsServerStat 4 }
--
-- dhsOKReturned OBJECT-TYPE dhsFailedNwThreads OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "OK returned to sendmail" "Networker threads failed to start"
-- ::= { dhsServerStat 5 } ::= { dhsServerStat 5 }
--
-- dhsTEMPReturned OBJECT-TYPE dhsOKReturned OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "TEMP failure returned to sendmail" "OK returned to sendmail"
-- ::= { dhsServerStat 6 } ::= { dhsServerStat 6 }
--
-- dhsPERMReturned OBJECT-TYPE dhsTEMPReturned OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "PERM failure returned to sendmail" "TEMP failure returned to sendmail"
-- ::= { dhsServerStat 7 } ::= { dhsServerStat 7 }
--
-- dhsNOTFOUNDReturned OBJECT-TYPE dhsPERMReturned OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "NOTFOUND returned to sendmail" "PERM failure returned to sendmail"
-- ::= { dhsServerStat 8 } ::= { dhsServerStat 8 }
--
-- dhsIllegalInputFailure OBJECT-TYPE dhsNOTFOUNDReturned OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Class not found (PERM) returned to sendmail" "NOTFOUND returned to sendmail"
-- ::= { dhsServerStat 9 } ::= { dhsServerStat 9 }
--
-- dhsUnknownClassFailure OBJECT-TYPE dhsIllegalInputFailure OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Class not found (PERM) returned to sendmail" "Class not found (PERM) returned to sendmail"
-- ::= { dhsServerStat 10 } ::= { dhsServerStat 10 }
--
-- dhsTimeoutFailure OBJECT-TYPE dhsUnknownClassFailure OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "Timeout failure returned to sendmail" "Class not found (PERM) returned to sendmail"
-- ::= { dhsServerStat 11 } ::= { dhsServerStat 11 }
--
-- dhsNetStringFailure OBJECT-TYPE dhsTimeoutFailure OBJECT-TYPE
-- SYNTAX Counter32 SYNTAX Counter32
-- MAX-ACCESS read-only MAX-ACCESS read-only
-- STATUS current STATUS current
-- DESCRIPTION DESCRIPTION
-- "NetString (NOK) returned to sendmail" "Timeout failure returned to sendmail"
-- ::= { dhsServerStat 12 } ::= { dhsServerStat 12 }
--
-- dhsNetStringFailure OBJECT-TYPE
-- SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"NetString (NOK) returned to sendmail"
::= { dhsServerStat 13 }
END END

View File

@ -5,8 +5,6 @@
#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>
int number1 = 42;
int accepted = 43;
int int
handle_counter32(netsnmp_mib_handler *handler, handle_counter32(netsnmp_mib_handler *handler,
@ -14,13 +12,28 @@ handle_counter32(netsnmp_mib_handler *handler,
netsnmp_agent_request_info *reqinfo, netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests) netsnmp_request_info *requests)
{ {
/* We are never called for a GETNEXT if it's registered as a return handle_it(handler, reginfo, reqinfo, requests, ASN_COUNTER);
"instance", as it's "magically" handled for us. */ }
/* a instance handler also only hands us one request at a time, so int
we don't need to loop over a list of requests; we'll only get one. */ 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);
}
int
handle_it(netsnmp_mib_handler *handler,
netsnmp_handler_registration *reginfo,
netsnmp_agent_request_info *reqinfo,
netsnmp_request_info *requests,
u_char type)
{
static int accepted = 0;
int i; int i;
accepted++;
printf("*** name: "); printf("*** name: ");
for (i=0; i<requests->requestvb->name_length; i++) { for (i=0; i<requests->requestvb->name_length; i++) {
printf("%d ", requests->requestvb->name[i]); printf("%d ", requests->requestvb->name[i]);
@ -30,14 +43,12 @@ printf("\n");
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, type,
(u_char *) &number1/* XXX: a pointer to the scalar's data */, (u_char *) &accepted,
sizeof(number1) /* XXX: the length of the data in bytes */); sizeof(accepted));
break; break;
default: default:
/* we should never get here, so this is a really bad error */
return SNMP_ERR_GENERR; return SNMP_ERR_GENERR;
} }
@ -45,77 +56,75 @@ printf("\n");
} }
int int
handle_dhsAccepted(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)
{ {
/* We are never called for a GETNEXT if it's registered as a static int number1 = 42;
"instance", as it's "magically" handled for us. */
/* a instance handler also only hands us one request at a time, so
we don't need to loop over a list of requests; we'll only get one. */
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 *) &accepted/* XXX: a pointer to the scalar's data */, (u_char *) &number1,
sizeof(accepted) /* XXX: the length of the data in bytes */); sizeof(number1));
break; break;
default: default:
/* we should never get here, so this is a really bad error */
return SNMP_ERR_GENERR; return SNMP_ERR_GENERR;
} }
return SNMP_ERR_NOERROR; return SNMP_ERR_NOERROR;
} }
/** Initializes the dhsMIBObjects module */ #define NETSNMP_REGISTER_SCALAR(A, B) netsnmp_register_scalar(netsnmp_create_handler_registration(#A, B, A##_oid, OID_LENGTH(A##_oid), HANDLER_CAN_RONLY))
void
init_dhsMIBObjects(void)
{
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 };
void
init_subagent(void)
{
static oid dhsNumber1_oid[] = { 1,3,6,1,4,1,9676,2,1,1 }; /* counter */
static oid dhsAccepted_oid[] = { 1,3,6,1,4,1,9676,2,1,2,1 }; /* counter */
static oid dhsFailed_oid[] = { 1,3,6,1,4,1,9676,2,1,2,2 }; /* counter */
static oid dhsRunningNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,3 }; /* integer */
static oid dhsNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,4 }; /* counter */
static oid dhsFailedNwThreads_oid[] = { 1,3,6,1,4,1,9676,2,1,2,5 }; /* counter */
static oid dhsOKReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,6 }; /* counter */
static oid dhsTEMPReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,7 }; /* counter */
static oid dhsPERMReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,8 }; /* counter */
static oid dhsNOTFOUNDReturned_oid[] = { 1,3,6,1,4,1,9676,2,1,2,9 }; /* counter */
static oid dhsIllegalInputFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,10 }; /* counter */
static oid dhsUnknownClassFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,11 }; /* counter */
static oid dhsTimeoutFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,12 }; /* counter */
static oid dhsNetStringFailure_oid[] = { 1,3,6,1,4,1,9676,2,1,2,13 }; /* counter */
DEBUGMSGTL(("dhsMIBObjects", "Initializing\n")); DEBUGMSGTL(("dhsMIBObjects", "Initializing\n"));
netsnmp_register_scalar( NETSNMP_REGISTER_SCALAR(dhsNumber1, handle_number1);
netsnmp_create_handler_registration("dhsNumber1", handle_counter32, NETSNMP_REGISTER_SCALAR(dhsAccepted, handle_counter32);
dhsNumber1_oid, OID_LENGTH(dhsNumber1_oid), NETSNMP_REGISTER_SCALAR(dhsFailed, handle_counter32);
HANDLER_CAN_RONLY NETSNMP_REGISTER_SCALAR(dhsRunningNwThreads, handle_integer32);
)); NETSNMP_REGISTER_SCALAR(dhsNwThreads, handle_counter32);
netsnmp_register_scalar( NETSNMP_REGISTER_SCALAR(dhsFailedNwThreads, handle_counter32);
netsnmp_create_handler_registration("dhsAccepted", handle_counter32, NETSNMP_REGISTER_SCALAR(dhsOKReturned, handle_counter32);
dhsAccepted_oid, OID_LENGTH(dhsAccepted_oid), NETSNMP_REGISTER_SCALAR(dhsTEMPReturned, handle_counter32);
HANDLER_CAN_RONLY NETSNMP_REGISTER_SCALAR(dhsPERMReturned, handle_counter32);
)); NETSNMP_REGISTER_SCALAR(dhsNOTFOUNDReturned, handle_counter32);
NETSNMP_REGISTER_SCALAR(dhsIllegalInputFailure, handle_counter32);
NETSNMP_REGISTER_SCALAR(dhsUnknownClassFailure, handle_counter32);
NETSNMP_REGISTER_SCALAR(dhsTimeoutFailure, handle_counter32);
NETSNMP_REGISTER_SCALAR(dhsNetStringFailure, handle_counter32);
} }
void snmp_subagent_main () { void snmp_subagent_main () {
int res;
printf("snmp_subagent_main: 1\n");
snmp_enable_stderrlog(); snmp_enable_stderrlog();
printf("snmp_subagent_main: 2\n");
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1); netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
printf("snmp_subagent_main: 3\n");
init_agent("smmapd_subagent"); init_agent("smmapd_subagent");
printf("snmp_subagent_main: 4\n"); init_subagent();
init_dhsMIBObjects();
printf("snmp_subagent_main: 5\n");
init_snmp("smmapd_subagent"); init_snmp("smmapd_subagent");
printf("snmp_subagent_main: 6\n");
/* main loop here... */ /* main loop here... */
while(1) { while(1) {
printf("snmp_subagent_main: main loop\n"); agent_check_and_process(1);
res=agent_check_and_process(1);
printf("snmp_subagent_main: result in main loop: %d\n",res);
} }
/* at shutdown time */ /* at shutdown time */