OpenNMS can't reach devices with ICMP but works with ping on the cli

how-to

#1

Problem

OpenNMS is not able to reach network devices with ICMP but it is possible to ping devices from the OpenNMS command line interface using the ping tool. The OpenNMS user interface is showing nodes down with the message: “No icmp server active”.

Diagnosis

This issues happens when your OpenNMS instance doesn’t have proper installed or configured JICMP and/or JICMP6 packages.

These messages might be in the manager log:

egrep 'org.opennms.netmgt.icmp.NullPinger' /var/log/opennms/manager.log
2018-03-13 13:19:35,229 INFO  [Main] o.o.n.i.b.BestMatchPingerFactory:
Best available pinger is: class org.opennms.netmgt.icmp.NullPinger
2018-03-13 13:25:59,693 INFO  [Main] o.o.n.i.b.BestMatchPingerFactory:
Best available pinger is: class org.opennms.netmgt.icmp.NullPinger

Try to ping the device using the Karaf shell. This will test if ICMP is correctly installed:

Step 1: Log into the Karaf shell.

ssh -p 8101 admin@localhost

Step 2: Try to ping the IP

ping:ping <IPADDRESS>

You should receive a response like below

PING: /<IPADDRESS> 0.041 ms

If you receive this on the output

Error executing command: java.lang.UnsupportedOperationException: ICMP is not available.

Then OpenNMS doesn’t have ICMP available.

Cause

During the installation of OpenNMS there is JICMP and JICMP6 installed. These packages enable OpenNMS to process ICMP messages for IPv4 and IPv6. There is a reference for OpenNMS where to find the JICMP and JICMP6 libraries.

cat /opt/opennms/etc/libraries.properties

opennms.library.jicmp=/usr/lib64/libjicmp.so
opennms.library.jrrd2=/usr/lib64/libjrrd2.so
opennms.library.jicmp6=/usr/lib64/libjicmp6.so

Solution

Ensure you have the packages JICMP and JICMP6 installed. Verify if the libraries for libjicmp and libjicmp6 exist in the path configured in libraries.properties. Fix the path manually or use ${OPENNMS_HOME}/bin/install -s which search for the libraries and adds them in the libraries.properties file. When you use install -s look for entries here:

- searching for libjicmp.so:
  - trying to load /usr/lib64/libjicmp.so: OK
- searching for libjicmp6.so:
  - trying to load /usr/lib64/libjicmp6.so: OK

You have to restart OpenNMS to apply the changes in the libraries.properties.


#2

Ensuring that the JICMP libraries are installed is not sufficient to work around this problem - the issue is that the BestMatchPingerFactory may intermittently fail to detect the right pinger, even when it is in fact available.

To force the install to use the JICMP pinger and skip auto-detection, un-comment org.opennms.netmgt.icmp.pingerClass=org.opennms.netmgt.icmp.jni6.Jni6Pinger in $OPENNMS_HOME/etc/opennms.properties.


#3

That did the trick, thanks Jesse. Appreciate the help.

BTW - you have an extra ‘/etc’ in your path. Also, I’m pretty new to OpenNMS and discovered that change required a restart of OpenNMS. That is probably intuitively obvious to most of the community but …