/*
 * Note: this file originally auto-generated by mib2c using
 *  $
 */
#ifndef SCTPLOOKUPREMPORTTABLE_H
#define SCTPLOOKUPREMPORTTABLE_H

#include "sctpTables_common.h"

/*
 * function declarations 
 */
void            init_sctpLookupRemPortTable(void);
void            shutdown_sctpLookupRemPortTable(void);
void            initialize_table_sctpLookupRemPortTable(void);
Netsnmp_Node_Handler sctpLookupRemPortTable_handler;

/*
 * column number definitions for table sctpLookupRemPortTable 
 */
#define COLUMN_SCTPLOOKUPREMPORTSTARTTIME		1

/** Typical data structure for a row entry */
#define SCTP_LOOKUP_REM_PORT_TABLE_INDEX_SIZE 100
struct sctpLookupRemPortTable_entry_s {
    netsnmp_index   oid_index;
    oid             oid_tmp[SCTP_LOOKUP_REM_PORT_TABLE_INDEX_SIZE];

    /*
     * Index values 
     */
    u_long          sctpAssocRemPort;
    u_long          sctpAssocId;

    /*
     * Column values 
     */
    u_long          sctpLookupRemPortStartTime;

    int             valid;
};

sctpLookupRemPortTable_entry *sctpLookupRemPortTable_entry_create(void);

int
sctpLookupRemPortTable_entry_update_index(sctpLookupRemPortTable_entry *
                                          entry);
void
sctpLookupRemPortTable_entry_copy(sctpLookupRemPortTable_entry * from,
                                  sctpLookupRemPortTable_entry * to);
void
sctpLookupRemPortTable_entry_free(sctpLookupRemPortTable_entry * entry);

void
sctpLookupRemPortTable_container_clear(netsnmp_container *container);

#endif                          /* SCTPLOOKUPREMPORTTABLE_H */
