...
- While working with SNMPv3 with a specific SNMP agent, we encountered problems with SNMPv3 “Time synchronization”, some research determined that this error could be ignored, so modifying the Net::SNMP Perl library could workaround this problem.
- If you encounter the 'Time synchronization failed during discovery' error using the perl Net::SNMP library there may be a fairly easy
...
- work around.
...
- It may be as easy as editing the Net::SNMP module to not invoke this error.
...
- The following advice should be executed as root.
- The following was done with the Net::SNMP Version 6.0.1 package. If this library is upgraded, this patch may need to be reapplied.
Find Net::SNMP
In order to find where Net::SNMP is on the subject system issue the following command.
...
If you are unfortunate as in the above example, two SNMP.pm files may be returned. In order to determine which one perl is invoking use the perl -V command.
...
The @INC array is a list of directories that perl looks in to find modules. This is a top down, first match first find operation. Based on this the version in /usr/local/share/perl5/Net will be utilized because it will be found first.
Edit Net::SNMP
Always make a backup of a module prior to editing it. A command such as 'cp SNMP.pm SNMP.pm.unpatched works well.
We were able to get the agent to work by doing the following:
- Commenting out part of the if statement on line 2545. (The if statement will need to be re-written)
- Commenting out lines 2562 through 2565.
Code Block | ||
---|---|---|
| ||
2544 if (($this->{_security}->discovered) &&
2545 ($this->{_error} =~ /usmStatsNotInTimeWindows/))
2546 {
2547 $this->_error_clear;
2548
2549 DEBUG_INFO('discovery and synchronization complete');
2550
2551 # Discovery is complete, send any pending messages
2552 while (my $q = shift(@{$this->{_discovery_queue}})) {
2553 $DISPATCHER->send_pdu(@{$q});
2554 }
2555
2556 return TRUE;
2557 }
2558
2559 # If we received the usmStatsNotInTimeWindows report or no error, but
2560 # we are still not synchronized, provide a generic error message.
2561
2562 if ((!$this->{_error}) || ($this->{_error} =~ /usmStatsNotInTimeWindows/)) {
2563 $this->_error_clear;
2564 $this->_error('Time synchronization failed during discovery');
2565 } |