summaryrefslogtreecommitdiff
path: root/mib/parse.h
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2006-01-27 21:36:35 +0000
committerStef Walter <stef@memberwebs.com>2006-01-27 21:36:35 +0000
commitcadd830e5aca1f208541ea6d38da5b4a863db5cc (patch)
tree597b1bd012ddd2fb1950b4bdc84c17b69ed37e2c /mib/parse.h
parent36f86d822d09ec0d91839ee68178d8602e1970e2 (diff)
Added textual MIB parsing support. See #45
Diffstat (limited to 'mib/parse.h')
-rw-r--r--mib/parse.h241
1 files changed, 241 insertions, 0 deletions
diff --git a/mib/parse.h b/mib/parse.h
new file mode 100644
index 0000000..9c1994d
--- /dev/null
+++ b/mib/parse.h
@@ -0,0 +1,241 @@
+#ifndef PARSE_H
+#define PARSE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /*
+ * parse.h
+ */
+/***********************************************************
+ Copyright 1989 by Carnegie Mellon University
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of CMU not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+******************************************************************/
+
+#define MAXLABEL 64 /* maximum characters in a label */
+#define MAXTOKEN 128 /* maximum characters in a token */
+#define MAXQUOTESTR 4096 /* maximum characters in a quoted string */
+
+ struct variable_list;
+
+ /*
+ * A linked list of tag-value pairs for enumerated integers.
+ */
+ struct enum_list {
+ struct enum_list *next;
+ int value;
+ char *label;
+ };
+
+ /*
+ * A linked list of ranges
+ */
+ struct range_list {
+ struct range_list *next;
+ int low, high;
+ };
+
+ /*
+ * A linked list of indexes
+ */
+ struct index_list {
+ struct index_list *next;
+ char *ilabel;
+ char isimplied;
+ };
+
+ /*
+ * A linked list of varbinds
+ */
+ struct varbind_list {
+ struct varbind_list *next;
+ char *vblabel;
+ };
+
+ /*
+ * A linked list of nodes.
+ */
+ struct node {
+ struct node *next;
+ char *label; /* This node's (unique) textual name */
+ u_long subid; /* This node's integer subidentifier */
+ int modid; /* The module containing this node */
+ char *parent; /* The parent's textual name */
+ int tc_index; /* index into tclist (-1 if NA) */
+ int type; /* The type of object this represents */
+ int access;
+ int status;
+ struct enum_list *enums; /* (optional) list of enumerated integers */
+ struct range_list *ranges;
+ struct index_list *indexes;
+ char *augments;
+ struct varbind_list *varbinds;
+ char *hint;
+ char *units;
+ char *description; /* description (a quoted string) */
+ char *defaultValue;
+ char *filename;
+ int lineno;
+ };
+
+ /*
+ * A tree in the format of the tree structure of the MIB.
+ */
+ struct tree {
+ struct tree *child_list; /* list of children of this node */
+ struct tree *next_peer; /* Next node in list of peers */
+ struct tree *next; /* Next node in hashed list of names */
+ struct tree *parent;
+ char *label; /* This node's textual name */
+ u_long subid; /* This node's integer subidentifier */
+ int modid; /* The module containing this node */
+ int number_modules;
+ int *module_list; /* To handle multiple modules */
+ int tc_index; /* index into tclist (-1 if NA) */
+ int type; /* This node's object type */
+ int access; /* This nodes access */
+ int status; /* This nodes status */
+ struct enum_list *enums; /* (optional) list of enumerated integers */
+ struct range_list *ranges;
+ struct index_list *indexes;
+ char *augments;
+ struct varbind_list *varbinds;
+ char *hint;
+ char *units;
+ char *description; /* description (a quoted string) */
+ int reported; /* 1=report started in print_subtree... */
+ char *defaultValue;
+ };
+
+ /*
+ * Information held about each MIB module
+ */
+ struct module_import {
+ char *label; /* The descriptor being imported */
+ int modid; /* The module imported from */
+ };
+
+ struct module {
+ char *name; /* This module's name */
+ char *file; /* The file containing the module */
+ struct module_import *imports; /* List of descriptors being imported */
+ int no_imports; /* The number of such import descriptors */
+ /*
+ * -1 implies the module hasn't been read in yet
+ */
+ int modid; /* The index number of this module */
+ struct module *next; /* Linked list pointer */
+ };
+
+ struct module_compatability {
+ const char *old_module;
+ const char *new_module;
+ const char *tag; /* NULL implies unconditional replacement,
+ * otherwise node identifier or prefix */
+ size_t tag_len; /* 0 implies exact match (or unconditional) */
+ struct module_compatability *next; /* linked list */
+ };
+
+
+ /*
+ * non-aggregate types for tree end nodes
+ */
+#define TYPE_OTHER 0
+#define TYPE_OBJID 1
+#define TYPE_OCTETSTR 2
+#define TYPE_INTEGER 3
+#define TYPE_NETADDR 4
+#define TYPE_IPADDR 5
+#define TYPE_COUNTER 6
+#define TYPE_GAUGE 7
+#define TYPE_TIMETICKS 8
+#define TYPE_OPAQUE 9
+#define TYPE_NULL 10
+#define TYPE_COUNTER64 11
+#define TYPE_BITSTRING 12
+#define TYPE_NSAPADDRESS 13
+#define TYPE_UINTEGER 14
+#define TYPE_UNSIGNED32 15
+#define TYPE_INTEGER32 16
+
+#define TYPE_SIMPLE_LAST 16
+
+#define TYPE_TRAPTYPE 20
+#define TYPE_NOTIFTYPE 21
+#define TYPE_OBJGROUP 22
+#define TYPE_NOTIFGROUP 23
+#define TYPE_MODID 24
+#define TYPE_AGENTCAP 25
+#define TYPE_MODCOMP 26
+
+#define MIB_ACCESS_READONLY 18
+#define MIB_ACCESS_READWRITE 19
+#define MIB_ACCESS_WRITEONLY 20
+#define MIB_ACCESS_NOACCESS 21
+#define MIB_ACCESS_NOTIFY 67
+#define MIB_ACCESS_CREATE 48
+
+#define MIB_STATUS_MANDATORY 23
+#define MIB_STATUS_OPTIONAL 24
+#define MIB_STATUS_OBSOLETE 25
+#define MIB_STATUS_DEPRECATED 39
+#define MIB_STATUS_CURRENT 57
+
+#define ANON "anonymous#"
+#define ANON_LEN strlen(ANON)
+
+ struct tree *read_module(const char *);
+ struct tree *read_mib(const char *);
+ struct tree *read_all_mibs(void);
+ int unload_module(const char *name);
+ void unload_all_mibs(void);
+ void init_mib_internals(void);
+ int add_mibdir(const char *);
+ void add_module_replacement(const char *, const char *,
+ const char *, int);
+ int which_module(const char *);
+ char *module_name(int, char *);
+ void print_subtree(FILE *, struct tree *, int);
+ void print_ascii_dump_tree(FILE *, struct tree *, int);
+ struct tree *find_tree_node(const char *, int);
+ const char *get_tc_descriptor(int);
+ struct tree *find_best_tree_node(const char *, struct tree *,
+ u_int *);
+ /*
+ * backwards compatability
+ */
+ struct tree *find_node(const char *, struct tree *);
+ struct module *find_module(int);
+ void adopt_orphans(void);
+ char *snmp_mib_toggle_options(char *options);
+ void snmp_mib_toggle_options_usage(const char *lead,
+ FILE * outf);
+ void print_mib(FILE *);
+ void print_mib_tree(FILE *, struct tree *, int);
+ int get_mib_parse_error_count(void);
+ int snmp_get_token(FILE * fp, char *token, int maxtlen);
+ struct tree *find_best_tree_node(const char *name,
+ struct tree *tree_top,
+ u_int * match);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* PARSE_H */