Revert "Revert "and added files""
[bcm963xx.git] / userapps / opensource / net-snmp / snmplib / check_varbind.c
1 #include <net-snmp/net-snmp-config.h>
2
3 #include <net-snmp/net-snmp-includes.h>
4
5 #include <net-snmp/library/check_varbind.h>
6
7
8
9 int
10 netsnmp_check_vb_type_and_size(netsnmp_variable_list *var,
11                                int type, size_t size)
12 {
13     register int rc = SNMP_ERR_NOERROR;
14
15     if (NULL == var)
16         return SNMP_ERR_GENERR;
17     
18     if (var->type != type) {
19         rc = SNMP_ERR_WRONGTYPE;
20     } else if (var->val_len != size) {
21         rc = SNMP_ERR_WRONGLENGTH;
22     }
23
24     return rc;
25 }
26
27 int
28 netsnmp_check_vb_int_range(netsnmp_variable_list *var, int low, int high)
29 {
30     register int rc = SNMP_ERR_NOERROR;
31     
32     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
33         return rc;
34     
35     if ((*var->val.integer < low) || (*var->val.integer > high)) {
36         rc = SNMP_ERR_BADVALUE;
37     }
38
39     return rc;
40 }
41
42 int
43 netsnmp_check_vb_truthvalue(netsnmp_variable_list *var)
44 {
45     register int rc = SNMP_ERR_NOERROR;
46     
47     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
48         return rc;
49     
50     return netsnmp_check_vb_int_range(var, 1, 2);
51 }
52
53 int
54 netsnmp_check_vb_rowstatus(netsnmp_variable_list *var, int old_value)
55 {
56     register int rc = SNMP_ERR_NOERROR;
57
58     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
59         return rc;
60     
61     if ((rc = netsnmp_check_vb_int_range(var, SNMP_ROW_NONEXISTENT,
62                                          SNMP_ROW_DESTROY)))
63         return rc;
64
65     return check_rowstatus_transition(old_value, *var->val.integer);
66 }
67
68 int
69 netsnmp_check_vb_storagetype(netsnmp_variable_list *var, int old_value)
70 {
71     int rc = SNMP_ERR_NOERROR;
72
73     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
74         return rc;
75     
76     if ((rc = netsnmp_check_vb_int_range(var, SNMP_STORAGE_NONE,
77                                         SNMP_STORAGE_READONLY)))
78         return rc;
79         
80     return check_storage_transition(old_value, *var->val.integer);
81 }