/*
 * 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 INETCIDRROUTETABLE_CONSTANTS_H
#define INETCIDRROUTETABLE_CONSTANTS_H

#ifdef __cplusplus
extern          "C" {
#endif


    /*
     * column number definitions for table inetCidrRouteTable 
     */
#define INETCIDRROUTENUMBER_OID              1,3,6,1,2,1,4,24,6,0
#define INETCIDRROUTETABLE_OID              1,3,6,1,2,1,4,24,7

#define COLUMN_INETCIDRROUTEDESTTYPE         1

#define COLUMN_INETCIDRROUTEDEST         2

#define COLUMN_INETCIDRROUTEPFXLEN         3

#define COLUMN_INETCIDRROUTEPOLICY         4

#define COLUMN_INETCIDRROUTENEXTHOPTYPE         5

#define COLUMN_INETCIDRROUTENEXTHOP         6

#define COLUMN_INETCIDRROUTEIFINDEX         7
#define COLUMN_INETCIDRROUTEIFINDEX_FLAG    (0x1 << 6)

#define COLUMN_INETCIDRROUTETYPE         8
#define COLUMN_INETCIDRROUTETYPE_FLAG    (0x1 << 7)

#define COLUMN_INETCIDRROUTEPROTO         9

#define COLUMN_INETCIDRROUTEAGE         10

#define COLUMN_INETCIDRROUTENEXTHOPAS         11
#define COLUMN_INETCIDRROUTENEXTHOPAS_FLAG    (0x1 << 10)

#define COLUMN_INETCIDRROUTEMETRIC1         12
#define COLUMN_INETCIDRROUTEMETRIC1_FLAG    (0x1 << 11)

#define COLUMN_INETCIDRROUTEMETRIC2         13
#define COLUMN_INETCIDRROUTEMETRIC2_FLAG    (0x1 << 12)

#define COLUMN_INETCIDRROUTEMETRIC3         14
#define COLUMN_INETCIDRROUTEMETRIC3_FLAG    (0x1 << 13)

#define COLUMN_INETCIDRROUTEMETRIC4         15
#define COLUMN_INETCIDRROUTEMETRIC4_FLAG    (0x1 << 14)

#define COLUMN_INETCIDRROUTEMETRIC5         16
#define COLUMN_INETCIDRROUTEMETRIC5_FLAG    (0x1 << 15)

#define COLUMN_INETCIDRROUTESTATUS         17
#define COLUMN_INETCIDRROUTESTATUS_FLAG    (0x1 << 16)


#define INETCIDRROUTETABLE_MIN_COL   COLUMN_INETCIDRROUTEIFINDEX
#define INETCIDRROUTETABLE_MAX_COL   COLUMN_INETCIDRROUTESTATUS


    /*
     * TODO:405:r: Review INETCIDRROUTETABLE_SETTABLE_COLS macro.
     * OR together all the writable cols.
     */
#define INETCIDRROUTETABLE_SETTABLE_COLS (COLUMN_INETCIDRROUTEIFINDEX_FLAG | COLUMN_INETCIDRROUTETYPE_FLAG | COLUMN_INETCIDRROUTENEXTHOPAS_FLAG | COLUMN_INETCIDRROUTEMETRIC1_FLAG | COLUMN_INETCIDRROUTEMETRIC2_FLAG | COLUMN_INETCIDRROUTEMETRIC3_FLAG | COLUMN_INETCIDRROUTEMETRIC4_FLAG | COLUMN_INETCIDRROUTEMETRIC5_FLAG | COLUMN_INETCIDRROUTESTATUS_FLAG)
    /*
     * TODO:405:r: Review INETCIDRROUTETABLE_REQUIRED_COLS macro.
     * OR together all the required rows for row creation.
     * default is writable cols w/out defaults.
     */
#define INETCIDRROUTETABLE_REQUIRED_COLS (COLUMN_INETCIDRROUTEIFINDEX_FLAG | COLUMN_INETCIDRROUTETYPE_FLAG | COLUMN_INETCIDRROUTESTATUS_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 inetCidrRouteTable
 *
 *************************************************************************
 *************************************************************************/

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

#define INETADDRESSTYPE_UNKNOWN  0
#define INETADDRESSTYPE_IPV4  1
#define INETADDRESSTYPE_IPV6  2
#define INETADDRESSTYPE_IPV4Z  3
#define INETADDRESSTYPE_IPV6Z  4
#define INETADDRESSTYPE_DNS  16

#endif                          /* INETADDRESSTYPE_ENUMS */


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

#define INETADDRESSTYPE_UNKNOWN  0
#define INETADDRESSTYPE_IPV4  1
#define INETADDRESSTYPE_IPV6  2
#define INETADDRESSTYPE_IPV4Z  3
#define INETADDRESSTYPE_IPV6Z  4
#define INETADDRESSTYPE_DNS  16

#endif                          /* INETADDRESSTYPE_ENUMS */


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

#define INETCIDRROUTETYPE_OTHER  1
#define INETCIDRROUTETYPE_REJECT  2
#define INETCIDRROUTETYPE_LOCAL  3
#define INETCIDRROUTETYPE_REMOTE  4
#define INETCIDRROUTETYPE_BLACKHOLE  5

#endif                          /* INETCIDRROUTETYPE_ENUMS */


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

#define IANAIPROUTEPROTOCOL_OTHER  1
#define IANAIPROUTEPROTOCOL_LOCAL  2
#define IANAIPROUTEPROTOCOL_NETMGMT  3
#define IANAIPROUTEPROTOCOL_ICMP  4
#define IANAIPROUTEPROTOCOL_EGP  5
#define IANAIPROUTEPROTOCOL_GGP  6
#define IANAIPROUTEPROTOCOL_HELLO  7
#define IANAIPROUTEPROTOCOL_RIP  8
#define IANAIPROUTEPROTOCOL_ISIS  9
#define IANAIPROUTEPROTOCOL_ESIS  10
#define IANAIPROUTEPROTOCOL_CISCOIGRP  11
#define IANAIPROUTEPROTOCOL_BBNSPFIGP  12
#define IANAIPROUTEPROTOCOL_OSPF  13
#define IANAIPROUTEPROTOCOL_BGP  14
#define IANAIPROUTEPROTOCOL_IDPR  15
#define IANAIPROUTEPROTOCOL_CISCOEIGRP  16
#define IANAIPROUTEPROTOCOL_DVMRP  17

#endif                          /* IANAIPROUTEPROTOCOL_ENUMS */


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

#define ROWSTATUS_ACTIVE  1
#define ROWSTATUS_NOTINSERVICE  2
#define ROWSTATUS_NOTREADY  3
#define ROWSTATUS_CREATEANDGO  4
#define ROWSTATUS_CREATEANDWAIT  5
#define ROWSTATUS_DESTROY  6

#endif                          /* ROWSTATUS_ENUMS */




#ifdef __cplusplus
}
#endif
#endif                          /* INETCIDRROUTETABLE_OIDS_H */
