Skip to end of banner
Go to start of banner

DRAFT - Perl Net::SNMP Error: Time synchronization failed during discovery

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

While working with SNMPv3 with a specific SNMP agent, we encountered problems with SNMPv3 “Time syncronization”, some research determined that this error could be ignored at the users peril, 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.

# find /usr/ -type f -path "*/Net/SNMP.pm"
/usr/local/share/perl5/Net/SNMP.pm
/usr/share/perl5/Net/SNMP.pm

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.

# perl -V | grep -A 30 @INC
  @INC:
    /usr/local/lib64/perl5
    /usr/local/share/perl5
    /usr/lib64/perl5/vendor_perl
    /usr/share/perl5/vendor_perl
    /usr/lib64/perl5
    /usr/share/perl5
    .
# 

The @INC array is a list of directories that perl looks in to find modules.  This is a top down, first match 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.  In order to prevent Net::SNMP from failing due to this error we edited it in the following fashion.

$ diff -bu SNMP.pm.original SNMP.pm.patched 
--- SNMP.pm.original    2018-01-26 08:36:28.833348881 +0900
+++ SNMP.pm.patched     2018-01-26 14:25:42.798070662 +0900
@@ -2617,8 +2617,9 @@
    # counter in the varBindList..."  If another error is returned, we 
    # assume that the synchronization has failed.
 
-   if (($this->{_security}->discovered()) &&
-       ($this->{_error} =~ /usmStatsNotInTimeWindows/))
+   if ($this->{_security}->discovered())
+   #if (($this->{_security}->discovered()) &&
+   #    ($this->{_error} =~ /usmStatsNotInTimeWindows/))
    {
       $this->_error_clear();
       DEBUG_INFO('discovery and synchronization complete');
@@ -2628,10 +2629,10 @@
    # If we received the usmStatsNotInTimeWindows report or no error, but 
    # we are still not synchronized, provide a generic error message.
 
-   if ((!$this->{_error}) || ($this->{_error} =~ /usmStatsNotInTimeWindows/)) {
-      $this->_error_clear();
-      $this->_error('Time synchronization failed during discovery');
-   }
+   #if ((!$this->{_error}) || ($this->{_error} =~ /usmStatsNotInTimeWindows/)) {
+   #   $this->_error_clear();
+   #   $this->_error('Time synchronization failed during discovery');
+   #}
 
    DEBUG_INFO('synchronization failed');
  • No labels