/*
 * tcpConn data access header
 *
 * $Id: tcpConn.h 11095 2004-09-16 15:31:48Z rstory $
 */
#ifndef NETSNMP_ACCESS_TCPCONN_H
#define NETSNMP_ACCESS_TCPCONN_H

# ifdef __cplusplus
extern          "C" {
#endif

/**---------------------------------------------------------------------*/
/*
 * structure definitions
 */

    /*
     * tcpconnLocalAddress(2)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
     * tcpconnLocalPort(3)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
     * tcpconnRemAddress(4)/IPADDR/ASN_IPADDRESS/u_long(u_long)//l/A/w/e/r/d/h
     * tcpconnRemPort(5)/INTEGER/ASN_INTEGER/long(long)//l/A/w/e/R/d/h
     */
#define NETSNMP_TCPCONN_IDX_LOCAL_ADDR       0
#define NETSNMP_TCPCONN_IDX_LOCAL_PORT       1
#define NETSNMP_TCPCONN_IDX_REMOTE_ADDR      2
#define NETSNMP_TCPCONN_IDX_REMOTE_PORT      3

/*
 * netsnmp_tcpconn_entry
 *   - primary tcpconn structure for both ipv4 & ipv6
 */
typedef struct netsnmp_tcpconn_s {

   netsnmp_index oid_index;   /* MUST BE FIRST!! for container use */
   oid           indexes[4];

   int       flags; /* for net-snmp use */

   /*
    * mib related data (considered for
    *  netsnmp_access_tcpconn_entry_update)
    */
   
   /*
    * tcpconnState(1)/INTEGER/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
    */
   u_long          tcpConnState;
   
   netsnmp_data_list *arch_data;      /* arch specific data */
   
} netsnmp_tcpconn_entry;


/**---------------------------------------------------------------------*/
/*
 * ACCESS function prototypes
 */
/*
 * ifcontainer init
 */
netsnmp_container * netsnmp_access_tcpconn_container_init(u_int init_flags);
#define NETSNMP_ACCESS_TCPCONN_INIT_NOFLAGS               0x0000
#define NETSNMP_ACCESS_TCPCONN_INIT_ADDL_IDX_BY_ADDR      0x0001

/*
 * ifcontainer load and free
 */
netsnmp_container*
netsnmp_access_tcpconn_container_load(netsnmp_container* container,
                                      u_int load_flags);
#define NETSNMP_ACCESS_TCPCONN_LOAD_NOFLAGS               0x0000

void netsnmp_access_tcpconn_container_free(netsnmp_container *container,
                                           u_int free_flags);
#define NETSNMP_ACCESS_TCPCONN_FREE_NOFLAGS               0x0000
#define NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR            0x0001
#define NETSNMP_ACCESS_TCPCONN_FREE_KEEP_CONTAINER        0x0002


/*
 * create/free a tcpconn entry
 */
netsnmp_tcpconn_entry *
netsnmp_access_tcpconn_entry_create(void);

void netsnmp_access_tcpconn_entry_free(netsnmp_tcpconn_entry * entry);

/*
 * update/compare
 */
int
netsnmp_access_tcpconn_entry_update(netsnmp_tcpconn_entry *old, 
                                      netsnmp_tcpconn_entry *new);

/*
 * find entry in container
 */
/** not yet */

/*
 * create/change/delete
 */
int
netsnmp_access_tcpconn_entry_set(netsnmp_tcpconn_entry * entry);


/*
 * tcpconn flags
 *   upper bits for internal use
 *   lower bits indicate changed fields. see FLAG_TCPCONN* definitions in
 *         tcpConnTable_constants.h
 */
#define NETSNMP_ACCESS_TCPCONN_CREATE     0x80000000
#define NETSNMP_ACCESS_TCPCONN_DELETE     0x40000000
#define NETSNMP_ACCESS_TCPCONN_CHANGE     0x20000000


/**---------------------------------------------------------------------*/

# ifdef __cplusplus
}
#endif

#endif /* NETSNMP_ACCESS_TCPCONN_H */
