/*
 *Copyright(c)2004,Cisco URP imburses and Network Information Center in Beijing University of Posts and Telecommunications researches.
 *
 *All right reserved
 *
 *File Name:expErrorTable.h
 *File Description: head file.
 *
 *Current Version:1.0
 *Author:JianShun Tong
 *Date:2004.8.20
 */


/*
 * This file was generated by mib2c and is intended for use as a mib module
 * for the ucd-snmp snmpd agent. 
 */


#ifndef _MIBGROUP_EXPERRORTALBE_H
#define _MIBGROUP_EXPERRORTALBE_H



/*
 * we may use header_complex from the header_complex module 
 */
config_require(header_complex)


     struct expErrorTable_data {

         unsigned long   expErrorTime;
         long            expErrorIndex;
         long            expErrorCode;
         oid            *expErrorInstance;
         size_t          expErrorInstanceLen;
     };

    /*
     * function prototypes 
     */
     void            init_expErrorTable(void);
     FindVarMethod   var_expErrorTable;



#endif                          /* _MIBGROUP_EXPERRORTALBE_H */
