check_varbind.c

00001 #include <net-snmp/net-snmp-config.h>
00002 
00003 #include <net-snmp/net-snmp-includes.h>
00004 
00005 #include <net-snmp/library/check_varbind.h>
00006 
00007 NETSNMP_INLINE int
00008 netsnmp_check_vb_type(const netsnmp_variable_list *var, int type )
00009 {
00010     register int rc = SNMP_ERR_NOERROR;
00011 
00012     if (NULL == var)
00013         return SNMP_ERR_GENERR;
00014     
00015     if (var->type != type) {
00016         rc = SNMP_ERR_WRONGTYPE;
00017     }
00018 
00019     return rc;
00020 }
00021 
00022 NETSNMP_INLINE int
00023 netsnmp_check_vb_size(const netsnmp_variable_list *var, size_t size )
00024 {
00025     register int rc = SNMP_ERR_NOERROR;
00026 
00027     if (NULL == var)
00028         return SNMP_ERR_GENERR;
00029     
00030     else if (var->val_len != size) {
00031         rc = SNMP_ERR_WRONGLENGTH;
00032     }
00033 
00034     return rc;
00035 }
00036 
00037 NETSNMP_INLINE int
00038 netsnmp_check_vb_max_size(const netsnmp_variable_list *var, size_t size )
00039 {
00040     register int rc = SNMP_ERR_NOERROR;
00041 
00042     if (NULL == var)
00043         return SNMP_ERR_GENERR;
00044     
00045     else if (var->val_len > size) {
00046         rc = SNMP_ERR_WRONGLENGTH;
00047     }
00048 
00049     return rc;
00050 }
00051 
00052 NETSNMP_INLINE int
00053 netsnmp_check_vb_range(const netsnmp_variable_list *var,
00054                        size_t low, size_t high )
00055 {
00056     register int rc = SNMP_ERR_NOERROR;
00057 
00058     if (NULL == var)
00059         return SNMP_ERR_GENERR;
00060     
00061     if ((*var->val.integer < low) || (*var->val.integer > high)) {
00062         rc = SNMP_ERR_WRONGVALUE;
00063     }
00064 
00065     return rc;
00066 }
00067 
00068 NETSNMP_INLINE int
00069 netsnmp_check_vb_size_range(const netsnmp_variable_list *var,
00070                             size_t low, size_t high )
00071 {
00072     register int rc = SNMP_ERR_NOERROR;
00073 
00074     if (NULL == var)
00075         return SNMP_ERR_GENERR;
00076     
00077     if ((var->val_len < low) || (var->val_len > high)) {
00078         rc = SNMP_ERR_WRONGLENGTH;
00079     }
00080 
00081     return rc;
00082 }
00083 
00084 NETSNMP_INLINE int
00085 netsnmp_check_vb_type_and_size(const netsnmp_variable_list *var,
00086                                int type, size_t size)
00087 {
00088     register int rc = SNMP_ERR_NOERROR;
00089 
00090     if (NULL == var)
00091         return SNMP_ERR_GENERR;
00092     
00093     if ((rc = netsnmp_check_vb_type(var,type)))
00094         ;
00095     else
00096         rc = netsnmp_check_vb_size(var, size);
00097 
00098     return rc;
00099 }
00100 
00101 NETSNMP_INLINE int
00102 netsnmp_check_vb_type_and_max_size(const netsnmp_variable_list *var,
00103                                int type, size_t size)
00104 {
00105     register int rc = SNMP_ERR_NOERROR;
00106 
00107     if (NULL == var)
00108         return SNMP_ERR_GENERR;
00109     
00110     if ((rc = netsnmp_check_vb_type(var,type)))
00111         ;
00112     else
00113         rc = netsnmp_check_vb_max_size(var, size);
00114 
00115     return rc;
00116 }
00117 
00118 NETSNMP_INLINE int
00119 netsnmp_check_vb_oid(const netsnmp_variable_list *var)
00120 {
00121     register int rc = SNMP_ERR_NOERROR;
00122 
00123     if (NULL == var)
00124         return SNMP_ERR_GENERR;
00125     
00126     if ((rc = netsnmp_check_vb_type(var,ASN_OBJECT_ID)))
00127         ;
00128     else
00129         rc = netsnmp_check_vb_max_size(var, MAX_OID_LEN*sizeof(oid));
00130 
00131     return rc;
00132 }
00133 
00134 NETSNMP_INLINE int
00135 netsnmp_check_vb_int(const netsnmp_variable_list *var)
00136 {
00137     if (NULL == var)
00138         return SNMP_ERR_GENERR;
00139     
00140     return netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(long));
00141 }
00142 
00143 NETSNMP_INLINE int
00144 netsnmp_check_vb_uint(const netsnmp_variable_list *var)
00145 {
00146     if (NULL == var)
00147         return SNMP_ERR_GENERR;
00148     
00149     return netsnmp_check_vb_type_and_size(var, ASN_UNSIGNED, sizeof(long));
00150 }
00151 
00152 NETSNMP_INLINE int
00153 netsnmp_check_vb_int_range(const netsnmp_variable_list *var, int low, int high)
00154 {
00155     register int rc = SNMP_ERR_NOERROR;
00156     
00157     if (NULL == var)
00158         return SNMP_ERR_GENERR;
00159     
00160     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(long))))
00161         return rc;
00162     
00163     if ((*var->val.integer < low) || (*var->val.integer > high)) {
00164         rc = SNMP_ERR_WRONGVALUE;
00165     }
00166 
00167     return rc;
00168 }
00169 
00170 int
00171 netsnmp_check_vb_truthvalue(const netsnmp_variable_list *var)
00172 {
00173     register int rc = SNMP_ERR_NOERROR;
00174     
00175     if (NULL == var)
00176         return SNMP_ERR_GENERR;
00177     
00178     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(long))))
00179         return rc;
00180     
00181     return netsnmp_check_vb_int_range(var, 1, 2);
00182 }
00183 
00184 NETSNMP_INLINE int
00185 netsnmp_check_vb_rowstatus_value(const netsnmp_variable_list *var)
00186 {
00187     register int rc = SNMP_ERR_NOERROR;
00188 
00189     if (NULL == var)
00190         return SNMP_ERR_GENERR;
00191     
00192     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(long))))
00193         return rc;
00194     
00195     if (*var->val.integer == RS_NOTREADY)
00196         return SNMP_ERR_WRONGVALUE;
00197 
00198     return netsnmp_check_vb_int_range(var, SNMP_ROW_NONEXISTENT,
00199                                       SNMP_ROW_DESTROY);
00200 }
00201 
00202 int
00203 netsnmp_check_vb_rowstatus(const netsnmp_variable_list *var, int old_value)
00204 {
00205     register int rc = SNMP_ERR_NOERROR;
00206 
00207     if (NULL == var)
00208         return SNMP_ERR_GENERR;
00209     
00210     if ((rc = netsnmp_check_vb_rowstatus_value(var)))
00211         return rc;
00212 
00213     return check_rowstatus_transition(old_value, *var->val.integer);
00214 }
00215 
00216 int
00217 netsnmp_check_vb_storagetype(const netsnmp_variable_list *var, int old_value)
00218 {
00219     int rc = SNMP_ERR_NOERROR;
00220 
00221     if (NULL == var)
00222         return SNMP_ERR_GENERR;
00223     
00224     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(long))))
00225         return rc;
00226     
00227     if ((rc = netsnmp_check_vb_int_range(var, SNMP_STORAGE_NONE,
00228                                         SNMP_STORAGE_READONLY)))
00229         return rc;
00230         
00231     return check_storage_transition(old_value, *var->val.integer);
00232 }

net-snmpに対してSat Sep 5 13:14:20 2009に生成されました。  doxygen 1.4.7