|
Packit |
022b05 |
/*
|
|
Packit |
022b05 |
* dump-mosy.c --
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Operations to dump MIB modules in the MOSY output format.
|
|
Packit |
022b05 |
*
|
|
Packit |
022b05 |
* Copyright (c) 1999 Frank Strauss, Technical University of Braunschweig.
|
|
Packit |
022b05 |
* Copyright (c) 1999 J. Schoenwaelder, 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: dump-mosy.c 8090 2008-04-18 12:56:29Z strauss $
|
|
Packit |
022b05 |
*/
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include <config.h>
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include <stdio.h>
|
|
Packit |
022b05 |
#include <string.h>
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
#include "smi.h"
|
|
Packit |
022b05 |
#include "smidump.h"
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *ignoreTypeRanges[] = {
|
|
Packit |
022b05 |
"TimeTicks",
|
|
Packit |
022b05 |
"Counter32",
|
|
Packit |
022b05 |
"Gauge32",
|
|
Packit |
022b05 |
"Counter64",
|
|
Packit |
022b05 |
NULL
|
|
Packit |
022b05 |
};
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *getStatusString(SmiStatus status)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
return
|
|
Packit |
022b05 |
(status == SMI_STATUS_CURRENT) ? "current" :
|
|
Packit |
022b05 |
(status == SMI_STATUS_DEPRECATED) ? "deprecated" :
|
|
Packit |
022b05 |
(status == SMI_STATUS_OBSOLETE) ? "obsolete" :
|
|
Packit |
022b05 |
(status == SMI_STATUS_MANDATORY) ? "mandatory" :
|
|
Packit |
022b05 |
(status == SMI_STATUS_OPTIONAL) ? "optional" :
|
|
Packit |
022b05 |
"<unknown>";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *getAccessString(SmiAccess access, int create)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
return
|
|
Packit |
022b05 |
(create && (access == SMI_ACCESS_READ_WRITE)) ? "read-create" :
|
|
Packit |
022b05 |
(access == SMI_ACCESS_NOT_ACCESSIBLE) ? "not-accessible" :
|
|
Packit |
022b05 |
(access == SMI_ACCESS_NOTIFY) ? "accessible-for-notify" :
|
|
Packit |
022b05 |
(access == SMI_ACCESS_READ_ONLY) ? "read-only" :
|
|
Packit |
022b05 |
(access == SMI_ACCESS_READ_WRITE) ? "read-write" :
|
|
Packit |
022b05 |
"<unknown>";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *getBasetypeString(SmiBasetype basetype)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
return
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_UNKNOWN) ? "<UNKNOWN>" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_OCTETSTRING) ? "OctetString" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_OBJECTIDENTIFIER) ? "ObjectID" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_UNSIGNED32) ? "Unsigned32" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_INTEGER32) ? "Integer32" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_UNSIGNED64) ? "Unsigned64" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_INTEGER64) ? "Integer64" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_FLOAT32) ? "Float32" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_FLOAT64) ? "Float64" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_FLOAT128) ? "Float128" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_ENUM) ? "INTEGER" :
|
|
Packit |
022b05 |
(basetype == SMI_BASETYPE_BITS) ? "Bits" :
|
|
Packit |
022b05 |
"<unknown>";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *getOidString(SmiNode *smiNode, int importedParent)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *parentNode;
|
|
Packit |
022b05 |
SmiModule *smiModule;
|
|
Packit |
022b05 |
static char s[200];
|
|
Packit |
022b05 |
char append[200];
|
|
Packit |
022b05 |
unsigned int i;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
append[0] = 0;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
parentNode = smiNode;
|
|
Packit |
022b05 |
smiModule = smiGetNodeModule(smiNode);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
do {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (parentNode->oidlen <= 1) {
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* prepend the cut-off subidentifier to `append'. */
|
|
Packit |
022b05 |
strcpy(s, append);
|
|
Packit |
022b05 |
sprintf(append, ".%u%s", parentNode->oid[parentNode->oidlen-1], s);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* retrieve the parent SmiNode */
|
|
Packit |
022b05 |
parentNode = smiGetParentNode(parentNode);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (!parentNode) {
|
|
Packit |
022b05 |
sprintf(s, "%s", append);
|
|
Packit |
022b05 |
return s;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
/* found an imported or a local parent node? */
|
|
Packit |
022b05 |
if ((parentNode->decl != SMI_DECL_IMPL_OBJECT)
|
|
Packit |
022b05 |
&& ((parentNode->name && strlen(parentNode->name))
|
|
Packit |
022b05 |
&& (smiIsImported(smiModule, NULL, parentNode->name)
|
|
Packit |
022b05 |
|| (!importedParent
|
|
Packit |
022b05 |
&& (smiGetNodeModule(parentNode) == smiModule))
|
|
Packit |
022b05 |
|| (parentNode->oidlen == 1)))) {
|
|
Packit |
022b05 |
sprintf(s, "%s%s", parentNode->name, append);
|
|
Packit |
022b05 |
return s;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
} while (parentNode);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
s[0] = 0;
|
|
Packit |
022b05 |
for (i=0; i < smiNode->oidlen; i++) {
|
|
Packit |
022b05 |
if (i) strcat(s, ".");
|
|
Packit |
022b05 |
sprintf(&s[strlen(s)], "%u", smiNode->oid[i]);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
return s;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static char *getValueString(SmiValue *valuePtr)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
static char s[1024];
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
s[0] = 0;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
switch (valuePtr->basetype) {
|
|
Packit |
022b05 |
case SMI_BASETYPE_UNSIGNED32:
|
|
Packit |
022b05 |
sprintf(s, "%lu", valuePtr->value.unsigned32);
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_INTEGER32:
|
|
Packit |
022b05 |
sprintf(s, "%ld", valuePtr->value.integer32);
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_UNSIGNED64:
|
|
Packit |
022b05 |
sprintf(s, UINT64_FORMAT, valuePtr->value.unsigned64);
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_INTEGER64:
|
|
Packit |
022b05 |
sprintf(s, INT64_FORMAT, valuePtr->value.integer64);
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_FLOAT32:
|
|
Packit |
022b05 |
case SMI_BASETYPE_FLOAT64:
|
|
Packit |
022b05 |
case SMI_BASETYPE_FLOAT128:
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_ENUM:
|
|
Packit |
022b05 |
case SMI_BASETYPE_OCTETSTRING:
|
|
Packit |
022b05 |
case SMI_BASETYPE_BITS:
|
|
Packit |
022b05 |
case SMI_BASETYPE_OBJECTIDENTIFIER:
|
|
Packit |
022b05 |
/* not required in MOSY format */
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_UNKNOWN:
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_BASETYPE_POINTER:
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
return s;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printIndex(FILE *f, SmiNode *smiNode)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
char *indexname;
|
|
Packit |
022b05 |
int i;
|
|
Packit |
022b05 |
SmiElement *smiElement;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s \"", "ei", smiNode->name);
|
|
Packit |
022b05 |
indexname = NULL;
|
|
Packit |
022b05 |
for (i = -1, smiElement = smiGetFirstElement(smiNode);
|
|
Packit |
022b05 |
smiElement; smiElement = smiGetNextElement(smiElement), i++) {
|
|
Packit |
022b05 |
if (i > 0) fprintf(f, " ");
|
|
Packit |
022b05 |
if (indexname) {
|
|
Packit |
022b05 |
fprintf(f, "%s", indexname);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
indexname = smiGetElementNode(smiElement)->name;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (indexname) {
|
|
Packit |
022b05 |
fprintf(f, "%s%s%s",
|
|
Packit |
022b05 |
(i > 0) ? " " : "",
|
|
Packit |
022b05 |
(smiNode->implied) ? "*" : "",
|
|
Packit |
022b05 |
indexname);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
fprintf(f, "\"\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printAssignements(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int cnt = 0;
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NODE);
|
|
Packit |
022b05 |
smiNode; smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NODE)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
cnt++;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiNode->status == SMI_STATUS_UNKNOWN &&
|
|
Packit |
022b05 |
smiNode != smiGetModuleIdentityNode(smiModule)) {
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name, getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s object-id\n", smiNode->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (cnt) {
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printTypedefs(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int i;
|
|
Packit |
022b05 |
SmiType *smiType, *smiParentType;
|
|
Packit |
022b05 |
SmiNamedNumber *nn;
|
|
Packit |
022b05 |
char *type_name;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (i = 0, smiType = smiGetFirstType(smiModule);
|
|
Packit |
022b05 |
smiType; smiType = smiGetNextType(smiType)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smiParentType = smiGetParentType(smiType);
|
|
Packit |
022b05 |
type_name = smiParentType->name;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiParentType->decl == SMI_DECL_IMPLICIT_TYPE) {
|
|
Packit |
022b05 |
smiParentType = smiGetParentType(smiParentType);
|
|
Packit |
022b05 |
type_name = smiParentType->name;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (smiParentType->basetype == SMI_BASETYPE_OBJECTIDENTIFIER) {
|
|
Packit |
022b05 |
type_name = "ObjectID";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (smiParentType->basetype == SMI_BASETYPE_ENUM) {
|
|
Packit |
022b05 |
type_name = "INTEGER";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s %-15s \"%s\"\n", "tc",
|
|
Packit |
022b05 |
smiType->name, type_name,
|
|
Packit |
022b05 |
smiType->format ? smiType->format : "");
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (i = 0, nn = smiGetFirstNamedNumber(smiType);
|
|
Packit |
022b05 |
nn ; i++, nn = smiGetNextNamedNumber(nn)) {
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s %-15s %s\n", "es",
|
|
Packit |
022b05 |
smiType->name, nn->name,
|
|
Packit |
022b05 |
getValueString(&nn->value));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printObjects(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int i, j, ignore, cnt = 0, aggregate, create;
|
|
Packit |
022b05 |
char *type_name;
|
|
Packit |
022b05 |
SmiNode *smiNode, *relatedNode;
|
|
Packit |
022b05 |
SmiType *smiType;
|
|
Packit |
022b05 |
SmiNamedNumber *smiNamedNumber;
|
|
Packit |
022b05 |
SmiRange *smiRange;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_ANY);
|
|
Packit |
022b05 |
smiNode; smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_ANY)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiNode->nodekind != SMI_NODEKIND_NODE
|
|
Packit |
022b05 |
&& smiNode->nodekind != SMI_NODEKIND_SCALAR
|
|
Packit |
022b05 |
&& smiNode->nodekind != SMI_NODEKIND_TABLE
|
|
Packit |
022b05 |
&& smiNode->nodekind != SMI_NODEKIND_ROW
|
|
Packit |
022b05 |
&& smiNode->nodekind != SMI_NODEKIND_COLUMN) {
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
cnt++;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiNode->nodekind == SMI_NODEKIND_NODE) {
|
|
Packit |
022b05 |
if (smiNode->status != SMI_STATUS_UNKNOWN &&
|
|
Packit |
022b05 |
smiNode != smiGetModuleIdentityNode(smiModule)) {
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name,
|
|
Packit |
022b05 |
getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s object-id\n", smiNode->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
aggregate = smiNode->nodekind == SMI_NODEKIND_TABLE
|
|
Packit |
022b05 |
|| smiNode->nodekind == SMI_NODEKIND_ROW;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
type_name = NULL;
|
|
Packit |
022b05 |
smiType = smiGetNodeType(smiNode);
|
|
Packit |
022b05 |
if (!aggregate) {
|
|
Packit |
022b05 |
if (! smiType) {
|
|
Packit |
022b05 |
continue;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
type_name = getBasetypeString(smiType->basetype);
|
|
Packit |
022b05 |
if (smiType && (smiType->decl != SMI_DECL_IMPLICIT_TYPE)) {
|
|
Packit |
022b05 |
type_name = smiType->name;
|
|
Packit |
022b05 |
if (!strcmp(type_name, "ObjectIdentifier")) {
|
|
Packit |
022b05 |
type_name = "ObjectID";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiType && smiType->decl == SMI_DECL_IMPLICIT_TYPE) {
|
|
Packit |
022b05 |
type_name = smiGetParentType(smiType)->name;
|
|
Packit |
022b05 |
if (smiType->basetype == SMI_BASETYPE_OBJECTIDENTIFIER) {
|
|
Packit |
022b05 |
type_name = "ObjectID";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
if (smiType->basetype == SMI_BASETYPE_ENUM) {
|
|
Packit |
022b05 |
type_name = "INTEGER";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
type_name = "Aggregate";
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiNode->nodekind == SMI_NODEKIND_COLUMN) {
|
|
Packit |
022b05 |
create = smiGetParentNode(smiNode)->create;
|
|
Packit |
022b05 |
} else {
|
|
Packit |
022b05 |
create = 0;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%-20s %-16s ", smiNode->name, getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%-15s %-15s %s\n", type_name,
|
|
Packit |
022b05 |
getAccessString(smiNode->access, create),
|
|
Packit |
022b05 |
getStatusString(smiNode->status));
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
relatedNode = smiGetRelatedNode(smiNode);
|
|
Packit |
022b05 |
switch (smiNode->indexkind) {
|
|
Packit |
022b05 |
case SMI_INDEX_INDEX:
|
|
Packit |
022b05 |
case SMI_INDEX_REORDER:
|
|
Packit |
022b05 |
printIndex(f, smiNode);
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_INDEX_EXPAND: /* TODO: we have to do more work here! */
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_INDEX_AUGMENT:
|
|
Packit |
022b05 |
if (relatedNode) {
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s %s\n", "ea",
|
|
Packit |
022b05 |
smiNode->name, relatedNode->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_INDEX_SPARSE:
|
|
Packit |
022b05 |
if (relatedNode) {
|
|
Packit |
022b05 |
printIndex(f, relatedNode);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
case SMI_INDEX_UNKNOWN:
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (smiType && smiType->decl == SMI_DECL_IMPLICIT_TYPE) {
|
|
Packit |
022b05 |
for (i = 0, smiNamedNumber = smiGetFirstNamedNumber(smiType);
|
|
Packit |
022b05 |
smiNamedNumber;
|
|
Packit |
022b05 |
i++, smiNamedNumber = smiGetNextNamedNumber(smiNamedNumber)) {
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s %-15s %s\n", "ev",
|
|
Packit |
022b05 |
smiNode->name, smiNamedNumber->name,
|
|
Packit |
022b05 |
getValueString(&smiNamedNumber->value));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (ignore = 0, j = 0; ignoreTypeRanges[j]; j++) {
|
|
Packit |
022b05 |
if (strcmp(type_name, ignoreTypeRanges[j]) == 0) {
|
|
Packit |
022b05 |
ignore++;
|
|
Packit |
022b05 |
break;
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (! ignore) {
|
|
Packit |
022b05 |
for (smiRange = smiGetFirstRange(smiType);
|
|
Packit |
022b05 |
smiRange;
|
|
Packit |
022b05 |
smiRange = smiGetNextRange(smiRange)) {
|
|
Packit |
022b05 |
fprintf(f, "%%%-19s %-16s %-15s ", "er",
|
|
Packit |
022b05 |
smiNode->name,
|
|
Packit |
022b05 |
getValueString(&smiRange->minValue));
|
|
Packit |
022b05 |
fprintf(f, "%s\n", getValueString(&smiRange->maxValue));
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (cnt) {
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printNotifications(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int cnt = 0;
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_NOTIFICATION);
|
|
Packit |
022b05 |
smiNode;
|
|
Packit |
022b05 |
smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_NOTIFICATION)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
cnt++;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name, getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s notification\n", smiNode->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (cnt) {
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printGroups(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *smiNode, *smiNodeMember;
|
|
Packit |
022b05 |
SmiElement *smiElement;
|
|
Packit |
022b05 |
int cnt = 0, objects, notifications;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_GROUP);
|
|
Packit |
022b05 |
smiNode; smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_GROUP)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
cnt ++;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (objects = 0, notifications = 0,
|
|
Packit |
022b05 |
smiElement = smiGetFirstElement(smiNode);
|
|
Packit |
022b05 |
smiElement;
|
|
Packit |
022b05 |
smiElement = smiGetNextElement(smiElement)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smiNodeMember = smiGetElementNode(smiElement);
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
objects +=
|
|
Packit |
022b05 |
(smiNodeMember->nodekind == SMI_NODEKIND_SCALAR)
|
|
Packit |
022b05 |
|| (smiNodeMember->nodekind == SMI_NODEKIND_COLUMN);
|
|
Packit |
022b05 |
notifications +=
|
|
Packit |
022b05 |
(smiNodeMember->nodekind == SMI_NODEKIND_NOTIFICATION);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name, getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s %s\n", smiNode->name,
|
|
Packit |
022b05 |
(objects && ! notifications) ? "object-group" :
|
|
Packit |
022b05 |
(! objects && notifications) ? "notification-group" : "group");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (cnt) {
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void printCompliances(FILE *f, SmiModule *smiModule)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
int cnt = 0;
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (smiNode = smiGetFirstNode(smiModule, SMI_NODEKIND_COMPLIANCE);
|
|
Packit |
022b05 |
smiNode; smiNode = smiGetNextNode(smiNode, SMI_NODEKIND_COMPLIANCE)) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
cnt++;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name, getOidString(smiNode, 0));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s module-compliance\n", smiNode->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (cnt) {
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static void dumpMosy(int modc, SmiModule **modv, int flags, char *output)
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
SmiNode *smiNode;
|
|
Packit |
022b05 |
int i;
|
|
Packit |
022b05 |
FILE *f = stdout;
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (output) {
|
|
Packit |
022b05 |
f = fopen(output, "w");
|
|
Packit |
022b05 |
if (!f) {
|
|
Packit |
022b05 |
fprintf(stderr, "smidump: cannot open %s for writing: ", output);
|
|
Packit |
022b05 |
perror(NULL);
|
|
Packit |
022b05 |
exit(1);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
for (i = 0; i < modc; i++) {
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (! (flags & SMIDUMP_FLAG_SILENT)) {
|
|
Packit |
022b05 |
fprintf(f,
|
|
Packit |
022b05 |
"-- automatically generated by smidump %s, do not edit!\n",
|
|
Packit |
022b05 |
SMI_VERSION_STRING);
|
|
Packit |
022b05 |
fprintf(f,
|
|
Packit |
022b05 |
"\n-- object definitions compiled from %s\n\n",
|
|
Packit |
022b05 |
modv[i]->name);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (! (flags & SMIDUMP_FLAG_SILENT) && (flags & SMIDUMP_FLAG_ERROR)) {
|
|
Packit |
022b05 |
fprintf(f, "-- WARNING: this output may be incorrect due to "
|
|
Packit |
022b05 |
"significant parse errors\n\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smiNode = smiGetModuleIdentityNode(modv[i]);
|
|
Packit |
022b05 |
if (smiNode) {
|
|
Packit |
022b05 |
SmiNode *parent = smiGetParentNode(smiNode);
|
|
Packit |
022b05 |
fprintf(f, "%-20s %s\n", smiNode->name, getOidString(smiNode, !parent || parent->nodekind == SMI_NODEKIND_UNKNOWN ));
|
|
Packit |
022b05 |
fprintf(f, "%%n0 %-16s module-identity\n", smiNode->name);
|
|
Packit |
022b05 |
fprintf(f, "\n");
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
printAssignements(f, modv[i]);
|
|
Packit |
022b05 |
printTypedefs(f, modv[i]);
|
|
Packit |
022b05 |
printObjects(f, modv[i]);
|
|
Packit |
022b05 |
printNotifications(f, modv[i]);
|
|
Packit |
022b05 |
printGroups(f, modv[i]);
|
|
Packit |
022b05 |
printCompliances(f, modv[i]);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (fflush(f) || ferror(f)) {
|
|
Packit |
022b05 |
perror("smidump: write error");
|
|
Packit |
022b05 |
exit(1);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
if (output) {
|
|
Packit |
022b05 |
fclose(f);
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
}
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
void initMosy()
|
|
Packit |
022b05 |
{
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
static SmidumpDriver driver = {
|
|
Packit |
022b05 |
"mosy",
|
|
Packit |
022b05 |
dumpMosy,
|
|
Packit |
022b05 |
SMI_FLAG_NODESCR,
|
|
Packit |
022b05 |
SMIDUMP_DRIVER_CANT_UNITE,
|
|
Packit |
022b05 |
"intermediate format generated by the mosy compiler",
|
|
Packit |
022b05 |
NULL,
|
|
Packit |
022b05 |
NULL
|
|
Packit |
022b05 |
};
|
|
Packit |
022b05 |
|
|
Packit |
022b05 |
smidumpRegisterDriver(&driver);
|
|
Packit |
022b05 |
}
|