diff --git a/smmapdfw/mib/DE-HOTTIS-SMMAPD-MIB.txt b/smmapdfw/mib/DE-HOTTIS-SMMAPD-MIB.txt index c7a8d82..b7ef316 100644 --- a/smmapdfw/mib/DE-HOTTIS-SMMAPD-MIB.txt +++ b/smmapdfw/mib/DE-HOTTIS-SMMAPD-MIB.txt @@ -35,6 +35,7 @@ DhsServerStat ::= dhsAccepted Counter32, dhsFailed Counter32, dhsRunningNwThreads Integer32, + dhsNwThreads Counter32, dhsFailedNwThreads Counter32, dhsOKReturned Counter32, dhsTEMPReturned Counter32, @@ -63,95 +64,103 @@ dhsAccepted OBJECT-TYPE "Connections accepted by the server" ::= { dhsServerStat 1 } --- dhsFailed OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Connections the server failed to accept" --- ::= { dhsServerStat 2 } --- --- dhsRunningNwThreads OBJECT-TYPE --- SYNTAX Integer32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Running networker threads" --- ::= { dhsServerStat 3 } --- --- dhsFailedNwThreads OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Networker threads failed to start" --- ::= { dhsServerStat 4 } --- --- dhsOKReturned OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "OK returned to sendmail" --- ::= { dhsServerStat 5 } --- --- dhsTEMPReturned OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "TEMP failure returned to sendmail" --- ::= { dhsServerStat 6 } --- --- dhsPERMReturned OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "PERM failure returned to sendmail" --- ::= { dhsServerStat 7 } --- --- dhsNOTFOUNDReturned OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "NOTFOUND returned to sendmail" --- ::= { dhsServerStat 8 } --- --- dhsIllegalInputFailure OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Class not found (PERM) returned to sendmail" --- ::= { dhsServerStat 9 } --- --- dhsUnknownClassFailure OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Class not found (PERM) returned to sendmail" --- ::= { dhsServerStat 10 } --- --- dhsTimeoutFailure OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "Timeout failure returned to sendmail" --- ::= { dhsServerStat 11 } --- --- dhsNetStringFailure OBJECT-TYPE --- SYNTAX Counter32 --- MAX-ACCESS read-only --- STATUS current --- DESCRIPTION --- "NetString (NOK) returned to sendmail" --- ::= { dhsServerStat 12 } --- --- --- +dhsFailed OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Connections the server failed to accept" + ::= { dhsServerStat 2 } + +dhsRunningNwThreads OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Running networker threads" + ::= { dhsServerStat 3 } + +dhsNwThreads OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Networker threads" + ::= { dhsServerStat 4 } + +dhsFailedNwThreads OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Networker threads failed to start" + ::= { dhsServerStat 5 } + +dhsOKReturned OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OK returned to sendmail" + ::= { dhsServerStat 6 } + +dhsTEMPReturned OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "TEMP failure returned to sendmail" + ::= { dhsServerStat 7 } + +dhsPERMReturned OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "PERM failure returned to sendmail" + ::= { dhsServerStat 8 } + +dhsNOTFOUNDReturned OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "NOTFOUND returned to sendmail" + ::= { dhsServerStat 9 } + +dhsIllegalInputFailure OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Class not found (PERM) returned to sendmail" + ::= { dhsServerStat 10 } + +dhsUnknownClassFailure OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Class not found (PERM) returned to sendmail" + ::= { dhsServerStat 11 } + +dhsTimeoutFailure OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Timeout failure returned to sendmail" + ::= { dhsServerStat 12 } + +dhsNetStringFailure OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "NetString (NOK) returned to sendmail" + ::= { dhsServerStat 13 } + + + END diff --git a/smmapdfw/smmapd/snmp_subagent.c b/smmapdfw/smmapd/snmp_subagent.c index e18d388..499cded 100644 --- a/smmapdfw/smmapd/snmp_subagent.c +++ b/smmapdfw/smmapd/snmp_subagent.c @@ -5,8 +5,6 @@ #include #include -int number1 = 42; -int accepted = 43; int handle_counter32(netsnmp_mib_handler *handler, @@ -14,13 +12,28 @@ handle_counter32(netsnmp_mib_handler *handler, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { - /* We are never called for a GETNEXT if it's registered as a - "instance", as it's "magically" handled for us. */ + return handle_it(handler, reginfo, reqinfo, requests, ASN_COUNTER); +} - /* 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. */ +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); +} +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; + accepted++; printf("*** name: "); for (i=0; irequestvb->name_length; i++) { printf("%d ", requests->requestvb->name[i]); @@ -30,14 +43,12 @@ printf("\n"); switch(reqinfo->mode) { case MODE_GET: - snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, - (u_char *) &number1/* XXX: a pointer to the scalar's data */, - sizeof(number1) /* XXX: the length of the data in bytes */); + snmp_set_var_typed_value(requests->requestvb, type, + (u_char *) &accepted, + sizeof(accepted)); break; - default: - /* we should never get here, so this is a really bad error */ return SNMP_ERR_GENERR; } @@ -45,77 +56,75 @@ printf("\n"); } int -handle_dhsAccepted(netsnmp_mib_handler *handler, +handle_number1(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { - /* We are never called for a GETNEXT if it's registered as a - "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. */ + static int number1 = 42; switch(reqinfo->mode) { - case MODE_GET: snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, - (u_char *) &accepted/* XXX: a pointer to the scalar's data */, - sizeof(accepted) /* XXX: the length of the data in bytes */); + (u_char *) &number1, + sizeof(number1)); break; - default: - /* we should never get here, so this is a really bad error */ return SNMP_ERR_GENERR; } return SNMP_ERR_NOERROR; } -/** Initializes the dhsMIBObjects module */ -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 }; +#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_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")); - netsnmp_register_scalar( - netsnmp_create_handler_registration("dhsNumber1", handle_counter32, - dhsNumber1_oid, OID_LENGTH(dhsNumber1_oid), - HANDLER_CAN_RONLY - )); - netsnmp_register_scalar( - netsnmp_create_handler_registration("dhsAccepted", handle_counter32, - dhsAccepted_oid, OID_LENGTH(dhsAccepted_oid), - HANDLER_CAN_RONLY - )); - + NETSNMP_REGISTER_SCALAR(dhsNumber1, handle_number1); + NETSNMP_REGISTER_SCALAR(dhsAccepted, handle_counter32); + NETSNMP_REGISTER_SCALAR(dhsFailed, handle_counter32); + NETSNMP_REGISTER_SCALAR(dhsRunningNwThreads, handle_integer32); + NETSNMP_REGISTER_SCALAR(dhsNwThreads, handle_counter32); + NETSNMP_REGISTER_SCALAR(dhsFailedNwThreads, handle_counter32); + NETSNMP_REGISTER_SCALAR(dhsOKReturned, handle_counter32); + NETSNMP_REGISTER_SCALAR(dhsTEMPReturned, handle_counter32); + 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 () { - int res; - -printf("snmp_subagent_main: 1\n"); snmp_enable_stderrlog(); -printf("snmp_subagent_main: 2\n"); netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1); -printf("snmp_subagent_main: 3\n"); init_agent("smmapd_subagent"); -printf("snmp_subagent_main: 4\n"); - init_dhsMIBObjects(); -printf("snmp_subagent_main: 5\n"); + init_subagent(); init_snmp("smmapd_subagent"); -printf("snmp_subagent_main: 6\n"); /* main loop here... */ while(1) { -printf("snmp_subagent_main: main loop\n"); - res=agent_check_and_process(1); -printf("snmp_subagent_main: result in main loop: %d\n",res); + agent_check_and_process(1); } /* at shutdown time */