Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit 56738f05 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

Delete cisco_eigrp_as_info

parent 5794b9ed
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
#
# Cisco EIGRP AS info
#
# Author: Th.L.
# Date : 2017-17-20
#
# Monitor status of Cisco EIGRP AS info
#
# 2018-02-11: removed unnecessary OIDs
# 2018-08-06: modified scan function
# 2019-10-16: added support for IPv6 and VRFs, added parser function
#
#
# snmpwalk sample
#
# thl@surfbox-ii:~$ snmpwalk -v2c -c router-01 -ObentU simulant .1.3.6.1.4.1.9.9.449.1.2.1.1
# .1.3.6.1.4.1.9.9.449.1.2.1.1.2.65536.10 = Gauge32: 3
# .1.3.6.1.4.1.9.9.449.1.2.1.1.3.65536.10 = Counter32: 37436
# .1.3.6.1.4.1.9.9.449.1.2.1.1.4.65536.10 = Counter32: 32170
# .1.3.6.1.4.1.9.9.449.1.2.1.1.5.65536.10 = Counter32: 161
# .1.3.6.1.4.1.9.9.449.1.2.1.1.6.65536.10 = Counter32: 143
# .1.3.6.1.4.1.9.9.449.1.2.1.1.7.65536.10 = Counter32: 14
# .1.3.6.1.4.1.9.9.449.1.2.1.1.8.65536.10 = Counter32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.9.65536.10 = Counter32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.10.65536.10 = Counter32: 14
# .1.3.6.1.4.1.9.9.449.1.2.1.1.11.65536.10 = Counter32: 143
# .1.3.6.1.4.1.9.9.449.1.2.1.1.12.65536.10 = Counter32: 132
# .1.3.6.1.4.1.9.9.449.1.2.1.1.13.65536.10 = Gauge32: 2
# .1.3.6.1.4.1.9.9.449.1.2.1.1.14.65536.10 = Counter32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.15.65536.10 = Counter32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.16.65536.10 = Counter32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.17.65536.10 = INTEGER: 1
# .1.3.6.1.4.1.9.9.449.1.2.1.1.18.65536.10 = Hex-STRING: 0A A7 DC FF # can be also in the form of "10.10.10.10" :-(
# .1.3.6.1.4.1.9.9.449.1.2.1.1.19.65536.10 = Counter32: 10
# .1.3.6.1.4.1.9.9.449.1.2.1.1.20.65536.10 = Counter64: 1
# .1.3.6.1.4.1.9.9.449.1.2.1.1.21.65536.10 = Counter64: 135
# .1.3.6.1.4.1.9.9.449.1.2.1.1.22.65536.10 = Gauge32: 0
# .1.3.6.1.4.1.9.9.449.1.2.1.1.23.65536.10 = Gauge32: 0
#
# sample info
# [
# [u'65536.10', u'1', u'7081', u'6637', u'37', u'45', u'0', u'0', u'0', u'0', u'26', u'32', u'2', u'0', u'0', u'0', u'1', u'\n\xa7\xdc\xfd', u'10', u'0']
# ]
#
#
factory_settings['cisco_eigrp_as_info_defaults'] = {
}
###########################################################################
#
# DATA Parser function
#
###########################################################################
def parse_cisco_eigrp_as_info(info):
InetAddressType = {0: 'unknown',
1: 'ipv4',
2: 'ipv6',
3: 'ipv4z',
4: 'ipv6z',
16: 'dns',
}
def render_ip_address(bytestring):
return ".".join(["%s" % ord(m) for m in bytestring])
ASInfoTable = []
ASTable = {}
ASInfo, VrfInfo = info
for OID_END, cEigrpNbrCount, cEigrpHellosSent, cEigrpHellosRcvd, cEigrpUpdatesSent, cEigrpUpdatesRcvd, cEigrpQueriesSent, \
cEigrpQueriesRcvd, cEigrpRepliesSent, cEigrpRepliesRcvd, cEigrpAcksSent, cEigrpAcksRcvd, cEigrpInputQHighMark, cEigrpInputQDrops, \
cEigrpSiaQueriesSent, cEigrpSiaQueriesRcvd, cEigrpAsRouterIdType, cEigrpAsRouterId, cEigrpTopoRoutes, cEigrpXmitPendReplies in ASInfo:
cEigrpVrfId = int(OID_END.split('.')[0])
cEigrpAS = OID_END.split('.')[1]
cEigrpVrfName = ''
for VrfId, VrfName in VrfInfo:
if int(VrfId) == cEigrpVrfId:
cEigrpVrfName = VrfName
if cEigrpVrfId < 100000:
cEigrpAddrFammily = 'IPv4'
else:
cEigrpAddrFammily = 'IPv6'
if int(cEigrpAsRouterIdType) == 1:
if len(cEigrpAsRouterId) == 4:
cEigrpAsRouterId = render_ip_address(cEigrpAsRouterId)
ASInfoTable.append({'cEigrpAS': cEigrpAS,
'cEigrpVrfName': cEigrpVrfName,
'cEigrpVrfId': cEigrpVrfId,
'cEigrpAddrFammily': cEigrpAddrFammily,
'cEigrpNbrCount': int(cEigrpNbrCount),
'cEigrpHellosSent': int(cEigrpHellosSent),
'cEigrpHellosRcvd': int(cEigrpHellosRcvd),
'cEigrpUpdatesSent': int(cEigrpUpdatesSent),
'cEigrpUpdatesRcvd': int(cEigrpUpdatesRcvd),
'cEigrpQueriesSent': int(cEigrpQueriesSent),
'cEigrpQueriesRcvd': int(cEigrpQueriesRcvd),
'cEigrpRepliesSent': int(cEigrpRepliesSent),
'cEigrpRepliesRcvd': int(cEigrpRepliesRcvd),
'cEigrpAcksSent': int(cEigrpAcksSent),
'cEigrpAcksRcvd': int(cEigrpAcksRcvd),
'cEigrpInputQHighMark': int(cEigrpInputQHighMark),
'cEigrpInputQDrops': int(cEigrpInputQDrops),
'cEigrpSiaQueriesSent': int(cEigrpSiaQueriesSent),
'cEigrpSiaQueriesRcvd': int(cEigrpSiaQueriesRcvd),
'cEigrpAsRouterId': cEigrpAsRouterId,
'cEigrpTopoRoutes': int(cEigrpTopoRoutes),
'cEigrpXmitPendReplies': int(cEigrpXmitPendReplies),
})
if cEigrpVrfName == 'default' and cEigrpAddrFammily == 'IPv4':
ASTable.update({cEigrpVrfId: {'ServiceText': cEigrpAS, 'cEigrpVrfId': cEigrpVrfId}})
elif cEigrpVrfName == 'default' and cEigrpAddrFammily == 'IPv6':
ASTable.update({cEigrpVrfId:{'ServiceText': '%s IPv6' % cEigrpAS, 'cEigrpVrfId': cEigrpVrfId}})
elif cEigrpVrfName != 'default' and cEigrpAddrFammily == 'IPv4':
ASTable.update({cEigrpVrfId:{'ServiceText': '%s VRF %s' % (cEigrpAS, cEigrpVrfName), 'cEigrpVrfId': cEigrpVrfId}})
elif cEigrpVrfName != 'default' and cEigrpAddrFammily == 'IPv6':
ASTable.update({cEigrpVrfId:{'ServiceText': '%s IPv6 VRF %s' % (cEigrpAS, cEigrpVrfName), 'cEigrpVrfId': cEigrpVrfId}})
return [ASTable, ASInfoTable]
###########################################################################
#
# INVENTORY function
#
###########################################################################
def inventory_cisco_eigrp_as_info(parsed):
ASTable, ASInfoTable = parsed
ASTable = dict(ASTable)
for Key in ASTable.keys():
ServiceText = ASTable.get(Key).get('ServiceText')
yield ServiceText, {}
###########################################################################
#
# CHECK function
#
###########################################################################
def check_cisco_eigrp_as_info(item, params, parsed):
ASTable, ASInfoTable = parsed
ASTable = dict(ASTable)
cEigrpVrfId = ''
for Key in ASTable.keys():
ServiceText = ASTable.get(Key).get('ServiceText')
if ServiceText == item:
cEigrpVrfId = ASTable.get(Key).get('cEigrpVrfId')
if cEigrpVrfId != '':
state = 0
infotext = ''
longoutput = ''
perfdata = []
for AS in ASInfoTable:
if AS.get('cEigrpVrfId') == cEigrpVrfId:
cEigrpNbrCount = AS.get('cEigrpNbrCount')
cEigrpHellosSent = AS.get('cEigrpHellosSent')
cEigrpHellosRcvd = AS.get('cEigrpHellosRcvd')
cEigrpUpdatesSent = AS.get('cEigrpUpdatesSent')
cEigrpUpdatesRcvd = AS.get('cEigrpUpdatesRcvd')
cEigrpQueriesSent = AS.get('cEigrpQueriesSent')
cEigrpQueriesRcvd = AS.get('cEigrpQueriesRcvd')
cEigrpRepliesSent = AS.get('cEigrpRepliesSent')
cEigrpRepliesRcvd = AS.get('cEigrpRepliesRcvd')
cEigrpAcksSent = AS.get('cEigrpAcksSent')
cEigrpAcksRcvd = AS.get('cEigrpAcksRcvd')
cEigrpInputQHighMark = AS.get('cEigrpInputQHighMark')
cEigrpInputQDrops = AS.get('cEigrpInputQDrops')
cEigrpSiaQueriesSent = AS.get('cEigrpSiaQueriesSent')
cEigrpSiaQueriesRcvd = AS.get('cEigrpSiaQueriesRcvd')
cEigrpAsRouterId = AS.get('cEigrpAsRouterId')
cEigrpTopoRoutes = AS.get('cEigrpTopoRoutes')
cEigrpXmitPendReplies = AS.get('cEigrpXmitPendReplies')
state = 0
infotext = 'Router-ID: %s, neighbors: %s, Routes in topologie table: %s' % (cEigrpAsRouterId, cEigrpNbrCount, cEigrpTopoRoutes)
perfdata = [
('cEigrpNbrCount', cEigrpNbrCount),
('cEigrpHellosSent', get_rate('cisco_eigrp_as_info.%s.%s' % ('cEigrpHellosSent', item), time.time(), cEigrpHellosSent, onwrap=SKIP)),
('cEigrpHellosRcvd', get_rate('cisco_eigrp_as_info.%s.%s' % ('cEigrpHellosRcvd', item), time.time(), cEigrpHellosRcvd, onwrap=SKIP)),
('cEigrpUpdatesSent', cEigrpUpdatesSent),
('cEigrpUpdatesRcvd', cEigrpUpdatesRcvd),
('cEigrpQueriesSent', cEigrpQueriesSent),
('cEigrpQueriesRcvd', cEigrpQueriesRcvd),
('cEigrpRepliesSent', cEigrpRepliesSent),
('cEigrpRepliesRcvd', cEigrpRepliesRcvd),
('cEigrpAcksSent', cEigrpAcksSent),
('cEigrpAcksRcvd', cEigrpAcksRcvd),
('cEigrpInputQHighMark', cEigrpInputQHighMark),
('cEigrpInputQDrops', cEigrpInputQDrops),
('cEigrpSiaQueriesSent', cEigrpSiaQueriesSent),
('cEigrpSiaQueriesRcvd', cEigrpSiaQueriesRcvd),
('cEigrpTopoRoutes', cEigrpTopoRoutes),
('cEigrpXmitPendReplies', cEigrpXmitPendReplies),
]
return state, infotext + longoutput, perfdata
###########################################################################
#
# CHECK info
#
###########################################################################
check_info['cisco_eigrp_as_info'] = {
'check_function' : check_cisco_eigrp_as_info,
'inventory_function' : inventory_cisco_eigrp_as_info,
'service_description' : 'EIGRP AS number %s',
'has_perfdata' : True,
'snmp_scan_function' : lambda oid: oid('.1.3.6.1.2.1.1.1.0').lower().find('cisco') != -1 and
oid('.1.3.6.1.4.1.9.9.449.1.2.1.1.2.*'), # CISCO-EIGRP-MIB::cEigrpNbrCount
'group' : 'cisco_eigrp_as_info',
'default_levels_variable': 'cisco_eigrp_as_info_defaults',
'parse_function' : parse_cisco_eigrp_as_info,
'snmp_info' : [('.1.3.6.1.4.1.9.9.449.1.2.1.1', [OID_END, # AS number [0]
'2', # cEigrpNbrCount [1]
'3', # cEigrpHellosSent [2]
'4', # cEigrpHellosRcvd [3]
'5', # cEigrpUpdatesSent [4]
'6', # cEigrpUpdatesRcvd [5]
'7', # cEigrpQueriesSent [6]
'8', # cEigrpQueriesRcvd [7]
'9', # cEigrpRepliesSent [8]
'10', # cEigrpRepliesRcvd [9]
'11', # cEigrpAcksSent [10]
'12', # cEigrpAcksRcvd [11]
'13', # cEigrpInputQHighMark [12]
'14', # cEigrpInputQDrops [13]
'15', # cEigrpSiaQueriesSent [14]
'16', # cEigrpSiaQueriesRcvd [15]
'17', # cEigrpAsRouterIdType [16]
'18', # cEigrpAsRouterId [17]
'19', # cEigrpTopoRoutes [18]
'22', # cEigrpXmitPendReplies [19]
# '20', # cEigrpHeadSerial []
# '21', # cEigrpNextSerial []
# '23', # cEigrpXmitDummies []
]),
('.1.3.6.1.4.1.9.9.449.1.1.1.1', [OID_END, # VRF ID
'2', # cEigrpVpnName [0]
]),
],
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment