Module: check_mk
Branch: master
Commit: 7f4630645ac6194051a08a503798be293ea91894
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=7f4630645ac619…
Author: Marcel Arentz <ma(a)mathias-kettner.de>
Date: Wed Mar 15 16:27:33 2017 +0100
4539 FIX if_fortigate: transfered if-checks for fortigate devices into own checkplugin
Due incompatible usage of snmp information interface checks for fortigate
firewalls needed to be transfered into an own checkplugin.
This change is incompatible and you will have to rediscover your services
on fortigate firewall devices.
Change-Id: Ia49e4d77c7ba97fc5066fdcee337220ea8d1abc7
---
.werks/4539 | 14 +++++++++++
checkman/if_fortigate | 10 ++++++++
checks/if64.include | 57 ++++++++++++++++++++---------------------
checks/if_fortigate | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 123 insertions(+), 28 deletions(-)
diff --git a/.werks/4539 b/.werks/4539
new file mode 100644
index 0000000..b4b168c
--- /dev/null
+++ b/.werks/4539
@@ -0,0 +1,14 @@
+Title: if_fortigate: transfered if-checks for fortigate devices into own checkplugin
+Level: 1
+Component: checks
+Compatible: incomp
+Edition: cre
+Version: 1.5.0i1
+Date: 1489591394
+Class: fix
+
+Due incompatible usage of snmp information interface checks for fortigate
+firewalls needed to be transfered into an own checkplugin.
+
+This change is incompatible and you will have to rediscover your services
+on fortigate firewall devices.
diff --git a/checkman/if_fortigate b/checkman/if_fortigate
new file mode 100644
index 0000000..f59c9ed
--- /dev/null
+++ b/checkman/if_fortigate
@@ -0,0 +1,10 @@
+title: Fortigate devices: Network interfaces via standard MIB using 64 Bit counters
+agents: snmp
+catalog: hw/network/fortinet
+license: GPL
+distribution: check_mk
+description:
+ This check does exactly the same as {if64} but retrieves {ifName} instead
+ of {ifAlias}, because {ifAlias} is not useful in Fortigate firewalls.
+
+ Please refer to the if64 manpage for documentation.
diff --git a/checks/if64.include b/checks/if64.include
index 69853ce..8e3ff6a 100644
--- a/checks/if64.include
+++ b/checks/if64.include
@@ -49,50 +49,51 @@ def need_if64adm():
def if64_scan_function(oid, use_if64adm):
- if need_if64adm() != use_if64adm:
- return False
-
ignored_strings = [
"LANCOM",
"ELSA",
"T-Systems",
"Brocade VDX Switch",
+
+ ".4.1.11863.",
+ ".1.3.6.1.4.1.12356"
]
+
for string in ignored_strings:
- if string in oid(".1.3.6.1.2.1.1.1.0"):
+ if string in oid(".1.3.6.1.2.1.1.1.0") or \
+ string in oid(".1.3.6.1.2.1.1.2.0"):
return False
- if ".4.1.11863." in oid(".1.3.6.1.2.1.1.2.0"):
- return False
-
- if if64_disabled(g_hostname):
+ if need_if64adm() != use_if64adm or \
+ if64_disabled(g_hostname):
return False
if oid(".1.3.6.1.2.1.31.1.1.1.6.*") != None:
return True
+
return False
if64_snmp_end_oids = [
- "2.2.1.1", # ifIndex 0
- "2.2.1.2", # ifDescr 1
- "2.2.1.3", # ifType 2
- "2.2.1.5", # ifSpeed 3
- "2.2.1.8", # ifOperStatus 4
- "31.1.1.1.6", # ifHCInOctets 5
- "31.1.1.1.7", # ifHCInUcastPkts 6
- "31.1.1.1.8", # ifHCInMulticastPkts 7
- "31.1.1.1.9", # ifHCInBroadcastPkts 8
- "2.2.1.13", # ifInDiscards 9
- "2.2.1.14", # ifInErrors 10
- "31.1.1.1.10", # ifHCOutOctets 11
- "31.1.1.1.11", # ifHCOutUcastPkts 12
- "31.1.1.1.12", # ifHCOutMulticastPkts 13
- "31.1.1.1.13", # ifHCOutBroadcastPkts 14
- "2.2.1.19", # ifOutDiscards 15
- "2.2.1.20", # ifOutErrors 16
- "2.2.1.21", # ifOutQLen 17
- "31.1.1.1.18", # ifAlias 18
+ "2.2.1.1", # ifIndex 0
+ "2.2.1.2", # ifDescr 1
+ "2.2.1.3", # ifType 2
+ "2.2.1.5", # ifSpeed 3
+ "2.2.1.8", # ifOperStatus 4
+ "31.1.1.1.6", # ifHCInOctets 5
+ "31.1.1.1.7", # ifHCInUcastPkts 6
+ "31.1.1.1.8", # ifHCInMulticastPkts 7
+ "31.1.1.1.9", # ifHCInBroadcastPkts 8
+ "2.2.1.13", # ifInDiscards 9
+ "2.2.1.14", # ifInErrors 10
+ "31.1.1.1.10", # ifHCOutOctets 11
+ "31.1.1.1.11", # ifHCOutUcastPkts 12
+ "31.1.1.1.12", # ifHCOutMulticastPkts 13
+ "31.1.1.1.13", # ifHCOutBroadcastPkts 14
+ "2.2.1.19", # ifOutDiscards 15
+ "2.2.1.20", # ifOutErrors 16
+ "2.2.1.21", # ifOutQLen 17
+ "31.1.1.1.18", # ifAlias 18
BINARY("2.2.1.6"), # ifPhysAddress 19
- "31.1.1.1.15", # ifHighSpeed -1 (parse_if64 assumes this is
the last element)
+ "31.1.1.1.15", # ifHighSpeed -1 (parse_if64 assumes
this is the last element)
]
diff --git a/checks/if_fortigate b/checks/if_fortigate
new file mode 100644
index 0000000..01242f1
--- /dev/null
+++ b/checks/if_fortigate
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2014 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at
http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# tails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+
+def inventory_if_fortigate(parsed):
+ return inventory_if_common(parsed, has_nodeinfo=True)
+
+
+def check_if_fortigate(item, params, parsed):
+ return check_if_common(item, params, parsed, has_nodeinfo=True)
+
+
+check_info["if_fortigate"] = {
+ 'parse_function' : parse_if64,
+ 'inventory_function' : inventory_if_fortigate,
+ 'check_function' : check_if_fortigate,
+ 'service_description' : 'Interface %s',
+ 'snmp_info' : ( ".1.3.6.1.2.1", [
+ "2.2.1.1", # ifIndex
0
+ "2.2.1.2", # ifDescr
1
+ "2.2.1.3", # ifType
2
+ "2.2.1.5", # ifSpeed
3
+ "2.2.1.8", # ifOperStatus
4
+ "31.1.1.1.6", # ifHCInOctets
5
+ "31.1.1.1.7", #
ifHCInUcastPkts 6
+ "31.1.1.1.8", #
ifHCInMulticastPkts 7
+ "31.1.1.1.9", #
ifHCInBroadcastPkts 8
+ "2.2.1.13", # ifInDiscards
9
+ "2.2.1.14", # ifInErrors
10
+ "31.1.1.1.10", # ifHCOutOctets
11
+ "31.1.1.1.11", #
ifHCOutUcastPkts 12
+ "31.1.1.1.12", #
ifHCOutMulticastPkts 13
+ "31.1.1.1.13", #
ifHCOutBroadcastPkts 14
+ "2.2.1.19", # ifOutDiscards
15
+ "2.2.1.20", # ifOutErrors
16
+ "2.2.1.21", # ifOutQLen
17
+ "31.1.1.1.1", # ifName
18
+ BINARY("2.2.1.6"), # ifPhysAddress
19
+ "31.1.1.1.15", # ifHighSpeed
-1 (parse_if64 assumes this is the last element)
+ ]),
+ 'snmp_scan_function' : lambda oid:
oid(".1.3.6.1.2.1.1.2.0").startswith(".1.3.6.1.4.1.12356"),
+ 'has_perfdata' : True,
+ 'includes' : [ "if.include",
"if64.include" ],
+ 'group' : 'if',
+ 'node_info' : True,
+ 'default_levels_variable' : 'if_default_levels',
+}