Blame mibs/makehtml.pl

Packit fcad23
#!/usr/bin/perl
Packit fcad23
Packit fcad23
use SNMP;
Packit fcad23
Packit fcad23
use Getopt::Std;
Packit fcad23
Packit fcad23
%opts = ( M => ".",
Packit fcad23
	  D => "html");
Packit fcad23
Packit fcad23
getopts("M:D:WH:", \%opts) || die "usage: makehtml.pl -W [-M MIBDIR] [-D OUTDIR] files > index.html";
Packit fcad23
Packit fcad23
$SNMP::save_descriptions = 1;
Packit fcad23
Packit fcad23
$ENV{'MIBDIRS'} = $opts{'M'};
Packit fcad23
$ENV{'SNMPCONFPATH'} = 'bogus';
Packit fcad23
Packit fcad23
if (-f "rfclist") {
Packit fcad23
    open(I,"rfclist");
Packit fcad23
    while () {
Packit fcad23
	if (/^(\d+)\s+([-:\w]+)\s*$/) {
Packit fcad23
	    my $mib = $2;
Packit fcad23
	    my $rfc = $1;
Packit fcad23
	    my @mibs = split(/:/,$mib);
Packit fcad23
	    foreach my $i (@mibs) {
Packit fcad23
		$mibs{$i} = $rfc; 
Packit fcad23
	    }
Packit fcad23
	}
Packit fcad23
    }
Packit fcad23
    close(I);
Packit fcad23
}
Packit fcad23
Packit fcad23
if (-f "nodemap") {
Packit fcad23
    open(I,"nodemap");
Packit fcad23
    while () {
Packit fcad23
	if (/^([-\w]+)\s+(\S+)\s*$/) {
Packit fcad23
	    $nodemap{$1} = $2;
Packit fcad23
	}
Packit fcad23
    }
Packit fcad23
    close(I);
Packit fcad23
}
Packit fcad23
Packit fcad23
if ($opts{'W'}) {
Packit fcad23
  print '

Packit fcad23
Net-SNMP Distributed MIBs
Packit fcad23

Packit fcad23
Packit fcad23

The following are the MIB files distributed with Net-SNMP. Note that because they are distributed with Net-SNMP does not mean the agent implements them all. Another good place for finding other MIB definitions can be found at the MIB depot.

Packit fcad23
Packit fcad23
Packit fcad23
  MIBRFCDescription
Packit fcad23
';
Packit fcad23
}
Packit fcad23
Packit fcad23
my %didit;
Packit fcad23
Packit fcad23
foreach my $mibf (@ARGV) {
Packit fcad23
    my $node;
Packit fcad23
    my $mib = $mibf;
Packit fcad23
    $mib =~ s/.txt//;
Packit fcad23
Packit fcad23
    next if ($didit{$mib});
Packit fcad23
    $didit{$mib} = 1;
Packit fcad23
Packit fcad23
    open(I, "$opts{M}/$mibf");
Packit fcad23
    while () {
Packit fcad23
	if (/(\w+)\s+MODULE-IDENTITY/) {
Packit fcad23
	    $node = $1;
Packit fcad23
	}
Packit fcad23
    }
Packit fcad23
    close(I);
Packit fcad23
Packit fcad23
    if (!$node) {
Packit fcad23
	print STDERR "Couldn't find starting node for $mib $node $_\n";
Packit fcad23
	next;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    SNMP::loadModules($mib);
Packit fcad23
Packit fcad23
    $desc = $SNMP::MIB{$node}{'description'};
Packit fcad23
Packit fcad23
    # get a different tree than the module identity though.
Packit fcad23
    if (exists($nodemap{$mib})) {
Packit fcad23
	@nodelist = split(/,/,$nodemap{$mib});
Packit fcad23
    } else {
Packit fcad23
	@nodelist = $node;
Packit fcad23
    }
Packit fcad23
Packit fcad23
    # Change tabs to spaces
Packit fcad23
    $desc =~ s/\t/        /g;
Packit fcad23
Packit fcad23
    # Clean up formatting
Packit fcad23
    my ($s) = ($desc =~ /\n(\s+)/);
Packit fcad23
    $desc =~ s/^$s//gm;
Packit fcad23
Packit fcad23
    $desc =~ s/&/&/g;
Packit fcad23
    $desc =~ s/</</g;
Packit fcad23
    $desc =~ s/>/>/g;
Packit fcad23
Packit fcad23
    print "  \n";
Packit fcad23
    print "    ";
Packit fcad23
    for (my $i = 0; $i <= $#nodelist; $i++) {
Packit fcad23
	my $node = $nodelist[$i];
Packit fcad23
	if ($i != 0) {
Packit fcad23
	    print "        ";
Packit fcad23
	}
Packit fcad23
	print "$mib";
Packit fcad23
	if ($#nodelist > 0) {
Packit fcad23
	    print " ($node)";
Packit fcad23
	}
Packit fcad23
	print "
\n";
Packit fcad23
    }
Packit fcad23
    print "        [mib file]\n";
Packit fcad23
    print "        
[conformance summary]\n";
Packit fcad23
    print "    rfc$mibs{$mib}\n" if ($mibs{$mib});
Packit fcad23
    print "     \n" if (!$mibs{$mib});
Packit fcad23
    print "    
$desc
\n";
Packit fcad23
    print "  \n";
Packit fcad23
Packit fcad23
    for (my $i = 0; $i <= $#nodelist; $i++) {
Packit fcad23
	my $node = $nodelist[$i];
Packit fcad23
	system("MIBS=$mib mib2c -c mib2c.genhtml.conf $node");
Packit fcad23
	system("mv $node.html $opts{D}");
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
print "\n";
Packit fcad23
Packit fcad23