asynchronous mode and string values

Suresh LE ROCHUS <[email protected]>
Newsgroups gmane.network.net-snmp.user
Message-ID <[email protected]>
Hello,

I would like to use asynchronous mode in a perl script to get mac table 
of several switch.

I followed the tutorial on this page (code below figure 10.1): 
http://www.unix.org.ua/orelly/perl/sysadmin/ch10_03.htm

Which I modified to make it asynchronous.

Here it is:
"
my $dot1dTpFdbAddress = 	'.1.3.6.1.2.1.17.4.3.1.1';
	my $dot1dTpFdbPort= 		'.1.3.6.1.2.1.17.4.3.1.2';
	my $dot1dBasePortIfIndex= 	'.1.3.6.1.2.1.17.1.4.1.2';
	my $ifName= 			'.1.3.6.1.2.1.31.1.1.1.1';

	my $session = new SNMP::Session(DestHost => "$ip", Community => "$com", 
UseSprintValue => 1, Version => 1);
	
	die "session creation error: $SNMP::Session::ErrorStr" unless (defined 
$session);

	# set up the data structure for the getnext command
	my $vars = new SNMP::VarList(["$dot1dTpFdbAddress"], ["$dot1dTpFdbPort"]);

	my $res = $session->getnext($vars,[\&call,$session]);
	die $session->{ErrorStr} if ($session->{ErrorStr});
	SNMP::MainLoop();

sub call {
	my $dot1dTpFdbAddress = 	'.1.3.6.1.2.1.17.4.3.1.1';
	my $dot1dTpFdbPort= 		'.1.3.6.1.2.1.17.4.3.1.2';

	my ($sess, $vlist) = @_;
	
	my $oidmac = $vlist->[0][0]; 		my $oidport = $vlist->[1][0];
	my $mac = $vlist->[0][2]; 		my $port = $vlist->[1][2];
	my $oidmacend = $vlist->[0][1]; 	my $oidportend = vlist->[1][1];
	
	my $oidmacnext = "$dot1dTpFdbAddress.$oidmacend";			my $oidportnext = 
"$dot1dTpFdbPort.$oidportend";
	
	if ($oidmac eq 'dot1dTpFdbAddress') {
		print "port:'$port'\t'$mac'\n";
		#print "next mac:'$dot1dTpFdbAddress.$mac'\tnext 
port:'$dot1dTpFdbPort.$port'\n";
	
		print Dumper($vlist);
		
		my $vars = new SNMP::VarList(["$oidmacnext"], ["$oidportnext"]);
	
		$sess->getnext($vars,[\&call,$sess]);
		#SNMP::finish();
	}	
	else { SNMP::finish(); }
}
"
I'm geting some data but I don't know how to print the MAC adress 
returned in a comprehensive way, it'encoded I think.

I get somthing like this:
"port:'2'        'Ps�
$VAR1 = bless( [
                  bless( [
                           'dot1dTpFdbAddress',
                           '0.0.80.6.115.210',
                           'Ps�,
                           'OCTETSTR'
                         ], 'SNMP::Varbind' ),
                  bless( [
                           'dot1dTpFdbPort',
                           '0.0.80.6.115.210',
                           '2',
                           'INTEGER'
                         ], 'SNMP::Varbind' )
                ], 'SNMP::VarList' );


"

However when I do the same thing in a synchronous mode, it prints perfectly:
"
my ($macaddr,$portnum) = $session->getnext($vars);
"
it prints the macaddress like XX XX XX XX XX XX

I would like to make my request in asynchronous becaause I was told that 
  it could go a lot faster.

I have nearly 30 switchs ... (it takes more than half an hour in 
synchronous mode !)

Don't know if my explanations are clear.

Can somebody help me ?

Thank you,


Kenwaz

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.