/*
 * Note: this file originally auto-generated by mib2c using
 *       version : 14170 $ of $
 *
 * $Id:$
 */
#ifndef IPDEFAULTROUTERTABLE_DATA_ACCESS_H
#define IPDEFAULTROUTERTABLE_DATA_ACCESS_H

#ifdef __cplusplus
extern          "C" {
#endif


    /*
     *********************************************************************
     * function declarations
     */

    /*
     *********************************************************************
     * Table declarations
     */
/**********************************************************************
 **********************************************************************
 ***
 *** Table ipDefaultRouterTable
 ***
 **********************************************************************
 **********************************************************************/
    /*
     * IP-MIB::ipDefaultRouterTable is subid 37 of ip.
     * Its status is Current.
     * OID: .1.3.6.1.2.1.4.37, length: 8
     */


    int            
        ipDefaultRouterTable_init_data(ipDefaultRouterTable_registration *
                                       ipDefaultRouterTable_reg);


    /*
     * TODO:180:o: Review ipDefaultRouterTable cache timeout.
     * The number of seconds before the cache times out
     */
#define IPDEFAULTROUTERTABLE_CACHE_TIMEOUT   60

    void            ipDefaultRouterTable_container_init(netsnmp_container
                                                        **
                                                        container_ptr_ptr,
                                                        netsnmp_cache *
                                                        cache);
    void           
        ipDefaultRouterTable_container_shutdown(netsnmp_container *
                                                container_ptr);

    int             ipDefaultRouterTable_container_load(netsnmp_container *
                                                        container);
    void            ipDefaultRouterTable_container_free(netsnmp_container *
                                                        container);

    int             ipDefaultRouterTable_cache_load(netsnmp_container *
                                                    container);
    void            ipDefaultRouterTable_cache_free(netsnmp_container *
                                                    container);
    int            
        ipDefaultRouterTable_row_prep(ipDefaultRouterTable_rowreq_ctx *
                                      rowreq_ctx);



#ifdef __cplusplus
}
#endif
#endif                          /* IPDEFAULTROUTERTABLE_DATA_ACCESS_H */
