/*
 * Note: this file originally auto-generated by mib2c using
 *  : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
 *
 * $Id:$
 */
#ifndef DOT3STATSTABLE_ENUMS_H
#define DOT3STATSTABLE_ENUMS_H

#ifdef __cplusplus
extern          "C" {
#endif

    /*
     * NOTES on enums
     * ==============
     *
     * Value Mapping
     * -------------
     * If the values for your data type don't exactly match the
     * possible values defined by the mib, you should map them
     * below. For example, a boolean flag (1/0) is usually represented
     * as a TruthValue in a MIB, which maps to the values (1/2).
     *
     */
/*************************************************************************
 *************************************************************************
 *
 * enum definitions for table dot3StatsTable
 *
 *************************************************************************
 *************************************************************************/

/*************************************************************
 * constants for enums for the MIB node
 * dot3StatsDuplexStatus (INTEGER / ASN_INTEGER)
 *
 * since a Textual Convention may be referenced more than once in a
 * MIB, protect againt redefinitions of the enum values.
 */
#ifndef DOT3STATSDUPLEXSTATUS_ENUMS
#define DOT3STATSDUPLEXSTATUS_ENUMS

#define DOT3STATSDUPLEXSTATUS_UNKNOWN  1
#define DOT3STATSDUPLEXSTATUS_HALFDUPLEX  2
#define DOT3STATSDUPLEXSTATUS_FULLDUPLEX  3

#endif                          /* DOT3STATSDUPLEXSTATUS_ENUMS */


/*************************************************************
 * constants for enums for the MIB node
 * dot3StatsRateControlAbility (TruthValue / ASN_INTEGER)
 *
 * since a Textual Convention may be referenced more than once in a
 * MIB, protect againt redefinitions of the enum values.
 */
#ifndef TRUTHVALUE_ENUMS
#define TRUTHVALUE_ENUMS

#define TRUTHVALUE_TRUE  1
#define TRUTHVALUE_FALSE  2

#endif                          /* TRUTHVALUE_ENUMS */


/*************************************************************
 * constants for enums for the MIB node
 * dot3StatsRateControlStatus (INTEGER / ASN_INTEGER)
 *
 * since a Textual Convention may be referenced more than once in a
 * MIB, protect againt redefinitions of the enum values.
 */
#ifndef DOT3STATSRATECONTROLSTATUS_ENUMS
#define DOT3STATSRATECONTROLSTATUS_ENUMS

#define DOT3STATSRATECONTROLSTATUS_RATECONTROLOFF  1
#define DOT3STATSRATECONTROLSTATUS_RATECONTROLON  2
#define DOT3STATSRATECONTROLSTATUS_UNKNOWN  3

#endif                          /* DOT3STATSRATECONTROLSTATUS_ENUMS */




#ifdef __cplusplus
}
#endif
#endif                          /* DOT3STATSTABLE_ENUMS_H */
