check_eigrp

check_eigrp

This C implementation of plugin works much faster than scripting languages analogues (perl or bash). IT checks operation of the EIGRP protocol and displays a list of current neighbors.

Plugin returns standard exit codes for nagios:

  • CRITICAL if router has lost neighbors;
  • WARNING if number of neighbors has changed;
  • OK if number of neighbors matches to the given "-n" value;
  • UNKNOWN if some errors occur in SNMP protocol.

Plugin requires net-snmp-libs to be installed. This problem is solved automaticaly if u install plugin from rpm (yum localinstall nagios-plugins-eigrp). In this case plugin also will be installed in standart for this OS location:

/usr/lib64/nagios/plugins or /usr/lib/nagios/plugins.

Inside arch depended tarball packages there is only compiled executable file. You should copy them in nagios plugins folder for use.

Inside check_eigrp tarball package autotools generated package for compilation under some other arch. I use them for compile plugin under FreeBSD Sparc64 processor (SunFire v120 server). You can use "./configure && make && make install" sequence for plugin installation.

Full usage options are:

Usage:

check_eigrp -H hostipaddress -n neighbors -a EIGRP AS number [-C community] [-v]

Options:

-h,--help Show this help message;
-V,--version print the version of plugin;
-H,--hostname=ADDRESS specify the hostname of router, ou can specify a port number by this notation:"ADDRESS:PORT"
-C,--community=STRING specify the SNMP community of router;
-a,--asnumber=INTEGER specify the EIGRP AS number of router;
-n,--neighbors=INTEGER specify the neighbors count of router;
-t,--timeout=INTEGER specify the timeout of plugin, default is 3 sec, max 60 sec;
-v,--verbose specify this key if you need to get a list of neighbors (disabled by default).

The output of list of neighbors is disabled by default (to increase performance), you can enable this by specify -v switch to verbose output. You can see small eigrp neighbors table with interfaces through which are available neighbors.

[user@II ~]$ /tmp/check_eigrp --hostname 192.168.1.100 --community public --neighbors 5 --asnumber 1 --verbose 
OK: Neighbors count is 5 |
1: 192.168.50.210 "GigabitEthernet0/0.84"
2: 192.168.50.209 "GigabitEthernet0/0.84"
3: 192.168.11.10 "GigabitEthernet0/1"
4: 172.18.4.250 "Tunnel1"
5: 172.18.4.254 "Tunnel0"

In old Cisco IOS versions (15.2 or less) the neigbors ip's has present as hex string. In new versions it presents as regular ip address. The plugin performs checks and formats the output in the correct format depending on the Cisco IOS version number.

In some case u can use Perl implementation of plugin. For example, if the performance isn't too important for you. But this implementation does not check IOS version and only convert hex string from old IOS version (15.2 or less) to regular IP address. Script requires perl SNMP libs to be installed.

  • UPD: Fixed bug with very small timeout. Added the "-t" switch to specify the value in seconds (3 sec by default). Plugin will try to connect 3 times during this interval.
  • UPD: Added SIGALRM handler to force exit if timeout exceeded (see https://www.monitoring-plugins.org/doc/guidelines.html#AEN296).
  • UPD: Added tarball for compilation
  • UPD: Change the command-line arguments
  • UPD: I removed the init_snmp call, because plugin don't need to parse configuration files and MIBs. It is twice increased performance.
  • UPD: Added func for SNMP error handling for disable "No error handler" message

You can troll my code on github: