net-snmp/agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c

159 lines
3.9 KiB
C

/*
* UDP-MIB endpoint architecture support
*
* $Id$
*/
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-features.h>
#include <net-snmp/net-snmp-includes.h>
#include "udp-mib/udpEndpointTable/udpEndpointTable_constants.h"
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <net-snmp/data_access/ipaddress.h>
#include <net-snmp/data_access/udp_endpoint.h>
#include "udp_endpoint_private.h"
netsnmp_feature_child_of(udp_endpoint_common, libnetsnmpmibs)
netsnmp_feature_child_of(udp_endpoint_entry_create, udp_endpoint_common)
/**---------------------------------------------------------------------*/
/*
* local static vars
*/
/**---------------------------------------------------------------------*/
/*
* initialization
*/
/**---------------------------------------------------------------------*/
/*
* container functions
*/
/**
* initialize udp_endpoint container
*/
netsnmp_container *
netsnmp_access_udp_endpoint_container_init(u_int flags)
{
netsnmp_container *container;
DEBUGMSGTL(("access:udp_endpoint:container", "init\n"));
/*
* create the containers.
*/
container = netsnmp_container_find("access_udp_endpoint:table_container");
if (NULL == container)
return NULL;
return container;
}
/**
* load udp_endpoint information in specified container
*
* @param container empty container, or NULL to have one created for you
* @param load_flags flags to modify behaviour.
*
* @retval NULL error
* @retval !NULL pointer to container
*/
netsnmp_container*
netsnmp_access_udp_endpoint_container_load(netsnmp_container* container,
u_int load_flags)
{
int rc;
DEBUGMSGTL(("access:udp_endpoint:container", "load\n"));
if (NULL == container)
container = netsnmp_access_udp_endpoint_container_init(0);
if (NULL == container) {
snmp_log(LOG_ERR,
"no container specified/found for access_udp_endpoint\n");
return NULL;
}
rc =
netsnmp_arch_udp_endpoint_container_load(container, load_flags);
if (0 != rc) {
netsnmp_access_udp_endpoint_container_free(container, 0);
container = NULL;
}
return container;
}
void
netsnmp_access_udp_endpoint_container_free(netsnmp_container *container,
u_int free_flags)
{
DEBUGMSGTL(("access:udp_endpoint:container", "free\n"));
if (NULL == container) {
snmp_log(LOG_ERR,
"invalid container for netsnmp_access_udp_endpoint_free\n");
return;
}
if(! (free_flags & NETSNMP_ACCESS_UDP_ENDPOINT_FREE_DONT_CLEAR)) {
/*
* free all items.
*/
CONTAINER_CLEAR(container,
(netsnmp_container_obj_func*)
netsnmp_access_udp_endpoint_entry_free,
NULL);
}
if(! (free_flags & NETSNMP_ACCESS_UDP_ENDPOINT_FREE_KEEP_CONTAINER))
CONTAINER_FREE(container);
}
/**---------------------------------------------------------------------*/
/*
* entry functions
*/
/**
*/
#ifndef NETSNMP_FEATURE_REMOVE_UDP_ENDPOINT_ENTRY_CREATE
netsnmp_udp_endpoint_entry *
netsnmp_access_udp_endpoint_entry_create(void)
{
netsnmp_udp_endpoint_entry *entry =
SNMP_MALLOC_TYPEDEF(netsnmp_udp_endpoint_entry);
DEBUGMSGTL(("access:udp_endpoint:entry", "create\n"));
if(NULL == entry)
return NULL;
entry->oid_index.len = 1;
entry->oid_index.oids = (oid *) & entry->index;
return entry;
}
#endif /* NETSNMP_FEATURE_REMOVE_UDP_ENDPOINT_ENTRY_CREATE */
/**
*/
void
netsnmp_access_udp_endpoint_entry_free(netsnmp_udp_endpoint_entry * entry)
{
DEBUGMSGTL(("access:udp_endpoint:entry", "free\n"));
if (NULL == entry)
return;
/*
* SNMP_FREE not needed, for any of these,
* since the whole entry is about to be freed
*/
free(entry);
}