summaryrefslogtreecommitdiff
path: root/include/net-snmp/library/snmp_enum.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net-snmp/library/snmp_enum.h')
-rw-r--r--include/net-snmp/library/snmp_enum.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/include/net-snmp/library/snmp_enum.h b/include/net-snmp/library/snmp_enum.h
new file mode 100644
index 0000000..237891d
--- /dev/null
+++ b/include/net-snmp/library/snmp_enum.h
@@ -0,0 +1,115 @@
+#ifndef SNMP_ENUM_H
+#define SNMP_ENUM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ struct snmp_enum_list {
+ struct snmp_enum_list *next;
+ int value;
+ char *label;
+ };
+
+#define SE_MAX_IDS 5
+#define SE_MAX_SUBIDS 32 /* needs to be a multiple of 8 */
+
+ /*
+ * begin storage definitions
+ */
+ /*
+ * These definitions correspond with the "storid" argument to the API
+ */
+#define SE_LIBRARY_ID 0
+#define SE_MIB_ID 1
+#define SE_APPLICATION_ID 2
+#define SE_ASSIGNED_ID 3
+
+ /*
+ * library specific enum locations
+ */
+
+ /*
+ * error codes
+ */
+#define SE_OK 0
+#define SE_NOMEM 1
+#define SE_ALREADY_THERE 2
+#define SE_DNE -2
+
+ int init_snmp_enum(const char *type);
+ struct snmp_enum_list *se_find_list(unsigned int major,
+ unsigned int minor);
+ struct snmp_enum_list *se_find_slist(const char *listname);
+ int se_store_in_list(struct snmp_enum_list *,
+ unsigned int major, unsigned int minor);
+ int se_find_value(unsigned int major, unsigned int minor,
+ const char *label);
+ int se_find_free_value(unsigned int major, unsigned int minor);
+ char *se_find_label(unsigned int major, unsigned int minor,
+ int value);
+ /**
+ * Add the pair (label, value) to the list (major, minor). Transfers
+ * ownership of the memory pointed to by label to the list:
+ * clear_snmp_enum() deallocates that memory.
+ */
+ int se_add_pair(unsigned int major, unsigned int minor,
+ char *label, int value);
+
+ /*
+ * finds a list of enums in a list of enum structs associated by a name.
+ */
+ /*
+ * find a list, and then operate on that list
+ * ( direct methods further below if you already have the list pointer)
+ */
+ NETSNMP_IMPORT
+ char *se_find_label_in_slist(const char *listname,
+ int value);
+ NETSNMP_IMPORT
+ int se_find_value_in_slist(const char *listname,
+ const char *label);
+ int se_find_free_value_in_slist(const char *listname);
+ /**
+ * Add the pair (label, value) to the slist with name listname. Transfers
+ * ownership of the memory pointed to by label to the list:
+ * clear_snmp_enum() deallocates that memory.
+ */
+ NETSNMP_IMPORT
+ int se_add_pair_to_slist(const char *listname, char *label,
+ int value);
+
+ /*
+ * operates directly on a possibly external list
+ */
+ char *se_find_label_in_list(struct snmp_enum_list *list,
+ int value);
+ int se_find_value_in_list(struct snmp_enum_list *list,
+ const char *label);
+ int se_find_free_value_in_list(struct snmp_enum_list *list);
+ int se_add_pair_to_list(struct snmp_enum_list **list,
+ char *label, int value);
+
+ /*
+ * Persistent enumeration lists
+ */
+ void se_store_enum_list(struct snmp_enum_list *new_list,
+ const char *token, const char *type);
+ void se_store_list(unsigned int major, unsigned int minor,
+ const char *type);
+ void se_clear_slist(const char *listname);
+ void se_store_slist(const char *listname, const char *type);
+ int se_store_slist_callback(int majorID, int minorID,
+ void *serverargs, void *clientargs);
+ void se_read_conf(const char *word, char *cptr);
+ /**
+ * Deallocate the memory allocated by init_snmp_enum(): remove all key/value
+ * pairs stored by se_add_*() calls.
+ */
+ NETSNMP_IMPORT
+ void clear_snmp_enum(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* SNMP_ENUM_H */