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

Compare with Current View Page History

« Previous Version 5 Next »

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.

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');

Complete files:

  • No labels