1 #include <net-snmp/net-snmp-config.h>
6 # include <sys/timeb.h>
13 # include <sys/time.h>
19 #include <netinet/in.h>
28 #include <net-snmp/net-snmp-includes.h>
29 #include <net-snmp/agent/net-snmp-agent-includes.h>
32 #include "versioninfo.h"
33 #include "util_funcs.h"
36 init_versioninfo(void)
40 * define the structure we're going to ask the agent to register our
43 struct variable2 extensible_version_variables[] = {
44 {MIBINDEX, ASN_INTEGER, RONLY, var_extensible_version, 1,
46 {VERTAG, ASN_OCTET_STR, RONLY, var_extensible_version, 1,
48 {VERDATE, ASN_OCTET_STR, RONLY, var_extensible_version, 1,
50 {VERCDATE, ASN_OCTET_STR, RONLY, var_extensible_version, 1,
52 {VERIDENT, ASN_OCTET_STR, RONLY, var_extensible_version, 1,
54 {VERCONFIG, ASN_OCTET_STR, RONLY, var_extensible_version, 1,
56 {VERCLEARCACHE, ASN_INTEGER, RWRITE, var_extensible_version, 1,
58 {VERUPDATECONFIG, ASN_INTEGER, RWRITE, var_extensible_version, 1,
60 {VERRESTARTAGENT, ASN_INTEGER, RWRITE, var_extensible_version, 1,
62 {VERSAVEPERSISTENT, ASN_INTEGER, RWRITE, var_extensible_version, 1,
64 {VERDEBUGGING, ASN_INTEGER, RWRITE, var_extensible_version, 1,
69 * Define the OID pointer to the top of the mib tree that we're
70 * registering underneath
72 oid version_variables_oid[] =
73 { UCDAVIS_MIB, VERSIONMIBNUM };
76 * register ourselves with the agent to handle our mib tree
78 REGISTER_MIB("ucd-snmp/versioninfo", extensible_version_variables,
79 variable2, version_variables_oid);
85 var_extensible_version(struct variable *vp,
89 size_t * var_len, WriteMethod ** write_method)
93 static char errmsg[300];
96 #ifdef CONFIGURE_OPTIONS
97 static char config_opts[] = CONFIGURE_OPTIONS;
100 DEBUGMSGTL(("ucd-snmp/versioninfo", "var_extensible_version: "));
101 DEBUGMSGOID(("ucd-snmp/versioninfo", name, *length));
102 DEBUGMSG(("ucd-snmp/versioninfo", " %d\n", exact));
104 if (header_generic(vp, name, length, exact, var_len, write_method))
110 return ((u_char *) (&long_ret));
112 sprintf(errmsg, NetSnmpVersionInfo);
113 *var_len = strlen(errmsg);
114 return ((u_char *) errmsg);
116 sprintf(errmsg, "$Date: 2002/09/23 17:13:14 $");
117 *var_len = strlen(errmsg);
118 return ((u_char *) errmsg);
120 curtime = time(NULL);
121 cptr = ctime(&curtime);
122 sprintf(errmsg, cptr);
123 *var_len = strlen(errmsg) - 1;
124 return ((u_char *) errmsg);
127 "$Id: versioninfo.c,v 5.1 2002/09/23 17:13:14 hardaker Exp $");
128 *var_len = strlen(errmsg);
129 return ((u_char *) errmsg);
131 #ifdef CONFIGURE_OPTIONS
132 *var_len = strlen(config_opts);
134 *var_len = 1024; /* mib imposed restriction */
135 return (u_char *) config_opts;
138 *var_len = strlen(errmsg);
139 return ((u_char *) errmsg);
142 *write_method = clear_cache;
144 return ((u_char *) & long_ret);
145 case VERUPDATECONFIG:
146 *write_method = update_hook;
148 return ((u_char *) & long_ret);
149 case VERRESTARTAGENT:
150 *write_method = restart_hook;
152 return ((u_char *) & long_ret);
153 case VERSAVEPERSISTENT:
154 *write_method = save_persistent;
156 return ((u_char *) & long_ret);
158 *write_method = debugging_hook;
159 long_ret = snmp_get_do_debugging();
160 return ((u_char *) & long_ret);
166 update_hook(int action,
170 u_char * statP, oid * name, size_t name_len)
174 if (var_val_type != ASN_INTEGER) {
175 snmp_log(LOG_ERR, "Wrong type != int\n");
176 return SNMP_ERR_WRONGTYPE;
178 tmp = *((long *) var_val);
179 if (tmp == 1 && action == COMMIT) {
182 return SNMP_ERR_NOERROR;
186 debugging_hook(int action,
190 u_char * statP, oid * name, size_t name_len)
194 if (var_val_type != ASN_INTEGER) {
195 DEBUGMSGTL(("versioninfo", "Wrong type != int\n"));
196 return SNMP_ERR_WRONGTYPE;
198 tmp = *((long *) var_val);
199 if (action == COMMIT) {
200 snmp_set_do_debugging(tmp);
202 return SNMP_ERR_NOERROR;
206 save_persistent(int action,
210 u_char * statP, oid * name, size_t name_len)
214 if (var_val_type != ASN_INTEGER) {
215 DEBUGMSGTL(("versioninfo", "Wrong type != int\n"));
216 return SNMP_ERR_WRONGTYPE;
218 tmp = *((long *) var_val);
219 if (action == COMMIT) {
220 snmp_store(netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
221 NETSNMP_DS_LIB_APPTYPE));
223 return SNMP_ERR_NOERROR;