u_char * var_snmp(struct variable *vp, oid * name, size_t * length, int exact, size_t * var_len, WriteMethod ** write_method) { static long long_ret; *write_method = 0; /* assume it isnt writable for the time being */ *var_len = sizeof(long_ret); /* assume an integer and change later if not */ if (header_generic(vp, name, length, exact, var_len, write_method) == MATCH_FAILED) return NULL; /* * this is where we do the value assignments for the mib results. */ if (vp->magic == SNMPENABLEAUTHENTRAPS) { *write_method = write_snmp; long_return = snmp_enableauthentraps; return (u_char *) & long_return; } else if ((vp->magic >= 1) && (vp->magic <= (STAT_SNMP_STATS_END - STAT_SNMP_STATS_START + 1))) { long_ret = snmp_get_statistic(vp->magic + STAT_SNMP_STATS_START - 1); return (unsigned char *) &long_ret; } return NULL; }
u_char * var_usmStats( struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { /* variables we may use later */ static long long_ret; int tmagic; *write_method = 0; /* assume it isnt writable for the time being */ *var_len = sizeof(long_ret); /* assume an integer and change later if not */ if (header_generic(vp,name,length,exact,var_len,write_method)) return 0; /* this is where we do the value assignments for the mib results. */ tmagic = vp->magic; if ( (tmagic >= 0) && (tmagic <= (STAT_USM_STATS_END - STAT_USM_STATS_START)) ) { long_ret = snmp_get_statistic(tmagic + STAT_USM_STATS_START); return (unsigned char *) &long_ret; } return 0; }
int get_unavailable_context_count(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { /* * we're only called for GETs of the right node, so this is easy: */ u_long long_ret = snmp_get_statistic(STAT_SNMPUNAVAILABLECONTEXTS); snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) & long_ret, sizeof(long_ret)); return SNMP_ERR_NOERROR; }
static int netsnmp_get_statistic_helper_handler(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { if (reqinfo->mode == MODE_GET) { const oid idx = requests->requestvb->name[reginfo->rootoid_len - 2] + (oid)(uintptr_t)handler->myvoid; uint32_t value; if (idx > NETSNMP_STAT_MAX_STATS) return SNMP_ERR_GENERR; value = snmp_get_statistic(idx); snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (const u_char*)&value, sizeof(value)); return SNMP_ERR_NOERROR; } return SNMP_ERR_GENERR; }
static int handle_snmp(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { switch (reqinfo->mode) { case MODE_GET: { oid idx = requests->requestvb->name[OID_LENGTH(snmp_oid)]; switch(idx) { case 7: case 23: case 30: netsnmp_set_request_error(reqinfo, requests, SNMP_NOSUCHOBJECT); break; default: { u_int value = snmp_get_statistic(idx - 1 + STAT_SNMPINPKTS); snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *)&value, sizeof(value)); } break; } } break; default: snmp_log(LOG_ERR, "unknown mode (%d) in handle_snmp\n", reqinfo->mode); return SNMP_ERR_GENERR; } return SNMP_ERR_NOERROR; }