|
Packit |
fcad23 |
#!/usr/bin/perl
|
|
Packit |
fcad23 |
#!/usr/bin/perl -w
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
require 5;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# attempt to determine if they have the proper modules installed.
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# SNMP
|
|
Packit |
fcad23 |
my $havesnmp = eval {require SNMP;};
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# the Tk packages
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
my $havetk = eval {require Tk;
|
|
Packit |
fcad23 |
require Tk::Table;
|
|
Packit |
fcad23 |
require Tk::HList;
|
|
Packit |
fcad23 |
require Tk::FileSelect;
|
|
Packit |
fcad23 |
require Tk::Dialog;};
|
|
Packit |
fcad23 |
if (!$havesnmp) {
|
|
Packit |
fcad23 |
print "
|
|
Packit |
fcad23 |
ERROR: You don't have the SNMP perl module installed. Please obtain this by
|
|
Packit |
fcad23 |
getting the latest source release of the net-snmp toolkit from
|
|
Packit |
fcad23 |
http://www.net-snmp.org/download/ . The perl module is contained in
|
|
Packit |
fcad23 |
the perl/SNMP directory. See the INSTALL file there for
|
|
Packit |
fcad23 |
instructions.
|
|
Packit |
fcad23 |
";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (!$havetk) {
|
|
Packit |
fcad23 |
print "
|
|
Packit |
fcad23 |
ERROR: You don't have the Tk module installed. You should be able to
|
|
Packit |
fcad23 |
install this by running (as root):
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
perl -MCPAN -e 'install Tk'
|
|
Packit |
fcad23 |
";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (!$havetk || !$havesnmp) {
|
|
Packit |
fcad23 |
print "\n";
|
|
Packit |
fcad23 |
exit;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($havetk) {
|
|
Packit |
fcad23 |
# Tk doesn't seem to like require so we force use here.
|
|
Packit |
fcad23 |
eval {import Tk;
|
|
Packit |
fcad23 |
import Tk::Table;
|
|
Packit |
fcad23 |
import Tk::HList;
|
|
Packit |
fcad23 |
import Tk::FileSelect;
|
|
Packit |
fcad23 |
import Tk::Dialog;
|
|
Packit |
fcad23 |
import SNMP;};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
use Getopt::Std;
|
|
Packit |
fcad23 |
use Data::Dumper;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$host = 'localhost';
|
|
Packit |
fcad23 |
$OID = '.1.3.6.1';
|
|
Packit |
fcad23 |
$opts{'f'} = $ENV{'HOME'} . "/.snmp/tkmibrc";
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
getopts("hp:v:a:A:x:X:n:u:l:r:t:o:c:Cf:", \%opts);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# default session options
|
|
Packit |
fcad23 |
print "setting opts\n";
|
|
Packit |
fcad23 |
%session_opts = (
|
|
Packit |
fcad23 |
'Community' => "public",
|
|
Packit |
fcad23 |
'RemotePort' => 161,
|
|
Packit |
fcad23 |
'Timeout' => 5000000,
|
|
Packit |
fcad23 |
'Retries' => 5,
|
|
Packit |
fcad23 |
'Version' => 1,
|
|
Packit |
fcad23 |
'AuthProto' => 'MD5',
|
|
Packit |
fcad23 |
'PrivProto' => 'DES',
|
|
Packit |
fcad23 |
'AuthPass' => '',
|
|
Packit |
fcad23 |
'PrivPass' => '',
|
|
Packit |
fcad23 |
'Context' => '',
|
|
Packit |
fcad23 |
'SecName' => 'initial',
|
|
Packit |
fcad23 |
'SecLevel' => 'authNoPriv',
|
|
Packit |
fcad23 |
);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub usage {
|
|
Packit |
fcad23 |
print "
|
|
Packit |
fcad23 |
tkmib [-C] [-o OID] [SNMPCMD arguments] [host]
|
|
Packit |
fcad23 |
-f CONFIG_FILE load CONFIG_FILE after starting up. (default: ~/.snmp/tkmibrc)
|
|
Packit |
fcad23 |
(use -f /dev/null to not read one).
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
See the snmpcmd manual page for related SNMPCMD arguments. (Not all
|
|
Packit |
fcad23 |
options are currently supported.)
|
|
Packit |
fcad23 |
";
|
|
Packit |
fcad23 |
exit();
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
usage() if ($opts{'h'});
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# initialize defaults, may be overridden by config file below
|
|
Packit |
fcad23 |
@displayInfo=qw(type access status units hint moduleID enums indexes);
|
|
Packit |
fcad23 |
@saveoptions = ('displayoidas', 'writecolor', 'graphtime', 'graphdelta');
|
|
Packit |
fcad23 |
$displayoidas='full';
|
|
Packit |
fcad23 |
$writecolor = "blue";
|
|
Packit |
fcad23 |
$graphtime=5;
|
|
Packit |
fcad23 |
$graphdelta=1;
|
|
Packit |
fcad23 |
foreach $i (@displayInfo) {
|
|
Packit |
fcad23 |
$displayInfoStates{$i} = 1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# source config file
|
|
Packit |
fcad23 |
do $opts{'f'} if ($opts{'f'} && -f $opts{'f'});
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$session_opts{'UseLongNames'} => 1;
|
|
Packit |
fcad23 |
$session_opts{'RemotePort'} = $opts{'p'} if ($opts{'p'});
|
|
Packit |
fcad23 |
$session_opts{'Community'} = $opts{'c'} if ($opts{'c'});
|
|
Packit |
fcad23 |
$session_opts{'Version'} = $opts{'v'} if ($opts{'v'});
|
|
Packit |
fcad23 |
$session_opts{'AuthProto'} = $opts{'a'} if ($opts{'a'});
|
|
Packit |
fcad23 |
$session_opts{'AuthPass'} = $opts{'A'} if ($opts{'A'});
|
|
Packit |
fcad23 |
$session_opts{'PrivProto'} = $opts{'x'} if ($opts{'x'});
|
|
Packit |
fcad23 |
$session_opts{'PrivPass'} = $opts{'X'} if ($opts{'X'});
|
|
Packit |
fcad23 |
$session_opts{'Context'} = $opts{'n'} if ($opts{'n'});
|
|
Packit |
fcad23 |
$session_opts{'SecName'} = $opts{'u'} if ($opts{'u'});
|
|
Packit |
fcad23 |
$session_opts{'SecLevel'} = $opts{'l'} if ($opts{'l'});
|
|
Packit |
fcad23 |
$session_opts{'Retries'} = $opts{'r'} if ($opts{'r'});
|
|
Packit |
fcad23 |
$session_opts{'Timeout'} = $opts{'t'} if ($opts{'t'});
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$host = shift if ($#ARGV > -1);
|
|
Packit |
fcad23 |
$session_opts{'Community'} = shift if ($#ARGV > -1);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
@graphcolors=qw(blue red green yellow purple);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# initialize SNMP module
|
|
Packit |
fcad23 |
$SNMP::save_descriptions=1;
|
|
Packit |
fcad23 |
$SNMP::use_long_names=1;
|
|
Packit |
fcad23 |
$SNMP::use_enums=1;
|
|
Packit |
fcad23 |
$SNMP::verbose = 1;
|
|
Packit |
fcad23 |
my $tmpbd = 1;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$top = MainWindow->new();
|
|
Packit |
fcad23 |
$top->title("tkmib");
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#Menus
|
|
Packit |
fcad23 |
$MenuFrame = $top->Frame(-relief => "raised",-borderwidth => 2);
|
|
Packit |
fcad23 |
$MenuFrame->pack(-fill => "x",-expand => 1);
|
|
Packit |
fcad23 |
$FileMenuBut = $MenuFrame->Menubutton(-pady => $tmpbd, -padx => $tmpbd, -text => "File",
|
|
Packit |
fcad23 |
-menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
# [Button => "Save Output", -command => [\&saveOutput]],
|
|
Packit |
fcad23 |
[Button => "Quit", -command => [\&exit]]
|
|
Packit |
fcad23 |
]);
|
|
Packit |
fcad23 |
$FileMenuBut->pack(-side => 'left');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$MibMenuBut = $MenuFrame->Menubutton(-pady => $tmpbd, -padx => $tmpbd, -text => "Mib",
|
|
Packit |
fcad23 |
-menuitems =>
|
|
Packit |
fcad23 |
[[Button => "Find a mib node",
|
|
Packit |
fcad23 |
-command => sub { my $var;
|
|
Packit |
fcad23 |
entryBox("Find a Mib Node",
|
|
Packit |
fcad23 |
"Enter a mib node name to search for:",
|
|
Packit |
fcad23 |
\$var, \&findANode );}],
|
|
Packit |
fcad23 |
[Button => "Load a New Mib File", -command => [\&loadNewMibFile]],
|
|
Packit |
fcad23 |
[Button => "Load a New Mib Module",
|
|
Packit |
fcad23 |
-command => sub { my $var;
|
|
Packit |
fcad23 |
entryBox("Load a Module",
|
|
Packit |
fcad23 |
"Enter a SNMP MIB module name to load:",
|
|
Packit |
fcad23 |
\$var, \&loadIt);}]
|
|
Packit |
fcad23 |
]);
|
|
Packit |
fcad23 |
$MibMenuBut->pack(-side => 'left');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$OptMenuBut = $MenuFrame->Menubutton(-pady => $tmpbd, -padx => $tmpbd, -text => "Options",
|
|
Packit |
fcad23 |
-menuitems =>
|
|
Packit |
fcad23 |
[[Cascade => "~Display", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Cascade => "~MIB Information"],
|
|
Packit |
fcad23 |
[Cascade => "~OID Display", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Radiobutton => 'full', -variable => \$displayoidas],
|
|
Packit |
fcad23 |
[Radiobutton => 'numeric', -variable => \$displayoidas],
|
|
Packit |
fcad23 |
[Radiobutton => 'short', -variable => \$displayoidas],
|
|
Packit |
fcad23 |
[Radiobutton => 'module', -variable => \$displayoidas]
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
[Button => "Writable Color",
|
|
Packit |
fcad23 |
-command => [\&entryBox,"Writable Color",
|
|
Packit |
fcad23 |
"Color for writable objects:",
|
|
Packit |
fcad23 |
\$writecolor]]
|
|
Packit |
fcad23 |
]],
|
|
Packit |
fcad23 |
[Cascade => "Use SNMP Version", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Radiobutton => '1', -variable => \$session_opts{'Version'}],
|
|
Packit |
fcad23 |
[Radiobutton => '2c', -variable => \$session_opts{'Version'}],
|
|
Packit |
fcad23 |
[Radiobutton => '3', -variable => \$session_opts{'Version'}]
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
], # ends version number specification
|
|
Packit |
fcad23 |
[Cascade => "SNMPv1/2c options", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Button => "Community Name",
|
|
Packit |
fcad23 |
-command => [\&entryBox,"Community Name", "Community name to use:",
|
|
Packit |
fcad23 |
\$session_opts{'Community'}]]
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
[Cascade => "SNMP3 options", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Button => "Security Name",
|
|
Packit |
fcad23 |
-command => [\&entryBox,"Security Name", "Security Name to use:",
|
|
Packit |
fcad23 |
\$session_opts{'SecName'}]],
|
|
Packit |
fcad23 |
[Cascade => "Security Level", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Radiobutton => 'noAuthNoPriv',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'SecLevel'}],
|
|
Packit |
fcad23 |
[Radiobutton => 'authNoPriv',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'SecLevel'}],
|
|
Packit |
fcad23 |
[Radiobutton => 'authPriv',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'SecLevel'}]
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
[Button => "Authentication Passphrase",
|
|
Packit |
fcad23 |
-command => [\&entryBox,"Authentication Passphrase",
|
|
Packit |
fcad23 |
"Authentication Passphrase to use:",
|
|
Packit |
fcad23 |
\$session_opts{'AuthPass'}]],
|
|
Packit |
fcad23 |
[Cascade => "Authentication Type", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Radiobutton => 'MD5',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'AuthProto'}],
|
|
Packit |
fcad23 |
[Radiobutton => 'SHA',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'AuthProto'}],
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
[Button => "Privacy Passphrase",
|
|
Packit |
fcad23 |
-command => [\&entryBox,"Privacy Passphrase",
|
|
Packit |
fcad23 |
"Privacy Passphrase to use:",
|
|
Packit |
fcad23 |
\$session_opts{'PrivPass'}]],
|
|
Packit |
fcad23 |
[Cascade => "Privacy Type", -menuitems =>
|
|
Packit |
fcad23 |
[
|
|
Packit |
fcad23 |
[Radiobutton => 'DES',
|
|
Packit |
fcad23 |
-variable => \$session_opts{'PrivProto'}],
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
]
|
|
Packit |
fcad23 |
],
|
|
Packit |
fcad23 |
[Button => "Time between graph polls",
|
|
Packit |
fcad23 |
-command => sub { entryBox("graph polls", "Time between graph polls:",
|
|
Packit |
fcad23 |
\$graphtime);}],
|
|
Packit |
fcad23 |
[Button => "Port number",
|
|
Packit |
fcad23 |
-command => sub { entryBox("Port Number", "SNMP Port number to use:",
|
|
Packit |
fcad23 |
\$session_opts{'RemotePort'});}],
|
|
Packit |
fcad23 |
[Button => "TimeOut",
|
|
Packit |
fcad23 |
-command => sub { entryBox("Time Out", "Timeout for SNMP requests:",
|
|
Packit |
fcad23 |
\$session_opts{'Timeout'});}],
|
|
Packit |
fcad23 |
[Button => "Retries",
|
|
Packit |
fcad23 |
-command => sub { entryBox("Retries",
|
|
Packit |
fcad23 |
"Number of Times to Retransmit Requests:",
|
|
Packit |
fcad23 |
\$session_opts{'Retries'});}],
|
|
Packit |
fcad23 |
[Button => "Save Options",
|
|
Packit |
fcad23 |
-command => \&save_options]
|
|
Packit |
fcad23 |
])->pack(-side => 'left');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$tmp = $OptMenuBut->cget(-menu);
|
|
Packit |
fcad23 |
$OptMenuWidgets = $tmp->entrycget("Display", -menu);
|
|
Packit |
fcad23 |
$OptMenuWidgets = $OptMenuWidgets->entrycget("MIB Information", -menu);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$hlist=$top->Scrolled(qw(HList -itemtype imagetext -browsecmd main::showInfo
|
|
Packit |
fcad23 |
-command main::showChildren -width 80 -height 15));
|
|
Packit |
fcad23 |
$hlist->pack(-side => 'top', -expand => 1, -fill => 'both');
|
|
Packit |
fcad23 |
my $sFrame = $top->Frame(-relief => 'raised', -borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
$sFrame->pack(-side => 'top', -fill => 'x');
|
|
Packit |
fcad23 |
$sFrame->Label(-pady => $tmpbd, -padx => $tmpbd, -text => 'OID: ', -relief => 'raised', -borderwidth => $tmpbd)
|
|
Packit |
fcad23 |
->pack(-side => 'left');
|
|
Packit |
fcad23 |
$mibOID = $sFrame->Entry(-textvariable => \$OID, -relief => 'flat', -width => 40);
|
|
Packit |
fcad23 |
$mibOID->pack(-side => 'left');
|
|
Packit |
fcad23 |
$mibTextOID = $sFrame->Label(-pady => $tmpbd, -padx => $tmpbd, -text => '');
|
|
Packit |
fcad23 |
$mibTextOID->pack(-side => 'right');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$dispFrame=$top->Frame(-relief => 'raised', -borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
$dispFrame->pack(-side => 'top', -fill =>'x');
|
|
Packit |
fcad23 |
for($i=0;$i<= $#displayInfo;$i++) {
|
|
Packit |
fcad23 |
createRow($i) if ($displayInfoStates{$displayInfo[$i]});
|
|
Packit |
fcad23 |
optionalWidget($i,$OptMenuWidgets, \$displayInfoStates{$displayInfo[$i]});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$descrFrame=$top->Frame(-relief => 'raised', -borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
$descrFrame->pack(-side => 'top', -fill =>'x');
|
|
Packit |
fcad23 |
$descrFrame->Label(-pady => $tmpbd, -padx => $tmpbd, -text => 'Description:', -anchor => 'w')->pack(-side => 'top',
|
|
Packit |
fcad23 |
-fill => 'x');
|
|
Packit |
fcad23 |
$descr = $descrFrame->Scrolled(qw(Text -width 80 -height 4));
|
|
Packit |
fcad23 |
$descr->pack(-side => 'top', -fill => 'x');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$bFrame = $top->Frame(-relief => 'raised', -borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
$bFrame->pack(-side => 'top', -fill => 'x');
|
|
Packit |
fcad23 |
$hostEntry = $bFrame->Entry(-textvariable => \$host, -width => 12);
|
|
Packit |
fcad23 |
$hostEntry->pack(-side => 'left');
|
|
Packit |
fcad23 |
$bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'graph', -command => \&snmpgraph)->pack(-side => 'right');
|
|
Packit |
fcad23 |
$tablebutton = $bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'table', -command => \&snmptable);
|
|
Packit |
fcad23 |
$tablebutton->pack(-side => 'right');
|
|
Packit |
fcad23 |
$bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'walk', -command => \&snmpwalk)->pack(-side => 'right');
|
|
Packit |
fcad23 |
$bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'getnext', -command => \&snmpgetnext)->pack(-side => 'right');
|
|
Packit |
fcad23 |
$bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'get', -command => \&snmpget)->pack(-side => 'right');
|
|
Packit |
fcad23 |
$bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'set', -command => [\&snmpsetbegin, 'OID'])->pack(-side => 'right');
|
|
Packit |
fcad23 |
$stopBut = $bFrame->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'stop', -command => sub { stop(1) },
|
|
Packit |
fcad23 |
-state => 'disabled');
|
|
Packit |
fcad23 |
$stopBut->pack(-side => 'right');
|
|
Packit |
fcad23 |
$oFrame = $top->Frame(-borderwidth => $tmpbd, -relief => 'raised');
|
|
Packit |
fcad23 |
$oFrame->pack(-side => 'top', -fill => 'both');
|
|
Packit |
fcad23 |
$output = $oFrame->Scrolled(qw(Text -width 80 -height 14));
|
|
Packit |
fcad23 |
$output->pack(-side => 'top', -fill => 'both', -expand => 1);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$tmpFrame = $top->Frame(-relief => 'raised', -borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
$tmpFrame->pack(-side => 'top', -fill => 'x');
|
|
Packit |
fcad23 |
$tmpFrame->Label(-pady => $tmpbd, -padx => $tmpbd, -text => "Status: ", -anchor => 'w')
|
|
Packit |
fcad23 |
# -relief => 'raised', -borderwidth => $tmpbd)
|
|
Packit |
fcad23 |
->pack(-side => 'left');
|
|
Packit |
fcad23 |
$status = $tmpFrame->Label(-pady => $tmpbd, -padx => $tmpbd, -anchor => 'w');
|
|
Packit |
fcad23 |
$status->pack(-side => 'left', -fill => 'x');
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# initialize the browser
|
|
Packit |
fcad23 |
foreach $i (qw(.1 .1.3 .1.3.6 .1.3.6.1)) {
|
|
Packit |
fcad23 |
addMibOID($i);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
showChildren("$OID");
|
|
Packit |
fcad23 |
if (defined($opts{'o'})) {
|
|
Packit |
fcad23 |
findANode($opts{'o'});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
MainLoop();
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub insertresult {
|
|
Packit |
fcad23 |
my $oid = shift;
|
|
Packit |
fcad23 |
my $val = shift;
|
|
Packit |
fcad23 |
$oid = $OID if ($oid eq "OID");
|
|
Packit |
fcad23 |
$output->insert('end', $oid, "oid:$oid");
|
|
Packit |
fcad23 |
$output->tagBind("oid:$oid", '<1>', [sub{shift;
|
|
Packit |
fcad23 |
my $oid = shift;
|
|
Packit |
fcad23 |
findANode($oid);
|
|
Packit |
fcad23 |
my $tag = SNMP::translateObj($oid);
|
|
Packit |
fcad23 |
showInfo($tag);},$oid]);
|
|
Packit |
fcad23 |
$output->insert('end', " = ");
|
|
Packit |
fcad23 |
my $mib = $SNMP::MIB{format_oid("$oid",'numeric')};
|
|
Packit |
fcad23 |
$output->insert('end', $val, "value:$oid");
|
|
Packit |
fcad23 |
if ($mib->{'access'} =~ /(Write|Create)/) {
|
|
Packit |
fcad23 |
$output->tagConfigure("value:$oid", -foreground => $writecolor);
|
|
Packit |
fcad23 |
$output->tagBind("value:$oid", '<1>', [sub{shift;
|
|
Packit |
fcad23 |
my $oid = shift;
|
|
Packit |
fcad23 |
my $value = shift;
|
|
Packit |
fcad23 |
snmpsetmaybebegin($oid, $value);
|
|
Packit |
fcad23 |
findANode($oid);
|
|
Packit |
fcad23 |
my $tag = SNMP::translateObj($oid);
|
|
Packit |
fcad23 |
showInfo($tag);},format_oid($oid,'full'), $val]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$output->insert('end', "\n");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub insertvar {
|
|
Packit |
fcad23 |
my $var = shift;
|
|
Packit |
fcad23 |
my $name = get_oid($var);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
insertresult($name,SNMP::Varbind::val($var));
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpsetup {
|
|
Packit |
fcad23 |
my $oid = $OID;
|
|
Packit |
fcad23 |
my $tag = SNMP::translateObj($oid);
|
|
Packit |
fcad23 |
my $sess = new SNMP::Session(DestHost => $host, %session_opts);
|
|
Packit |
fcad23 |
my $var = new SNMP::Varbind([$oid]);
|
|
Packit |
fcad23 |
if (!defined($var)) {
|
|
Packit |
fcad23 |
print "ack: $@ $SNMP::ErrorStr $!\n";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
stop(0);
|
|
Packit |
fcad23 |
initText();
|
|
Packit |
fcad23 |
$oid = "." . $oid if ($oid !~ /^\./);
|
|
Packit |
fcad23 |
return ($oid, $sess, $var);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub initText {
|
|
Packit |
fcad23 |
if (ref($output) eq "Tk::Frame" && defined($$output{'_#text'})) {
|
|
Packit |
fcad23 |
$output->delete('0.0','end');
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$output->destroy();
|
|
Packit |
fcad23 |
$output = $oFrame->Scrolled(qw(Text -width 80 -height 14));
|
|
Packit |
fcad23 |
$output->pack(-side => 'top', -fill => 'both', -expand => 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub initTable {
|
|
Packit |
fcad23 |
$output->destroy();
|
|
Packit |
fcad23 |
$oFrame->packPropagate(0);
|
|
Packit |
fcad23 |
$output = $oFrame->Table(-columns => shift, -width => 80, -height => 14,
|
|
Packit |
fcad23 |
-fixedrows => 2, -fixedcolumns => 1);
|
|
Packit |
fcad23 |
$output->pack(-side => 'top', -fill => 'both', -expand => 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub initCanvas {
|
|
Packit |
fcad23 |
$output->destroy();
|
|
Packit |
fcad23 |
$oFrame->packPropagate(0);
|
|
Packit |
fcad23 |
$output = $oFrame->Scrolled(qw(Canvas -width 80c -height 14c));
|
|
Packit |
fcad23 |
$output->pack(-side => 'top', -fill => 'both', -expand => 1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpget {
|
|
Packit |
fcad23 |
(my $oid, my $sess, my $var) = snmpsetup();
|
|
Packit |
fcad23 |
$status->configure(-text => "getting: $host $community $oid");
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
my $val = $sess->get($var);
|
|
Packit |
fcad23 |
if ($sess->{ErrorStr}) {
|
|
Packit |
fcad23 |
$status->configure(-text => $sess->{ErrorStr});
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
insertvar($var);
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpsetbegin {
|
|
Packit |
fcad23 |
my $startoid = shift;
|
|
Packit |
fcad23 |
my $startval = shift;
|
|
Packit |
fcad23 |
my $setwin = MainWindow->new();
|
|
Packit |
fcad23 |
$setwin->title("SNMP set");
|
|
Packit |
fcad23 |
my $varswin = $setwin->Frame(-relief => "raised",-borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
my $vars = new SNMP::VarList;
|
|
Packit |
fcad23 |
$varswin->pack(-side => 'top');
|
|
Packit |
fcad23 |
my $buttons = $setwin->Frame(-relief => "raised")->pack(-side => 'top', -fill => "x",-expand => 1);
|
|
Packit |
fcad23 |
$buttons->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'Add a varbind', -command => [\&snmpsetbegin_addvar, $vars, $varswin, 'OID'])->pack(-side => 'left', -fill => "x",-expand => 1);
|
|
Packit |
fcad23 |
$buttons->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'perform set', -command => [\&snmpsetbegin_ok, $vars, $setwin, $varswin])->pack(-side => 'left');
|
|
Packit |
fcad23 |
$buttons->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'Cancel', -command => [sub { my $widget = shift; $varswin = shift; if ($setmain == $varswin) { $setmain = undef; } $widget->destroy();}, $setwin, $varswin])->pack(-side => 'right');
|
|
Packit |
fcad23 |
if ($startoid ne "") {
|
|
Packit |
fcad23 |
snmpsetbegin_addvar($vars, $varswin, $startoid, $startval);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if (!$setmain) {
|
|
Packit |
fcad23 |
$setmain = $varswin;
|
|
Packit |
fcad23 |
$setvars = $vars;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub make_enum_button {
|
|
Packit |
fcad23 |
my $win = shift;
|
|
Packit |
fcad23 |
my $var = shift;
|
|
Packit |
fcad23 |
my @objs;
|
|
Packit |
fcad23 |
foreach my $i (@_) {
|
|
Packit |
fcad23 |
push @objs,[Radiobutton => $i, -variable => $var];
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return $win->Menubutton(-pady => $tmpbd, -padx => $tmpbd, -textvariable => $var,
|
|
Packit |
fcad23 |
-relief => raised,
|
|
Packit |
fcad23 |
-menuitems => \@objs);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpsetmaybebegin {
|
|
Packit |
fcad23 |
my ($oid, $val) = @_;
|
|
Packit |
fcad23 |
if ($setmain) {
|
|
Packit |
fcad23 |
snmpsetbegin_addvar($setvars, $setmain, $oid, $val);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
snmpsetbegin($oid, $val);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpsetbegin_addvar {
|
|
Packit |
fcad23 |
my ($vars, $place, $oid, $val) = @_;
|
|
Packit |
fcad23 |
$oid = $OID if ($oid eq "OID");
|
|
Packit |
fcad23 |
my $mib = $SNMP::MIB{format_oid("$oid",'numeric')};
|
|
Packit |
fcad23 |
my $var = new SNMP::Varbind([$oid, '', $val, $mib->{'type'} || 'INTEGER']);
|
|
Packit |
fcad23 |
push @$vars,$var;
|
|
Packit |
fcad23 |
my $frame = $place->Frame();
|
|
Packit |
fcad23 |
$frame->Entry(-textvariable => \$var->[0], -width => 20)->pack(-side => 'left');
|
|
Packit |
fcad23 |
make_enum_button($frame, \$var->[3], qw(OBJECTID OCTETSTR INTEGER NETADDR IPADDR COUNTER COUNTER64 GAUGE UINTEGER TICKS OPAQUE NULL))->pack(-side => 'left');
|
|
Packit |
fcad23 |
if (ref($mib->{'enums'}) eq HASH && scalar(keys(%{$mib->{'enums'}})) > 0) {
|
|
Packit |
fcad23 |
make_enum_button($frame, \$var->[2], keys(%{$mib->{'enums'}}))->pack(-side => 'left');
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$frame->Entry(-textvariable => \$var->[2])->pack(-side => 'left');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$frame->pack(-expand => 1, -fill => 'x');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpsetbegin_ok {
|
|
Packit |
fcad23 |
my ($vars, $win, $frame) = @_;
|
|
Packit |
fcad23 |
snmpset($vars);
|
|
Packit |
fcad23 |
$setmain = undef if ($setmain == $frame);
|
|
Packit |
fcad23 |
$win->destroy();
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpset {
|
|
Packit |
fcad23 |
my $vars = shift;
|
|
Packit |
fcad23 |
(my $oid, my $sess, my $var) = snmpsetup();
|
|
Packit |
fcad23 |
$status->configure(-text => "setting: $host -> " . Dumper($vars) . "\n");
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
my $val = $sess->set($vars);
|
|
Packit |
fcad23 |
if ($sess->{ErrorStr}) {
|
|
Packit |
fcad23 |
$output->insert('end', "Set failed.\nReason: $sess->{ErrorStr}");
|
|
Packit |
fcad23 |
$status->configure(-text => $sess->{ErrorStr});
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
foreach my $i (@$vars) {
|
|
Packit |
fcad23 |
insertvar($i);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpgetnext {
|
|
Packit |
fcad23 |
(my $oid, my $sess, my $var) = snmpsetup();
|
|
Packit |
fcad23 |
$status->configure(-text => "get next: $host $community $oid");
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
my $val = $sess->getnext($var);
|
|
Packit |
fcad23 |
if ($sess->{ErrorStr}) {
|
|
Packit |
fcad23 |
$status->configure(-text => $sess->{ErrorStr});
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
insertvar($var);
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpwalk {
|
|
Packit |
fcad23 |
(my $oid, my $sess, my $var) = snmpsetup();
|
|
Packit |
fcad23 |
$status->configure(-text => "walking: $host $community $oid");
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
while (!$sess->{ErrorStr} && !$stopit) {
|
|
Packit |
fcad23 |
my $val = $sess->getnext($var);
|
|
Packit |
fcad23 |
last if (!defined($var->tag) ||
|
|
Packit |
fcad23 |
$sess->{ErrorStr} ||
|
|
Packit |
fcad23 |
$val eq "ENDOFMIBVIEW" ||
|
|
Packit |
fcad23 |
!is_in_subtree($oid, $var->tag . "." . $var->iid));
|
|
Packit |
fcad23 |
insertvar($var);
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($sess->{ErrorStr}) {
|
|
Packit |
fcad23 |
$status->configure(-text => $sess->{ErrorStr});
|
|
Packit |
fcad23 |
$output->insert('end',"$sess->{ErrorStr} ($sess->{ErrorNum})\n");
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
stop(1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmptable {
|
|
Packit |
fcad23 |
(my $oid, my $sess, my $var) = snmpsetup();
|
|
Packit |
fcad23 |
$status->configure(-text => "collecting data: $host $community $oid");
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
my (%tb, @tags, @index, %tboids);
|
|
Packit |
fcad23 |
while (!$sess->{ErrorStr} && !$stopit) {
|
|
Packit |
fcad23 |
my $val = $sess->getnext($var);
|
|
Packit |
fcad23 |
last if (!defined($var->tag) ||
|
|
Packit |
fcad23 |
$sess->{ErrorStr} ||
|
|
Packit |
fcad23 |
$val eq "ENDOFMIBVIEW" ||
|
|
Packit |
fcad23 |
!is_in_subtree($oid, $var->tag . "." . $var->iid));
|
|
Packit |
fcad23 |
$newoid = SNMP::Varbind::tag($var).".".SNMP::Varbind::iid($var);
|
|
Packit |
fcad23 |
insertvar($var);
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
$newoid =~ /([^\.]+)\.([0-9\.]+)$/;
|
|
Packit |
fcad23 |
if (!grep(/$1/,@tags)) {
|
|
Packit |
fcad23 |
push @tags,$1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if (!grep(/$2/,@index)) {
|
|
Packit |
fcad23 |
push @index,$2;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$tb{$2}{$1} = $var->val;
|
|
Packit |
fcad23 |
# $tboids{$2}{$1} = $var->tag;
|
|
Packit |
fcad23 |
$tboids{$2}{$1} = $newoid;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
initTable($#tags+1);
|
|
Packit |
fcad23 |
for(my $k=0;$k <= $#tags;$k++) {
|
|
Packit |
fcad23 |
$output->put(1,$k+2,$tags[$k]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$output->put(1,1,"Index");
|
|
Packit |
fcad23 |
for(my $i=0;$i <= $#index;$i++) {
|
|
Packit |
fcad23 |
$output->put($i+2,1,$index[$i]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
for(my $i=0;$i <= $#index; $i++) {
|
|
Packit |
fcad23 |
for(my $k=0;$k <= $#tags;$k++) {
|
|
Packit |
fcad23 |
my $mib = $SNMP::MIB{format_oid("$tboids{$index[$i]}{$tags[$k]}",'numeric')};
|
|
Packit |
fcad23 |
if ($mib->{'access'} =~ /(Write|Create)/) {
|
|
Packit |
fcad23 |
$output->put($i+2,$k+2,$output->Button(-fg => $writecolor, -pady => $tmpbd, -padx => $tmpbd, -text => $tb{$index[$i]}{$tags[$k]}, -command => [\&snmpsetmaybebegin, $tboids{$index[$i]}{$tags[$k]}, $tb{$index[$i]}{$tags[$k]}], -padx => 0, -pady => 0));
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$output->put($i+2,$k+2,$tb{$index[$i]}{$tags[$k]});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
stop(1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub snmpgraph {
|
|
Packit |
fcad23 |
($graphoid, $graphsess, my $graphvar) = snmpsetup();
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
%graphtb = ();
|
|
Packit |
fcad23 |
@graphvars = ();
|
|
Packit |
fcad23 |
initCanvas();
|
|
Packit |
fcad23 |
$gcount=0;
|
|
Packit |
fcad23 |
$max=-1;
|
|
Packit |
fcad23 |
$min=2**32-1;
|
|
Packit |
fcad23 |
updateGraph();
|
|
Packit |
fcad23 |
$output->repeat($graphtime*1000, \&updateGraph);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub updateGraph() {
|
|
Packit |
fcad23 |
$status->configure(-text => "collecting data: $host $community $graphoid");
|
|
Packit |
fcad23 |
my $oid = $graphoid;
|
|
Packit |
fcad23 |
my $tag = SNMP::translateObj($graphoid,0);
|
|
Packit |
fcad23 |
my $var = new SNMP::Varbind([$oid]);
|
|
Packit |
fcad23 |
$graphsess->{ErrorStr} = "";
|
|
Packit |
fcad23 |
while (!$graphsess->{ErrorStr} && !$stopit) {
|
|
Packit |
fcad23 |
my $val = $graphsess->getnext($var);
|
|
Packit |
fcad23 |
if ($#graphvars == -1 && SNMP::translateObj($var->tag) !~ /^$oid/) {
|
|
Packit |
fcad23 |
# if an exact oid, do a get instead.
|
|
Packit |
fcad23 |
$var = new SNMP::Varbind([$oid]);
|
|
Packit |
fcad23 |
$val = $graphsess->get($var);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($graphsess->{ErrorStr} ||
|
|
Packit |
fcad23 |
!defined($var->tag) ||
|
|
Packit |
fcad23 |
SNMP::translateObj($var->tag) !~ /^$oid/) {
|
|
Packit |
fcad23 |
last;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
my $newoid = SNMP::translateObj(SNMP::Varbind::tag($var).".".SNMP::Varbind::iid($var));
|
|
Packit |
fcad23 |
$top->update();
|
|
Packit |
fcad23 |
$newoid =~ /$oid\.([0-9\.]+)$/;
|
|
Packit |
fcad23 |
if (defined($1)) {
|
|
Packit |
fcad23 |
if (!grep(/$1/,@graphvars)) {
|
|
Packit |
fcad23 |
push @graphvars,$1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($graphdelta) {
|
|
Packit |
fcad23 |
if ($gcount > 0) {
|
|
Packit |
fcad23 |
$graphtb{$1}[$gcount-1] = $var->val - $prev{$1};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$prev{$1} = $var->val;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$graphtb{$1}[$gcount] = $var->val;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$max = $graphtb{$1}[$#{$graphtb{$1}}]
|
|
Packit |
fcad23 |
if ($#{$graphtb{$1}} >= 0 &&
|
|
Packit |
fcad23 |
$graphtb{$1}[$#{$graphtb{$1}}] > $max);
|
|
Packit |
fcad23 |
$min = $graphtb{$1}[$#{$graphtb{$1}}]
|
|
Packit |
fcad23 |
if ($#{$graphtb{$1}} >= 0 &&
|
|
Packit |
fcad23 |
$graphtb{$1}[$#{$graphtb{$1}}] < $min);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($gcount > 1) {
|
|
Packit |
fcad23 |
$output->delete('all');
|
|
Packit |
fcad23 |
my $canvas = $$output{'SubWidget'}{'canvas'};
|
|
Packit |
fcad23 |
my $h=$canvas->cget(-height);
|
|
Packit |
fcad23 |
foreach $i (@graphvars) {
|
|
Packit |
fcad23 |
my @a = ();
|
|
Packit |
fcad23 |
for(my $j=0; $j <= $#{$graphtb{$i}}; $j++) {
|
|
Packit |
fcad23 |
$a[$j*2] = $j;
|
|
Packit |
fcad23 |
$a[$j*2+1] = $h-(($h-3)*($graphtb{$i}[$j]-$min))/($max-$min)-3;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$output->createLine(@a, -fill => $graphcolors[$i%$#graphcolors]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$output->create('text',5, $h-3, -text => "$max");
|
|
Packit |
fcad23 |
$output->create('text',5, 3, -text => "$min");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$gcount++;
|
|
Packit |
fcad23 |
$status->configure(-text => "sleeping for $graphtime seconds");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub addMibOID {
|
|
Packit |
fcad23 |
my $i = shift;
|
|
Packit |
fcad23 |
$i = ".$i" if ($i !~ /^\./);
|
|
Packit |
fcad23 |
my $name = SNMP::translateObj($i,1);
|
|
Packit |
fcad23 |
if (defined($name)) {
|
|
Packit |
fcad23 |
$name =~ s/.*\.([^.]+)$/$1/;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$i =~ s/^\.//;
|
|
Packit |
fcad23 |
$hlist->add($i, -text => $name);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub showInfo {
|
|
Packit |
fcad23 |
my $full = shift;
|
|
Packit |
fcad23 |
$full = ".$full" if ($full !~ /^\./);
|
|
Packit |
fcad23 |
my $oid = $full;
|
|
Packit |
fcad23 |
my $tag = $oid;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($tag =~ /^[.0-9]+$/) {
|
|
Packit |
fcad23 |
# strip off index in case there is one
|
|
Packit |
fcad23 |
$tag = SNMP::translateObj("$oid");
|
|
Packit |
fcad23 |
$tag = ".iso.org.dod.internet.private.$tag" if $tag =~ /^enterprises/;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$full = SNMP::translateObj("$oid");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$tag =~ s/\.[.0-9]+$//;
|
|
Packit |
fcad23 |
$oid = SNMP::translateObj($tag);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (!defined($last) || "$last" ne $oid) {
|
|
Packit |
fcad23 |
updateInfo($oid);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$OID = $full;
|
|
Packit |
fcad23 |
$mibOID->configure(-textvariable => \$OID);
|
|
Packit |
fcad23 |
$mibOID->update();
|
|
Packit |
fcad23 |
$last = $oid;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub showAllChildren {
|
|
Packit |
fcad23 |
my $id = shift;
|
|
Packit |
fcad23 |
$id =~ s/^\.//;
|
|
Packit |
fcad23 |
my @pieces = split(/\./,$id);
|
|
Packit |
fcad23 |
my ($i, $lastvalid);
|
|
Packit |
fcad23 |
for($i = 0; $i <= $#pieces; $i++) {
|
|
Packit |
fcad23 |
my $a = join(".", @pieces[0..$i]);
|
|
Packit |
fcad23 |
if ($hlist->infoExists($a) && !($hlist->infoChildren($a))) {
|
|
Packit |
fcad23 |
showChildren(join(".", $a));
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($hlist->infoExists($a)) {
|
|
Packit |
fcad23 |
$lastvalid = $a;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
last;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$hlist->see($lastvalid);
|
|
Packit |
fcad23 |
$hlist->selectionClear($hlist->selectionGet);
|
|
Packit |
fcad23 |
$hlist->selectionSet($lastvalid);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub showChildren {
|
|
Packit |
fcad23 |
$OID = shift;
|
|
Packit |
fcad23 |
$OID =~ s/^\.//;
|
|
Packit |
fcad23 |
my $oid = $OID;
|
|
Packit |
fcad23 |
$mibOID->configure(-textvariable => \$OID);
|
|
Packit |
fcad23 |
if ($hlist->infoChildren($oid)) {
|
|
Packit |
fcad23 |
my @a = $hlist->infoChildren($oid);
|
|
Packit |
fcad23 |
my $i;
|
|
Packit |
fcad23 |
foreach $i (@a) {
|
|
Packit |
fcad23 |
$hlist->deleteEntry($i);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$oid = ".$oid";
|
|
Packit |
fcad23 |
my $mib = $SNMP::MIB{format_oid($oid,'full')};
|
|
Packit |
fcad23 |
if (defined($mib)) {
|
|
Packit |
fcad23 |
my $children = $$mib{'children'};
|
|
Packit |
fcad23 |
if (ref($children) eq "ARRAY") {
|
|
Packit |
fcad23 |
foreach $i (sort {$$a{'subID'} <=> $$b{'subID'}} @{$children}) {
|
|
Packit |
fcad23 |
addMibOID($$i{'objectID'});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$status->configure(-text => SNMP::translateObj($oid,1) .
|
|
Packit |
fcad23 |
" has no children");
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$status->configure(-text => "");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub updateInfo {
|
|
Packit |
fcad23 |
$OID = shift;
|
|
Packit |
fcad23 |
my $oid = $OID;
|
|
Packit |
fcad23 |
my $mib = $SNMP::MIB{format_oid("$oid",'numeric')};
|
|
Packit |
fcad23 |
if (!defined($mib->{'description'}) || $mib->{'description'} eq "") {
|
|
Packit |
fcad23 |
$oid =~ s/[.0-9]+$//;
|
|
Packit |
fcad23 |
$mib = $SNMP::MIB{format_oid("$oid",'numeric')};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if (defined($mib)) {
|
|
Packit |
fcad23 |
if ($mib->{'label'} =~ /Table$/) {
|
|
Packit |
fcad23 |
$tablebutton->configure(-state => 'normal');
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$tablebutton->configure(-state => 'disabled');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$mibOID->configure(-text => $mib->{'objectID'});
|
|
Packit |
fcad23 |
$mibTextOID->configure(-text =>
|
|
Packit |
fcad23 |
SNMP::translateObj($mib->{'objectID'},1));
|
|
Packit |
fcad23 |
$descr->delete('0.0','end');
|
|
Packit |
fcad23 |
if (defined($mib->{'description'}) &&
|
|
Packit |
fcad23 |
$mib->{'description'} ne "") {
|
|
Packit |
fcad23 |
my $desc = $mib->{'description'};
|
|
Packit |
fcad23 |
$desc =~ s/\n[ \t]+/\n/g;
|
|
Packit |
fcad23 |
$desc =~ s/^\n//;
|
|
Packit |
fcad23 |
$descr->insert('end',$desc);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
for($i=0; $i<= $#displayInfo;$i++) {
|
|
Packit |
fcad23 |
$dpyInfo[$i] = $mib->{$displayInfo[$i]};
|
|
Packit |
fcad23 |
if (ref($dpyInfo[$i]) eq HASH) {
|
|
Packit |
fcad23 |
my %hash = %{$dpyInfo[$i]};
|
|
Packit |
fcad23 |
$dpyInfo[$i] = "";
|
|
Packit |
fcad23 |
foreach $j (sort { $hash{$a} <=> $hash{$b} } keys(%hash)) {
|
|
Packit |
fcad23 |
$dpyInfo[$i] .= "$j = $hash{$j},";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
} elsif (ref($dpyInfo[$i]) eq ARRAY) {
|
|
Packit |
fcad23 |
$dpyInfo[$i] = join(", ", @{$dpyInfo[$i]});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub optionalWidget {
|
|
Packit |
fcad23 |
my $num = shift;
|
|
Packit |
fcad23 |
my $menu = shift;
|
|
Packit |
fcad23 |
my $var = shift;
|
|
Packit |
fcad23 |
$menu->checkbutton(-label => $displayInfo[$num],
|
|
Packit |
fcad23 |
-variable => $var,
|
|
Packit |
fcad23 |
-command => [\&toggleWidgetShown, $num, $var]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub createRow {
|
|
Packit |
fcad23 |
my $i = shift;
|
|
Packit |
fcad23 |
if (!$displayLabels[$i]) {
|
|
Packit |
fcad23 |
$displayLabels[$i] = $dispFrame->Label(-pady => $tmpbd, -padx => $tmpbd,
|
|
Packit |
fcad23 |
-text => $displayInfo[$i],
|
|
Packit |
fcad23 |
-anchor => 'w',
|
|
Packit |
fcad23 |
-borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if (!$displayEntries[$i]) {
|
|
Packit |
fcad23 |
$displayEntries[$i] = $dispFrame->Entry(-textvariable => \$dpyInfo[$i],
|
|
Packit |
fcad23 |
-width => 40, -relief => 'flat',
|
|
Packit |
fcad23 |
-borderwidth => $tmpbd);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$displayLabels[$i]->grid(-ipady => $tmpbd, -ipadx => $tmpbd,
|
|
Packit |
fcad23 |
-column => ($i%2)*2, -row => int($i/2),
|
|
Packit |
fcad23 |
-sticky => 'w');
|
|
Packit |
fcad23 |
$dpyInfo[$i] = "" if (!defined($dpyInfo[$i]));
|
|
Packit |
fcad23 |
$displayEntries[$i]->grid(-ipady => $tmpbd, -ipadx => $tmpbd, -column => ($i%2)*2 + 1, -row => int($i/2), -sticky => 'w');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub toggleWidgetShown {
|
|
Packit |
fcad23 |
my ($num, $var) = @_;
|
|
Packit |
fcad23 |
if ($$var) {
|
|
Packit |
fcad23 |
createRow($num);
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$displayLabels[$num]->gridForget();
|
|
Packit |
fcad23 |
$displayEntries[$num]->gridForget()
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
# my @widgets = $dispFrame->gridSlaves(-row => $num);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub loadNewMibFile {
|
|
Packit |
fcad23 |
my $sel = $top->FileSelect();
|
|
Packit |
fcad23 |
my $file = $sel->Show();
|
|
Packit |
fcad23 |
if (defined($file)) {
|
|
Packit |
fcad23 |
SNMP::addMibFiles($file);
|
|
Packit |
fcad23 |
showChildren("1.3.6.1");
|
|
Packit |
fcad23 |
showChildren("1.3.6.1");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub loadNewMibModule {
|
|
Packit |
fcad23 |
my $tmptop = MainWindow->new();
|
|
Packit |
fcad23 |
my $var = "";
|
|
Packit |
fcad23 |
$tmptop->Label(-pady => $tmpbd, -padx => $tmpbd, -text => "Enter a SNMP MIB module name")
|
|
Packit |
fcad23 |
->pack(-side => 'top');
|
|
Packit |
fcad23 |
my $e = $tmptop->Entry(-textvariable => \$var);
|
|
Packit |
fcad23 |
$e->pack(-side => 'top');
|
|
Packit |
fcad23 |
$e->bind('<Return>',[\&loadIt,\$var,$tmptop]);
|
|
Packit |
fcad23 |
my $f = $tmptop->Frame();
|
|
Packit |
fcad23 |
$f->pack(-side => 'top');
|
|
Packit |
fcad23 |
$f->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'Ok', -command => [\&loadIt,"",\$var,$tmptop])
|
|
Packit |
fcad23 |
->pack(-side => 'left');
|
|
Packit |
fcad23 |
$f->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'Cancel', -command => [sub { my $wid = shift;
|
|
Packit |
fcad23 |
$wid->destroy(); },
|
|
Packit |
fcad23 |
$tmptop])
|
|
Packit |
fcad23 |
->pack(-side => 'left');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub loadIt {
|
|
Packit |
fcad23 |
my $var = shift;
|
|
Packit |
fcad23 |
if ($var ne "") {
|
|
Packit |
fcad23 |
my $ret = SNMP::loadModules($var);
|
|
Packit |
fcad23 |
if ($ret) {
|
|
Packit |
fcad23 |
showChildren("1.3.6.1");
|
|
Packit |
fcad23 |
showChildren("1.3.6.1");
|
|
Packit |
fcad23 |
return 1;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$status->configure(-text => "Failed reading module $var");
|
|
Packit |
fcad23 |
return 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub stop {
|
|
Packit |
fcad23 |
$stopit = shift;
|
|
Packit |
fcad23 |
if ($stopit) {
|
|
Packit |
fcad23 |
$stopBut->configure(-state => 'disabled');
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$stopBut->configure(-state => 'normal');
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub entryBox {
|
|
Packit |
fcad23 |
my $title = shift;
|
|
Packit |
fcad23 |
my $text = shift;
|
|
Packit |
fcad23 |
my $var = shift;
|
|
Packit |
fcad23 |
my $callback = shift;
|
|
Packit |
fcad23 |
my $top = MainWindow->new();
|
|
Packit |
fcad23 |
my $newvar = $$var if defined($var);
|
|
Packit |
fcad23 |
$top->title($title);
|
|
Packit |
fcad23 |
my $f = $top->Frame();
|
|
Packit |
fcad23 |
$f->pack(-side => 'top');
|
|
Packit |
fcad23 |
$f->Label(-pady => $tmpbd, -padx => $tmpbd,
|
|
Packit |
fcad23 |
-text => $text)->pack(-side => 'left');
|
|
Packit |
fcad23 |
my $e = $f->Entry(-textvariable => \$newvar);
|
|
Packit |
fcad23 |
$e->pack(-side => 'left');
|
|
Packit |
fcad23 |
$f = $top->Frame();
|
|
Packit |
fcad23 |
$f->pack(-side => 'bottom');
|
|
Packit |
fcad23 |
my $b = $f->Button(-pady => $tmpbd, -padx => $tmpbd, -text => 'Ok',
|
|
Packit |
fcad23 |
-command => [sub { my $w = shift;
|
|
Packit |
fcad23 |
my $v1 = shift;
|
|
Packit |
fcad23 |
my $v2 = shift;
|
|
Packit |
fcad23 |
my $call = shift;
|
|
Packit |
fcad23 |
my $ret = 1;
|
|
Packit |
fcad23 |
$$v1 = $$v2 if defined($v1);
|
|
Packit |
fcad23 |
$ret = $call->($$v2)
|
|
Packit |
fcad23 |
if defined($call);
|
|
Packit |
fcad23 |
$w->destroy() if ($ret);}, $top, $var,
|
|
Packit |
fcad23 |
\$newvar, $callback]);
|
|
Packit |
fcad23 |
$b->pack(-side => 'left');
|
|
Packit |
fcad23 |
$e->bind('<Return>',[$b,'invoke']);
|
|
Packit |
fcad23 |
$b = $f->Button(-pady => $tmpbd, -padx => $tmpbd,
|
|
Packit |
fcad23 |
-text => 'Cancel', -command => [sub { my $w = shift;
|
|
Packit |
fcad23 |
$w->destroy();}, $top
|
|
Packit |
fcad23 |
]);
|
|
Packit |
fcad23 |
$b->pack(-side => 'right');
|
|
Packit |
fcad23 |
$e->bind('<Escape>',[$b,'invoke']);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub findANode {
|
|
Packit |
fcad23 |
my $val = shift;
|
|
Packit |
fcad23 |
my $tag = SNMP::translateObj($val);
|
|
Packit |
fcad23 |
if ($tag) {
|
|
Packit |
fcad23 |
showAllChildren($tag);
|
|
Packit |
fcad23 |
return 1;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
$top->Dialog(-text => "$val not found")->Show();
|
|
Packit |
fcad23 |
return 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub test_version {
|
|
Packit |
fcad23 |
my ($gt, $major, $minor, $sub) = @_;
|
|
Packit |
fcad23 |
$SNMP::VERSION =~ /(\d)\.(\d).(\d)/;
|
|
Packit |
fcad23 |
if ($gt) {
|
|
Packit |
fcad23 |
if ($1 > $major || ($1 == $major && $2 > $minor) ||
|
|
Packit |
fcad23 |
($1 == $major && $2 == $minor && $3 >= $sub)) {
|
|
Packit |
fcad23 |
return 1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
if ($1 < $major || ($1 == $major && $2 < $minor) || ($1 == $major && $2 == $minor && $3 < $sub)) {
|
|
Packit |
fcad23 |
return 1;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub save_options {
|
|
Packit |
fcad23 |
my $umask = umask();
|
|
Packit |
fcad23 |
umask 0077; # make sure its not readable by the world by default.
|
|
Packit |
fcad23 |
if (!open(O,">$opts{'f'}")) {
|
|
Packit |
fcad23 |
warn "can't save to $opts{'f'}\n";
|
|
Packit |
fcad23 |
umask $umask;
|
|
Packit |
fcad23 |
return;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
umask $umask;
|
|
Packit |
fcad23 |
print O Data::Dumper->Dump([\%session_opts], [qw(*session_opts)]);
|
|
Packit |
fcad23 |
print O Data::Dumper->Dump([\%displayInfoStates], [qw(*displayInfoStates)]);
|
|
Packit |
fcad23 |
foreach my $var (@saveoptions) {
|
|
Packit |
fcad23 |
print O Data::Dumper->Dump([$$var], [$var]);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
close(O);
|
|
Packit |
fcad23 |
$status->configure(-text => "saved options to $opts{'f'}");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# returns 1 if $oid2 is below $oid1 in the hierarchy
|
|
Packit |
fcad23 |
sub is_in_subtree {
|
|
Packit |
fcad23 |
my ($oid1, $oid2) = @_;
|
|
Packit |
fcad23 |
# get pure numeric
|
|
Packit |
fcad23 |
$oid1 = SNMP::translateObj($oid1) if ($oid1 !~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
$oid2 = SNMP::translateObj($oid2) if ($oid2 !~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# has more on it or is exactly the same
|
|
Packit |
fcad23 |
return 1 if ($oid2 =~ /^$oid1\./ || $oid2 =~ /^$oid1$/);
|
|
Packit |
fcad23 |
return 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub format_oid {
|
|
Packit |
fcad23 |
my ($oid, $type) = @_;
|
|
Packit |
fcad23 |
$oid =~ s/\.$//;
|
|
Packit |
fcad23 |
$type = $displayoidas if ($type eq "");
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($type eq 'numeric') {
|
|
Packit |
fcad23 |
return SNMP::translateObj($oid) if ($oid !~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
return $oid;
|
|
Packit |
fcad23 |
} elsif ($type eq 'full') {
|
|
Packit |
fcad23 |
return SNMP::translateObj($oid, 1) if ($oid =~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
return SNMP::translateObj(SNMP::translateObj($oid), 1) if ($oid !~ /^\./);
|
|
Packit |
fcad23 |
return $oid;
|
|
Packit |
fcad23 |
} elsif ($type eq 'short' || $type eq 'module') {
|
|
Packit |
fcad23 |
$oid = SNMP::translateObj($oid) if ($oid =~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
$oid =~ s/.*\.([a-zA-Z]\w+)\.(.*)/$1.$2/;
|
|
Packit |
fcad23 |
if ($type eq 'module') {
|
|
Packit |
fcad23 |
$oid = $SNMP::MIB{format_oid($oid,'numeric')}->{'moduleID'} . "::" . $oid;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return $oid;
|
|
Packit |
fcad23 |
} elsif ($type eq 'module') {
|
|
Packit |
fcad23 |
$oid = SNMP::translateObj($oid) if ($oid =~ /^[\d\.]*$/);
|
|
Packit |
fcad23 |
$oid =~ s/.*\.([a-zA-Z]\w+)\.(.*)/$1.$2/;
|
|
Packit |
fcad23 |
return $oid;
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
warn 'unknown oid translation type: $type';
|
|
Packit |
fcad23 |
return $oid;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub get_oid {
|
|
Packit |
fcad23 |
my ($var, $type) = @_;
|
|
Packit |
fcad23 |
return format_oid($var->tag . "." . $var->iid, $type);
|
|
Packit |
fcad23 |
}
|