| #!/usr/bin/perl |
| |
| use SNMP; |
| |
| use Getopt::Std; |
| |
| %opts = ( M => ".", |
| D => "html"); |
| |
| getopts("M:D:WH:", \%opts) || die "usage: makehtml.pl -W [-M MIBDIR] [-D OUTDIR] files > index.html"; |
| |
| $SNMP::save_descriptions = 1; |
| |
| $ENV{'MIBDIRS'} = $opts{'M'}; |
| $ENV{'SNMPCONFPATH'} = 'bogus'; |
| |
| if (-f "rfclist") { |
| open(I,"rfclist"); |
| while (<I>) { |
| 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 (<I>) { |
| if (/^([-\w]+)\s+(\S+)\s*$/) { |
| $nodemap{$1} = $2; |
| } |
| } |
| close(I); |
| } |
| |
| if ($opts{'W'}) { |
| print '<p class="SectionTitle"> |
| Net-SNMP Distributed MIBs |
| </p> |
| |
| <p>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 <a href="http://www.mibdepot.com/">at the MIB depot</a>.</p> |
| |
| <table border="2" bgcolor="#dddddd"> |
| <tr><th>MIB</th><th>RFC</th><th>Description</th></tr> |
| '; |
| } |
| |
| 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 (<I>) { |
| 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})) { |
| @nodelist = split(/,/,$nodemap{$mib}); |
| } else { |
| @nodelist = $node; |
| } |
| |
| # Change tabs to spaces |
| $desc =~ s/\t/ /g; |
| |
| # Clean up formatting |
| my ($s) = ($desc =~ /\n(\s+)/); |
| $desc =~ s/^$s//gm; |
| |
| $desc =~ s/&/&/g; |
| $desc =~ s/</</g; |
| $desc =~ s/>/>/g; |
| |
| print " <tr>\n"; |
| print " <td>"; |
| for (my $i = 0; $i <= $#nodelist; $i++) { |
| my $node = $nodelist[$i]; |
| if ($i != 0) { |
| print " "; |
| } |
| print "<a href=\"$node.html\">$mib"; |
| if ($#nodelist > 0) { |
| print " ($node)"; |
| } |
| print "</a><br />\n"; |
| } |
| print " <a href=\"$mib.txt\">[mib file]</a></td>\n"; |
| print " <br><a href=\"$mib-conf.html\">[conformance summary]</a></td>\n"; |
| print " <td><a href=\"http://www.ietf.org/rfc/rfc$mibs{$mib}.txt\">rfc$mibs{$mib}</a></td>\n" if ($mibs{$mib}); |
| print " <td> </td>\n" if (!$mibs{$mib}); |
| print " <td><pre>$desc</pre></td>\n"; |
| print " </tr>\n"; |
| |
| for (my $i = 0; $i <= $#nodelist; $i++) { |
| my $node = $nodelist[$i]; |
| system("MIBS=$mib mib2c -c mib2c.genhtml.conf $node"); |
| system("mv $node.html $opts{D}"); |
| } |
| } |
| |
| print "</table>\n"; |
| |
| |