node-varbind-validate.m2i
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:4k
源码类别:
SNMP编程
开发平台:
Unix_Linux
- ############################################################# -*- c -*-
- ## generic include for XXX. Do not use directly.
- ##
- ## $Id: node-varbind-validate.m2i,v 1.4 2004/09/09 23:15:38 rstory Exp $
- ##
- ## Tests a netsnmp_variable_list pointer (var) against known
- ## contstraints. If none are found, calls the user supplied funtion
- ## ${node}_check_value.
- ##
- ## Sets the variable rc to a SNMP_ERR.
- ##
- ## Requirements
- ## ------------
- ## $m2c_nvv_sizeof: variable name appropriate for a sizeof() call to
- ## check variable length. If NULL, no size check
- ## will be done.
- ##
- ########################################################################
- @if $m2c_mark_boundary == 1@
- /** START code generated by $RCSfile: node-varbind-validate.m2i,v $ $Revision: 1.4 $ */
- @end@
- ########################################################################
- ##----------------------------------------------------------------------
- ## setup
- ##----------------------------------------------------------------------
- @if $m2c_paranoid == 1@
- netsnmp_assert(rc == SNMP_ERR_NOERROR); /* paranoia */
- @end@
- ##----------------------------------------------------------------------
- ## syntax specific
- ##----------------------------------------------------------------------
- @ifconf syntax-$node.syntax-varbind-validate.m2i@
- @ include syntax-$node.syntax-varbind-validate.m2i@
- @else@
- ##----------------------------------------------------------------------
- ## Check type
- ##----------------------------------------------------------------------
- ## if not generated code or is OCTET_STR, length checks are up to user
- @ if ($m2c_node_needlength == 1) || ("x$m2c_nvv_sizeof" eq "x")@
- rc = netsnmp_check_vb_type( var, $node.type );
- @ else@
- rc = netsnmp_check_vb_type_and_size( var, $node.type,
- sizeof( $m2c_nvv_sizeof ) );
- @ end@
- ##----------------------------------------------------------------------
- ## check ENUMS
- ##----------------------------------------------------------------------
- @ if $node.enums == 1@
- if(SNMPERR_SUCCESS == rc) {
- ##------------------------------------------------------
- @ if "$node.perltype" ne "BITS"@
- /* check that the value is one of defined enums */
- if( 1
- @ foreach $e $v enum@
- @ include m2c_setup_enum.m2i@
- && ( *var->val.integer != $m2c_ename )
- @ end@ # for each
- ) {
- rc = SNMP_ERR_WRONGVALUE;
- }
- ##------------------------------------------------------
- @ else@ # BITS
- ## {
- if(var->val_len > 4) {
- snmp_log(LOG_ERR,"I can not handle BITS > 4 bytesn");
- rc = SNMP_ERR_GENERR;
- }
- else {
- u_long bits = 0;
- /* check that value is within enum mask */
- memcpy( &bits, var->val.string, var->val_len);
- if( (bits | $m2c_enum_mask) != $m2c_enum_mask)
- rc = SNMP_ERR_WRONGVALUE;
- }
- @ end@
- }
- ##----------------------------------------------------------------------
- ## check RANGES
- ##----------------------------------------------------------------------
- @ elsif $node.ranges == 1@
- @ if ("$node.decl" eq "long") || ("$node.decl" eq "u_long")@
- @ eval $m2c_nvv_func = "netsnmp_check_vb_int_range"@
- ##@ eval $m2c_nvv_rc = "SNMP_ERR_WRONGVALUE"@
- @ else@
- @ eval $m2c_nvv_func = "netsnmp_check_vb_size_range"@
- ##@ eval $m2c_nvv_rc = "SNMP_ERR_WRONGLENGTH"@
- @ end@
- if(SNMPERR_SUCCESS == rc) {
- /* check that the value is in the defined range(s); inefficent
- * but keeps rc value knowledge in libarary where it belongs. */
- if( 1
- @ foreach $a $b range $node@
- && ((rc = $m2c_nvv_func(var, $a,$b)) != SNMP_ERR_NOERROR)
- @ end@
- ) {
- ; /* rc set in condition */
- }
- }
- @ else@
- /* yyy-rks: anything else we can do here? */
- @ end@
- @end@ # not syntax specific
- ##
- ########################################################################
- @if $m2c_mark_boundary == 1@
- /** END code generated by $RCSfile: node-varbind-validate.m2i,v $ $Revision: 1.4 $ */
- @end@