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