|
|
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.