#############################################################  -*- c -*-
## generic include for XXX. Do not use directly.
##
## $Id$
##
## assumes an integer rc is available and will be tested by caller
##
########################################################################
@if $m2c_mark_boundary == 1@
/** START code generated by $RCSfile$ $Revision$ */
@end@
########################################################################
##----------------------------------------------------------------------
## setup
##----------------------------------------------------------------------
@if $node.enums == 1@
##------------------------------------------------------
@   if "$node.perltype" ne "BITS"@
    /* check that the value is one of defined enums */
    if( (SNMPERR_SUCCESS == rc)
@      foreach $e $v enum@
@         include m2c_setup_enum.m2i@
 && ( $m2c_nv_val != $m2c_ename )
@      end@ # for each
        ) {
        rc = SNMP_ERR_WRONGVALUE;
        }
##------------------------------------------------------
@   else@ # BITS
## {
    if($m2c_nv_len > 4) {
        snmp_log(LOG_ERR,"I can not handle BITS > 4 bytes\n");
        rc = SNMP_ERR_GENERR;
    }
    else if (SNMPERR_SUCCESS == rc){
        u_long bits = 0;
        /* check that value is within enum mask */
        memcpy( &bits, $m2c_nv_str, $m2c_nv_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_nv_rc = "SNMP_ERR_WRONGVALUE"@
@      eval $m2c_nv_tmp = "$m2c_nv_val"@
@   else@
@      eval $m2c_nv_rc = "SNMP_ERR_WRONGLENGTH"@
@      eval $m2c_nv_tmp = "$m2c_nv_len"@
@   end@
    /* check defined range(s). */
    if( (SNMPERR_SUCCESS == rc)
@      foreach $a $b range $node@
@         if $a == $b@
       && ($m2c_nv_tmp != $a)
@         else@
       && (($m2c_nv_tmp < $a) || ($m2c_nv_tmp > $b))
@         end@
@      end@
     ) {
        rc = $m2c_nv_rc;
    }
@end@
##
########################################################################
@if $m2c_mark_boundary == 1@
/** END code generated by $RCSfile$ $Revision$ */
@end@
