check_varbind.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:3k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #include <net-snmp/net-snmp-config.h>
  2. #include <net-snmp/net-snmp-includes.h>
  3. #include <net-snmp/library/check_varbind.h>
  4. NETSNMP_INLINE int
  5. netsnmp_check_vb_type(const netsnmp_variable_list *var, int type )
  6. {
  7.     register int rc = SNMP_ERR_NOERROR;
  8.     if (NULL == var)
  9.         return SNMP_ERR_GENERR;
  10.     
  11.     if (var->type != type) {
  12.         rc = SNMP_ERR_WRONGTYPE;
  13.     }
  14.     return rc;
  15. }
  16. NETSNMP_INLINE int
  17. netsnmp_check_vb_size(const netsnmp_variable_list *var, size_t size )
  18. {
  19.     register int rc = SNMP_ERR_NOERROR;
  20.     if (NULL == var)
  21.         return SNMP_ERR_GENERR;
  22.     
  23.     else if (var->val_len != size) {
  24.         rc = SNMP_ERR_WRONGLENGTH;
  25.     }
  26.     return rc;
  27. }
  28. NETSNMP_INLINE int
  29. netsnmp_check_vb_size_range(const netsnmp_variable_list *var,
  30.                             size_t low, size_t high )
  31. {
  32.     register int rc = SNMP_ERR_NOERROR;
  33.     if (NULL == var)
  34.         return SNMP_ERR_GENERR;
  35.     
  36.     if ((var->val_len < low) || (var->val_len > high)) {
  37.         rc = SNMP_ERR_WRONGLENGTH;
  38.     }
  39.     return rc;
  40. }
  41. NETSNMP_INLINE int
  42. netsnmp_check_vb_type_and_size(const netsnmp_variable_list *var,
  43.                                int type, size_t size)
  44. {
  45.     register int rc = SNMP_ERR_NOERROR;
  46.     if (NULL == var)
  47.         return SNMP_ERR_GENERR;
  48.     
  49.     if ((rc = netsnmp_check_vb_type(var,type)))
  50.         ;
  51.     else
  52.         rc = netsnmp_check_vb_size(var, size);
  53.     return rc;
  54. }
  55. NETSNMP_INLINE int
  56. netsnmp_check_vb_int_range(const netsnmp_variable_list *var, int low, int high)
  57. {
  58.     register int rc = SNMP_ERR_NOERROR;
  59.     
  60.     if (NULL == var)
  61.         return SNMP_ERR_GENERR;
  62.     
  63.     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
  64.         return rc;
  65.     
  66.     if ((*var->val.integer < low) || (*var->val.integer > high)) {
  67.         rc = SNMP_ERR_WRONGVALUE;
  68.     }
  69.     return rc;
  70. }
  71. int
  72. netsnmp_check_vb_truthvalue(const netsnmp_variable_list *var)
  73. {
  74.     register int rc = SNMP_ERR_NOERROR;
  75.     
  76.     if (NULL == var)
  77.         return SNMP_ERR_GENERR;
  78.     
  79.     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
  80.         return rc;
  81.     
  82.     return netsnmp_check_vb_int_range(var, 1, 2);
  83. }
  84. NETSNMP_INLINE int
  85. netsnmp_check_vb_rowstatus_value(const netsnmp_variable_list *var)
  86. {
  87.     register int rc = SNMP_ERR_NOERROR;
  88.     if (NULL == var)
  89.         return SNMP_ERR_GENERR;
  90.     
  91.     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
  92.         return rc;
  93.     
  94.     return netsnmp_check_vb_int_range(var, SNMP_ROW_NONEXISTENT,
  95.                                       SNMP_ROW_DESTROY);
  96. }
  97. int
  98. netsnmp_check_vb_rowstatus(const netsnmp_variable_list *var, int old_value)
  99. {
  100.     register int rc = SNMP_ERR_NOERROR;
  101.     if (NULL == var)
  102.         return SNMP_ERR_GENERR;
  103.     
  104.     if ((rc = netsnmp_check_vb_rowstatus_value(var)))
  105.         return rc;
  106.     return check_rowstatus_transition(old_value, *var->val.integer);
  107. }
  108. int
  109. netsnmp_check_vb_storagetype(const netsnmp_variable_list *var, int old_value)
  110. {
  111.     int rc = SNMP_ERR_NOERROR;
  112.     if (NULL == var)
  113.         return SNMP_ERR_GENERR;
  114.     
  115.     if ((rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER, sizeof(int))))
  116.         return rc;
  117.     
  118.     if ((rc = netsnmp_check_vb_int_range(var, SNMP_STORAGE_NONE,
  119.                                         SNMP_STORAGE_READONLY)))
  120.         return rc;
  121.         
  122.     return check_storage_transition(old_value, *var->val.integer);
  123. }