#!tclnm
#
# dumpmib, 22feb93 phk@data.fls.dk
#
# This program will dump a selected part of the MIB for a device,
# including descriptions & references
#
# USAGE:	dumpmib <host> [ <oid>|mib|private|enterprises ]

if {$argc < 2} {
   puts stderr "\nUsage:\n\t[lindex $argv 0] <host> \[<oid>|mib|private|enterprises \]"
   puts stderr "\nDumps part or all of the MIB for <host>, default is 'mib'"
   puts stderr "\tall -- .iso.org.dod"
   puts stderr "\tmib -- .iso.org.dod.internet.mgmt.mib-2"
   puts stderr "\tprivate -- .iso.org.dod.internet.private"
   puts stderr "\tenterprises -- .iso.org.dod.internet.private.enterprises "
   exit 0
} else {
   set host [lindex $argv 1]
}

if {$argc < 3 } {
   set target .iso.org
} else {
   case [lindex $argv 2] in {
   all { set target .iso.org.dod }
   mib { set target .iso.org.dod.internet.mgmt.mib-2 }
   private { set target .iso.org.dod.internet.private }
   enterprises { set target .iso.org.dod.internet.private.enterprises }
   default { set target [lindex $argv 2] }
   }
}


set s0 [snmp open $host ]
set op ""
#snmp default $s0 mib ""

snmp getbulk $s0 { $target } x { 
    #puts stdout ">>> <$x>"
    set oid [lindex $x 0]
    set typ [lindex $x 1]
    set val [lindex $x 2]
    regsub -all "\n" [lindex $x 2] "\n\t\t" val
    set l [mib oid $oid]
    set p [lindex $l 0]
    if {$p == $op} {
	puts stdout "\tvalue\[[lindex $l 1]\] =\t$val"
	continue;
    }
    set op $p
    puts stdout ""
    puts stdout "$oid"
    puts stdout "[lindex $l 0]"
    puts stdout "\ttype =\t$typ"
    if {[catch "set aa([lindex $l 0])"]} {
	set desc [mib desc $oid]
	regsub -all "\n" $desc "\n\t\t" desc
	if {$desc!=""} { puts stdout "\tdesc = \t\"$desc\"" }
	set ref [mib ref $oid]
	regsub -all "\n" $ref "\n\t\t" ref
	if {$ref!=""} { puts stdout "\tref = \t\"$ref\"" }
	set aa([lindex $l 0]) 1
	}
    puts stdout "\tvalue\[[lindex $l 1]\] =\t$val"
    flush stdout
    }

