1 /*
2  * This C file has been generated by smidump 0.4.3.
3  * It is intended to be used with the NET-SNMP library.
4  *
5  * This C file is derived from the UPS-MIB module.
6  *
7  * $Id: rfc1628-mib-mgr.c,v 1.4 2005-11-05 21:10:47 adk0212 Exp $
8  */
9 
10 #include "apc.h"
11 #include "snmp.h"
12 
13 static oid upsIdentManufacturer[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 1};
14 static oid upsIdentModel[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 2};
15 static oid upsIdentUPSSoftwareVersion[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 3};
16 static oid upsIdentAgentSoftwareVersion[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 4};
17 static oid upsIdentName[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 5};
18 static oid upsIdentAttachedDevices[] = {1, 3, 6, 1, 2, 1, 33, 1, 1, 6};
19 static oid upsBatteryStatus[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 1};
20 static oid upsSecondsOnBattery[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 2};
21 static oid upsEstimatedMinutesRemaining[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 3};
22 static oid upsEstimatedChargeRemaining[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 4};
23 static oid upsBatteryVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 5};
24 static oid upsBatteryCurrent[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 6};
25 static oid upsBatteryTemperature[] = {1, 3, 6, 1, 2, 1, 33, 1, 2, 7};
26 static oid upsInputLineBads[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 1};
27 static oid upsInputNumLines[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 2};
28 /* static oid upsInputLineIndex[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 3, 1, 1}; */
29 static oid upsInputFrequency[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 3, 1, 2};
30 static oid upsInputVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 3, 1, 3};
31 static oid upsInputCurrent[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 3, 1, 4};
32 static oid upsInputTruePower[] = {1, 3, 6, 1, 2, 1, 33, 1, 3, 3, 1, 5};
33 static oid upsOutputSource[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 1};
34 static oid upsOutputFrequency[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 2};
35 static oid upsOutputNumLines[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 3};
36 /* static oid upsOutputLineIndex[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 4, 1, 1}; */
37 static oid upsOutputVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 4, 1, 2};
38 static oid upsOutputCurrent[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 4, 1, 3};
39 static oid upsOutputPower[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 4, 1, 4};
40 static oid upsOutputPercentLoad[] = {1, 3, 6, 1, 2, 1, 33, 1, 4, 4, 1, 5};
41 static oid upsBypassFrequency[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 1};
42 static oid upsBypassNumLines[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 2};
43 /* static oid upsBypassLineIndex[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 3, 1, 1}; */
44 static oid upsBypassVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 3, 1, 2};
45 static oid upsBypassCurrent[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 3, 1, 3};
46 static oid upsBypassPower[] = {1, 3, 6, 1, 2, 1, 33, 1, 5, 3, 1, 4};
47 static oid upsAlarmsPresent[] = {1, 3, 6, 1, 2, 1, 33, 1, 6, 1};
48 /* static oid upsAlarmId[] = {1, 3, 6, 1, 2, 1, 33, 1, 6, 2, 1, 1}; */
49 static oid upsAlarmDescr[] = {1, 3, 6, 1, 2, 1, 33, 1, 6, 2, 1, 2};
50 static oid upsAlarmTime[] = {1, 3, 6, 1, 2, 1, 33, 1, 6, 2, 1, 3};
51 static oid upsTestId[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 1};
52 static oid upsTestSpinLock[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 2};
53 static oid upsTestResultsSummary[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 3};
54 static oid upsTestResultsDetail[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 4};
55 static oid upsTestStartTime[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 5};
56 static oid upsTestElapsedTime[] = {1, 3, 6, 1, 2, 1, 33, 1, 7, 6};
57 static oid upsShutdownType[] = {1, 3, 6, 1, 2, 1, 33, 1, 8, 1};
58 static oid upsShutdownAfterDelay[] = {1, 3, 6, 1, 2, 1, 33, 1, 8, 2};
59 static oid upsStartupAfterDelay[] = {1, 3, 6, 1, 2, 1, 33, 1, 8, 3};
60 static oid upsRebootWithDuration[] = {1, 3, 6, 1, 2, 1, 33, 1, 8, 4};
61 static oid upsAutoRestart[] = {1, 3, 6, 1, 2, 1, 33, 1, 8, 5};
62 static oid upsConfigInputVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 1};
63 static oid upsConfigInputFreq[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 2};
64 static oid upsConfigOutputVoltage[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 3};
65 static oid upsConfigOutputFreq[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 4};
66 static oid upsConfigOutputVA[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 5};
67 static oid upsConfigOutputPower[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 6};
68 static oid upsConfigLowBattTime[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 7};
69 static oid upsConfigAudibleStatus[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 8};
70 static oid upsConfigLowVoltageTransferPoint[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 9};
71 static oid upsConfigHighVoltageTransferPoint[] = {1, 3, 6, 1, 2, 1, 33, 1, 9, 10};
72 
ups_mib_mgr_get_upsIdent(struct snmp_session * s,upsIdent_t ** upsIdent)73 int ups_mib_mgr_get_upsIdent(struct snmp_session *s, upsIdent_t **upsIdent)
74 {
75     struct snmp_session *peer;
76     struct snmp_pdu *request, *response;
77     struct variable_list *vars;
78     int status;
79 
80     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
81     snmp_add_null_var(request, upsIdentManufacturer, sizeof(upsIdentManufacturer)/sizeof(oid));
82     snmp_add_null_var(request, upsIdentModel, sizeof(upsIdentModel)/sizeof(oid));
83     snmp_add_null_var(request, upsIdentUPSSoftwareVersion, sizeof(upsIdentUPSSoftwareVersion)/sizeof(oid));
84     snmp_add_null_var(request, upsIdentAgentSoftwareVersion, sizeof(upsIdentAgentSoftwareVersion)/sizeof(oid));
85     snmp_add_null_var(request, upsIdentName, sizeof(upsIdentName)/sizeof(oid));
86     snmp_add_null_var(request, upsIdentAttachedDevices, sizeof(upsIdentAttachedDevices)/sizeof(oid));
87 
88     peer = snmp_open(s);
89     if (!peer) {
90         return -1;
91     }
92 
93     status = snmp_synch_response(peer, request, &response);
94     if (status != STAT_SUCCESS) {
95         if (response) snmp_free_pdu(response);
96         snmp_close(peer);
97         return -2;
98     }
99 
100     *upsIdent = (upsIdent_t *) malloc(sizeof(upsIdent_t));
101     if (! *upsIdent) {
102         if (response) snmp_free_pdu(response);
103         snmp_close(peer);
104         return -4;
105     }
106 
107     for (vars = response->variables; vars; vars = vars->next_variable) {
108         if (vars->name_length > sizeof(upsIdentManufacturer)/sizeof(oid)
109             && memcmp(vars->name, upsIdentManufacturer, sizeof(upsIdentManufacturer)) == 0) {
110             memcpy((*upsIdent)->__upsIdentManufacturer, vars->val.string, vars->val_len);
111             (*upsIdent)->_upsIdentManufacturerLength = vars->val_len;
112             (*upsIdent)->upsIdentManufacturer = (*upsIdent)->__upsIdentManufacturer;
113         }
114         if (vars->name_length > sizeof(upsIdentModel)/sizeof(oid)
115             && memcmp(vars->name, upsIdentModel, sizeof(upsIdentModel)) == 0) {
116             memcpy((*upsIdent)->__upsIdentModel, vars->val.string, vars->val_len);
117             (*upsIdent)->_upsIdentModelLength = vars->val_len;
118             (*upsIdent)->upsIdentModel = (*upsIdent)->__upsIdentModel;
119         }
120         if (vars->name_length > sizeof(upsIdentUPSSoftwareVersion)/sizeof(oid)
121             && memcmp(vars->name, upsIdentUPSSoftwareVersion, sizeof(upsIdentUPSSoftwareVersion)) == 0) {
122             memcpy((*upsIdent)->__upsIdentUPSSoftwareVersion, vars->val.string, vars->val_len);
123             (*upsIdent)->_upsIdentUPSSoftwareVersionLength = vars->val_len;
124             (*upsIdent)->upsIdentUPSSoftwareVersion = (*upsIdent)->__upsIdentUPSSoftwareVersion;
125         }
126         if (vars->name_length > sizeof(upsIdentAgentSoftwareVersion)/sizeof(oid)
127             && memcmp(vars->name, upsIdentAgentSoftwareVersion, sizeof(upsIdentAgentSoftwareVersion)) == 0) {
128             memcpy((*upsIdent)->__upsIdentAgentSoftwareVersion, vars->val.string, vars->val_len);
129             (*upsIdent)->_upsIdentAgentSoftwareVersionLength = vars->val_len;
130             (*upsIdent)->upsIdentAgentSoftwareVersion = (*upsIdent)->__upsIdentAgentSoftwareVersion;
131         }
132         if (vars->name_length > sizeof(upsIdentName)/sizeof(oid)
133             && memcmp(vars->name, upsIdentName, sizeof(upsIdentName)) == 0) {
134             memcpy((*upsIdent)->__upsIdentName, vars->val.string, vars->val_len);
135             (*upsIdent)->_upsIdentNameLength = vars->val_len;
136             (*upsIdent)->upsIdentName = (*upsIdent)->__upsIdentName;
137         }
138         if (vars->name_length > sizeof(upsIdentAttachedDevices)/sizeof(oid)
139             && memcmp(vars->name, upsIdentAttachedDevices, sizeof(upsIdentAttachedDevices)) == 0) {
140             memcpy((*upsIdent)->__upsIdentAttachedDevices, vars->val.string, vars->val_len);
141             (*upsIdent)->_upsIdentAttachedDevicesLength = vars->val_len;
142             (*upsIdent)->upsIdentAttachedDevices = (*upsIdent)->__upsIdentAttachedDevices;
143         }
144     }
145 
146     if (response) snmp_free_pdu(response);
147 
148     if (snmp_close(peer) == 0) {
149         return -5;
150     }
151 
152     return 0;
153 }
154 
ups_mib_mgr_get_upsBattery(struct snmp_session * s,upsBattery_t ** upsBattery)155 int ups_mib_mgr_get_upsBattery(struct snmp_session *s, upsBattery_t **upsBattery)
156 {
157     struct snmp_session *peer;
158     struct snmp_pdu *request, *response;
159     struct variable_list *vars;
160     int status;
161 
162     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
163     snmp_add_null_var(request, upsBatteryStatus, sizeof(upsBatteryStatus)/sizeof(oid));
164     snmp_add_null_var(request, upsSecondsOnBattery, sizeof(upsSecondsOnBattery)/sizeof(oid));
165     snmp_add_null_var(request, upsEstimatedMinutesRemaining, sizeof(upsEstimatedMinutesRemaining)/sizeof(oid));
166     snmp_add_null_var(request, upsEstimatedChargeRemaining, sizeof(upsEstimatedChargeRemaining)/sizeof(oid));
167     snmp_add_null_var(request, upsBatteryVoltage, sizeof(upsBatteryVoltage)/sizeof(oid));
168     snmp_add_null_var(request, upsBatteryCurrent, sizeof(upsBatteryCurrent)/sizeof(oid));
169     snmp_add_null_var(request, upsBatteryTemperature, sizeof(upsBatteryTemperature)/sizeof(oid));
170 
171     peer = snmp_open(s);
172     if (!peer) {
173         return -1;
174     }
175 
176     status = snmp_synch_response(peer, request, &response);
177     if (status != STAT_SUCCESS) {
178         if (response) snmp_free_pdu(response);
179         snmp_close(peer);
180         return -2;
181     }
182 
183     *upsBattery = (upsBattery_t *) malloc(sizeof(upsBattery_t));
184     if (! *upsBattery) {
185         if (response) snmp_free_pdu(response);
186         snmp_close(peer);
187         return -4;
188     }
189 
190     for (vars = response->variables; vars; vars = vars->next_variable) {
191         if (vars->name_length > sizeof(upsBatteryStatus)/sizeof(oid)
192             && memcmp(vars->name, upsBatteryStatus, sizeof(upsBatteryStatus)) == 0) {
193             (*upsBattery)->__upsBatteryStatus = *vars->val.integer;
194             (*upsBattery)->upsBatteryStatus = &((*upsBattery)->__upsBatteryStatus);
195         }
196         if (vars->name_length > sizeof(upsSecondsOnBattery)/sizeof(oid)
197             && memcmp(vars->name, upsSecondsOnBattery, sizeof(upsSecondsOnBattery)) == 0) {
198             (*upsBattery)->__upsSecondsOnBattery = *vars->val.integer;
199             (*upsBattery)->upsSecondsOnBattery = &((*upsBattery)->__upsSecondsOnBattery);
200         }
201         if (vars->name_length > sizeof(upsEstimatedMinutesRemaining)/sizeof(oid)
202             && memcmp(vars->name, upsEstimatedMinutesRemaining, sizeof(upsEstimatedMinutesRemaining)) == 0) {
203             (*upsBattery)->__upsEstimatedMinutesRemaining = *vars->val.integer;
204             (*upsBattery)->upsEstimatedMinutesRemaining = &((*upsBattery)->__upsEstimatedMinutesRemaining);
205         }
206         if (vars->name_length > sizeof(upsEstimatedChargeRemaining)/sizeof(oid)
207             && memcmp(vars->name, upsEstimatedChargeRemaining, sizeof(upsEstimatedChargeRemaining)) == 0) {
208             (*upsBattery)->__upsEstimatedChargeRemaining = *vars->val.integer;
209             (*upsBattery)->upsEstimatedChargeRemaining = &((*upsBattery)->__upsEstimatedChargeRemaining);
210         }
211         if (vars->name_length > sizeof(upsBatteryVoltage)/sizeof(oid)
212             && memcmp(vars->name, upsBatteryVoltage, sizeof(upsBatteryVoltage)) == 0) {
213             (*upsBattery)->__upsBatteryVoltage = *vars->val.integer;
214             (*upsBattery)->upsBatteryVoltage = &((*upsBattery)->__upsBatteryVoltage);
215         }
216         if (vars->name_length > sizeof(upsBatteryCurrent)/sizeof(oid)
217             && memcmp(vars->name, upsBatteryCurrent, sizeof(upsBatteryCurrent)) == 0) {
218             (*upsBattery)->__upsBatteryCurrent = *vars->val.integer;
219             (*upsBattery)->upsBatteryCurrent = &((*upsBattery)->__upsBatteryCurrent);
220         }
221         if (vars->name_length > sizeof(upsBatteryTemperature)/sizeof(oid)
222             && memcmp(vars->name, upsBatteryTemperature, sizeof(upsBatteryTemperature)) == 0) {
223             (*upsBattery)->__upsBatteryTemperature = *vars->val.integer;
224             (*upsBattery)->upsBatteryTemperature = &((*upsBattery)->__upsBatteryTemperature);
225         }
226     }
227 
228     if (response) snmp_free_pdu(response);
229 
230     if (snmp_close(peer) == 0) {
231         return -5;
232     }
233 
234     return 0;
235 }
236 
ups_mib_mgr_get_upsInput(struct snmp_session * s,upsInput_t ** upsInput)237 int ups_mib_mgr_get_upsInput(struct snmp_session *s, upsInput_t **upsInput)
238 {
239     struct snmp_session *peer;
240     struct snmp_pdu *request, *response;
241     struct variable_list *vars;
242     int status;
243 
244     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
245     snmp_add_null_var(request, upsInputLineBads, sizeof(upsInputLineBads)/sizeof(oid));
246     snmp_add_null_var(request, upsInputNumLines, sizeof(upsInputNumLines)/sizeof(oid));
247 
248     peer = snmp_open(s);
249     if (!peer) {
250         return -1;
251     }
252 
253     status = snmp_synch_response(peer, request, &response);
254     if (status != STAT_SUCCESS) {
255         if (response) snmp_free_pdu(response);
256         snmp_close(peer);
257         return -2;
258     }
259 
260     *upsInput = (upsInput_t *) malloc(sizeof(upsInput_t));
261     if (! *upsInput) {
262         if (response) snmp_free_pdu(response);
263         snmp_close(peer);
264         return -4;
265     }
266 
267     for (vars = response->variables; vars; vars = vars->next_variable) {
268         if (vars->name_length > sizeof(upsInputLineBads)/sizeof(oid)
269             && memcmp(vars->name, upsInputLineBads, sizeof(upsInputLineBads)) == 0) {
270             (*upsInput)->__upsInputLineBads = *vars->val.integer;
271             (*upsInput)->upsInputLineBads = &((*upsInput)->__upsInputLineBads);
272         }
273         if (vars->name_length > sizeof(upsInputNumLines)/sizeof(oid)
274             && memcmp(vars->name, upsInputNumLines, sizeof(upsInputNumLines)) == 0) {
275             (*upsInput)->__upsInputNumLines = *vars->val.integer;
276             (*upsInput)->upsInputNumLines = &((*upsInput)->__upsInputNumLines);
277         }
278     }
279 
280     if (response) snmp_free_pdu(response);
281 
282     if (snmp_close(peer) == 0) {
283         return -5;
284     }
285 
286     return 0;
287 }
288 
ups_mib_mgr_get_upsInputEntry(struct snmp_session * s,upsInputEntry_t ** upsInputEntry)289 int ups_mib_mgr_get_upsInputEntry(struct snmp_session *s, upsInputEntry_t **upsInputEntry)
290 {
291     struct snmp_session *peer;
292     struct snmp_pdu *request, *response;
293     struct variable_list *vars;
294     int status;
295 
296     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
297     snmp_add_null_var(request, upsInputFrequency, sizeof(upsInputFrequency)/sizeof(oid));
298     snmp_add_null_var(request, upsInputVoltage, sizeof(upsInputVoltage)/sizeof(oid));
299     snmp_add_null_var(request, upsInputCurrent, sizeof(upsInputCurrent)/sizeof(oid));
300     snmp_add_null_var(request, upsInputTruePower, sizeof(upsInputTruePower)/sizeof(oid));
301 
302     peer = snmp_open(s);
303     if (!peer) {
304         return -1;
305     }
306 
307     status = snmp_synch_response(peer, request, &response);
308     if (status != STAT_SUCCESS) {
309         if (response) snmp_free_pdu(response);
310         snmp_close(peer);
311         return -2;
312     }
313 
314     *upsInputEntry = (upsInputEntry_t *) malloc(sizeof(upsInputEntry_t));
315     if (! *upsInputEntry) {
316         if (response) snmp_free_pdu(response);
317         snmp_close(peer);
318         return -4;
319     }
320 
321     for (vars = response->variables; vars; vars = vars->next_variable) {
322         if (vars->name_length > sizeof(upsInputFrequency)/sizeof(oid)
323             && memcmp(vars->name, upsInputFrequency, sizeof(upsInputFrequency)) == 0) {
324             (*upsInputEntry)->__upsInputFrequency = *vars->val.integer;
325             (*upsInputEntry)->upsInputFrequency = &((*upsInputEntry)->__upsInputFrequency);
326         }
327         if (vars->name_length > sizeof(upsInputVoltage)/sizeof(oid)
328             && memcmp(vars->name, upsInputVoltage, sizeof(upsInputVoltage)) == 0) {
329             (*upsInputEntry)->__upsInputVoltage = *vars->val.integer;
330             (*upsInputEntry)->upsInputVoltage = &((*upsInputEntry)->__upsInputVoltage);
331         }
332         if (vars->name_length > sizeof(upsInputCurrent)/sizeof(oid)
333             && memcmp(vars->name, upsInputCurrent, sizeof(upsInputCurrent)) == 0) {
334             (*upsInputEntry)->__upsInputCurrent = *vars->val.integer;
335             (*upsInputEntry)->upsInputCurrent = &((*upsInputEntry)->__upsInputCurrent);
336         }
337         if (vars->name_length > sizeof(upsInputTruePower)/sizeof(oid)
338             && memcmp(vars->name, upsInputTruePower, sizeof(upsInputTruePower)) == 0) {
339             (*upsInputEntry)->__upsInputTruePower = *vars->val.integer;
340             (*upsInputEntry)->upsInputTruePower = &((*upsInputEntry)->__upsInputTruePower);
341         }
342     }
343 
344     if (response) snmp_free_pdu(response);
345 
346     if (snmp_close(peer) == 0) {
347         return -5;
348     }
349 
350     return 0;
351 }
352 
ups_mib_mgr_get_upsOutput(struct snmp_session * s,upsOutput_t ** upsOutput)353 int ups_mib_mgr_get_upsOutput(struct snmp_session *s, upsOutput_t **upsOutput)
354 {
355     struct snmp_session *peer;
356     struct snmp_pdu *request, *response;
357     struct variable_list *vars;
358     int status;
359 
360     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
361     snmp_add_null_var(request, upsOutputSource, sizeof(upsOutputSource)/sizeof(oid));
362     snmp_add_null_var(request, upsOutputFrequency, sizeof(upsOutputFrequency)/sizeof(oid));
363     snmp_add_null_var(request, upsOutputNumLines, sizeof(upsOutputNumLines)/sizeof(oid));
364 
365     peer = snmp_open(s);
366     if (!peer) {
367         return -1;
368     }
369 
370     status = snmp_synch_response(peer, request, &response);
371     if (status != STAT_SUCCESS) {
372         if (response) snmp_free_pdu(response);
373         snmp_close(peer);
374         return -2;
375     }
376 
377     *upsOutput = (upsOutput_t *) malloc(sizeof(upsOutput_t));
378     if (! *upsOutput) {
379         if (response) snmp_free_pdu(response);
380         snmp_close(peer);
381         return -4;
382     }
383 
384     for (vars = response->variables; vars; vars = vars->next_variable) {
385         if (vars->name_length > sizeof(upsOutputSource)/sizeof(oid)
386             && memcmp(vars->name, upsOutputSource, sizeof(upsOutputSource)) == 0) {
387             (*upsOutput)->__upsOutputSource = *vars->val.integer;
388             (*upsOutput)->upsOutputSource = &((*upsOutput)->__upsOutputSource);
389         }
390         if (vars->name_length > sizeof(upsOutputFrequency)/sizeof(oid)
391             && memcmp(vars->name, upsOutputFrequency, sizeof(upsOutputFrequency)) == 0) {
392             (*upsOutput)->__upsOutputFrequency = *vars->val.integer;
393             (*upsOutput)->upsOutputFrequency = &((*upsOutput)->__upsOutputFrequency);
394         }
395         if (vars->name_length > sizeof(upsOutputNumLines)/sizeof(oid)
396             && memcmp(vars->name, upsOutputNumLines, sizeof(upsOutputNumLines)) == 0) {
397             (*upsOutput)->__upsOutputNumLines = *vars->val.integer;
398             (*upsOutput)->upsOutputNumLines = &((*upsOutput)->__upsOutputNumLines);
399         }
400     }
401 
402     if (response) snmp_free_pdu(response);
403 
404     if (snmp_close(peer) == 0) {
405         return -5;
406     }
407 
408     return 0;
409 }
410 
ups_mib_mgr_get_upsOutputEntry(struct snmp_session * s,upsOutputEntry_t ** upsOutputEntry)411 int ups_mib_mgr_get_upsOutputEntry(struct snmp_session *s, upsOutputEntry_t **upsOutputEntry)
412 {
413     struct snmp_session *peer;
414     struct snmp_pdu *request, *response;
415     struct variable_list *vars;
416     int status;
417 
418     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
419     snmp_add_null_var(request, upsOutputVoltage, sizeof(upsOutputVoltage)/sizeof(oid));
420     snmp_add_null_var(request, upsOutputCurrent, sizeof(upsOutputCurrent)/sizeof(oid));
421     snmp_add_null_var(request, upsOutputPower, sizeof(upsOutputPower)/sizeof(oid));
422     snmp_add_null_var(request, upsOutputPercentLoad, sizeof(upsOutputPercentLoad)/sizeof(oid));
423 
424     peer = snmp_open(s);
425     if (!peer) {
426         return -1;
427     }
428 
429     status = snmp_synch_response(peer, request, &response);
430     if (status != STAT_SUCCESS) {
431         if (response) snmp_free_pdu(response);
432         snmp_close(peer);
433         return -2;
434     }
435 
436     *upsOutputEntry = (upsOutputEntry_t *) malloc(sizeof(upsOutputEntry_t));
437     if (! *upsOutputEntry) {
438         if (response) snmp_free_pdu(response);
439         snmp_close(peer);
440         return -4;
441     }
442 
443     for (vars = response->variables; vars; vars = vars->next_variable) {
444         if (vars->name_length > sizeof(upsOutputVoltage)/sizeof(oid)
445             && memcmp(vars->name, upsOutputVoltage, sizeof(upsOutputVoltage)) == 0) {
446             (*upsOutputEntry)->__upsOutputVoltage = *vars->val.integer;
447             (*upsOutputEntry)->upsOutputVoltage = &((*upsOutputEntry)->__upsOutputVoltage);
448         }
449         if (vars->name_length > sizeof(upsOutputCurrent)/sizeof(oid)
450             && memcmp(vars->name, upsOutputCurrent, sizeof(upsOutputCurrent)) == 0) {
451             (*upsOutputEntry)->__upsOutputCurrent = *vars->val.integer;
452             (*upsOutputEntry)->upsOutputCurrent = &((*upsOutputEntry)->__upsOutputCurrent);
453         }
454         if (vars->name_length > sizeof(upsOutputPower)/sizeof(oid)
455             && memcmp(vars->name, upsOutputPower, sizeof(upsOutputPower)) == 0) {
456             (*upsOutputEntry)->__upsOutputPower = *vars->val.integer;
457             (*upsOutputEntry)->upsOutputPower = &((*upsOutputEntry)->__upsOutputPower);
458         }
459         if (vars->name_length > sizeof(upsOutputPercentLoad)/sizeof(oid)
460             && memcmp(vars->name, upsOutputPercentLoad, sizeof(upsOutputPercentLoad)) == 0) {
461             (*upsOutputEntry)->__upsOutputPercentLoad = *vars->val.integer;
462             (*upsOutputEntry)->upsOutputPercentLoad = &((*upsOutputEntry)->__upsOutputPercentLoad);
463         }
464     }
465 
466     if (response) snmp_free_pdu(response);
467 
468     if (snmp_close(peer) == 0) {
469         return -5;
470     }
471 
472     return 0;
473 }
474 
ups_mib_mgr_get_upsBypass(struct snmp_session * s,upsBypass_t ** upsBypass)475 int ups_mib_mgr_get_upsBypass(struct snmp_session *s, upsBypass_t **upsBypass)
476 {
477     struct snmp_session *peer;
478     struct snmp_pdu *request, *response;
479     struct variable_list *vars;
480     int status;
481 
482     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
483     snmp_add_null_var(request, upsBypassFrequency, sizeof(upsBypassFrequency)/sizeof(oid));
484     snmp_add_null_var(request, upsBypassNumLines, sizeof(upsBypassNumLines)/sizeof(oid));
485 
486     peer = snmp_open(s);
487     if (!peer) {
488         return -1;
489     }
490 
491     status = snmp_synch_response(peer, request, &response);
492     if (status != STAT_SUCCESS) {
493         if (response) snmp_free_pdu(response);
494         snmp_close(peer);
495         return -2;
496     }
497 
498     *upsBypass = (upsBypass_t *) malloc(sizeof(upsBypass_t));
499     if (! *upsBypass) {
500         if (response) snmp_free_pdu(response);
501         snmp_close(peer);
502         return -4;
503     }
504 
505     for (vars = response->variables; vars; vars = vars->next_variable) {
506         if (vars->name_length > sizeof(upsBypassFrequency)/sizeof(oid)
507             && memcmp(vars->name, upsBypassFrequency, sizeof(upsBypassFrequency)) == 0) {
508             (*upsBypass)->__upsBypassFrequency = *vars->val.integer;
509             (*upsBypass)->upsBypassFrequency = &((*upsBypass)->__upsBypassFrequency);
510         }
511         if (vars->name_length > sizeof(upsBypassNumLines)/sizeof(oid)
512             && memcmp(vars->name, upsBypassNumLines, sizeof(upsBypassNumLines)) == 0) {
513             (*upsBypass)->__upsBypassNumLines = *vars->val.integer;
514             (*upsBypass)->upsBypassNumLines = &((*upsBypass)->__upsBypassNumLines);
515         }
516     }
517 
518     if (response) snmp_free_pdu(response);
519 
520     if (snmp_close(peer) == 0) {
521         return -5;
522     }
523 
524     return 0;
525 }
526 
ups_mib_mgr_get_upsBypassEntry(struct snmp_session * s,upsBypassEntry_t ** upsBypassEntry)527 int ups_mib_mgr_get_upsBypassEntry(struct snmp_session *s, upsBypassEntry_t **upsBypassEntry)
528 {
529     struct snmp_session *peer;
530     struct snmp_pdu *request, *response;
531     struct variable_list *vars;
532     int status;
533 
534     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
535     snmp_add_null_var(request, upsBypassVoltage, sizeof(upsBypassVoltage)/sizeof(oid));
536     snmp_add_null_var(request, upsBypassCurrent, sizeof(upsBypassCurrent)/sizeof(oid));
537     snmp_add_null_var(request, upsBypassPower, sizeof(upsBypassPower)/sizeof(oid));
538 
539     peer = snmp_open(s);
540     if (!peer) {
541         return -1;
542     }
543 
544     status = snmp_synch_response(peer, request, &response);
545     if (status != STAT_SUCCESS) {
546         if (response) snmp_free_pdu(response);
547         snmp_close(peer);
548         return -2;
549     }
550 
551     *upsBypassEntry = (upsBypassEntry_t *) malloc(sizeof(upsBypassEntry_t));
552     if (! *upsBypassEntry) {
553         if (response) snmp_free_pdu(response);
554         snmp_close(peer);
555         return -4;
556     }
557 
558     for (vars = response->variables; vars; vars = vars->next_variable) {
559         if (vars->name_length > sizeof(upsBypassVoltage)/sizeof(oid)
560             && memcmp(vars->name, upsBypassVoltage, sizeof(upsBypassVoltage)) == 0) {
561             (*upsBypassEntry)->__upsBypassVoltage = *vars->val.integer;
562             (*upsBypassEntry)->upsBypassVoltage = &((*upsBypassEntry)->__upsBypassVoltage);
563         }
564         if (vars->name_length > sizeof(upsBypassCurrent)/sizeof(oid)
565             && memcmp(vars->name, upsBypassCurrent, sizeof(upsBypassCurrent)) == 0) {
566             (*upsBypassEntry)->__upsBypassCurrent = *vars->val.integer;
567             (*upsBypassEntry)->upsBypassCurrent = &((*upsBypassEntry)->__upsBypassCurrent);
568         }
569         if (vars->name_length > sizeof(upsBypassPower)/sizeof(oid)
570             && memcmp(vars->name, upsBypassPower, sizeof(upsBypassPower)) == 0) {
571             (*upsBypassEntry)->__upsBypassPower = *vars->val.integer;
572             (*upsBypassEntry)->upsBypassPower = &((*upsBypassEntry)->__upsBypassPower);
573         }
574     }
575 
576     if (response) snmp_free_pdu(response);
577 
578     if (snmp_close(peer) == 0) {
579         return -5;
580     }
581 
582     return 0;
583 }
584 
ups_mib_mgr_get_upsAlarm(struct snmp_session * s,upsAlarm_t ** upsAlarm)585 int ups_mib_mgr_get_upsAlarm(struct snmp_session *s, upsAlarm_t **upsAlarm)
586 {
587     struct snmp_session *peer;
588     struct snmp_pdu *request, *response;
589     struct variable_list *vars;
590     int status;
591 
592     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
593     snmp_add_null_var(request, upsAlarmsPresent, sizeof(upsAlarmsPresent)/sizeof(oid));
594 
595     peer = snmp_open(s);
596     if (!peer) {
597         return -1;
598     }
599 
600     status = snmp_synch_response(peer, request, &response);
601     if (status != STAT_SUCCESS) {
602         if (response) snmp_free_pdu(response);
603         snmp_close(peer);
604         return -2;
605     }
606 
607     *upsAlarm = (upsAlarm_t *) malloc(sizeof(upsAlarm_t));
608     if (! *upsAlarm) {
609         if (response) snmp_free_pdu(response);
610         snmp_close(peer);
611         return -4;
612     }
613 
614     for (vars = response->variables; vars; vars = vars->next_variable) {
615         if (vars->name_length > sizeof(upsAlarmsPresent)/sizeof(oid)
616             && memcmp(vars->name, upsAlarmsPresent, sizeof(upsAlarmsPresent)) == 0) {
617             (*upsAlarm)->__upsAlarmsPresent = *vars->val.integer;
618             (*upsAlarm)->upsAlarmsPresent = &((*upsAlarm)->__upsAlarmsPresent);
619         }
620     }
621 
622     if (response) snmp_free_pdu(response);
623 
624     if (snmp_close(peer) == 0) {
625         return -5;
626     }
627 
628     return 0;
629 }
630 
ups_mib_mgr_get_upsAlarmEntry(struct snmp_session * s,upsAlarmEntry_t ** upsAlarmEntry)631 int ups_mib_mgr_get_upsAlarmEntry(struct snmp_session *s, upsAlarmEntry_t **upsAlarmEntry)
632 {
633     struct snmp_session *peer;
634     struct snmp_pdu *request, *response;
635     struct variable_list *vars;
636     int status;
637 
638     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
639     snmp_add_null_var(request, upsAlarmDescr, sizeof(upsAlarmDescr)/sizeof(oid));
640     snmp_add_null_var(request, upsAlarmTime, sizeof(upsAlarmTime)/sizeof(oid));
641 
642     peer = snmp_open(s);
643     if (!peer) {
644         return -1;
645     }
646 
647     status = snmp_synch_response(peer, request, &response);
648     if (status != STAT_SUCCESS) {
649         if (response) snmp_free_pdu(response);
650         snmp_close(peer);
651         return -2;
652     }
653 
654     *upsAlarmEntry = (upsAlarmEntry_t *) malloc(sizeof(upsAlarmEntry_t));
655     if (! *upsAlarmEntry) {
656         if (response) snmp_free_pdu(response);
657         snmp_close(peer);
658         return -4;
659     }
660 
661     for (vars = response->variables; vars; vars = vars->next_variable) {
662         if (vars->name_length > sizeof(upsAlarmDescr)/sizeof(oid)
663             && memcmp(vars->name, upsAlarmDescr, sizeof(upsAlarmDescr)) == 0) {
664         }
665         if (vars->name_length > sizeof(upsAlarmTime)/sizeof(oid)
666             && memcmp(vars->name, upsAlarmTime, sizeof(upsAlarmTime)) == 0) {
667             (*upsAlarmEntry)->__upsAlarmTime = *vars->val.integer;
668             (*upsAlarmEntry)->upsAlarmTime = &((*upsAlarmEntry)->__upsAlarmTime);
669         }
670     }
671 
672     if (response) snmp_free_pdu(response);
673 
674     if (snmp_close(peer) == 0) {
675         return -5;
676     }
677 
678     return 0;
679 }
680 
ups_mib_mgr_get_upsTest(struct snmp_session * s,upsTest_t ** upsTest)681 int ups_mib_mgr_get_upsTest(struct snmp_session *s, upsTest_t **upsTest)
682 {
683     struct snmp_session *peer;
684     struct snmp_pdu *request, *response;
685     struct variable_list *vars;
686     int status;
687 
688     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
689     snmp_add_null_var(request, upsTestId, sizeof(upsTestId)/sizeof(oid));
690     snmp_add_null_var(request, upsTestSpinLock, sizeof(upsTestSpinLock)/sizeof(oid));
691     snmp_add_null_var(request, upsTestResultsSummary, sizeof(upsTestResultsSummary)/sizeof(oid));
692     snmp_add_null_var(request, upsTestResultsDetail, sizeof(upsTestResultsDetail)/sizeof(oid));
693     snmp_add_null_var(request, upsTestStartTime, sizeof(upsTestStartTime)/sizeof(oid));
694     snmp_add_null_var(request, upsTestElapsedTime, sizeof(upsTestElapsedTime)/sizeof(oid));
695 
696     peer = snmp_open(s);
697     if (!peer) {
698         return -1;
699     }
700 
701     status = snmp_synch_response(peer, request, &response);
702     if (status != STAT_SUCCESS) {
703         if (response) snmp_free_pdu(response);
704         snmp_close(peer);
705         return -2;
706     }
707 
708     *upsTest = (upsTest_t *) malloc(sizeof(upsTest_t));
709     if (! *upsTest) {
710         if (response) snmp_free_pdu(response);
711         snmp_close(peer);
712         return -4;
713     }
714 
715     for (vars = response->variables; vars; vars = vars->next_variable) {
716         if (vars->name_length > sizeof(upsTestId)/sizeof(oid)
717             && memcmp(vars->name, upsTestId, sizeof(upsTestId)) == 0) {
718         }
719         if (vars->name_length > sizeof(upsTestSpinLock)/sizeof(oid)
720             && memcmp(vars->name, upsTestSpinLock, sizeof(upsTestSpinLock)) == 0) {
721             (*upsTest)->__upsTestSpinLock = *vars->val.integer;
722             (*upsTest)->upsTestSpinLock = &((*upsTest)->__upsTestSpinLock);
723         }
724         if (vars->name_length > sizeof(upsTestResultsSummary)/sizeof(oid)
725             && memcmp(vars->name, upsTestResultsSummary, sizeof(upsTestResultsSummary)) == 0) {
726             (*upsTest)->__upsTestResultsSummary = *vars->val.integer;
727             (*upsTest)->upsTestResultsSummary = &((*upsTest)->__upsTestResultsSummary);
728         }
729         if (vars->name_length > sizeof(upsTestResultsDetail)/sizeof(oid)
730             && memcmp(vars->name, upsTestResultsDetail, sizeof(upsTestResultsDetail)) == 0) {
731             memcpy((*upsTest)->__upsTestResultsDetail, vars->val.string, vars->val_len);
732             (*upsTest)->_upsTestResultsDetailLength = vars->val_len;
733             (*upsTest)->upsTestResultsDetail = (*upsTest)->__upsTestResultsDetail;
734         }
735         if (vars->name_length > sizeof(upsTestStartTime)/sizeof(oid)
736             && memcmp(vars->name, upsTestStartTime, sizeof(upsTestStartTime)) == 0) {
737             (*upsTest)->__upsTestStartTime = *vars->val.integer;
738             (*upsTest)->upsTestStartTime = &((*upsTest)->__upsTestStartTime);
739         }
740         if (vars->name_length > sizeof(upsTestElapsedTime)/sizeof(oid)
741             && memcmp(vars->name, upsTestElapsedTime, sizeof(upsTestElapsedTime)) == 0) {
742             (*upsTest)->__upsTestElapsedTime = *vars->val.integer;
743             (*upsTest)->upsTestElapsedTime = &((*upsTest)->__upsTestElapsedTime);
744         }
745     }
746 
747     if (response) snmp_free_pdu(response);
748 
749     if (snmp_close(peer) == 0) {
750         return -5;
751     }
752 
753     return 0;
754 }
755 
ups_mib_mgr_get_upsControl(struct snmp_session * s,upsControl_t ** upsControl)756 int ups_mib_mgr_get_upsControl(struct snmp_session *s, upsControl_t **upsControl)
757 {
758     struct snmp_session *peer;
759     struct snmp_pdu *request, *response;
760     struct variable_list *vars;
761     int status;
762 
763     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
764     snmp_add_null_var(request, upsShutdownType, sizeof(upsShutdownType)/sizeof(oid));
765     snmp_add_null_var(request, upsShutdownAfterDelay, sizeof(upsShutdownAfterDelay)/sizeof(oid));
766     snmp_add_null_var(request, upsStartupAfterDelay, sizeof(upsStartupAfterDelay)/sizeof(oid));
767     snmp_add_null_var(request, upsRebootWithDuration, sizeof(upsRebootWithDuration)/sizeof(oid));
768     snmp_add_null_var(request, upsAutoRestart, sizeof(upsAutoRestart)/sizeof(oid));
769 
770     peer = snmp_open(s);
771     if (!peer) {
772         return -1;
773     }
774 
775     status = snmp_synch_response(peer, request, &response);
776     if (status != STAT_SUCCESS) {
777         if (response) snmp_free_pdu(response);
778         snmp_close(peer);
779         return -2;
780     }
781 
782     *upsControl = (upsControl_t *) malloc(sizeof(upsControl_t));
783     if (! *upsControl) {
784         if (response) snmp_free_pdu(response);
785         snmp_close(peer);
786         return -4;
787     }
788 
789     for (vars = response->variables; vars; vars = vars->next_variable) {
790         if (vars->name_length > sizeof(upsShutdownType)/sizeof(oid)
791             && memcmp(vars->name, upsShutdownType, sizeof(upsShutdownType)) == 0) {
792             (*upsControl)->__upsShutdownType = *vars->val.integer;
793             (*upsControl)->upsShutdownType = &((*upsControl)->__upsShutdownType);
794         }
795         if (vars->name_length > sizeof(upsShutdownAfterDelay)/sizeof(oid)
796             && memcmp(vars->name, upsShutdownAfterDelay, sizeof(upsShutdownAfterDelay)) == 0) {
797             (*upsControl)->__upsShutdownAfterDelay = *vars->val.integer;
798             (*upsControl)->upsShutdownAfterDelay = &((*upsControl)->__upsShutdownAfterDelay);
799         }
800         if (vars->name_length > sizeof(upsStartupAfterDelay)/sizeof(oid)
801             && memcmp(vars->name, upsStartupAfterDelay, sizeof(upsStartupAfterDelay)) == 0) {
802             (*upsControl)->__upsStartupAfterDelay = *vars->val.integer;
803             (*upsControl)->upsStartupAfterDelay = &((*upsControl)->__upsStartupAfterDelay);
804         }
805         if (vars->name_length > sizeof(upsRebootWithDuration)/sizeof(oid)
806             && memcmp(vars->name, upsRebootWithDuration, sizeof(upsRebootWithDuration)) == 0) {
807             (*upsControl)->__upsRebootWithDuration = *vars->val.integer;
808             (*upsControl)->upsRebootWithDuration = &((*upsControl)->__upsRebootWithDuration);
809         }
810         if (vars->name_length > sizeof(upsAutoRestart)/sizeof(oid)
811             && memcmp(vars->name, upsAutoRestart, sizeof(upsAutoRestart)) == 0) {
812             (*upsControl)->__upsAutoRestart = *vars->val.integer;
813             (*upsControl)->upsAutoRestart = &((*upsControl)->__upsAutoRestart);
814         }
815     }
816 
817     if (response) snmp_free_pdu(response);
818 
819     if (snmp_close(peer) == 0) {
820         return -5;
821     }
822 
823     return 0;
824 }
825 
ups_mib_mgr_get_upsConfig(struct snmp_session * s,upsConfig_t ** upsConfig)826 int ups_mib_mgr_get_upsConfig(struct snmp_session *s, upsConfig_t **upsConfig)
827 {
828     struct snmp_session *peer;
829     struct snmp_pdu *request, *response;
830     struct variable_list *vars;
831     int status;
832 
833     request = snmp_pdu_create(SNMP_MSG_GETNEXT);
834     snmp_add_null_var(request, upsConfigInputVoltage, sizeof(upsConfigInputVoltage)/sizeof(oid));
835     snmp_add_null_var(request, upsConfigInputFreq, sizeof(upsConfigInputFreq)/sizeof(oid));
836     snmp_add_null_var(request, upsConfigOutputVoltage, sizeof(upsConfigOutputVoltage)/sizeof(oid));
837     snmp_add_null_var(request, upsConfigOutputFreq, sizeof(upsConfigOutputFreq)/sizeof(oid));
838     snmp_add_null_var(request, upsConfigOutputVA, sizeof(upsConfigOutputVA)/sizeof(oid));
839     snmp_add_null_var(request, upsConfigOutputPower, sizeof(upsConfigOutputPower)/sizeof(oid));
840     snmp_add_null_var(request, upsConfigLowBattTime, sizeof(upsConfigLowBattTime)/sizeof(oid));
841     snmp_add_null_var(request, upsConfigAudibleStatus, sizeof(upsConfigAudibleStatus)/sizeof(oid));
842     snmp_add_null_var(request, upsConfigLowVoltageTransferPoint, sizeof(upsConfigLowVoltageTransferPoint)/sizeof(oid));
843     snmp_add_null_var(request, upsConfigHighVoltageTransferPoint, sizeof(upsConfigHighVoltageTransferPoint)/sizeof(oid));
844 
845     peer = snmp_open(s);
846     if (!peer) {
847         return -1;
848     }
849 
850     status = snmp_synch_response(peer, request, &response);
851     if (status != STAT_SUCCESS) {
852         if (response) snmp_free_pdu(response);
853         snmp_close(peer);
854         return -2;
855     }
856 
857     *upsConfig = (upsConfig_t *) malloc(sizeof(upsConfig_t));
858     if (! *upsConfig) {
859         if (response) snmp_free_pdu(response);
860         snmp_close(peer);
861         return -4;
862     }
863 
864     for (vars = response->variables; vars; vars = vars->next_variable) {
865         if (vars->name_length > sizeof(upsConfigInputVoltage)/sizeof(oid)
866             && memcmp(vars->name, upsConfigInputVoltage, sizeof(upsConfigInputVoltage)) == 0) {
867             (*upsConfig)->__upsConfigInputVoltage = *vars->val.integer;
868             (*upsConfig)->upsConfigInputVoltage = &((*upsConfig)->__upsConfigInputVoltage);
869         }
870         if (vars->name_length > sizeof(upsConfigInputFreq)/sizeof(oid)
871             && memcmp(vars->name, upsConfigInputFreq, sizeof(upsConfigInputFreq)) == 0) {
872             (*upsConfig)->__upsConfigInputFreq = *vars->val.integer;
873             (*upsConfig)->upsConfigInputFreq = &((*upsConfig)->__upsConfigInputFreq);
874         }
875         if (vars->name_length > sizeof(upsConfigOutputVoltage)/sizeof(oid)
876             && memcmp(vars->name, upsConfigOutputVoltage, sizeof(upsConfigOutputVoltage)) == 0) {
877             (*upsConfig)->__upsConfigOutputVoltage = *vars->val.integer;
878             (*upsConfig)->upsConfigOutputVoltage = &((*upsConfig)->__upsConfigOutputVoltage);
879         }
880         if (vars->name_length > sizeof(upsConfigOutputFreq)/sizeof(oid)
881             && memcmp(vars->name, upsConfigOutputFreq, sizeof(upsConfigOutputFreq)) == 0) {
882             (*upsConfig)->__upsConfigOutputFreq = *vars->val.integer;
883             (*upsConfig)->upsConfigOutputFreq = &((*upsConfig)->__upsConfigOutputFreq);
884         }
885         if (vars->name_length > sizeof(upsConfigOutputVA)/sizeof(oid)
886             && memcmp(vars->name, upsConfigOutputVA, sizeof(upsConfigOutputVA)) == 0) {
887             (*upsConfig)->__upsConfigOutputVA = *vars->val.integer;
888             (*upsConfig)->upsConfigOutputVA = &((*upsConfig)->__upsConfigOutputVA);
889         }
890         if (vars->name_length > sizeof(upsConfigOutputPower)/sizeof(oid)
891             && memcmp(vars->name, upsConfigOutputPower, sizeof(upsConfigOutputPower)) == 0) {
892             (*upsConfig)->__upsConfigOutputPower = *vars->val.integer;
893             (*upsConfig)->upsConfigOutputPower = &((*upsConfig)->__upsConfigOutputPower);
894         }
895         if (vars->name_length > sizeof(upsConfigLowBattTime)/sizeof(oid)
896             && memcmp(vars->name, upsConfigLowBattTime, sizeof(upsConfigLowBattTime)) == 0) {
897             (*upsConfig)->__upsConfigLowBattTime = *vars->val.integer;
898             (*upsConfig)->upsConfigLowBattTime = &((*upsConfig)->__upsConfigLowBattTime);
899         }
900         if (vars->name_length > sizeof(upsConfigAudibleStatus)/sizeof(oid)
901             && memcmp(vars->name, upsConfigAudibleStatus, sizeof(upsConfigAudibleStatus)) == 0) {
902             (*upsConfig)->__upsConfigAudibleStatus = *vars->val.integer;
903             (*upsConfig)->upsConfigAudibleStatus = &((*upsConfig)->__upsConfigAudibleStatus);
904         }
905         if (vars->name_length > sizeof(upsConfigLowVoltageTransferPoint)/sizeof(oid)
906             && memcmp(vars->name, upsConfigLowVoltageTransferPoint, sizeof(upsConfigLowVoltageTransferPoint)) == 0) {
907             (*upsConfig)->__upsConfigLowVoltageTransferPoint = *vars->val.integer;
908             (*upsConfig)->upsConfigLowVoltageTransferPoint = &((*upsConfig)->__upsConfigLowVoltageTransferPoint);
909         }
910         if (vars->name_length > sizeof(upsConfigHighVoltageTransferPoint)/sizeof(oid)
911             && memcmp(vars->name, upsConfigHighVoltageTransferPoint, sizeof(upsConfigHighVoltageTransferPoint)) == 0) {
912             (*upsConfig)->__upsConfigHighVoltageTransferPoint = *vars->val.integer;
913             (*upsConfig)->upsConfigHighVoltageTransferPoint = &((*upsConfig)->__upsConfigHighVoltageTransferPoint);
914         }
915     }
916 
917     if (response) snmp_free_pdu(response);
918 
919     if (snmp_close(peer) == 0) {
920         return -5;
921     }
922 
923     return 0;
924 }
925 
926 
927