summaryrefslogtreecommitdiff
path: root/include/net-snmp/agent/cache_handler.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/agent/cache_handler.h')
-rw-r--r--include/net-snmp/agent/cache_handler.h130
1 files changed, 130 insertions, 0 deletions
diff --git a/include/net-snmp/agent/cache_handler.h b/include/net-snmp/agent/cache_handler.h
new file mode 100644
index 0000000..1e4751c
--- /dev/null
+++ b/include/net-snmp/agent/cache_handler.h
@@ -0,0 +1,130 @@
+/* Portions of this file are subject to the following copyright(s). See
+ * the Net-SNMP's COPYING file for more details and other copyrights
+ * that may apply:
+ */
+/*
+ * Portions of this file are copyrighted by:
+ * Copyright (C) 2007 Apple, Inc. All rights reserved.
+ * Use is subject to license terms specified in the COPYING file
+ * distributed with the Net-SNMP package.
+ */
+#ifndef NETSNMP_CACHE_HANDLER_H
+#define NETSNMP_CACHE_HANDLER_H
+
+/*
+ * This caching helper provides a generalised (SNMP-manageable) caching
+ * mechanism. Individual SNMP table and scalar/scalar group MIB
+ * implementations can use data caching in a consistent manner, without
+ * needing to handle the generic caching details themselves.
+ */
+
+#include <net-snmp/library/tools.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CACHE_NAME "cache_info"
+
+ typedef struct netsnmp_cache_s netsnmp_cache;
+
+ typedef int (NetsnmpCacheLoad)(netsnmp_cache *, void*);
+ typedef void (NetsnmpCacheFree)(netsnmp_cache *, void*);
+
+ struct netsnmp_cache_s {
+ /** Number of handlers whose myvoid member points at this structure. */
+ int refcnt;
+ /*
+ * For operation of the data caches
+ */
+ int flags;
+ int enabled;
+ int valid;
+ char expired;
+ int timeout; /* Length of time the cache is valid (in s) */
+ marker_t timestampM; /* When the cache was last loaded */
+ u_long timer_id; /* periodic timer id */
+
+ NetsnmpCacheLoad *load_cache;
+ NetsnmpCacheFree *free_cache;
+
+ /*
+ * void pointer for the user that created the cache.
+ * You never know when it might not come in useful ....
+ */
+ void *magic;
+
+ /*
+ * hint from the cache helper. contains the standard
+ * handler arguments.
+ */
+ netsnmp_handler_args *cache_hint;
+
+ /*
+ * For SNMP-management of the data caches
+ */
+ netsnmp_cache *next, *prev;
+ oid *rootoid;
+ int rootoid_len;
+
+ };
+
+
+ void netsnmp_cache_reqinfo_insert(netsnmp_cache* cache,
+ netsnmp_agent_request_info * reqinfo,
+ const char *name);
+ netsnmp_cache *
+ netsnmp_cache_reqinfo_extract(netsnmp_agent_request_info * reqinfo,
+ const char *name);
+ netsnmp_cache* netsnmp_extract_cache_info(netsnmp_agent_request_info *);
+
+ int netsnmp_cache_check_and_reload(netsnmp_cache * cache);
+ int netsnmp_cache_check_expired(netsnmp_cache *cache);
+ int netsnmp_cache_is_valid( netsnmp_agent_request_info *,
+ const char *name);
+ /** for backwards compat */
+ int netsnmp_is_cache_valid( netsnmp_agent_request_info *);
+ netsnmp_mib_handler *netsnmp_get_cache_handler(int, NetsnmpCacheLoad *,
+ NetsnmpCacheFree *,
+ const oid*, int);
+ int netsnmp_register_cache_handler(netsnmp_handler_registration *reginfo,
+ int, NetsnmpCacheLoad *,
+ NetsnmpCacheFree *);
+
+ Netsnmp_Node_Handler netsnmp_cache_helper_handler;
+
+ netsnmp_cache *
+ netsnmp_cache_create(int timeout, NetsnmpCacheLoad * load_hook,
+ NetsnmpCacheFree * free_hook,
+ const oid * rootoid, int rootoid_len);
+ int netsnmp_cache_remove(netsnmp_cache *cache);
+ int netsnmp_cache_free(netsnmp_cache *cache);
+
+ netsnmp_mib_handler *
+ netsnmp_cache_handler_get(netsnmp_cache* cache);
+ void netsnmp_cache_handler_owns_cache(netsnmp_mib_handler *handler);
+
+ netsnmp_cache * netsnmp_cache_find_by_oid(const oid * rootoid,
+ int rootoid_len);
+
+ unsigned int netsnmp_cache_timer_start(netsnmp_cache *cache);
+ void netsnmp_cache_timer_stop(netsnmp_cache *cache);
+
+/*
+ * Flags affecting cache handler operation
+ */
+#define NETSNMP_CACHE_DONT_INVALIDATE_ON_SET 0x0001
+#define NETSNMP_CACHE_DONT_FREE_BEFORE_LOAD 0x0002
+#define NETSNMP_CACHE_DONT_FREE_EXPIRED 0x0004
+#define NETSNMP_CACHE_DONT_AUTO_RELEASE 0x0008
+#define NETSNMP_CACHE_PRELOAD 0x0010
+#define NETSNMP_CACHE_AUTO_RELOAD 0x0020
+#define NETSNMP_CACHE_RESET_TIMER_ON_USE 0x0040
+
+#define NETSNMP_CACHE_HINT_HANDLER_ARGS 0x1000
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* NETSNMP_CACHE_HANDLER_H */