/*
 * Note: this file originally auto-generated by mib2c using
 *        : mib2c.iterate.conf,v 5.6 2003/02/20 00:52:07 hardaker Exp $
 */

/***********************************************************************
 *   This file is auto-generated and SHOULD NOT BE EDITED by hand.
 *   Modify the netSnmpHostsTable_checkfns_local.[ch] files insead.
 *   (so that you can regenerate this one as mib2c improvements are made)
 ***********************************************************************/
#ifndef NETSNMPHOSTSTABLE_CHECKFNS_H
#define NETSNMPHOSTSTABLE_CHECKFNS_H

/** make sure we load the functions that you can modify */
config_require(examples/netSnmpHostsTable_checkfns_local)

#ifdef __cplusplus
extern "C" {
#endif

    /*
     * these functions are designed to check incoming values for 
     * columns in the netSnmpHostsTable table for legality with respect to 
     * datatype and value.
     */
     int             check_netSnmpHostAddressType(int type, long *val,
                                                  size_t val_len,
                                                  long *old_val,
                                                  size_t old_val_len);
     int             check_netSnmpHostAddress(int type, char *val,
                                              size_t val_len,
                                              char *old_val,
                                              size_t old_val_len);
     int             check_netSnmpHostStorage(int type, long *val,
                                              size_t val_len,
                                              long *old_val,
                                              size_t old_val_len);
     int             check_netSnmpHostRowStatus(int type, long *val,
                                                size_t val_len,
                                                long *old_val,
                                                size_t old_val_len);

#ifdef __cplusplus
}
#endif

#endif                          /* NETSNMPHOSTSTABLE_CHECKFNS_H */
