tcpConn_common.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:6k
- /*
- * TcpConn MIB architecture support
- *
- * $Id: tcpConn_common.c,v 1.1 2004/09/16 15:31:47 rstory Exp $
- */
- #include <net-snmp/net-snmp-config.h>
- #include <net-snmp/net-snmp-includes.h>
- #include <net-snmp/agent/net-snmp-agent-includes.h>
- #include <net-snmp/data_access/tcpConn.h>
- #include "tcp-mib/tcpConnTable/tcpConnTable_constants.h"
- /**---------------------------------------------------------------------*/
- /*
- * local static prototypes
- */
- static int _access_tcpconn_entry_compare_addr(const void *lhs,
- const void *rhs);
- static void _access_tcpconn_entry_release(netsnmp_tcpconn_entry * entry,
- void *unused);
- /**---------------------------------------------------------------------*/
- /*
- * external per-architecture functions prototypes
- *
- * These shouldn't be called by the general public, so they aren't in
- * the header file.
- */
- extern int
- netsnmp_arch_tcpconn_container_load(netsnmp_container* container,
- u_int load_flags);
- extern int
- netsnmp_arch_tcpconn_entry_init(netsnmp_tcpconn_entry *entry);
- extern int
- netsnmp_arch_tcpconn_entry_copy(netsnmp_tcpconn_entry *lhs,
- netsnmp_tcpconn_entry *rhs);
- extern void
- netsnmp_arch_tcpconn_entry_cleanup(netsnmp_tcpconn_entry *entry);
- /**---------------------------------------------------------------------*/
- /*
- * container functions
- */
- /**
- */
- netsnmp_container *
- netsnmp_access_tcpconn_container_init(u_int flags)
- {
- netsnmp_container *container1;
- DEBUGMSGTL(("access:tcpconn:container", "initn"));
- /*
- * create the container
- */
- container1 = netsnmp_container_find("access:tcpconn:table_container");
- if (NULL == container1) {
- snmp_log(LOG_ERR, "tcpconn primary container not foundn");
- return NULL;
- }
- container1->container_name = strdup("tcpConnTable");
- return container1;
- }
- /**
- * @retval NULL error
- * @retval !NULL pointer to container
- */
- netsnmp_container*
- netsnmp_access_tcpconn_container_load(netsnmp_container* container, u_int load_flags)
- {
- int rc;
- DEBUGMSGTL(("access:tcpconn:container", "loadn"));
- if (NULL == container)
- container = netsnmp_access_tcpconn_container_init(load_flags);
- if (NULL == container) {
- snmp_log(LOG_ERR, "no container specified/found for access_tcpconnn");
- return NULL;
- }
- rc = netsnmp_arch_tcpconn_container_load(container, load_flags);
- if (0 != rc) {
- netsnmp_access_tcpconn_container_free(container,
- NETSNMP_ACCESS_TCPCONN_FREE_NOFLAGS);
- container = NULL;
- }
- return container;
- }
- void
- netsnmp_access_tcpconn_container_free(netsnmp_container *container, u_int free_flags)
- {
- DEBUGMSGTL(("access:tcpconn:container", "freen"));
- if (NULL == container) {
- snmp_log(LOG_ERR, "invalid container for netsnmp_access_tcpconn_freen");
- return;
- }
- if(! (free_flags & NETSNMP_ACCESS_TCPCONN_FREE_DONT_CLEAR)) {
- /*
- * free all items.
- */
- CONTAINER_CLEAR(container,
- (netsnmp_container_obj_func*)_access_tcpconn_entry_release,
- NULL);
- }
- CONTAINER_FREE(container);
- }
- /**---------------------------------------------------------------------*/
- /*
- * tcpconn_entry functions
- */
- /**
- */
- /**
- */
- netsnmp_tcpconn_entry *
- netsnmp_access_tcpconn_entry_create(void)
- {
- netsnmp_tcpconn_entry *entry =
- SNMP_MALLOC_TYPEDEF(netsnmp_tcpconn_entry);
- int rc = 0;
- DEBUGMSGTL(("verbose:access:tcpconn:entry", "createn"));
- entry->oid_index.len = 4;
- entry->oid_index.oids = entry->indexes;
- /*
- * init arch data
- */
- rc = netsnmp_arch_tcpconn_entry_init(entry);
- if (SNMP_ERR_NOERROR != rc) {
- DEBUGMSGT(("access:tcpconn:create","error %d in arch initn"));
- netsnmp_access_tcpconn_entry_free(entry);
- }
- return entry;
- }
- /**
- */
- void
- netsnmp_access_tcpconn_entry_free(netsnmp_tcpconn_entry * entry)
- {
- if (NULL == entry)
- return;
- DEBUGMSGTL(("verbose:access:tcpconn:entry", "freen"));
- if (NULL != entry->arch_data)
- netsnmp_arch_tcpconn_entry_cleanup(entry);
- free(entry);
- }
- /**
- * update underlying data store (kernel) for entry
- *
- * @retval 0 : success
- * @retval -1 : error
- */
- int
- netsnmp_access_tcpconn_entry_set(netsnmp_tcpconn_entry * entry)
- {
- int rc = SNMP_ERR_NOERROR;
- if (NULL == entry) {
- netsnmp_assert(NULL != entry);
- return -1;
- }
-
- DEBUGMSGTL(("access:tcpconn:entry", "setn"));
-
- /*
- * only option is delete
- */
- if (! (entry->flags & NETSNMP_ACCESS_TCPCONN_DELETE))
- return -1;
-
- rc = netsnmp_arch_tcpconn_delete(entry);
-
- return rc;
- }
- /**
- * update an old tcpconn_entry from a new one
- *
- * @note: only mib related items are compared. Internal objects
- * such as oid_index, ns_ia_index and flags are not compared.
- *
- * @retval -1 : error
- * @retval >=0 : number of fileds updated
- */
- int
- netsnmp_access_tcpconn_entry_update(netsnmp_tcpconn_entry *lhs,
- netsnmp_tcpconn_entry *rhs)
- {
- int rc, changed = 0;
- DEBUGMSGTL(("access:tcpconn:entry", "updaten"));
- if (lhs->tcpConnState != rhs->tcpConnState) {
- ++changed;
- lhs->tcpConnState = rhs->tcpConnState;
- }
- /*
- * copy arch stuff. we don't care if it changed
- */
- rc = netsnmp_arch_tcpconn_entry_copy(lhs,rhs);
- if (0 != rc) {
- snmp_log(LOG_ERR,"arch tcpconn copy failedn");
- return -1;
- }
- return changed;
- }
- /**---------------------------------------------------------------------*/
- /*
- * Utility routines
- */
- /**
- */
- void
- _access_tcpconn_entry_release(netsnmp_tcpconn_entry * entry, void *context)
- {
- netsnmp_access_tcpconn_entry_free(entry);
- }
- #ifdef NETSNMP_TCPCONN_TEST
- int
- main(int argc, char** argv)
- {
- netsnmp_container *container;
- netsnmp_config("debugTokens access:tcp,verbose:access:tcp,tcp,verbose:tcp");
- netsnmp_container_init_list();
- dodebug = 1;
- container = netsnmp_access_tcpconn_container_load(NULL, 0);
-
- netsnmp_access_tcpconn_container_free(container, 0);
- }
- #endif