node-varbind-validate.m2i
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #############################################################  -*- c -*-
  2. ## generic include for XXX. Do not use directly.
  3. ##
  4. ## $Id: node-varbind-validate.m2i,v 1.4 2004/09/09 23:15:38 rstory Exp $
  5. ##
  6. ## Tests a netsnmp_variable_list pointer (var) against known
  7. ## contstraints. If none are found, calls the user supplied funtion
  8. ## ${node}_check_value.
  9. ##
  10. ## Sets the variable rc to a SNMP_ERR.
  11. ##
  12. ## Requirements
  13. ## ------------
  14. ## $m2c_nvv_sizeof: variable name appropriate for a sizeof() call to
  15. ##                  check variable length. If NULL, no size check
  16. ##                  will be done.
  17. ##
  18. ########################################################################
  19. @if $m2c_mark_boundary == 1@
  20. /** START code generated by $RCSfile: node-varbind-validate.m2i,v $ $Revision: 1.4 $ */
  21. @end@
  22. ########################################################################
  23. ##----------------------------------------------------------------------
  24. ## setup
  25. ##----------------------------------------------------------------------
  26. @if $m2c_paranoid == 1@
  27. netsnmp_assert(rc == SNMP_ERR_NOERROR); /* paranoia */
  28. @end@
  29. ##----------------------------------------------------------------------
  30. ## syntax specific
  31. ##----------------------------------------------------------------------
  32. @ifconf syntax-$node.syntax-varbind-validate.m2i@
  33. @   include syntax-$node.syntax-varbind-validate.m2i@
  34. @else@
  35. ##----------------------------------------------------------------------
  36. ## Check type
  37. ##----------------------------------------------------------------------
  38. ## if not generated code or is OCTET_STR, length checks are up to user
  39. @   if ($m2c_node_needlength == 1) || ("x$m2c_nvv_sizeof" eq "x")@
  40.     rc = netsnmp_check_vb_type( var, $node.type );
  41. @   else@
  42.     rc = netsnmp_check_vb_type_and_size( var, $node.type,
  43.         sizeof( $m2c_nvv_sizeof ) );
  44. @   end@
  45. ##----------------------------------------------------------------------
  46. ## check ENUMS
  47. ##----------------------------------------------------------------------
  48. @   if $node.enums == 1@
  49.     if(SNMPERR_SUCCESS == rc) {
  50. ##------------------------------------------------------
  51. @      if "$node.perltype" ne "BITS"@
  52.     /* check that the value is one of defined enums */
  53.     if( 1
  54. @         foreach $e $v enum@
  55. @            include m2c_setup_enum.m2i@
  56.  && ( *var->val.integer != $m2c_ename )
  57. @         end@ # for each
  58.         ) {
  59.         rc = SNMP_ERR_WRONGVALUE;
  60.         }
  61. ##------------------------------------------------------
  62. @      else@ # BITS
  63. ## {
  64.     if(var->val_len > 4) {
  65.         snmp_log(LOG_ERR,"I can not handle BITS > 4 bytesn");
  66.         rc = SNMP_ERR_GENERR;
  67.     }
  68.     else {
  69.         u_long bits = 0;
  70.         /* check that value is within enum mask */
  71.         memcpy( &bits, var->val.string, var->val_len);
  72.         if( (bits | $m2c_enum_mask) != $m2c_enum_mask)
  73.         rc = SNMP_ERR_WRONGVALUE;
  74.     }
  75. @      end@
  76.     }
  77. ##----------------------------------------------------------------------
  78. ## check RANGES
  79. ##----------------------------------------------------------------------
  80. @   elsif $node.ranges == 1@
  81. @      if ("$node.decl" eq "long") || ("$node.decl" eq "u_long")@
  82. @         eval $m2c_nvv_func = "netsnmp_check_vb_int_range"@
  83. ##@         eval $m2c_nvv_rc = "SNMP_ERR_WRONGVALUE"@
  84. @      else@
  85. @         eval $m2c_nvv_func = "netsnmp_check_vb_size_range"@
  86. ##@         eval $m2c_nvv_rc = "SNMP_ERR_WRONGLENGTH"@
  87. @      end@
  88.     if(SNMPERR_SUCCESS == rc) {
  89.     /* check that the value is in the defined range(s); inefficent
  90.      * but keeps rc value knowledge in libarary where it belongs. */
  91.     if( 1
  92. @    foreach $a $b range $node@
  93.        && ((rc = $m2c_nvv_func(var, $a,$b)) != SNMP_ERR_NOERROR)
  94. @    end@
  95.      ) {
  96.         ; /* rc set in condition */
  97.     }
  98.    }
  99. @   else@
  100.     /* yyy-rks: anything else we can do here? */
  101. @   end@
  102. @end@ # not syntax specific
  103. ##
  104. ########################################################################
  105. @if $m2c_mark_boundary == 1@
  106. /** END code generated by $RCSfile: node-varbind-validate.m2i,v $ $Revision: 1.4 $ */
  107. @end@