u_char * var_system(struct variable *vp, oid *name, int *length, int exact, int *var_len, WriteMethod **write_method) { struct timeval now, diff; if (header_system(vp, name, length, exact, var_len, write_method) == MATCH_FAILED ) return NULL; switch (vp->magic){ case VERSION_DESCR: *var_len = strlen(version_descr); *write_method = writeVersion; return (u_char *)version_descr; case VERSIONID: *var_len = version_id_len*sizeof(version_id[0]); return (u_char *)version_id; case UPTIME: #if 0 gettimeofday(&now, NULL); now.tv_sec--; now.tv_usec += 1000000L; diff.tv_sec = now.tv_sec - starttime.tv_sec; diff.tv_usec = now.tv_usec - starttime.tv_usec; if (diff.tv_usec > 1000000L){ diff.tv_usec -= 1000000L; diff.tv_sec++; } long_return = ((diff.tv_sec * 100) + (diff.tv_usec / 10000)); #else long_return = get_uptime(); #endif return ((u_char *) &long_return); case SYSCONTACT: *var_len = strlen(sysContact); *write_method = writeSystem; return (u_char *)sysContact; case SYSTEMNAME: *var_len = strlen(sysName); *write_method = writeSystem; return (u_char *)sysName; case SYSLOCATION: *var_len = strlen(sysLocation); *write_method = writeSystem; return (u_char *)sysLocation; case SYSSERVICES: long_return = 72; return (u_char *)&long_return; #ifdef USING_MIBII_SYSORTABLE_MODULE case SYSORLASTCHANGE: diff.tv_sec = sysOR_lastchange.tv_sec - 1 - starttime.tv_sec; diff.tv_usec = sysOR_lastchange.tv_usec + 1000000L - starttime.tv_usec; if (diff.tv_usec > 1000000L){ diff.tv_usec -= 1000000L; diff.tv_sec++; } if ((diff.tv_sec * 100) + (diff.tv_usec / 10000) < 0) long_return = 0; else long_return = ((diff.tv_sec * 100) + (diff.tv_usec / 10000)); return ((u_char *) &long_return); #endif default: ERROR_MSG(""); } return NULL; }
u_char * var_system(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method) { struct timeval now, diff; if (header_system(vp, name, length, exact, var_len, write_method) == MATCH_FAILED ) return NULL; switch (vp->magic){ case VERSION_DESCR: *var_len = strlen(version_descr); *write_method = writeSystem; return (u_char *)version_descr; case VERSIONID: *var_len = version_id_len*sizeof(version_id[0]); return (u_char *)version_id; case UPTIME: gettimeofday(&now, NULL); now.tv_sec--; now.tv_usec += 1000000L; diff.tv_sec = now.tv_sec - starttime.tv_sec; diff.tv_usec = now.tv_usec - starttime.tv_usec; if (diff.tv_usec > 1000000L){ diff.tv_usec -= 1000000L; diff.tv_sec++; } long_return = ((diff.tv_sec * 100) + (diff.tv_usec / 10000)); return ((u_char *) &long_return); case SYSCONTACT: *var_len = strlen(sysContact); *write_method = writeSystem; return (u_char *)sysContact; case SYSTEMNAME: *var_len = strlen(sysName); *write_method = writeSystem; return (u_char *)sysName; case SYSLOCATION: *var_len = strlen(sysLocation); *write_method = writeSystem; return (u_char *)sysLocation; case SYSSERVICES: #if NO_DUMMY_VALUES if (!sysServicesConfiged) return NULL; #endif long_return = sysServices; return (u_char *)&long_return; #ifdef USING_MIBII_SYSORTABLE_MODULE case SYSORLASTCHANGE: diff.tv_sec = sysOR_lastchange.tv_sec - 1 - starttime.tv_sec; diff.tv_usec = sysOR_lastchange.tv_usec + 1000000L - starttime.tv_usec; if (diff.tv_usec > 1000000L){ diff.tv_usec -= 1000000L; diff.tv_sec++; } if ((diff.tv_sec * 100) + (diff.tv_usec / 10000) < 0) long_return = 0; else long_return = ((diff.tv_sec * 100) + (diff.tv_usec / 10000)); return ((u_char *) &long_return); #endif default: DEBUGMSGTL(("snmpd", "unknown sub-id %d in var_system\n", vp->magic)); } return NULL; }