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

Net-SNMP Distributed MIBs

\n"; print "

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.

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