| ## |
| ## USAGE: |
| ## mib2c -c mib2c.genhtml.conf STARTINGNODE |
| ## |
| ## Optional extra arguments: |
| ## |
| ## -S cssfile=file.css (specifies an alternate CSS style |
| ## file to include in the output) |
| ## |
| ## |
| ## try to strip leading white space from text |
| ## |
| @define DO_FORMATED_TEXT@ |
| @startperl@ |
| my ($s) = ($vars{'x'} =~ /\n(\s+)/); |
| $vars{'x'} =~ s/^$s//gm; |
| 0; |
| @endperl@ |
| <pre> |
| $x |
| </pre> |
| @enddefine@ |
| ## |
| ## print a description clause (include TC info and references |
| ## |
| @define DO_DESCR@ |
| <td> |
| @if "$i.perltype" ne "$i.syntax"@ |
| <p> |
| @eval $tmpsyn = "$i.syntax"@ |
| @perleval if (!defined($TCS{$vars{'tmpsyn'}})) { $TCS{$vars{'tmpsyn'}} = $vars{'i'}; }; 0;@ |
| Note: this object is based on the <a href="#$i.syntax"> $i.syntax TEXTUAL-CONVENTION</a>. |
| </p> |
| @end@ |
| @eval $x = "$i.description"@ |
| @calldefine DO_FORMATED_TEXT@ |
| ##@startperl@ |
| ## my ($s) = ($vars{'x'} =~ /\n(\s+)/); |
| ## $vars{'x'} =~ s/^$s//gm; |
| ## 0; |
| ##@endperl@ |
| ##<pre> |
| ##$x |
| ##</pre> |
| @if "$i.reference" ne ""@ |
| @eval $x = "$i.reference"@ |
| <p><i>Also see Reference: |
| @calldefine DO_FORMATED_TEXT@ |
| </i></p> |
| @end@ |
| </td> |
| @enddefine@ |
| ## |
| ## print information (a row) about a given node |
| ## |
| @define NODE_INFO@ |
| @if ("$i.status" eq "Current")@ |
| <td> |
| @else@ |
| <td class="deprecated"> |
| @end@ |
| <a name="$i" /> |
| @eval $tmpi = "$i.parent"@ |
| @if "$doindexstuff" ne "" && "$tmpi.parent" ne "$t"@ |
| (external from $tmpi.parent) |
| @else@ |
| $i.subid |
| @end@ |
| <br /><b>$i</b> |
| |
| </td><td> |
| ## |
| ## print the data type |
| ## |
| @if ("$i.status" ne "Current")@ |
| <font color="red">DEPRECATED</font><br /> |
| @end@ |
| $i.perltype |
| ## |
| ## print range information |
| ## |
| @if "$i.ranges"@ |
| @if "$i.perltype" eq 'OCTETSTR' || "$i.perltype" eq 'OBJECTID'@ |
| <br />Legal Lengths: |
| @else@ |
| <br />Legal values: |
| @end@ |
| @eval $tmpdidit = 0@ |
| @foreach $st $end range $i@ |
| @if "$tmpdidit" == "1"@ |
| , |
| @end@ |
| @if "$st" eq "$end"@ |
| $st |
| @else@ |
| $st .. $end |
| @end@ |
| @eval $tmpdidit = 1@ |
| @end@ |
| @end@ |
| ## |
| ## check for TC vs non-TC cases |
| ## |
| @if "$i.perltype" ne "$i.syntax"@ |
| <br> |
| @eval $tmpsyn = "$i.syntax"@ |
| @perleval if (!defined($TCS{$vars{'tmpsyn'}})) { $TCS{$vars{'tmpsyn'}} = $vars{'i'}; }; 0;@ |
| <a href="#$i.syntax">$i.syntax</a> |
| @if $i.enums@ |
| <br>(ENUM list below) |
| @end@ |
| @else@ |
| @if $i.enums@ |
| <table class="enum"> |
| <tr><th>Value</th><th>Label/Meaning</th></tr> |
| @foreach $e $v enum@ |
| <tr><td>$v</td><td>$e</td></tr> |
| @end@ |
| </table> |
| @end@ |
| @end@ |
| |
| </td><td>$i.access</td> |
| @if !"$dont_do_oids"@ |
| <td>$i.objectID</td> |
| @end@ |
| @calldefine DO_DESCR@ |
| @enddefine@ |
| @open ${name}.html@ |
| <head> |
| <title>MIB information for $name</title> |
| <style type="text/css"> |
| @if "$cssfile" ne ""@ |
| @startperl@ |
| open(CSS,$vars{'cssfile'}); |
| while(<CSS>) { |
| mib2c_output($_); |
| } |
| close(CSS); |
| 0; |
| @endperl@ |
| @else@ |
| <!-- |
| h2{background:#bbeebb} |
| h3{background:#ccccee} |
| table { |
| border: 1px; |
| background: #dddddd; |
| style: outset; |
| } |
| th { |
| border: 1px; |
| border: solid; |
| border-style: outset; |
| background: #bbbbbb; |
| } |
| td { |
| border: 1px; |
| border: solid; |
| border-style: inset; |
| } |
| table.enums { |
| background: #cccccc; |
| } |
| table.deprecated { |
| background: #ffdddd; |
| } |
| td.deprecated { |
| background: #ffdddd; |
| } |
| .label { |
| border-style: outset; |
| background: #bbbbbb; |
| } |
| --> |
| @end@ |
| </style> |
| </head> |
| <body bgcolor="#ffffff"> |
| <h2>INTRODUCTION</h2> |
| <ul> |
| <p> |
| This is a summary of information regarding objects below the <b>$name</b> |
| MIB object, which is defined within the <b>$name.module</b> MIB |
| document as <b>$name.objectID</b>. |
| </p> |
| </ul> |
| ## |
| ## Table of contents |
| ## |
| <h2>TABLE OF CONTENTS</h2> |
| <ul> |
| @foreach $Current stuff Current Deprecated@ |
| <h3><a href="#objects_$Current">$Current Objects</a></h3> |
| <ul> |
| @if "$Current" eq "Current"@ |
| <li><a href="#scalar_current">Scalars</a></li> |
| @else@ |
| <li><a href="#scalar_notcurrent">Deprecated Scalars</a></li> |
| @end@ |
| @foreach $t table@ |
| @if ("$Current" eq "Current" && "$t.status" eq "Current") || ("$Current" ne "Current" && "$t.status" ne "Current")@ |
| <li><a href="#$t">$t</a></li> |
| @end@ |
| @end@ |
| </ul> |
| @end@ |
| <h3><a href="#notifications">Notifications</a></h3> |
| <h3><a href="#textconventions">Textual Conventions</a></h3> |
| <h3><a href="#treeview">Tree-based view</a></h3> |
| </ul> |
| ## |
| ## Start of definitions |
| ## |
| @foreach $Current stuff Current Deprecated@ |
| <a name="objects_$Current" /> |
| @if "$Current" ne "Current"@ |
| @eval $namestring = "notcurrent"@ |
| <hr /> |
| <h1><font color="red">DEPRECATED OR OBSOLETE OR HISTORIC OBJECTS</font></h1> |
| <br> |
| <table class="deprecated"><tr><td> |
| @else@ |
| @eval $namestring = "current"@ |
| @end@ |
| <a name="scalar_$namestring" /> |
| <h2>SCALAR OBJECTS</h2> |
| <ul> |
| <table> |
| <tr><th>Name</th><th>Type</th><th>Access</th><th>OID</th><th>Description</th></tr> |
| @foreach $i scalar@ |
| @if ("$Current" eq "Current" && "$i.status" eq "Current") || ("$Current" ne "Current" && "$i.status" ne "Current")@ |
| <tr> |
| @calldefine NODE_INFO@ |
| </tr> |
| @end@ |
| @end@ |
| </table> |
| </ul> |
| |
| <h2>TABLE OBJECTS</h2> |
| @eval $dont_do_oids = 1@ |
| @foreach $t table@ |
| @if ("$Current" eq "Current" && "$t.status" eq "Current") || ("$Current" ne "Current" && "$t.status" ne "Current")@ |
| <a name="$t" /><h3>Table $t</h3> |
| <ul> |
| <table> |
| <tr><td class="label">Table Name</td><td>$t</td></tr> |
| <tr><td class="label">In MIB</td><td>$t.module</td></tr> |
| <tr><td class="label">Registered at OID</td><td>$t.objectID</td></tr> |
| <tr><td class="label">Table Description</td> |
| @eval $i ="$t"@ |
| @calldefine DO_DESCR@ |
| </tr> |
| @eval $tmpx = $t@ |
| @perleval $vars{'tmpx'} =~ s/Table/Entry/; 0;@ |
| @eval $i = "$tmpx"@ |
| <tr><td class="label"><a name="$tmpx" />Row Description</td> |
| @calldefine DO_DESCR@ |
| </tr> |
| </table> |
| |
| <h4>$t Indexes:</h4> |
| |
| <table> |
| <tr class="label"><th>Name</th><th>Type</th><th>Access</th><th>Description</th></tr> |
| @foreach $i index@ |
| <tr> |
| @calldefine NODE_INFO@ |
| </tr> |
| @end@ |
| </table> |
| |
| <h4>Other $t Columns:</h4> |
| <table> |
| <tr class="label"><th>Name</th><th>Type</th><th>Access</th><th>Description</th></tr> |
| @foreach $i nonindex@ |
| <tr> |
| @calldefine NODE_INFO@ |
| </tr> |
| @end@ |
| </table> |
| </ul> |
| @end@ |
| @end@ |
| @end@ |
| |
| <br> |
| </table> |
| <hr /> |
| <a name="notifications" /> |
| <h2>NOTIFICATIONS</h2> |
| <ul> |
| <p> |
| @foreach $i notifications@ |
| <a name="$i" /><h3>Notification: $i</h3> |
| |
| <table> |
| <tr><td class="label">Notification Name</td><td>$i</td></tr> |
| <tr><td class="label">In MIB</td><td>$i.module</td></tr> |
| <tr><td class="label">Registered at OID</td><td>$i.objectID</td></tr> |
| <tr><td class="label">Notification Description</td> |
| @calldefine DO_DESCR@ |
| </tr> |
| <tr> <td class="label">Mandatory<br />Objects</td><td> |
| <table> |
| @foreach $v varbinds@ |
| <tr><td><a href="#$v">$v</a></td></tr> |
| @end@ |
| </table></td></tr> |
| </table> |
| @end@ |
| </ul> |
| |
| |
| <br> |
| <hr /> |
| <a name="textconventions" /> |
| <h2>TEXTUAL CONVENTIONS</h2> |
| <ul> |
| <p> |
| These TEXTUAL-CONVENTIONS are used in other parts of the document |
| above. They are SNMP's way of defining a datatype that is used |
| repeatedly by other MIB objects. Any implementation implementing |
| objects that use one of these definitions must follow its DESCRIPTION |
| clause as well as the DESCRIPTION clause of the object itself. |
| </p> |
| @startperl@ |
| mib2c_output("<table>"); |
| mib2c_output("<tr class=\"label\"><th>Name</th><th>Type</th><th>Description</th></tr>\n"); |
| map { |
| my $desc = $SNMP::MIB{$TCS{$_}}{'TCDescription'}; |
| my ($s) = ($desc =~ /\n(\s+)/); |
| $desc =~ s/^$s//gm; |
| mib2c_output("<tr><td><a name=\"$_\">$_</td><td>"); |
| mib2c_output($SNMP::MIB{$TCS{$_}}{'type'}); |
| my @enumkeys = keys(%{$SNMP::MIB{$TCS{$_}}{'enums'}}); |
| if ($#enumkeys > -1) { |
| mib2c_output("<table class=\"enums\">"); |
| mib2c_output("<tr><th>Value</th><th>Label/Meaning</th></tr>"); |
| foreach $k (sort { $SNMP::MIB{$TCS{$_}}{'enums'}{$a} <=> |
| $SNMP::MIB{$TCS{$_}}{'enums'}{$b} } @enumkeys) { |
| mib2c_output("<tr><td>$SNMP::MIB{$TCS{$_}}{'enums'}{$k}</td><td>$k</td></tr>"); |
| } |
| mib2c_output("</table>"); |
| } |
| mib2c_output("</td><td><pre>$desc</pre></td></tr>\n"); |
| } keys(%TCS); |
| mib2c_output("</table>"); |
| 0; |
| @endperl@ |
| </ul> |
| |
| <a name="treeview" /> |
| <h2>TREE VIEW</h2> |
| @eval $mod = "$name.module"@ |
| <p>Tree view generated by running: <b>snmptranslate -Tp $mod::$name</b></p> |
| <pre> |
| @startperl@ |
| open(TREE,"snmptranslate -Tp $vars{mod}::$vars{name}|"); |
| while(<TREE>) { |
| s/(\+-- .*\s)(\w+)(\(\d+\))$/$1<a href="#$2">$2<\/a>$3/; |
| s/\+--(\w+)/+--<a href="#$1">$1<\/a>/; |
| s/Textual Convention: (\w+)/Textual Convention: <a href="#$1">$1<\/a>/; |
| mib2c_output($_); |
| } |
| close(TREE); |
| return 0; |
| @endperl@ |
| </pre> |