Subject: | Net::SNMP - new class instances do not reset the debug mask set by previous class instances |
Date: | Fri, 14 Nov 2014 21:12:45 +0000 |
To: | "bug-Net-SNMP [...] rt.cpan.org" <bug-Net-SNMP [...] rt.cpan.org> |
From: | "LIVERMAN, JAMES" <jl2076 [...] att.com> |
It seems each instance of Net::SNMP does not reset the debug mask.
Here is my system info:
Linux : perl -v
This is perl 5, version 12, subversion 3 (v5.12.3) built for i686-linux-thread-multi
Copyright 1987-2010, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Linux : perl -V | sed -n '/@INC/,$p' | xargs -i -- find {} -name 'SNMP.pm' 2>/dev/null
/lib/perl5.12.3/site_perl/5.12.3/Net/SNMP.pm
/lib/perl5/site_perl/5.12.3/Net/SNMP.pm
Linux : grep 'our \$VERSION' /lib/perl5.12.3/site_perl/5.12.3/Net/SNMP.pm
our $VERSION = 'v6.0.1';
Linux : grep 'our \$VERSION' /lib/perl5/site_perl/5.12.3/Net/SNMP.pm
our $VERSION = 'v6.0.1';
Linux : uname -a
Linux sndnm923 2.6.18-348.1.1.el5 #1 SMP Fri Dec 14 05:25:59 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
Linux : cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.9 (Tikanga)
Here is code showing the issue:
use strict;
use warnings;
use Net::SNMP;
my $version = 'version';
my $community = 'community';
my $hostname = 'hostname';
my $instance_1 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # default debug mask of 0x00
if($instance_1){ printf("DEBUG FOR 1: %d\n", $instance_1->debug()); }
my $instance_2 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # default debug mask of 0x00
if($instance_2){ printf("DEBUG FOR 2: %d\n", $instance_2->debug()); }
my $instance_3 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname, -debug => 1 ); # future instances will also have debug mask set to 0x01
if($instance_3){ printf("DEBUG FOR 3: %d\n", $instance_3->debug()); }
my $instance_4 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x01
if($instance_4){ printf("DEBUG FOR 4: %d\n", $instance_4->debug()); }
my $instance_5 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x01
if($instance_5){ printf("DEBUG FOR 5: %d\n", $instance_5->debug()); }
my $instance_6 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname, -debug => 2 ); # future instances will also have debug mask set to 0x02
if($instance_6){ printf("DEBUG FOR 6: %d\n", $instance_6->debug()); }
my $instance_7 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x02
if($instance_7){ printf("DEBUG FOR 7: %d\n", $instance_7->debug()); }
my $instance_8 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x02
if($instance_8){ printf("DEBUG FOR 8: %d\n", $instance_8->debug()); }
my $instance_9 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname, -debug => 0 ); # future instances will also have debug mask set to 0x00
if($instance_9){ printf("DEBUG FOR 9: %d\n", $instance_9->debug()); }
my $instance_10 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x00
if($instance_10){ printf("DEBUG FOR 10: %d\n", $instance_10->debug()); }
my $instance_11 = Net::SNMP->session( -version => $version, -community => $community, -hostname => $hostname ); # left-over debug mask of 0x00
if($instance_11){ printf("DEBUG FOR 11: %d\n", $instance_11->debug()); }
exit 0;
^D
DEBUG FOR 1: 0
DEBUG FOR 2: 0
DEBUG FOR 3: 1
DEBUG FOR 4: 1
DEBUG FOR 5: 1
DEBUG FOR 6: 2
DEBUG FOR 7: 2
DEBUG FOR 8: 2
DEBUG FOR 9: 0
DEBUG FOR 10: 0
DEBUG FOR 11: 0
It seems this can be fixed by making debug an "instance variable" instead of a "class variable" OR by manually resetting it in the constructor i.e. calling $this->debug(0x00) around line 325:
304 sub new
305 {
306 my ($class, %argv) = @_;
307
308 # Create a new data structure for the object
309 my $this = bless {
310 '_callback' => undef, # Callback
311 '_context_engine_id' => undef, # contextEngineID
312 '_context_name' => undef, # contextName
313 '_delay' => 0, # Message delay
314 '_hostname' => q{}, # Hostname
315 '_discovery_queue' => [], # Pending message queue
316 '_error' => undef, # Error message
317 '_nonblocking' => FALSE, # [Non-]blocking flag
318 '_pdu' => undef, # Message/PDU object
319 '_security' => undef, # Security Model object
320 '_translate' => TRANSLATE_ALL, # Translation mask
321 '_transport' => undef, # Transport Domain object
322 '_transport_argv' => [], # Transport object argv
323 '_version' => SNMP_VERSION_1, # SNMP version
324 }, $class;
325
326 # Parse the passed arguments
327
328 for (keys %argv) {
329
330 if (/^-?debug$/i) {
331 $this->debug(delete $argv{$_});
James Liverman
Professional-Applications Developer
Service Assurance M5 Task Automation CoE
AT&T Business Solutions
919-864-3343
Message body is not shown because it is too large.