/*
 * Note: this file originally auto-generated by mib2c using
 *  : generic-table-constants.m2c,v 1.5 2005/07/15 22:41:16 rstory Exp $
 *
 * $Id$
 */
#ifndef IPV6INTERFACETABLE_CONSTANTS_H
#define IPV6INTERFACETABLE_CONSTANTS_H

#ifdef __cplusplus
extern          "C" {
#endif


    /*
     * column number definitions for table ipv6InterfaceTable 
     */
#define IPV6INTERFACETABLELASTCHANGE_OID    1,3,6,1,2,1,4,29
#define IPV6INTERFACETABLE_OID              1,3,6,1,2,1,4,30

#define COLUMN_IPV6INTERFACEIFINDEX         1

#define COLUMN_IPV6INTERFACEREASMMAXSIZE         2

#define COLUMN_IPV6INTERFACEIDENTIFIER         3

#define COLUMN_IPV6INTERFACEENABLESTATUS         5
#define COLUMN_IPV6INTERFACEENABLESTATUS_FLAG    (0x1 << 4)

#define COLUMN_IPV6INTERFACEREACHABLETIME         6

#define COLUMN_IPV6INTERFACERETRANSMITTIME         7

#define COLUMN_IPV6INTERFACEFORWARDING         8
#define COLUMN_IPV6INTERFACEFORWARDING_FLAG    (0x1 << 7)


#define IPV6INTERFACETABLE_MIN_COL   COLUMN_IPV6INTERFACEREASMMAXSIZE
#define IPV6INTERFACETABLE_MAX_COL   COLUMN_IPV6INTERFACEFORWARDING


    /*
     * TODO:405:r: Review IPV6INTERFACETABLE_SETTABLE_COLS macro.
     * OR together all the writable cols.
     */
#define IPV6INTERFACETABLE_SETTABLE_COLS (COLUMN_IPV6INTERFACEENABLESTATUS_FLAG | COLUMN_IPV6INTERFACEFORWARDING_FLAG)
    /*
     * 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 ipv6InterfaceTable
 *
 *************************************************************************
 *************************************************************************/

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

#define IPV6INTERFACEENABLESTATUS_UP  1
#define IPV6INTERFACEENABLESTATUS_DOWN  2

#endif                          /* IPV6INTERFACEENABLESTATUS_ENUMS */


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

#define IPV6INTERFACEFORWARDING_FORWARDING  1
#define IPV6INTERFACEFORWARDING_NOTFORWARDING  2

#endif                          /* IPV6INTERFACEFORWARDING_ENUMS */




#ifdef __cplusplus
}
#endif
#endif                          /* IPV6INTERFACETABLE_OIDS_H */
