|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* smi.h --
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Interface Definition of libsmi (version @VERSION_LIBTOOL@).
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Copyright (c) 1999,2000 Frank Strauss, Technical University of Braunschweig.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* See the file "COPYING" for information on usage and redistribution
|
|
Packit |
022b05 |
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* @(#) $Id: smi.h.in 8090 2008-04-18 12:56:29Z strauss $
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#ifndef _SMI_H
|
|
Packit |
022b05 |
#define _SMI_H
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include <stdlib.h>
|
|
Packit |
022b05 |
#include <stdarg.h>
|
|
Packit |
022b05 |
#ifdef HAVE_STDINT_H
|
|
Packit |
022b05 |
#include <stdint.h>
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
#ifdef HAVE_LIMITS_H
|
|
Packit |
022b05 |
#include "limits.h"
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
#include <time.h>
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#ifdef __cplusplus
|
|
Packit |
022b05 |
extern "C" {
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define SMI_LIBRARY_VERSION "@VERSION_LIBTOOL@"
|
|
Packit |
022b05 |
extern const char *smi_library_version;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define SMI_VERSION_MAJOR @LIBSMI_MAJOR@
|
|
Packit |
022b05 |
#define SMI_VERSION_MINOR @LIBSMI_MINOR@
|
|
Packit |
022b05 |
#define SMI_VERSION_PATCHLEVEL @LIBSMI_PATCHLEVEL@
|
|
Packit |
022b05 |
#define SMI_VERSION_STRING "@VERSION_STRING@"
|
|
Packit |
022b05 |
extern const char *smi_version_string;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define SMI_FLAG_NODESCR 0x0800 /* do not load descriptions/references. */
|
|
Packit |
022b05 |
#define SMI_FLAG_VIEWALL 0x1000 /* all modules are `known', need no views. */
|
|
Packit |
022b05 |
#define SMI_FLAG_ERRORS 0x2000 /* print parser errors. */
|
|
Packit |
022b05 |
#define SMI_FLAG_RECURSIVE 0x4000 /* recursively parse imported modules. */
|
|
Packit |
022b05 |
#define SMI_FLAG_STATS 0x8000 /* print statistics after parsing module. */
|
|
Packit |
022b05 |
#define SMI_FLAG_MASK (SMI_FLAG_NODESCR|SMI_FLAG_VIEWALL|SMI_FLAG_STATS|\
|
|
Packit |
022b05 |
SMI_FLAG_RECURSIVE|SMI_FLAG_ERRORS)
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* misc mappings of SMI types to C types */
|
|
Packit |
022b05 |
typedef char *SmiIdentifier;
|
|
Packit |
022b05 |
typedef unsigned long SmiUnsigned32;
|
|
Packit |
022b05 |
typedef long SmiInteger32;
|
|
Packit |
022b05 |
#ifdef _MSC_VER /* if using MSVC and not configure */
|
|
Packit |
022b05 |
typedef __int64 SmiInteger64;
|
|
Packit |
022b05 |
typedef unsigned __int64 SmiUnsigned64;
|
|
Packit |
022b05 |
#else
|
|
Packit |
022b05 |
typedef @UINT64_TYPE@ SmiUnsigned64;
|
|
Packit |
022b05 |
typedef @INT64_TYPE@ SmiInteger64;
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
typedef unsigned int SmiSubid;
|
|
Packit |
022b05 |
typedef float SmiFloat32;
|
|
Packit |
022b05 |
typedef double SmiFloat64;
|
|
Packit |
022b05 |
typedef long double SmiFloat128;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiLanguage -- language of an actual MIB module */
|
|
Packit |
022b05 |
typedef enum SmiLanguage {
|
|
Packit |
022b05 |
SMI_LANGUAGE_UNKNOWN = 0, /* should not occur */
|
|
Packit |
022b05 |
SMI_LANGUAGE_SMIV1 = 1,
|
|
Packit |
022b05 |
SMI_LANGUAGE_SMIV2 = 2,
|
|
Packit |
022b05 |
SMI_LANGUAGE_SMING = 3,
|
|
Packit |
022b05 |
SMI_LANGUAGE_SPPI = 4
|
|
Packit |
022b05 |
} SmiLanguage;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiBasetype -- base types of all languages */
|
|
Packit |
022b05 |
typedef enum SmiBasetype {
|
|
Packit |
022b05 |
SMI_BASETYPE_UNKNOWN = 0, /* should not occur */
|
|
Packit |
022b05 |
SMI_BASETYPE_INTEGER32 = 1, /* also SMIv1/v2 INTEGER */
|
|
Packit |
022b05 |
SMI_BASETYPE_OCTETSTRING = 2,
|
|
Packit |
022b05 |
SMI_BASETYPE_OBJECTIDENTIFIER = 3,
|
|
Packit |
022b05 |
SMI_BASETYPE_UNSIGNED32 = 4,
|
|
Packit |
022b05 |
SMI_BASETYPE_INTEGER64 = 5, /* SMIng and SPPI */
|
|
Packit |
022b05 |
SMI_BASETYPE_UNSIGNED64 = 6, /* SMIv2, SMIng and SPPI */
|
|
Packit |
022b05 |
SMI_BASETYPE_FLOAT32 = 7, /* only SMIng */
|
|
Packit |
022b05 |
SMI_BASETYPE_FLOAT64 = 8, /* only SMIng */
|
|
Packit |
022b05 |
SMI_BASETYPE_FLOAT128 = 9, /* only SMIng */
|
|
Packit |
022b05 |
SMI_BASETYPE_ENUM = 10,
|
|
Packit |
022b05 |
SMI_BASETYPE_BITS = 11, /* SMIv2, SMIng and SPPI */
|
|
Packit |
022b05 |
SMI_BASETYPE_POINTER = 12 /* only SMIng */
|
|
Packit |
022b05 |
} SmiBasetype;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#ifdef INT32_MIN
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER32_MIN INT32_MIN
|
|
Packit |
022b05 |
#else
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER32_MIN INT_MIN
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
#ifdef INT32_MAX
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER32_MAX INT32_MAX
|
|
Packit |
022b05 |
#else
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER32_MAX INT_MAX
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER64_MIN LIBSMI_INT64_MIN
|
|
Packit |
022b05 |
#define SMI_BASETYPE_INTEGER64_MAX LIBSMI_INT64_MAX
|
|
Packit |
022b05 |
#define SMI_BASETYPE_UNSIGNED32_MIN 0
|
|
Packit |
022b05 |
#ifdef UINT32_MAX
|
|
Packit |
022b05 |
#define SMI_BASETYPE_UNSIGNED32_MAX UINT32_MAX
|
|
Packit |
022b05 |
#else
|
|
Packit |
022b05 |
#define SMI_BASETYPE_UNSIGNED32_MAX UINT_MAX
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
#define SMI_BASETYPE_UNSIGNED64_MIN 0
|
|
Packit |
022b05 |
#define SMI_BASETYPE_UNSIGNED64_MAX LIBSMI_UINT64_MAX
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiStatus -- values of status levels */
|
|
Packit |
022b05 |
typedef enum SmiStatus {
|
|
Packit |
022b05 |
SMI_STATUS_UNKNOWN = 0, /* should not occur */
|
|
Packit |
022b05 |
SMI_STATUS_CURRENT = 1, /* only SMIv2, SMIng and SPPI */
|
|
Packit |
022b05 |
SMI_STATUS_DEPRECATED = 2, /* SMIv1, SMIv2, SMIng and SPPI */
|
|
Packit |
022b05 |
SMI_STATUS_MANDATORY = 3, /* only SMIv1 */
|
|
Packit |
022b05 |
SMI_STATUS_OPTIONAL = 4, /* only SMIv1 */
|
|
Packit |
022b05 |
SMI_STATUS_OBSOLETE = 5 /* SMIv1, SMIv2, SMIng and SPPI */
|
|
Packit |
022b05 |
} SmiStatus;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiAccess -- values of access levels */
|
|
Packit |
022b05 |
typedef enum SmiAccess {
|
|
Packit |
022b05 |
SMI_ACCESS_UNKNOWN = 0, /* should not occur */
|
|
Packit |
022b05 |
SMI_ACCESS_NOT_IMPLEMENTED = 1, /* only for agent capability variations */
|
|
Packit |
022b05 |
SMI_ACCESS_NOT_ACCESSIBLE = 2, /* the values 2 to 5 are allowed to be */
|
|
Packit |
022b05 |
SMI_ACCESS_NOTIFY = 3, /* compared by relational operators. */
|
|
Packit |
022b05 |
SMI_ACCESS_READ_ONLY = 4,
|
|
Packit |
022b05 |
SMI_ACCESS_READ_WRITE = 5,
|
|
Packit |
022b05 |
SMI_ACCESS_INSTALL = 6, /* these three entries are only valid */
|
|
Packit |
022b05 |
SMI_ACCESS_INSTALL_NOTIFY = 7, /* for SPPI */
|
|
Packit |
022b05 |
SMI_ACCESS_REPORT_ONLY = 8,
|
|
Packit |
022b05 |
SMI_ACCESS_EVENT_ONLY = 9 /* this entry is valid only for SMIng */
|
|
Packit |
022b05 |
} SmiAccess;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiNodekind -- type or statement that leads to a definition */
|
|
Packit |
022b05 |
typedef unsigned int SmiNodekind;
|
|
Packit |
022b05 |
#define SMI_NODEKIND_UNKNOWN 0x0000 /* should not occur */
|
|
Packit |
022b05 |
#define SMI_NODEKIND_NODE 0x0001
|
|
Packit |
022b05 |
#define SMI_NODEKIND_SCALAR 0x0002
|
|
Packit |
022b05 |
#define SMI_NODEKIND_TABLE 0x0004
|
|
Packit |
022b05 |
#define SMI_NODEKIND_ROW 0x0008
|
|
Packit |
022b05 |
#define SMI_NODEKIND_COLUMN 0x0010
|
|
Packit |
022b05 |
#define SMI_NODEKIND_NOTIFICATION 0x0020
|
|
Packit |
022b05 |
#define SMI_NODEKIND_GROUP 0x0040
|
|
Packit |
022b05 |
#define SMI_NODEKIND_COMPLIANCE 0x0080
|
|
Packit |
022b05 |
#define SMI_NODEKIND_CAPABILITIES 0x0100
|
|
Packit |
022b05 |
#define SMI_NODEKIND_ANY 0xffff
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiDecl -- type or statement that leads to a definition */
|
|
Packit |
022b05 |
typedef enum SmiDecl {
|
|
Packit |
022b05 |
SMI_DECL_UNKNOWN = 0, /* should not occur */
|
|
Packit |
022b05 |
/* SMIv1/v2 ASN.1 statements and macros */
|
|
Packit |
022b05 |
SMI_DECL_IMPLICIT_TYPE = 1,
|
|
Packit |
022b05 |
SMI_DECL_TYPEASSIGNMENT = 2,
|
|
Packit |
022b05 |
SMI_DECL_IMPL_SEQUENCEOF = 4, /* this will go away */
|
|
Packit |
022b05 |
SMI_DECL_VALUEASSIGNMENT = 5,
|
|
Packit |
022b05 |
SMI_DECL_OBJECTTYPE = 6, /* values >= 6 are assumed to be */
|
|
Packit |
022b05 |
SMI_DECL_OBJECTIDENTITY = 7, /* registering an OID, see check.c */
|
|
Packit |
022b05 |
SMI_DECL_MODULEIDENTITY = 8,
|
|
Packit |
022b05 |
SMI_DECL_NOTIFICATIONTYPE = 9,
|
|
Packit |
022b05 |
SMI_DECL_TRAPTYPE = 10,
|
|
Packit |
022b05 |
SMI_DECL_OBJECTGROUP = 11,
|
|
Packit |
022b05 |
SMI_DECL_NOTIFICATIONGROUP = 12,
|
|
Packit |
022b05 |
SMI_DECL_MODULECOMPLIANCE = 13,
|
|
Packit |
022b05 |
SMI_DECL_AGENTCAPABILITIES = 14,
|
|
Packit |
022b05 |
SMI_DECL_TEXTUALCONVENTION = 15,
|
|
Packit |
022b05 |
SMI_DECL_MACRO = 16,
|
|
Packit |
022b05 |
SMI_DECL_COMPL_GROUP = 17,
|
|
Packit |
022b05 |
SMI_DECL_COMPL_OBJECT = 18,
|
|
Packit |
022b05 |
SMI_DECL_IMPL_OBJECT = 19, /* object label in sth like "iso(1)" */
|
|
Packit |
022b05 |
/* SMIng statements */
|
|
Packit |
022b05 |
SMI_DECL_MODULE = 33,
|
|
Packit |
022b05 |
SMI_DECL_EXTENSION = 34,
|
|
Packit |
022b05 |
SMI_DECL_TYPEDEF = 35,
|
|
Packit |
022b05 |
SMI_DECL_NODE = 36,
|
|
Packit |
022b05 |
SMI_DECL_SCALAR = 37,
|
|
Packit |
022b05 |
SMI_DECL_TABLE = 38,
|
|
Packit |
022b05 |
SMI_DECL_ROW = 39,
|
|
Packit |
022b05 |
SMI_DECL_COLUMN = 40,
|
|
Packit |
022b05 |
SMI_DECL_NOTIFICATION = 41,
|
|
Packit |
022b05 |
SMI_DECL_GROUP = 42,
|
|
Packit |
022b05 |
SMI_DECL_COMPLIANCE = 43,
|
|
Packit |
022b05 |
SMI_DECL_IDENTITY = 44,
|
|
Packit |
022b05 |
SMI_DECL_CLASS = 45,
|
|
Packit |
022b05 |
SMI_DECL_ATTRIBUTE = 46,
|
|
Packit |
022b05 |
SMI_DECL_EVENT = 47
|
|
Packit |
022b05 |
} SmiDecl;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiIndexkind -- actual kind of a table row's index method */
|
|
Packit |
022b05 |
typedef enum SmiIndexkind {
|
|
Packit |
022b05 |
SMI_INDEX_UNKNOWN = 0,
|
|
Packit |
022b05 |
SMI_INDEX_INDEX = 1,
|
|
Packit |
022b05 |
SMI_INDEX_AUGMENT = 2,
|
|
Packit |
022b05 |
SMI_INDEX_REORDER = 3,
|
|
Packit |
022b05 |
SMI_INDEX_SPARSE = 4,
|
|
Packit |
022b05 |
SMI_INDEX_EXPAND = 5
|
|
Packit |
022b05 |
} SmiIndexkind;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiValue -- any single value; for use in default values and subtyping */
|
|
Packit |
022b05 |
typedef struct SmiValue {
|
|
Packit |
022b05 |
SmiBasetype basetype;
|
|
Packit |
022b05 |
unsigned int len; /* OID, OctetString, Bits */
|
|
Packit |
022b05 |
union {
|
|
Packit |
022b05 |
SmiUnsigned64 unsigned64;
|
|
Packit |
022b05 |
SmiInteger64 integer64;
|
|
Packit |
022b05 |
SmiUnsigned32 unsigned32;
|
|
Packit |
022b05 |
SmiInteger32 integer32;
|
|
Packit |
022b05 |
SmiFloat32 float32;
|
|
Packit |
022b05 |
SmiFloat64 float64;
|
|
Packit |
022b05 |
SmiFloat128 float128;
|
|
Packit |
022b05 |
SmiSubid *oid;
|
|
Packit |
022b05 |
char *ptr; /* OctetString, Bits */
|
|
Packit |
022b05 |
} value;
|
|
Packit |
022b05 |
} SmiValue;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiNamedNumber -- a named number; for enumeration and bitset types */
|
|
Packit |
022b05 |
typedef struct SmiNamedNumber {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiValue value;
|
|
Packit |
022b05 |
} SmiNamedNumber;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiRange -- a min-max value range; for subtyping of sizes or numbers */
|
|
Packit |
022b05 |
typedef struct SmiRange {
|
|
Packit |
022b05 |
SmiValue minValue;
|
|
Packit |
022b05 |
SmiValue maxValue;
|
|
Packit |
022b05 |
} SmiRange;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiModule -- the main structure of a module */
|
|
Packit |
022b05 |
typedef struct SmiModule {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
char *path;
|
|
Packit |
022b05 |
char *organization;
|
|
Packit |
022b05 |
char *contactinfo;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
SmiLanguage language;
|
|
Packit |
022b05 |
int conformance;
|
|
Packit |
022b05 |
} SmiModule;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiRevision -- content of a single module's revision clause */
|
|
Packit |
022b05 |
typedef struct SmiRevision {
|
|
Packit |
022b05 |
time_t date;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
} SmiRevision;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiImport -- an imported descriptor */
|
|
Packit |
022b05 |
typedef struct SmiImport {
|
|
Packit |
022b05 |
SmiIdentifier module;
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
} SmiImport;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiMacro -- the main structure of a SMIv1/v2 macro or SMIng extension */
|
|
Packit |
022b05 |
typedef struct SmiMacro {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
char *abnf; /* only for SMIng */
|
|
Packit |
022b05 |
} SmiMacro;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiIdentity -- the main structure of a SMIng Identity. */
|
|
Packit |
022b05 |
/* NOTE: Not to be confused with SMIv2 MODULE-IDENTITY */
|
|
Packit |
022b05 |
typedef struct SmiIdentity {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
} SmiIdentity;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiType -- the main structure of a type definition (also base types) */
|
|
Packit |
022b05 |
/* also SMIng attributes */
|
|
Packit |
022b05 |
typedef struct SmiType {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiBasetype basetype;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
char *format;
|
|
Packit |
022b05 |
SmiValue value;
|
|
Packit |
022b05 |
char *units;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
} SmiType;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiNode -- the main structure of any clause that defines a node */
|
|
Packit |
022b05 |
typedef struct SmiNode {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
unsigned int oidlen;
|
|
Packit |
022b05 |
SmiSubid *oid; /* array of length oidlen */
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
SmiAccess access;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *format;
|
|
Packit |
022b05 |
SmiValue value;
|
|
Packit |
022b05 |
char *units;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
SmiIndexkind indexkind; /* only valid for rows */
|
|
Packit |
022b05 |
int implied; /* only valid for rows */
|
|
Packit |
022b05 |
int create; /* only valid for rows */
|
|
Packit |
022b05 |
SmiNodekind nodekind;
|
|
Packit |
022b05 |
} SmiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiElement -- an item in a list (row index column, notification object) */
|
|
Packit |
022b05 |
typedef struct SmiElement {
|
|
Packit |
022b05 |
#ifndef __GNUC__
|
|
Packit |
022b05 |
char dummy; /* many compilers are unhappy with empty structures. */
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
/* no visible attributes */
|
|
Packit |
022b05 |
} SmiElement;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiOption -- an optional group in a compliance statement */
|
|
Packit |
022b05 |
typedef struct SmiOption {
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
} SmiOption;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiRefinement -- a refined object in a compliance statement */
|
|
Packit |
022b05 |
typedef struct SmiRefinement {
|
|
Packit |
022b05 |
SmiAccess access;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
} SmiRefinement;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiClass -- main structure for SMIng class statement */
|
|
Packit |
022b05 |
typedef struct SmiClass {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
} SmiClass;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiClass -- main structure for class attribute */
|
|
Packit |
022b05 |
typedef struct SmiAttribute {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiBasetype basetype;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
char *format;
|
|
Packit |
022b05 |
SmiValue value;
|
|
Packit |
022b05 |
char *units;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
SmiAccess access;
|
|
Packit |
022b05 |
} SmiAttribute;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* SmiEvent -- the main structure of a SMIng Event(part of class definition).*/
|
|
Packit |
022b05 |
typedef struct SmiEvent {
|
|
Packit |
022b05 |
SmiIdentifier name;
|
|
Packit |
022b05 |
SmiDecl decl;
|
|
Packit |
022b05 |
SmiStatus status;
|
|
Packit |
022b05 |
char *description;
|
|
Packit |
022b05 |
char *reference;
|
|
Packit |
022b05 |
} SmiEvent;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiInit(const char *tag);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void smiExit(void);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void smiSetErrorLevel(int level);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetFlags(void);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void smiSetFlags(int userflags);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiGetPath(void);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiSetPath(const char *path);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void smiSetSeverity(char *pattern, int severity);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiReadConfig(const char *filename, const char *tag);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiLoadModule(const char *module);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiIsLoaded(const char *module);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
typedef void (SmiErrorHandler) (char *path, int line, int severity, char *msg, char *tag);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void smiSetErrorHandler(SmiErrorHandler smiErrorHandler);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetModule(const char *module);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetFirstModule(void);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetNextModule(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetModuleIdentityNode(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiImport *smiGetFirstImport(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiImport *smiGetNextImport(SmiImport *smiImportPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiIsImported(SmiModule *smiModulePtr,
|
|
Packit |
022b05 |
SmiModule *importedModulePtr, char *importedName);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRevision *smiGetFirstRevision(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRevision *smiGetNextRevision(SmiRevision *smiRevisionPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetRevisionLine(SmiRevision *smiRevisionPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiIdentity *smiGetFirstIdentity(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiIdentity *smiGetNextIdentity(SmiIdentity *smiIdentityPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiIdentity *smiGetParentIdentity(SmiIdentity *smiIdentityPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetIdentityLine(SmiIdentity *smiIdentityPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetIdentityModule(SmiIdentity *smiIdentityPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiIdentity *smiGetIdentity(SmiModule *smiModulePtr,char *identity);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetType(SmiModule *smiModulePtr, char *type);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetFirstType(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetNextType(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetParentType(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetTypeModule(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetTypeLine(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRange *smiGetFirstRange(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRange *smiGetNextRange(SmiRange *smiRangePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetMinMaxRange(SmiType *smiType, SmiValue *min, SmiValue *max);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNamedNumber *smiGetFirstNamedNumber(SmiType *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNamedNumber *smiGetNextNamedNumber(SmiNamedNumber
|
|
Packit |
022b05 |
*smiNamedNumberPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiClass *smiGetFirstClass(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiClass *smiGetNextClass(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiClass *smiGetParentClass(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetClassModule(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiClass *smiGetClass(SmiModule *smiModulePtr,char *class);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetClassLine(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiAttribute *smiGetAttribute(SmiClass *smiClassPtr, char *attribute);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiAttribute *smiGetFirstAttribute(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiAttribute *smiGetNextAttribute(SmiAttribute *smiAtrributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetAttributeParentType(SmiAttribute *smiAtrributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiClass *smiGetAttributeParentClass(SmiAttribute *smiAtrributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiAttribute *smiGetFirstUniqueAttribute(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiAttribute *smiGetNextUniqueAttribute(SmiAttribute *smiTypePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiIsClassScalar(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNamedNumber *smiGetAttributeFirstNamedNumber(SmiAttribute *smiAttributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNamedNumber *smiGetAttributeNextNamedNumber(SmiNamedNumber
|
|
Packit |
022b05 |
*smiNamedNumberPtr);
|
|
Packit |
022b05 |
extern SmiRange *smiGetAttributeFirstRange(SmiAttribute *smiAttributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRange *smiGetAttributeNextRange(SmiRange *smiRangePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetAttributeLine(SmiAttribute *smiAttributePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiEvent *smiGetEvent(SmiClass *smiClassPtr, char *attribute);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiEvent *smiGetFirstEvent(SmiClass *smiClassPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiEvent *smiGetNextEvent(SmiEvent *smiEventPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetEventLine(SmiEvent *smiEventPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiMacro *smiGetMacro(SmiModule *smiModulePtr, char *macro);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiMacro *smiGetFirstMacro(SmiModule *smiModulePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiMacro *smiGetNextMacro(SmiMacro *smiMacroPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetMacroModule(SmiMacro *smiMacroPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetMacroLine(SmiMacro *smiMacroPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetNode(SmiModule *smiModulePtr, const char *name);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetNodeByOID(unsigned int oidlen, SmiSubid oid[]);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetFirstNode(SmiModule *smiModulePtr, SmiNodekind nodekind);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetNextNode(SmiNode *smiNodePtr, SmiNodekind nodekind);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetParentNode(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetRelatedNode(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetFirstChildNode(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetNextChildNode(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiModule *smiGetNodeModule(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetNodeType(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetNodeLine(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiElement *smiGetFirstElement(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiElement *smiGetNextElement(SmiElement *smiElementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetElementNode(SmiElement *smiElementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiOption *smiGetFirstOption(SmiNode *smiComplianceNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiOption *smiGetNextOption(SmiOption *smiOptionPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetOptionNode(SmiOption *smiOptionPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetOptionLine(SmiOption *smiOptionPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRefinement *smiGetFirstRefinement(SmiNode *smiComplianceNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiRefinement *smiGetNextRefinement(SmiRefinement *smiRefinementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiNode *smiGetRefinementNode(SmiRefinement *smiRefinementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetRefinementType(SmiRefinement *smiRefinementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiType *smiGetRefinementWriteType(SmiRefinement *smiRefinementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiGetRefinementLine(SmiRefinement *smiRefinementPtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern SmiElement *smiGetFirstUniquenessElement(SmiNode *smiNodePtr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define smiGetNextUniquenessElement(p) smiGetNextElement(p)
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiRenderOID(unsigned int oidlen, SmiSubid *oid, int flags);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiRenderValue(SmiValue *smiValuePtr, SmiType *smiTypePtr,
|
|
Packit |
022b05 |
int flags);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiRenderNode(SmiNode *smiNodePtr, int flags);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern char *smiRenderType(SmiType *smiTypePtr, int flags);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define SMI_RENDER_NUMERIC 0x01 /* render as numeric values */
|
|
Packit |
022b05 |
#define SMI_RENDER_NAME 0x02 /* render as names */
|
|
Packit |
022b05 |
#define SMI_RENDER_QUALIFIED 0x04 /* render names with module prefix */
|
|
Packit |
022b05 |
#define SMI_RENDER_FORMAT 0x08 /* render by applying the type's format if
|
|
Packit |
022b05 |
type is given and format is present */
|
|
Packit |
022b05 |
#define SMI_RENDER_PRINTABLE 0x10 /* render string values as a printable
|
|
Packit |
022b05 |
string if all octets are isprint() */
|
|
Packit |
022b05 |
#define SMI_RENDER_UNKNOWN 0x20 /* render even unknown items as strings
|
|
Packit |
022b05 |
("<unknown>") so that we never get NULL */
|
|
Packit |
022b05 |
#define SMI_RENDER_ALL 0xff /* render as `human friendly' as possible */
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define SMI_UNKNOWN_LABEL "<unknown>"
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* The functions smiGetMaxSize() and smiGetMinSize() compute the
|
|
Packit |
022b05 |
* max size constraint on a given BITS, OCTET STRING or OBJECT
|
|
Packit |
022b05 |
* IDENTIFIER type. The functions recurse towards the top of the
|
|
Packit |
022b05 |
* type derivation tree.
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern unsigned int smiGetMinSize(SmiType *smiType);
|
|
Packit |
022b05 |
extern unsigned int smiGetMaxSize(SmiType *smiType);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* Two utility functions to pack and unpack instance identifiers.
|
|
Packit |
022b05 |
* The smiUnpack() function allocates the array of SmiValues and
|
|
Packit |
022b05 |
* the smiPack() function allocates the array of SmiSubids.
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiUnpack(SmiNode *row, SmiSubid *oid, unsigned int oidlen,
|
|
Packit |
022b05 |
SmiValue **vals, int *valslen);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiPack(SmiNode *row, SmiValue *vals, int valslen,
|
|
Packit |
022b05 |
SmiSubid **oid, unsigned int *oidlen);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* Two printf functions that allocate memory dynamically. The call has
|
|
Packit |
022b05 |
* to free the allocated memory.
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiAsprintf(char **strp, const char *format, ...);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern int smiVasprintf(char **strp, const char *format, va_list ap);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* The functions smiMalloc() and friends are used within the library
|
|
Packit |
022b05 |
* for all memory allocations and deallocations. These functions are
|
|
Packit |
022b05 |
* simple wrappers around the standard malloc() and friends functions,
|
|
Packit |
022b05 |
* sometimes with some additional checking. We export these functions
|
|
Packit |
022b05 |
* because on some systems (e.g. Windows) it is necessary to allocate
|
|
Packit |
022b05 |
* / deallocate memory with the 'right' version of malloc() and
|
|
Packit |
022b05 |
* friends.
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#ifdef HAVE_DMALLOC_H
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
extern void *_smiMalloc(char *, int, size_t);
|
|
Packit |
022b05 |
extern void *_smiRealloc(char *, int, void *ptr, size_t size);
|
|
Packit |
022b05 |
extern char *_smiStrdup(char *, int, const char *s1);
|
|
Packit |
022b05 |
extern char *_smiStrndup(char *, int, const char *s1, size_t n);
|
|
Packit |
022b05 |
extern void _smiFree(char *, int, void *ptr);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#define smiMalloc(s) _smiMalloc(__FILE__, __LINE__, s)
|
|
Packit |
022b05 |
#define smiRealloc(p,s) _smiRealloc(__FILE__, __LINE__, p, s)
|
|
Packit |
022b05 |
#define smiStrdup(s) _smiStrdup(__FILE__, __LINE__, s)
|
|
Packit |
022b05 |
#define smiStrndup(s,n) _smiStrndup(__FILE__, __LINE__, s, n)
|
|
Packit |
022b05 |
#define smiFree(p) _smiFree(__FILE__, __LINE__, p)
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#else
|
|
Packit |
022b05 |
extern void *smiMalloc(size_t size);
|
|
Packit |
022b05 |
extern void *smiRealloc(void *ptr, size_t size);
|
|
Packit |
022b05 |
extern char *smiStrdup(const char *s1);
|
|
Packit |
022b05 |
extern char *smiStrndup(const char *s1, size_t n);
|
|
Packit |
022b05 |
extern void smiFree(void *ptr);
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#ifdef __cplusplus
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
#endif
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#endif /* _SMI_H */
|