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 556b3671 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent ae9b7183
No related branches found
No related tags found
No related merge requests found
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# License: GNU General Public License v2
#
# Author: thl-cmk[at]outlook[dot]com
# URL : https://thl-cmk.hopto.org
# Date : 2016-04-08
#
# writen by: Th.L thl-cmk[at]outlook[dot]com
#
# 22.08.2016 : removed index column
# 09.04.2017 : added wato enable/disable, remove columns
# 04.09.2018 : changes for CMK 1.5.x (inv_tree --> inv_tree_list)
#
import re
import time
import binascii
from typing import List, NamedTuple
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
OIDEnd,
OIDBytes,
)
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
register,
SNMPTree,
TableRow,
contains,
)
from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
StringTable,
InventoryResult,
)
_enable_disable = {
0: 'N/A',
1: 'enabled',
2: 'disabled',
}
_isaclapplied = {
0: 'n/a',
1: 'true',
2: 'false',
3: 'notavailable',
}
_associationmode = {
0: 'n/a',
1: 'unknown',
2: 'wep',
3: 'wpa',
4: 'wpa2',
}
_authmode = {
0: 'none',
1: 'psk',
2: 'radius',
3: 'cckm',
4: 'wapipsk',
5: 'wapicert',
6: 'ftdot1x',
7: 'ftpsk',
8: 'pmfdot1x',
9: 'pmfpsk',
}
_reasoncode = {
0: 'n/a',
1: 'unspecified',
2: 'previousauthnotvalid',
3: 'deauthenticationleaving',
4: 'disassociationduetoinactivity',
5: 'disassociationapbusy',
6: 'class2framefromnonauthstation',
7: 'class2framefromnonassstation',
8: 'disassociationstahasleft',
9: 'stareqassociationwithoutauth',
10: 'invalidinformationelement',
11: 'groupcipherinvalid',
12: 'unicastcipherinvalid',
13: 'akmpinvalid',
14: 'unsupportedrsnversion',
15: 'invalidrsniecapabilities',
16: 'ciphersuiterejected',
17: 'missingreasoncode',
18: 'maxassociatedclientsreached',
19: 'maxassociatedclientsreachedonradio',
20: 'maxassociatedclientsreachedonwlan',
21: 'unspecifiedqosfailure',
22: 'qospolicymismatch',
23: 'insufficientbandwidth',
24: 'invalidqosparams',
}
_authentication = {
0: 'n/a',
1: 'unknown',
2: 'central',
3: 'local',
}
_dataswitching = {
0: 'n/a',
1: 'unknown',
2: 'central',
3: 'local',
}
_hreapapauth = {
0: 'n/a',
1: 'true',
2: 'false',
3: 'notapplicable',
}
_nacstate = {
0: 'n/a',
1: 'quarantine',
2: 'access',
}
_protocol = {
0: 'n/a',
1: '802.11a',
2: '802.11b',
3: '802.11g',
4: 'unknown',
5: 'mobile',
6: '802.11n 2,4Ghz',
7: '802.11n 5GHz',
8: 'ethernet',
9: 'dot3',
10: '802.11ac 5GHz'
}
_userauthtype = {
0: 'n/a',
1: 'open',
2: 'wepPsk',
3: 'portal',
4: 'simPeap',
5: 'other',
}
_wgbstatus = {
0: 'n/a',
1: 'wireless client',
2: 'wireless client via WGB',
3: 'WGB itself',
}
_clientstatus = {
0: 'n/a',
1: 'idle',
2: 'aaa Pending',
3: 'authenticated',
4: 'associated',
5: 'powersave',
6: 'disassociated',
7: 'to be deleted',
8: 'probing',
9: 'excluded',
}
_interfacetype = {
0: 'n/a',
1: '802.11bg',
2: '802.11a',
3: 'Ultra wideband',
4: '802.11abgn',
5: '802.11ac',
6: '802.11b',
7: '802.11g',
8: '802.11n 2.4GHz',
9: '802.11n 5GHz',
10: 'unknown',
}
_powersavemode = {
0: 'n/a',
1: 'active',
2: 'powersave',
}
def _render_mac_address(bytestring):
return ':'.join(['%02s' % hex(ord(m))[2:] for m in bytestring]).replace(' ', '0').upper()
def parse_inv_cisco_wlc_clients(string_table: StringTable):
clients = []
for client in string_table:
macaddress, status, wlanprofilename, wgbstatus, wgbmacaddress, protocol, associationmode, \
apmacaddress, iftype, ipaddress, nacstate, quarantinevlan, accessvlan, logintime, uptime, \
powersavemode, currenttxrateset, datarateset, hreapapauth, ieee80211ucapable, posturestate, \
aclname, aclapplied, redirecturl, aaaoverrideaclname, aaaoverrideaclapplied, username, \
ssid, securitytagid, typekts, ipv6aclname, ipv6aclapplied, dataswitching, authentication, \
channel, authmode, reasoncode, sessionid, aproammacaddress, mdnsprofile, mdnsadvcount, \
policyname, aaarole, devicetype, userauthtype = client
clients.append({
'macaddress': _render_mac_address(macaddress),
'username': username,
'status_columns': {
'status': _clientstatus.get(int(status)),
'wlanprofilename': wlanprofilename,
'wgbstatus': _wgbstatus.get(int(wgbstatus)),
'wgbmacaddress': wgbmacaddress,
'protocol': _protocol.get(int(protocol)),
'associationmode': _associationmode.get(int(associationmode)),
'apmacaddress': _render_mac_address(apmacaddress),
'iftype': _interfacetype.get(int(iftype)),
'ipaddress': ipaddress,
'nacstate': _nacstate.get(int(nacstate)),
'quarantinevlan': quarantinevlan,
'accessvlan': accessvlan,
'logintime': logintime,
'uptime': uptime,
'powersavemode': _powersavemode.get(int(powersavemode)),
'currenttxrateset': currenttxrateset,
'datarateset': datarateset,
'hreapapauth': _hreapapauth.get(int(hreapapauth)),
'ieee80211ucapable': _enable_disable.get(int(ieee80211ucapable)),
'posturestate': _enable_disable.get(int(posturestate)),
'aclname': aclname,
'aclapplied': _isaclapplied.get(int(aclapplied)),
'redirecturl': redirecturl,
'aaaoverrideaclname': aaaoverrideaclname,
'aaaoverrideaclapplied': _isaclapplied.get(int(aaaoverrideaclapplied)),
'ssid': ssid,
'securitytagid': securitytagid,
'typekts': _enable_disable.get(int(typekts)),
'ipv6aclname': ipv6aclname,
'ipv6aclapplied': _isaclapplied.get(int(ipv6aclapplied)),
'dataswitching': _dataswitching.get(int(dataswitching)),
'authentication': _authentication.get(int(authentication)),
'channel': channel,
'authmode': _authmode.get(int(authmode)),
'reasoncode': _reasoncode.get(int(reasoncode)),
'sessionid': sessionid,
'aproammacaddress': _render_mac_address(aproammacaddress),
'mdnsprofile': mdnsprofile,
'mdnsadvcount': mdnsadvcount,
'policyname': policyname,
'aaarole': aaarole,
'devicetype': devicetype,
'userauthtype': _userauthtype.get(int(userauthtype)),
},
})
return clients
def inventory_cisco_wlc_clients(params, section) -> InventoryResult:
removecolumns = []
if params:
removecolumns = params.get('removecolumns', removecolumns)
path = ['networking', 'wlan', 'controller', 'clients']
for client in section:
key_columns = {'username': client['username']} # 'macaddress': client['macaddress'],
for key in key_columns.keys():
client.pop(key)
status_columns = client['status_columns']
client.pop('status_columns')
for entry in removecolumns:
try:
client.pop(entry)
except KeyError:
pass
for entry in removecolumns:
try:
status_columns.pop(entry)
except KeyError:
pass
yield TableRow(
path=path,
key_columns=key_columns,
inventory_columns=client,
status_columns=status_columns,
)
register.snmp_section(
name='inv_cisco_wlc_clients',
parse_function=parse_inv_cisco_wlc_clients,
fetch=
SNMPTree(
base='.1.3.6.1.4.1.9.9.599.1.3.1.1', # CISCO-LWAPP-DOT11-CLIENT-MIB::cldcClientEntry
oids=[
'1', # cldcClientMacAddress
'2', # cldcClientStatus
'3', # cldcClientWlanProfileName
'4', # cldcClientWgbStatus
'5', # cldcClientWgbMacAddress
'6', # cldcClientProtocol
'7', # cldcAssociationMode
'8', # cldcApMacAddress
'9', # cldcIfType
'10', # cldcClientIPAddress
'11', # cldcClientNacState
'12', # cldcClientQuarantineVLAN
'13', # cldcClientAccessVLAN
'14', # cldcClientLoginTime
'15', # cldcClientUpTime
'16', # cldcClientPowerSaveMode
'17', # cldcClientCurrentTxRateSet
'18', # cldcClientDataRateSet
'19', # cldcClientHreapApAuth
'20', # cldcClient80211uCapable
'21', # cldcClientPostureState
'22', # cldcClientAclName
'23', # cldcClientAclApplied
'24', # cldcClientRedirectUrl
'25', # cldcClientAaaOverrideAclName
'26', # cldcClientAaaOverrideAclApplied
'27', # cldcClientUsername
'28', # cldcClientSSID
'29', # cldcClientSecurityTagId
'30', # cldcClientTypeKTS
'31', # cldcClientIpv6AclName
'32', # cldcClientIpv6AclApplied
'33', # cldcClientDataSwitching
'34', # cldcClientAuthentication
'35', # cldcClientChannel
'36', # cldcClientAuthMode
'37', # cldcClientReasonCode
'38', # cldcClientSessionID
'39', # cldcClientApRoamMacAddress
'40', # cldcClientMdnsProfile
'41', # cldcClientMdnsAdvCount
'42', # cldcClientPolicyName
'43', # cldcClientAAARole
'44', # cldcClientDeviceType
'45', # cldcUserAuthType
]
),
detect=contains('.1.3.6.1.2.1.1.1.0', 'Cisco Controller'), # sysDescr
)
register.inventory_plugin(
name='inv_cisco_wlc_clients',
inventory_function=inventory_cisco_wlc_clients,
inventory_default_parameters={},
inventory_ruleset_name='inv_cisco_wlc_clients',
)
No preview for this file type
{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': u'SNMP inventory of Cisco WLC clients.\n\nVia WATO you can:\n - enable/disable this inventory\n - can add/remove some fields\n\nTested with Cisco WLC 5520/5505/2504.\n\n2020-03.15: added support for CMK1.6x\n',
{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
'description': 'SNMP inventory of Cisco WLC clients.\n'
'\n'
'Via WATO you can:\n'
' - can add/remove some fields\n'
'\n'
'Tested with Cisco WLC 5520/5505/2504.\n'
'\n'
'2020-03.15: added support for CMK1.6x\n'
'2021-07-12: rewritten for CMK 2.0\n',
'download_url': 'http://thl-cmk.hopto.org',
'files': {'inventory': ['snmp_cisco_wlc_clients'],
'web': ['plugins/views/inv_wlc_clients.py',
'plugins/wato/inv_wlc_clients.py']},
'files': {'agent_based': ['inv_cisco_wlc_clients.py'],
'web': ['plugins/views/inv_cisco_wlc_clients.py',
'plugins/wato/inv_cisco_wlc_clients.py']},
'name': 'inv_cisco_wlc_clients',
'num_files': 3,
'title': u'inventory of cisco WLC clients',
'version': '20200513.v0.2c',
'version.min_required': '1.4.0p1',
'version.packaged': '1.6.0p8'}
\ No newline at end of file
'title': 'inventory of cisco WLC clients',
'version': '20210712.v0.3',
'version.min_required': '2.0.0',
'version.packaged': '2021.04.10',
'version.usable_until': None}
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cmk.gui.utils
from cmk.gui.plugins.views import (
inventory_displayhints,)
from cmk.gui.i18n import _
inventory_displayhints.update({
'.networking.wlan.controller.clients:': {'title' : _('WLC clients'),
'keyorder': ['username', 'uptime', 'ipaddress', 'apmacaddress', 'ssid',
'channel', 'accessvlan', 'devicetype', 'protocol', 'status',
],
'view' : 'invwlcclients_of_host'},
'.networking.wlan.controller.clients:*.macaddress' : { 'title' : _('MAC Addresse'), },
'.networking.wlan.controller.clients:*.status' : { 'title' : _('Status'), },
'.networking.wlan.controller.clients:*.wlanprofilename' : { 'title' : _('WLAN profile name'), },
'.networking.wlan.controller.clients:*.wgbstatus' : { 'title' : _('WGB status'), },
'.networking.wlan.controller.clients:*.wgbmacaddress' : { 'title' : _('WGB MAC address'), },
'.networking.wlan.controller.clients:*.protocol' : { 'title' : _('Protocol'), },
'.networking.wlan.controller.clients:*.associationmode' : { 'title' : _('Association mode'), },
'.networking.wlan.controller.clients:*.apmacaddress' : { 'title' : _('AP MAC address'), },
'.networking.wlan.controller.clients:*.iftype' : { 'title' : _('Interface type'), },
'.networking.wlan.controller.clients:*.ipaddress' : { 'title' : _('IP address'), },
'.networking.wlan.controller.clients:*.nacstate' : { 'title' : _('NAC state'), },
'.networking.wlan.controller.clients:*.quarantinevlan' : { 'title' : _('Quarantine VLAN'), },
'.networking.wlan.controller.clients:*.accessvlan' : { 'title' : _('Access VLAN'), },
'.networking.wlan.controller.clients:*.logintime' : { 'title' : _('Login time'), },
'.networking.wlan.controller.clients:*.uptime' : { 'title' : _('Uptime'), },
'.networking.wlan.controller.clients:*.powersavemode' : { 'title' : _('Power save mode'), },
'.networking.wlan.controller.clients:*.currenttxrateset' : { 'title' : _('Current TX rate (MBit/s)'), },
'.networking.wlan.controller.clients:*.datarateset' : { 'title' : _('Data rate set'), },
'.networking.wlan.controller.clients:*.hreapapauth' : { 'title' : _('HREAP AP auth'), },
'.networking.wlan.controller.clients:*.ieee80211ucapable' : { 'title' : _('802.11u capable'), },
'.networking.wlan.controller.clients:*.posturestate' : { 'title' : _('Posture state'), },
'.networking.wlan.controller.clients:*.aclname' : { 'title' : _('ACL name'), },
'.networking.wlan.controller.clients:*.aclapplied' : { 'title' : _('ACL applied'), },
'.networking.wlan.controller.clients:*.redirecturl' : { 'title' : _('Redirect URL'), },
'.networking.wlan.controller.clients:*.aaaoverrideaclname' : { 'title' : _('AAA overide ACL name'), },
'.networking.wlan.controller.clients:*.aaaoverrideaclapplied' : { 'title' : _('AAA overide ACL applied'), },
'.networking.wlan.controller.clients:*.username' : { 'title' : _('Username'), },
'.networking.wlan.controller.clients:*.ssid' : { 'title' : _('SSID'), },
'.networking.wlan.controller.clients:*.securitytagid' : { 'title' : _('Security tag ID'), },
'.networking.wlan.controller.clients:*.typekts' : { 'title' : _('NEC KTS SIP client'), },
'.networking.wlan.controller.clients:*.ipv6aclname' : { 'title' : _('IPv6 ACL name'), },
'.networking.wlan.controller.clients:*.ipv6aclapplied' : { 'title' : _('IPv6 ACL applied'), },
'.networking.wlan.controller.clients:*.dataswitching' : { 'title' : _('Data switching'), },
'.networking.wlan.controller.clients:*.authentication' : { 'title' : _('Authentication'), },
'.networking.wlan.controller.clients:*.channel' : { 'title' : _('Channel'), },
'.networking.wlan.controller.clients:*.authmode' : { 'title' : _('Auth mode'), },
'.networking.wlan.controller.clients:*.reasoncode' : { 'title' : _('Reason code'), },
'.networking.wlan.controller.clients:*.sessionid' : { 'title' : _('Session ID'), },
'.networking.wlan.controller.clients:*.aproammacaddress' : { 'title' : _('AP roam MAC address'), },
'.networking.wlan.controller.clients:*.mdnsprofile' : { 'title' : _('mDNS profile'), },
'.networking.wlan.controller.clients:*.mdnsadvcount' : { 'title' : _('mDNS adv count'), },
'.networking.wlan.controller.clients:*.policyname' : { 'title' : _('Policy name'), },
'.networking.wlan.controller.clients:*.aaarole' : { 'title' : _('AAA role'), },
'.networking.wlan.controller.clients:*.devicetype' : { 'title' : _('Device type'), },
'.networking.wlan.controller.clients:*.userauthtype' : { 'title' : _('User auth type'), },
# '.networking.wlan.controller.clients:*.certificate_type' : { 'title' : _('Certificate type'), 'short' : _('Cert type'), 'filter' : visuals.FilterInvtableWLCCertType, 'paint' : 'wlc_cert_type' },
})
from cmk.gui.plugins.views.inventory import declare_invtable_view
declare_invtable_view('invwlcclients', '.networking.wlan.controller.clients:', _('WLC clients'), _('WLC clients'))
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#
from cmk.gui.i18n import _
from cmk.gui.plugins.wato import (
HostRulespec,
rulespec_registry,
)
from cmk.gui.valuespec import (
Dictionary,
ListChoice,
)
from cmk.gui.plugins.wato.inventory import (
RulespecGroupInventory,
)
removecolumns = [
('ieee80211ucapable', '802.11u capable'),
('aaaoverrideaclapplied', 'AAA overide ACL applied'),
('aaaoverrideaclname', 'AAA overide ACL name'),
('aaarole', 'AAA role'),
('accessvlan', 'Access VLAN'),
('aclapplied', 'ACL applied'),
('aclname', 'ACL name'),
# ('apmacaddress' ,'AP MAC address'),
('aproammacaddress', 'AP roam MAC address'),
('associationmode', 'Association mode'),
('authentication', 'Authentication'),
('authmode', 'Auth mode'),
# ('channel' ,'Channel'),
('currenttxrateset', 'Current TX rate (MBit/s)'),
('datarateset', 'Data rate set'),
('dataswitching', 'Data switching'),
# ('devicetype' ,'Device type'),
('hreapapauth', 'HREAP AP auth'),
('iftype', 'Interface type'),
# ('ipaddress' ,'IP address'),
('ipv6aclapplied', 'IPv6 ACL applied'),
('ipv6aclname', 'IPv6 ACL name'),
('logintime', 'Login time'),
('macaddress', 'MAC Addresse'),
('mdnsadvcount', 'mDNS adv count'),
('mdnsprofile', 'mDNS profile'),
('nacstate', 'NAC state'),
('policyname', 'Policy name'),
('posturestate', 'Posture state'),
('powersavemode', 'Power save mode'),
# ('protocol' ,'Protocol'),
('quarantinevlan', 'Quarantine VLAN'),
('reasoncode', 'Reason code'),
('redirecturl', 'Redirect URL'),
('securitytagid', 'Security tag ID'),
('sessionid', 'Session ID'),
# ('ssid' ,'SSID'),
# ('status' ,'Status'),
('typekts', 'NEC KTS SIP client'),
# ('uptime' ,'Uptime'),
('userauthtype', 'User auth type'),
# ('username' ,'Username'),
('wgbmacaddress', 'WGB MAC address'),
('wgbstatus', 'WGB status'),
('wlanprofilename', 'WLAN profile name'),
]
def _valuespec_inv_cisco_wlc_clients():
return Dictionary(
title=_('Cisco WLC Client inventory'),
elements=[
('removecolumns',
ListChoice(
title=_('list of columns to remove'),
help=_('information to remove from inventory'),
choices=removecolumns,
default_value=[
],
)),
],
)
rulespec_registry.register(
HostRulespec(
group=RulespecGroupInventory,
match_type='dict',
name='inv_cisco_wlc_clients',
valuespec=_valuespec_inv_cisco_wlc_clients,
))
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