use strict; use Net::SNMP qw(snmp_dispatcher ticks_to_time oid_lex_sort); my ($session, $error) = Net::SNMP->session( -hostname => $_, ## -version => 'snmpv2c', ## E7 Gen 2 supports only V1 ##-nonblocking => 1, -translate => [ -timeticks => 0x0 # Turn off so sysUpTime is numeric ], -community => $ARGV[1] || 'public', -port => $ARGV[2] || 161, -timeout => 20 # Seconds ); if (!defined($session)) { printf("ERROR for %s: %s.\n",$_, $error); exit 1; } &Get_Session_Data($session); ################################################################# sub Get_Session_Data { my $session = shift; my $result = $session->get_request( -varbindlist => [$sysUpTime, $dot1dStpTopChanges, $dot1dStpDesignatedRoot, $dot1dBaseNumPorts, $dot1dStpTimeSinceTopologyChange ]); ## ,$dot1dTpFdbTable] ); if (!defined($result)) { printf("ERROR: %s.\n", $session->error); next; } # my $uptime = $session->var_bind_list()->{$sysUpTime}; #printf("%-15s Ok (%s)\n", # $session->hostname, ticks_to_time($uptime) ); print( $session->hostname . " " . &showinfo($session,"TC_count",$dot1dStpTopChanges) . &showinfo($session,"rootBridge",$dot1dStpDesignatedRoot) . &showinfo($session,"ports",$dot1dBaseNumPorts) . &showinfo($session,"TC_Time",$dot1dStpTimeSinceTopologyChange). "\n" ); $x->TC_Count ($session->var_bind_list()->{$dot1dStpTopChanges}); $x->RootBridge($session->var_bind_list()->{$dot1dStpDesignatedRoot}); $x->MaxPorts ($session->var_bind_list()->{$dot1dBaseNumPorts}); $x->TC_Time ($session->var_bind_list()->{$dot1dStpTimeSinceTopologyChange}); ##&print_results_cb($session); } } ################################################################# sub showinfo(){ my ($session,$varname,$oid) = @_; my $format="%5d"; # Default format, if numeric my $val = $session->var_bind_list()->{$oid}; if (length($val)> 5 or $val > 9999){ return $varname . "=" . $val . "; "; } return $varname . "=" . sprintf("%6d", $val) . "; "; } ###########################################