]>
Commit | Line | Data |
---|---|---|
e9b6787d ER |
1 | --- net-snmp-5.4.2.1/agent/mibgroup/ucd-snmp/loadave.c~ 2009-12-21 21:00:10.094254079 +0200 |
2 | +++ net-snmp-5.4.2.1/agent/mibgroup/ucd-snmp/loadave.c 2009-12-21 22:02:45.398903148 +0200 | |
3 | @@ -152,7 +152,7 @@ | |
4 | {ERRORNAME}}, | |
5 | {LOADAVE, ASN_OCTET_STR, RONLY, var_extensible_loadave, 1, | |
6 | {LOADAVE}}, | |
7 | - {LOADMAXVAL, ASN_OCTET_STR, RONLY, var_extensible_loadave, 1, | |
8 | + {LOADMAXVAL, ASN_OCTET_STR, RWRITE, var_extensible_loadave, 1, | |
9 | {LOADMAXVAL}}, | |
10 | {LOADAVEINT, ASN_INTEGER, RONLY, var_extensible_loadave, 1, | |
11 | {LOADAVEINT}}, | |
32156cff | 12 | @@ -309,6 +309,63 @@ |
e9b6787d ER |
13 | return 0; |
14 | } | |
15 | ||
16 | +static int | |
17 | +write_laConfig(int action, | |
18 | + u_char * var_val, | |
19 | + u_char var_val_type, | |
20 | + size_t var_val_len, | |
21 | + u_char * statP, oid * name, size_t name_len) | |
22 | +{ | |
32156cff ER |
23 | + static double laConfig = 0; |
24 | + | |
25 | + switch (action) { | |
26 | + case RESERVE1: | |
27 | + if (var_val_type != ASN_OCTET_STR) { | |
28 | + DEBUGMSGTL(("ucd-snmp/loadave", | |
29 | + "write to laConfig not ASN_OCTET_STR\n")); | |
30 | + return SNMP_ERR_WRONGTYPE; | |
31 | + } | |
32 | + if (var_val_len > 8 || var_val_len <= 0) { | |
33 | + DEBUGMSGTL(("ucd-snmp/loadave", | |
34 | + "write to laConfig: bad length\n")); | |
35 | + return SNMP_ERR_WRONGLENGTH; | |
36 | + } | |
37 | + break; | |
38 | + | |
39 | + case RESERVE2: | |
40 | + { | |
41 | + u_char buf[8]; | |
42 | + int old_errno = errno; | |
00b0aba0 | 43 | + double val; |
32156cff ER |
44 | + char *endp; |
45 | + | |
46 | + strncpy(buf, var_val, var_val_len); | |
47 | + buf[var_val_len] = '\0'; | |
48 | + val = strtod(buf, &endp); | |
49 | + | |
50 | + if (errno == ERANGE || *endp != '\0' || val < 0 || val > 65536.00) { | |
51 | + errno = old_errno; | |
00b0aba0 ER |
52 | + DEBUGMSGTL(("ucd-snmp/loadave", |
53 | + "write to laConfig: invalid value\n")); | |
54 | + return SNMP_ERR_WRONGVALUE; | |
55 | + } | |
32156cff ER |
56 | + |
57 | + errno = old_errno; | |
58 | + | |
59 | + laConfig = val; | |
60 | + } | |
61 | + break; | |
62 | + | |
63 | + case COMMIT: | |
64 | + { | |
65 | + int idx = name[name_len - 1] - 1; | |
66 | + maxload[idx] = laConfig; | |
00b0aba0 | 67 | + } |
e9b6787d | 68 | + } |
32156cff | 69 | + |
e9b6787d ER |
70 | + return SNMP_ERR_NOERROR; |
71 | +} | |
72 | + | |
73 | u_char * | |
74 | var_extensible_loadave(struct variable * vp, | |
75 | oid * name, | |
32156cff | 76 | @@ -328,6 +385,10 @@ |
e9b6787d ER |
77 | case MIBINDEX: |
78 | long_ret = name[*length - 1]; | |
79 | return ((u_char *) (&long_ret)); | |
80 | + case LOADMAXVAL: | |
00b0aba0 ER |
81 | + /* setup write method, but don't return yet */ |
82 | + *write_method = write_laConfig; | |
83 | + break; | |
e9b6787d ER |
84 | case ERRORNAME: |
85 | sprintf(errmsg, "Load-%d", ((name[*length - 1] == 1) ? 1 : | |
86 | ((name[*length - 1] == 2) ? 5 : 15))); |