/* * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * * U.S. Government Rights - Commercial software. Government users are subject * to the Sun Microsystems, Inc. standard license agreement and applicable * provisions of the FAR and its supplements. * * * This distribution may include materials developed by third parties. Sun, * Sun Microsystems, the Sun logo and Solaris are trademarks or registered * trademarks of Sun Microsystems, Inc. in the U.S. and other countries. * */ /* * Note: this file originally auto-generated by mib2c using * : mib2c.scalar.conf,v 1.5 2002/07/18 14:18:52 dts12 Exp $ */ #include #include #include #include #include "sunHostPerf.h" int hp_cache_lifetime = 45; time_t rs_cache_time = 0; time_t hp_cache_now = 0; static struct statstime sts; static char hostName[10]; void get_rstats() { (void) time(&hp_cache_now); if ((hp_cache_now - rs_cache_time) <= hp_cache_lifetime) return; rs_cache_time = hp_cache_now; (void) rstat(hostName, &sts); } /* Initializes the sunHostPerf module */ void init_sunHostPerf(void) { static oid rsNiceModeTime_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 2, 0 }; static oid rsIdleModeTime_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 4, 0 }; static oid rsVSwapIn_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 11, 0 }; static oid rsDiskXfer1_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 5, 0 }; static oid rsDiskXfer2_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 6, 0 }; static oid rsIfInErrors_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 16, 0 }; static oid rsDiskXfer3_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 7, 0 }; static oid rsVSwapOut_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 12, 0 }; static oid rsVPagesOut_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 10, 0 }; static oid rsDiskXfer4_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 8, 0 }; static oid rsSystemProcessTime_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 3, 0 }; static oid rsIfInPackets_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 14, 0 }; static oid rsVPagesIn_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 9, 0 }; static oid rsIfOutErrors_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 17, 0 }; static oid rsUserProcessTime_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 1, 0 }; static oid rsIfOutPackets_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 15, 0 }; static oid rsVIntr_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 13, 0 }; static oid rsIfCollisions_oid[] = { 1, 3, 6, 1, 4, 1, 42, 3, 13, 18, 0 }; DEBUGMSGTL(("sunHostPerf", "Initializing\n")); /* Initialize host, current time */ strcpy(hostName, "localhost"); (void) time(&hp_cache_now); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsNiceModeTime", get_rsNiceModeTime, rsNiceModeTime_oid, OID_LENGTH(rsNiceModeTime_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIdleModeTime", get_rsIdleModeTime, rsIdleModeTime_oid, OID_LENGTH(rsIdleModeTime_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsVSwapIn", get_rsVSwapIn, rsVSwapIn_oid, OID_LENGTH(rsVSwapIn_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsDiskXfer1", get_rsDiskXfer1, rsDiskXfer1_oid, OID_LENGTH(rsDiskXfer1_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsDiskXfer2", get_rsDiskXfer2, rsDiskXfer2_oid, OID_LENGTH(rsDiskXfer2_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIfInErrors", get_rsIfInErrors, rsIfInErrors_oid, OID_LENGTH(rsIfInErrors_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsDiskXfer3", get_rsDiskXfer3, rsDiskXfer3_oid, OID_LENGTH(rsDiskXfer3_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsVSwapOut", get_rsVSwapOut, rsVSwapOut_oid, OID_LENGTH(rsVSwapOut_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsVPagesOut", get_rsVPagesOut, rsVPagesOut_oid, OID_LENGTH(rsVPagesOut_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsDiskXfer4", get_rsDiskXfer4, rsDiskXfer4_oid, OID_LENGTH(rsDiskXfer4_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsSystemProcessTime", get_rsSystemProcessTime, rsSystemProcessTime_oid, OID_LENGTH(rsSystemProcessTime_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIfInPackets", get_rsIfInPackets, rsIfInPackets_oid, OID_LENGTH(rsIfInPackets_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsVPagesIn", get_rsVPagesIn, rsVPagesIn_oid, OID_LENGTH(rsVPagesIn_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIfOutErrors", get_rsIfOutErrors, rsIfOutErrors_oid, OID_LENGTH(rsIfOutErrors_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsUserProcessTime", get_rsUserProcessTime, rsUserProcessTime_oid, OID_LENGTH(rsUserProcessTime_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIfOutPackets", get_rsIfOutPackets, rsIfOutPackets_oid, OID_LENGTH(rsIfOutPackets_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsVIntr", get_rsVIntr, rsVIntr_oid, OID_LENGTH(rsVIntr_oid), HANDLER_CAN_RONLY)); netsnmp_register_read_only_instance(netsnmp_create_handler_registration ("rsIfCollisions", get_rsIfCollisions, rsIfCollisions_oid, OID_LENGTH(rsIfCollisions_oid), HANDLER_CAN_RONLY)); } int get_rsNiceModeTime(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long cp_time; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); cp_time = (long)sts.cp_time[RSTAT_CPU_NICE]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &cp_time, sizeof (cp_time)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIdleModeTime(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long cp_time; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); cp_time = (long)sts.cp_time[RSTAT_CPU_IDLE]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &cp_time, sizeof (cp_time)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsVSwapIn(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { u_long v_pswpin; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); v_pswpin = (u_long)sts.v_pswpin; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &v_pswpin, sizeof (v_pswpin)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsDiskXfer1(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long dk_xfer; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); dk_xfer = (long)sts.dk_xfer[0]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &dk_xfer, sizeof (dk_xfer)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsDiskXfer2(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long dk_xfer; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); dk_xfer = sts.dk_xfer[1]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &dk_xfer, sizeof (dk_xfer)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIfInErrors(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long if_ierrors; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); if_ierrors = (long)sts.if_ierrors; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &if_ierrors, sizeof (if_ierrors)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsDiskXfer3(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long dk_xfer; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); dk_xfer = (long)sts.dk_xfer[2]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &dk_xfer, sizeof (dk_xfer)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsVSwapOut(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { u_long v_pswpout; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); v_pswpout = (u_long)sts.v_pswpout; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &v_pswpout, sizeof (v_pswpout)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsVPagesOut(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { u_long v_pgpgout; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); v_pgpgout = (u_long)sts.v_pgpgout; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &v_pgpgout, sizeof (v_pgpgout)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsDiskXfer4(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long dk_xfer; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); dk_xfer = (long)sts.dk_xfer[3]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &dk_xfer, sizeof (dk_xfer)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsSystemProcessTime(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long cp_time; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); cp_time = (long)sts.cp_time[RSTAT_CPU_SYS]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &cp_time, sizeof (cp_time)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIfInPackets(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long if_ipackets; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); if_ipackets = (long)sts.if_ipackets; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &if_ipackets, sizeof (if_ipackets)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsVPagesIn(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { u_long v_pgpgin; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); v_pgpgin = (u_long)sts.v_pgpgin; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &v_pgpgin, sizeof (v_pgpgin)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIfOutErrors(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long if_oerrors; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); if_oerrors = (long)sts.if_oerrors; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &if_oerrors, sizeof (if_oerrors)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsUserProcessTime(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long cp_time; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); cp_time = sts.cp_time[RSTAT_CPU_USER]; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &cp_time, sizeof (cp_time)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIfOutPackets(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long if_opackets; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); if_opackets = (long)sts.if_opackets; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &if_opackets, sizeof (if_opackets)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsVIntr(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { u_long v_intr; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); v_intr = (u_long)sts.v_intr; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &v_intr, sizeof (v_intr)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); } int get_rsIfCollisions(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info *requests) { long if_collisions; /* * 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. */ switch (reqinfo->mode) { case MODE_GET: get_rstats(); if_collisions = (long)sts.if_collisions; snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER, (u_char *) &if_collisions, sizeof (if_collisions)); break; default: /* we should never get here, so this is a really bad error */ return (SNMP_ERR_GENERR); } return (SNMP_ERR_NOERROR); }