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

#ifdef __cplusplus
extern "C" {
#endif


/** @addtogroup misc misc: Miscellaneous routines
 *
 * @{
 */
#include <net-snmp/library/asn1.h>

#include "ppp.h"

/* other required module components */
    /* *INDENT-OFF*  */
config_add_mib(ACCEL-PPP-MIB);
config_require(ACCEL-PPP-MIB/sessionTable/sessionTable_interface);
config_require(ACCEL-PPP-MIB/sessionTable/sessionTable_data_access);
config_require(ACCEL-PPP-MIB/sessionTable/sessionTable_data_get);
config_require(ACCEL-PPP-MIB/sessionTable/sessionTable_data_set);
    /* *INDENT-ON*  */

/* OID and column number definitions for sessionTable */
#include "sessionTable_oids.h"

/* enum definions */
#include "sessionTable_enums.h"

/* *********************************************************************
 * function declarations
 */
void init_sessionTable(void);
void shutdown_sessionTable(void);

/* *********************************************************************
 * Table declarations
 */
/**********************************************************************
 **********************************************************************
 ***
 *** Table sessionTable
 ***
 **********************************************************************
 **********************************************************************/
/*
 * ACCEL-PPP-MIB::sessionTable is subid 1 of accelPPPSessions.
 * Its status is Current.
 * OID: .1.3.6.1.4.1.8072.100.2.1, length: 10
*/
/* *********************************************************************
 * When you register your mib, you get to provide a generic
 * pointer that will be passed back to you for most of the
 * functions calls.
 *
 * TODO:100:r: Review all context structures
 */
    /*
     * TODO:101:o: |-> Review sessionTable registration context.
     */
typedef netsnmp_data_list sessionTable_registration;

/**********************************************************************/
/*
 * TODO:110:r: |-> Review sessionTable data context structure.
 * This structure is used to represent the data for sessionTable.
 */
struct sessionTable_data_s
{
	char ifname[AP_IFNAME_LEN];
	char *username;
	in_addr_t peer_addr;
	int type;
	int state;
	unsigned long uptime;
	char *calling_sid;
	char *called_sid;
	unsigned int rx_bytes;
	unsigned int rx_gw;
	unsigned int rx_pkts;
	unsigned int tx_bytes;
	unsigned int tx_gw;
	unsigned int tx_pkts;
};
typedef struct sessionTable_data_s sessionTable_data;


/*
 * TODO:120:r: |-> Review sessionTable mib index.
 * This structure is used to represent the index for sessionTable.
 */
typedef struct sessionTable_mib_index_s {

        /*
         * sesSID(1)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
         */
   char   sesSID[AP_SESSIONID_LEN];
   size_t      sesSID_len;


} sessionTable_mib_index;

    /*
     * TODO:121:r: |   |-> Review sessionTable max index length.
     * If you KNOW that your indexes will never exceed a certain
     * length, update this macro to that length.
     *
     * BE VERY CAREFUL TO TAKE INTO ACCOUNT THE MAXIMUM
     * POSSIBLE LENGHT FOR EVERY VARIABLE LENGTH INDEX!
     * Guessing 128 - col/entry(2)  - oid len(10)
*/
#define MAX_sessionTable_IDX_LEN     AP_SESSIONID_LEN + 1


/* *********************************************************************
 * TODO:130:o: |-> Review sessionTable Row request (rowreq) context.
 * When your functions are called, you will be passed a
 * sessionTable_rowreq_ctx pointer.
 */
typedef struct sessionTable_rowreq_ctx_s {

    /** this must be first for container compare to work */
    netsnmp_index        oid_idx;
    oid                  oid_tmp[MAX_sessionTable_IDX_LEN];

    sessionTable_mib_index        tbl_idx;

    sessionTable_data            * data;

    /*
     * flags per row. Currently, the first (lower) 8 bits are reserved
     * for the user. See mfd.h for other flags.
     */
    u_int                       rowreq_flags;

    /*
     * TODO:131:o: |   |-> Add useful data to sessionTable rowreq context.
     */

    /*
     * storage for future expansion
     */
    netsnmp_data_list             *sessionTable_data_list;

} sessionTable_rowreq_ctx;

typedef struct sessionTable_ref_rowreq_ctx_s {
    sessionTable_rowreq_ctx *rowreq_ctx;
} sessionTable_ref_rowreq_ctx;

/* *********************************************************************
 * function prototypes
 */
    int sessionTable_pre_request(sessionTable_registration * user_context);
    int sessionTable_post_request(sessionTable_registration * user_context,
        int rc);

    int sessionTable_rowreq_ctx_init(sessionTable_rowreq_ctx *rowreq_ctx,
                                   void *user_init_ctx);
    void sessionTable_rowreq_ctx_cleanup(sessionTable_rowreq_ctx *rowreq_ctx);

    sessionTable_data * sessionTable_allocate_data(void);
    void sessionTable_release_data(sessionTable_data *data);


    sessionTable_rowreq_ctx *
                  sessionTable_row_find_by_mib_index(sessionTable_mib_index *mib_idx);

extern oid sessionTable_oid[];
extern int sessionTable_oid_size;


#include "sessionTable_interface.h"
#include "sessionTable_data_access.h"
#include "sessionTable_data_get.h"
#include "sessionTable_data_set.h"

/*
 * DUMMY markers, ignore
 *
 * TODO:099:x: *************************************************************
 * TODO:199:x: *************************************************************
 * TODO:299:x: *************************************************************
 * TODO:399:x: *************************************************************
 * TODO:499:x: *************************************************************
 */

#ifdef __cplusplus
}
#endif

#endif /* SESSIONTABLE_H */
/** @} */
