diff options
Diffstat (limited to 'agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c')
-rw-r--r-- | agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c b/agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c new file mode 100644 index 0000000..63f8549 --- /dev/null +++ b/agent/mibgroup/udp-mib/data_access/udp_endpoint_common.c @@ -0,0 +1,158 @@ +/* + * 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); +} |