|
|
1.1 ! root 1: /* system.c - MIB realization of the System group */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/snmp/RCS/system.c,v 7.3 90/05/14 15:44:29 mrose Exp $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/snmp/RCS/system.c,v 7.3 90/05/14 15:44:29 mrose Exp $ ! 9: * ! 10: * Contributed by NYSERNet Inc. This work was partially supported by the ! 11: * U.S. Defense Advanced Research Projects Agency and the Rome Air Development ! 12: * Center of the U.S. Air Force Systems Command under contract number ! 13: * F30602-88-C-0016. ! 14: * ! 15: * ! 16: * $Log: system.c,v $ ! 17: * Revision 7.3 90/05/14 15:44:29 mrose ! 18: * touch-up ! 19: * ! 20: * Revision 7.2 90/05/14 13:28:18 mrose ! 21: * system ! 22: * ! 23: * Revision 7.1 90/05/13 16:18:32 mrose ! 24: * views ! 25: * ! 26: * Revision 7.0 89/11/23 22:23:33 mrose ! 27: * Release 6.0 ! 28: * ! 29: */ ! 30: ! 31: /* ! 32: * NOTICE ! 33: * ! 34: * Acquisition, use, and distribution of this module and related ! 35: * materials are subject to the restrictions of a license agreement. ! 36: * Consult the Preface in the User's Manual for the full terms of ! 37: * this agreement. ! 38: * ! 39: */ ! 40: ! 41: ! 42: #include <stdio.h> ! 43: #include "mib.h" ! 44: #include "tailor.h" ! 45: ! 46: /* */ ! 47: ! 48: static int o_sysUpTime (oi, v, offset) ! 49: OI oi; ! 50: register struct type_SNMP_VarBind *v; ! 51: int offset; ! 52: { ! 53: struct timeval boottime, ! 54: now; ! 55: register OID oid = oi -> oi_name; ! 56: register OT ot = oi -> oi_type; ! 57: static int lastq = -1; ! 58: static integer diff; ! 59: ! 60: switch (offset) { ! 61: case type_SNMP_PDUs_get__request: ! 62: if (oid -> oid_nelem != ot -> ot_name -> oid_nelem + 1 ! 63: || oid -> oid_elements[oid -> oid_nelem - 1] != 0) ! 64: return int_SNMP_error__status_noSuchName; ! 65: break; ! 66: ! 67: case type_SNMP_PDUs_get__next__request: ! 68: if (oid -> oid_nelem == ot -> ot_name -> oid_nelem) { ! 69: OID new; ! 70: ! 71: if ((new = oid_extend (oid, 1)) == NULLOID) ! 72: return int_SNMP_error__status_genErr; ! 73: new -> oid_elements[new -> oid_nelem - 1] = 0; ! 74: ! 75: if (v -> name) ! 76: free_SNMP_ObjectName (v -> name); ! 77: v -> name = new; ! 78: } ! 79: else ! 80: return NOTOK; ! 81: break; ! 82: ! 83: default: ! 84: return int_SNMP_error__status_genErr; ! 85: } ! 86: ! 87: if (quantum != lastq) { ! 88: lastq = quantum; ! 89: ! 90: if (getkmem (nl + N_BOOTTIME, (caddr_t) &boottime, sizeof boottime) ! 91: == NOTOK) ! 92: return int_SNMP_error__status_genErr; ! 93: if (gettimeofday (&now, (struct timezone *) 0) == NOTOK) { ! 94: advise (LLOG_EXCEPTIONS, "failed", "gettimeofday"); ! 95: return int_SNMP_error__status_genErr; ! 96: } ! 97: diff = (now.tv_sec - boottime.tv_sec) * 100 ! 98: + ((now.tv_usec - boottime.tv_usec) / 10000); ! 99: } ! 100: ! 101: return o_number (oi, v, diff); ! 102: } ! 103: ! 104: /* */ ! 105: ! 106: static struct sys_pair { ! 107: char *s_name; ! 108: char *s_text; ! 109: IFP s_getfnx; ! 110: } pairs[] = { ! 111: "sysDescr", sysDescr, o_generic, ! 112: "sysObjectID", sysObjectID, o_generic, ! 113: "sysUpTime", NULL, o_sysUpTime, ! 114: "sysContact", NULL, o_generic, ! 115: #define SYS_NAME 4 ! 116: "sysName", NULL, o_generic, ! 117: "sysLocation", NULL, o_generic, ! 118: "sysServices", "72", o_generic, ! 119: ! 120: NULL ! 121: }; ! 122: ! 123: ! 124: init_system () { ! 125: char buffer[BUFSIZ]; ! 126: register OT ot; ! 127: register struct sys_pair *sp; ! 128: ! 129: (void) gethostname (buffer, sizeof buffer); ! 130: pairs[SYS_NAME].s_text = buffer; ! 131: ! 132: for (sp = pairs; sp -> s_name; sp++) ! 133: if (ot = text2obj (sp -> s_name)) { ! 134: ot -> ot_getfnx = sp -> s_getfnx; ! 135: ! 136: if (sp -> s_text) ! 137: if (ot -> ot_syntax) ! 138: (void) (*ot -> ot_syntax -> os_parse) ((struct qbuf **) ! 139: &ot -> ot_info, ! 140: sp -> s_text); ! 141: else ! 142: advise (LLOG_EXCEPTIONS, NULLCP, "%s: no syntax", ! 143: sp -> s_name); ! 144: } ! 145: else ! 146: advise (LLOG_EXCEPTIONS, NULLCP, "%s: unknown object", ! 147: sp -> s_name); ! 148: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.