diff --git a/agent_based/inv_cisco_wlc_aps_lwap.py b/agent_based/inv_cisco_wlc_aps_lwap.py new file mode 100644 index 0000000000000000000000000000000000000000..97253c46e68fbf8a4d595026b3c8111ec2e135a3 --- /dev/null +++ b/agent_based/inv_cisco_wlc_aps_lwap.py @@ -0,0 +1,419 @@ +# !/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 +# +# inventory of cisco wlc aps +# +# 2016-08-22 : removed index column +# 2018-08-04 : changed scan function, code cleanup +# 2018-09-04 : changes for CMK 1.5.x (inv_tree --> inv_tree_list) +# 2021-07-11 : rewritten for CMK 2.0 + +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, +) + +_last_reboot_reason = { + 0: 'none', + 1: 'dot11gModeChange', + 2: 'ipAddressSet', + 3: 'ipAddressReset', + 4: 'rebootFromController', + 5: 'dhcpFallbackFail', + 6: 'discoveryFail', + 7: 'noJoinResponse', + 8: 'denyJoin', + 9: 'noConfigResponse', + 10: 'configController', + 11: 'imageUpgradeSuccess', + 12: 'imageOpcodeInvalid', + 13: 'imageCheckSumInvalid', + 14: 'imageDataTimeout', + 15: 'configFileInvalid', + 16: 'imageDownloadError', + 17: 'rebootFromConsole', + 18: 'rapOverAir', + 19: 'powerLow', + 20: 'crash', + 21: 'powerHigh', + 22: 'powerLoss', + 23: 'powerChange', + 24: 'componentFailure', + 25: 'watchdog', +} + +_enable_disable = { + 0: 'N/A', + 1: 'enabled', + 2: 'disabled', +} + +_failover_pirority = { + 0: 'N/A', + 1: 'low', + 2: 'medium', + 3: 'high', + 4: 'critical', +} + +_power_status = { + 0: 'N/A', + 1: 'low', + 2: '15.4W', + 3: '16.8W', + 4: 'full', + 5: 'external', + 6: 'mixedmode', +} + +_pwr_injector_selection = { + 0: 'N/A', + 1: 'unknown', + 2: 'installed', + 3: 'override', +} + +_monitor_mode_optimization = { + 0: 'N/A', + 1: 'all', + 2: 'tracking', + 3: 'wips', + 4: 'none', +} + +_encryption_supported = { + 0: 'N/A', + 1: 'yes', + 2: 'no', +} + +_inet_address_type = { + 0: 'N/A', + 1: 'ipv4', + 2: 'ipv6', + 3: 'ipv4z', + 4: 'ipv6z', + 16: 'dns', +} + +_antenna_band_mode = { + 0: 'N/A', + 1: 'not applicable', + 2: 'single', + 3: 'dual', +} + +_venueconfigvenuegroup = { + 0: 'N/A', + 1: 'unspecified', + 2: 'assembly', + 3: 'business', + 4: 'educational', + 5: 'factory and industrial', + 6: 'institutional', + 7: 'mercantile', + 8: 'residential', + 9: 'storage', + 10: 'utility and misc', + 11: 'vehicular', + 12: 'outdoor', +} + +_venueconfigvenuetype = { + 0: 'N/A', + 1: 'unspecified', + 2: 'unspecified assembly', + 3: 'arena', + 4: 'stadium', + 5: 'passenger terminal', + 6: 'amphitheater', + 7: 'amusement park', + 8: 'place of worship', + 9: 'convention center', + 10: 'library', + 11: 'museum', + 12: 'restaurant', + 13: 'theater', + 14: 'bar', + 15: 'coffee shop', + 16: 'zoo or aquarium', + 17: 'emergency coordination center', + 18: 'unspecified business', + 19: 'doctor or dentist office', + 20: 'bank', + 21: 'firestation', + 22: 'policestation', + 23: 'postoffice', + 24: 'professional office', + 25: 'research and development facility', + 26: 'attorney office', + 27: 'unspecified educational', + 28: 'school primary', + 29: 'school secondary', + 30: 'university or college', + 31: 'unspecified factory and industrial', + 32: 'factory', + 33: 'unspecified institutional', + 34: 'hospital', + 35: 'longterm carefacility', + 36: 'alcohol and drug rehabilitation center', + 37: 'group home', + 38: 'prison or jail', + 39: 'unspecified mercantile', + 40: 'retail store', + 41: 'grocery market', + 42: 'auomotive service station', + 43: 'shoppin gmall', + 44: 'gas station', + 45: 'unspecified residential', + 46: 'privat eresidence', + 47: 'hotel or motel', + 48: 'dormitory', + 49: 'boarding house', + 50: 'unspecified storage', + 51: 'unspecified utility', + 52: 'unspecified vehicular', + 53: 'automobile or truck', + 54: 'airplane', + 55: 'bus', + 56: 'ferry', + 57: 'ship or boat', + 58: 'train', + 59: 'motorbike', + 60: 'unspecified outdoor', + 61: 'muni mesh network', + 62: 'citypark', + 63: 'restarea', + 64: 'traffic control', + 65: 'busstop', + 66: 'kiosk', +} + +_apsubmode = { + 0: 'N/A', + 1: 'none', + 2: 'wips', + 3: 'pppoe', + 4: 'pppoewips', +} + + +def _render_mac_address(bytestring): + return ':'.join(['%02s' % hex(ord(m))[2:] for m in bytestring]).replace(' ', '0').upper() + + +def _render_ip_address(bytestring): + return '.'.join(['%s' % ord(m) for m in bytestring]) + + +def parse_inv_cisco_wlc_aps_lwap(string_table: StringTable): + aps = [] + + for ap in string_table: + wlcprimaryaddress = ap[5] + if _inet_address_type.get(int(ap[4])) == 'ipv4': + wlcprimaryaddress = _render_ip_address(wlcprimaryaddress) + + wlcsecondaryaddress = ap[7] + if _inet_address_type.get(int(ap[6])) == 'ipv4': + wlcsecondaryaddress = _render_ip_address(wlcsecondaryaddress) + + wlctertiaryaddress = ap[9] + if _inet_address_type.get(int(ap[8])) == 'ipv4': + wlctertiaryaddress = _render_ip_address(wlctertiaryaddress) + + aps.append({ + 'if_mac_address': _render_mac_address(ap[0]), + 'max_#_of_dot11_slots': ap[1], + 'name': ap[2], + 'max_#_of_ethernet_slots': ap[3], + 'encryption_supported': _encryption_supported.get(int(ap[23])), + 'tcp_mss': ap[25], + 'data_encryption': _enable_disable.get(int(ap[26])), + 'port_number': ap[28], + 'venue_config_venue_group': _venueconfigvenuegroup.get(int(ap[29])), + 'venue_config_venue_type': _venueconfigvenuetype.get(int(ap[30])), + 'venue_config_venue_name': ap[31], + 'venue_config_language': ap[32], + 'trunk_vlan': ap[34], + 'location': ap[36], + 'floor_label': ap[45], + 'module_inserted': ap[49], + 'status_columns': { + 'antenna_band_mode': _antenna_band_mode.get(int(ap[48])), + 'encryption': _enable_disable.get(int(ap[11])), + 'failover_priority': _failover_pirority.get(int(ap[12])), + 'power_status': _power_status.get(int(ap[13])), + 'telnet': _enable_disable.get(int(ap[14])), + 'ssh': _enable_disable.get(int(ap[15])), + 'pwr_pre_std_state': _enable_disable.get(int(ap[16])), + 'pwr_injector_state': _enable_disable.get(int(ap[17])), + 'pwr_injector_selection': _pwr_injector_selection.get(int(ap[18])), + 'pwr_injector_sw_mac_addr': _render_mac_address(ap[19]), + 'wips': _enable_disable.get(int(ap[20])), + 'monitor_mode_optimization': _monitor_mode_optimization.get(int(ap[18])), + 'amsdu': _enable_disable.get(int(ap[22])), + 'admin': _enable_disable.get(int(ap[27])), + 'rogue_detection': _enable_disable.get(int(ap[24])), + 'led_state': _enable_disable.get(int(ap[33])), + 'trunk_vlan_status': _enable_disable.get(int(ap[35])), + 'submode': _apsubmode.get(int(ap[37])), + 'real_time_stats_mode_enabled': _enable_disable.get(int(ap[38])), + 'upgrade_from_version': ap[39], + 'upgrade_to_version': ap[40], + 'upgrade_failure_cause': ap[41], + 'adj_channel_rogue_enabled': ap[46], + 'sys_net_id': ap[47], + 'enable_module': _enable_disable.get(int(ap[50])), + 'is_universal': _enable_disable.get(int(ap[51])), + 'universal_prime_status': ap[52], + 'is_master': _enable_disable.get(int(ap[53])), + 'ble_fw_download_status': _enable_disable.get(int(ap[54])), + 'max_client_limit_number_trap': ap[42], + 'max_client_limit_cause': ap[43], + 'max_client_limit_set': _enable_disable.get(int(ap[44])), + 'wlc_primary_address': wlcprimaryaddress, + 'wlc_secondary_address': wlcsecondaryaddress, + 'wlc_tertiary_address': wlctertiaryaddress, + 'last_reboot_reason': _last_reboot_reason.get(int(ap[10])), + } + }) + + return aps + + +def inventory_wlc_aps_lwap(params, section) -> InventoryResult: + removecolumns = [] + + if params: + removecolumns = params.get('removecolumns', removecolumns) + + path = ['networking', 'wlan', 'controller', 'accesspoints_lwap'] + + for ap in section: + key_columns = {'if_mac_address': ap['if_mac_address']} + + for key in key_columns.keys(): + ap.pop(key) + + for entry in removecolumns: + try: + ap.pop(entry) + except KeyError: + pass + + status_columns = ap.get('status_columns', None) + for entry in removecolumns: + try: + status_columns.pop(entry) + except KeyError: + pass + + try: + ap.pop('status_columns') + except KeyError: + pass + + yield TableRow( + path=path, + key_columns=key_columns, + inventory_columns=ap, + status_columns=status_columns, + ) + +register.snmp_section( + name='inv_cisco_wlc_aps_lwap', + parse_function=parse_inv_cisco_wlc_aps_lwap, + fetch= + SNMPTree( + base='.1.3.6.1.4.1.9.9.513.1.1.1.1', # CISCO-LWAPP-AP-MIB::cLApEntry + oids=[ + '2', # cLApIfMacAddress (2) + '3', # cLApMaxNumberOfDot11Slots (3) + '5', # cLApName (5) + '9', # cLApMaxNumberOfEthernetSlots (9) + '10', # cLApPrimaryControllerAddressType (10) + '11', # cLApPrimaryControllerAddress (11) + '12', # cLApSecondaryControllerAddressType (12) + '13', # cLApSecondaryControllerAddress (13) + '14', # cLApTertiaryControllerAddressType (14) + '15', # cLApTertiaryControllerAddress (15) + '16', # cLApLastRebootReason (16) + '18', # cLApEncryptionEnable (18) + '19', # cLApFailoverPriority (19) + '20', # cLApPowerStatus (20) + '21', # cLApTelnetEnable (21) + '22', # cLApSshEnable (22) + '23', # cLApPreStdStateEnabled (23) + '24', # cLApPwrInjectorStateEnabled (24) + '25', # cLApPwrInjectorSelection (25) + '26', # cLApPwrInjectorSwMacAddr (26) + '27', # cLApWipsEnable (27) + '28', # cLApMonitorModeOptimization (28) + '32', # cLApAMSDUEnable (32) + '33', # cLApEncryptionSupported (33) + '34', # cLApRogueDetectionEnabled (34) + '35', # cLApTcpMss (35) + '36', # cLApDataEncryptionStatus (36) + '38', # cLApAdminStatus (38) + '39', # cLApPortNumber (39) + + '42', # cLApVenueConfigVenueGroup + '43', # cLApVenueConfigVenueType + '44', # cLApVenueConfigVenueName + '45', # cLApVenueConfigLanguage + '46', # cLApLEDState + '47', # cLApTrunkVlan + '48', # cLApTrunkVlanStatus + '49', # cLApLocation + '50', # cLApSubMode + '53', # cLApRealTimeStatsModeEnabled + '59', # cLApUpgradeFromVersion + '60', # cLApUpgradeToVersion + '61', # cLApUpgradeFailureCause + '62', # cLApMaxClientLimitNumberTrap + '63', # cLApMaxClientLimitCause + '64', # cLApMaxClientLimitSet + '65', # cLApFloorLabel + '69', # cLAdjChannelRogueEnabled + '74', # cLApSysNetId + '76', # cLApAntennaBandMode + '80', # cLApModuleInserted + '81', # cLApEnableModule + '82', # cLApIsUniversal + '83', # cLApUniversalPrimeStatus + '84', # cLApIsMaster + '85', # cLApBleFWDownloadStatus + ] + ), + detect=contains('.1.3.6.1.2.1.1.1.0', 'Cisco Controller'), # sysDescr +) + +register.inventory_plugin( + name='inv_cisco_wlc_aps_lwap', + inventory_function=inventory_wlc_aps_lwap, + inventory_default_parameters={}, + inventory_ruleset_name='inv_cisco_wlc_ap_cdp_cache', +) + diff --git a/inv_cisco_wlc_aps_lwap.mkp b/inv_cisco_wlc_aps_lwap.mkp index c544e9ee70eca43847305a4e6fe0333ade3b9315..60fe55d3ee0184f91851bac43d5010ea6ef68849 100644 Binary files a/inv_cisco_wlc_aps_lwap.mkp and b/inv_cisco_wlc_aps_lwap.mkp differ diff --git a/packages/inv_cisco_wlc_aps_lwap b/packages/inv_cisco_wlc_aps_lwap index ef6b7aaa84262ee6f68919b206a184999ee2c1a4..0a56736f9058c1089bf269ceb583e44898bfe8fc 100644 --- a/packages/inv_cisco_wlc_aps_lwap +++ b/packages/inv_cisco_wlc_aps_lwap @@ -1,12 +1,18 @@ -{'author': u'Th.L. (thl-cmk[at]outlook[dot]com)', - 'description': u'SNMP inventory for Cisco WLC APs (CISCO-LWAPP-AP-MIB).\nVia WATO you can:\n - enable/disable this inventory\n - can add/remove some fields\n\n2020-03.15: added support for CMK1.6x\n', +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'SNMP inventory for Cisco WLC APs (CISCO-LWAPP-AP-MIB).\n' + 'Via WATO you can:\n' + ' - can add/remove some fields\n' + '\n' + '2020-03.15: added support for CMK1.6x\n' + '2021-07-11: rewritten for CMK 2.0\n', 'download_url': 'http://thl-cmk.hopto.org', - 'files': {'inventory': ['snmp_cisco_wlc_aps_lwap'], - 'web': ['plugins/views/inv_wlc_aps_lwap.py', - 'plugins/wato/inv_wlc_aps_lwap.py']}, + 'files': {'agent_based': ['inv_cisco_wlc_aps_lwap.py'], + 'web': ['plugins/views/inv_cisco_wlc_aps_lwap.py', + 'plugins/wato/inv_cisco_wlc_aps_lwap.py']}, 'name': 'inv_cisco_wlc_aps_lwap', 'num_files': 3, - 'title': u'inventory for CISCO-LWAPP-AP-MIB', - 'version': '20200513.v0.3c', - 'version.min_required': '1.2.8b8', - 'version.packaged': '1.6.0p8'} \ No newline at end of file + 'title': 'inventory for CISCO-LWAPP-AP-MIB', + 'version': '20210711.v0.4', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.04.10', + 'version.usable_until': None} \ No newline at end of file diff --git a/web/plugins/views/inv_cisco_wlc_aps_lwap.py b/web/plugins/views/inv_cisco_wlc_aps_lwap.py new file mode 100644 index 0000000000000000000000000000000000000000..031798495b229d47b2f2620c6929153aacc1b00b --- /dev/null +++ b/web/plugins/views/inv_cisco_wlc_aps_lwap.py @@ -0,0 +1,72 @@ +#!/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.accesspoints_lwap:': {'title' : _('Access Points LWAP info'), + 'keyorder': ['name', 'if_mac_address', ], + 'view' : 'invwlcapslwap_of_host', + }, + '.networking.wlan.controller.accesspoints_lwap:*.name' : {'title': _('Name')}, + '.networking.wlan.controller.accesspoints_lwap:*.if_mac_address' : {'title': _('MAC Address')}, + '.networking.wlan.controller.accesspoints_lwap:*.admin' : {'title': _('Admin state')}, + '.networking.wlan.controller.accesspoints_lwap:*.last_reboot_reason' : {'title': _('Last reboot reason')}, + '.networking.wlan.controller.accesspoints_lwap:*.power_status' : {'title': _('Power status')}, + '.networking.wlan.controller.accesspoints_lwap:*.telnet' : {'title': _('Telnet enabled'), 'short': _('Telnet')}, + '.networking.wlan.controller.accesspoints_lwap:*.ssh' : {'title': _('SSH enabled'), 'short': _('SSH')}, + '.networking.wlan.controller.accesspoints_lwap:*.encryption_supported' : {'title': _('Encryption supported')}, + '.networking.wlan.controller.accesspoints_lwap:*.encryption' : {'title': _('Encryption enabled')}, + '.networking.wlan.controller.accesspoints_lwap:*.data_encryption' : {'title': _('Data encryption')}, + '.networking.wlan.controller.accesspoints_lwap:*.rogue_detection' : {'title': _('Rogue detection enabled'), 'short': _('Rouge detection')}, + '.networking.wlan.controller.accesspoints_lwap:*.pwr_injector_state' : {'title': _('Pow. inj. state')}, + '.networking.wlan.controller.accesspoints_lwap:*.pwr_injector_selection' : {'title': _('Pow. inj. selection')}, + '.networking.wlan.controller.accesspoints_lwap:*.pwr_pre_std_state' : {'title': _('PoE pre standard')}, + '.networking.wlan.controller.accesspoints_lwap:*.pwr_injector_sw_mac_addr' : {'title': _('Pow. inj. MAC address')}, + '.networking.wlan.controller.accesspoints_lwap:*.wlc_primary_address' : {'title': _('primary WLC')}, + '.networking.wlan.controller.accesspoints_lwap:*.wlc_secondary_address' : {'title': _('secondary WLC')}, + '.networking.wlan.controller.accesspoints_lwap:*.wlc_tertiary_address' : {'title': _('tertiary WLC')}, + + '.networking.wlan.controller.accesspoints_lwap:*.max_#_of_dot11_slots' : {'title': _('max # of dot11 slots')}, + '.networking.wlan.controller.accesspoints_lwap:*.max_#_of_ethernet_slots' : {'title': _('max # of ethernet slots')}, + '.networking.wlan.controller.accesspoints_lwap:*.failover_priority' : {'title': _('failover priority')}, + '.networking.wlan.controller.accesspoints_lwap:*.wips' : {'title': _('wireless IPS,')}, + '.networking.wlan.controller.accesspoints_lwap:*.monitor_mode_optimization' : {'title': _('monitor mode optimization')}, + '.networking.wlan.controller.accesspoints_lwap:*.amsdu' : {'title': _('Aggregate MAC Service Data Unit'), 'short': _('AMSDU')}, + '.networking.wlan.controller.accesspoints_lwap:*.tcp_mss' : {'title': _('TCP MSS')}, + '.networking.wlan.controller.accesspoints_lwap:*.port_number' : {'title': _('Port number'), 'short': _('Port #')}, + '.networking.wlan.controller.accesspoints_lwap:*.venue_config_venue_group' : {'title': _('Venue group')}, + '.networking.wlan.controller.accesspoints_lwap:*.venue_config_venue_type' : {'title': _('Venue type')}, + '.networking.wlan.controller.accesspoints_lwap:*.venue_config_venue_name' : {'title': _('Venue name')}, + '.networking.wlan.controller.accesspoints_lwap:*.venue_config_language' : {'title': _('Venue language')}, + '.networking.wlan.controller.accesspoints_lwap:*.led_state' : {'title': _('LED state')}, + '.networking.wlan.controller.accesspoints_lwap:*.trunk_vlan' : {'title': _('Mgmt VLAN ID')}, + '.networking.wlan.controller.accesspoints_lwap:*.trunk_vlan_status' : {'title': _('Mgmt VLAN tagged state')}, + '.networking.wlan.controller.accesspoints_lwap:*.location' : {'title': _('Location')}, + '.networking.wlan.controller.accesspoints_lwap:*.submode' : {'title': _('AP submode')}, + '.networking.wlan.controller.accesspoints_lwap:*.real_time_stats_mode_enabled' : {'title': _('Real time stats')}, + '.networking.wlan.controller.accesspoints_lwap:*.upgrade_from_version' : {'title': _('Upgrade from version')}, + '.networking.wlan.controller.accesspoints_lwap:*.upgrade_to_version' : {'title': _('Upgrade to version')}, + '.networking.wlan.controller.accesspoints_lwap:*.upgrade_failure_cause' : {'title': _('Upgrade failure cause')}, + '.networking.wlan.controller.accesspoints_lwap:*.max_client_limit_number_trap' : {'title': _('Max client limit')}, + '.networking.wlan.controller.accesspoints_lwap:*.max_client_limit_cause' : {'title': _('Max client cause')}, + '.networking.wlan.controller.accesspoints_lwap:*.max_client_limit_set' : {'title': _('Max client set')}, + '.networking.wlan.controller.accesspoints_lwap:*.floor_label' : {'title': _('Floor label')}, + '.networking.wlan.controller.accesspoints_lwap:*.adj_channel_rogue_enabled' : {'title': _('Adj. channel rogue')}, + '.networking.wlan.controller.accesspoints_lwap:*.sys_net_id' : {'title': _('Sys net ID')}, + '.networking.wlan.controller.accesspoints_lwap:*.antenna_band_mode' : {'title': _('Antenna band mode')}, + '.networking.wlan.controller.accesspoints_lwap:*.module_inserted' : {'title': _('Module inserted')}, + '.networking.wlan.controller.accesspoints_lwap:*.enable_module' : {'title': _('Module enabled')}, + '.networking.wlan.controller.accesspoints_lwap:*.is_universal' : {'title': _('AP is universal')}, + '.networking.wlan.controller.accesspoints_lwap:*.universal_prime_status' : {'title': _('AP universal prime status')}, + '.networking.wlan.controller.accesspoints_lwap:*.is_master' : {'title': _('AP is master')}, + '.networking.wlan.controller.accesspoints_lwap:*.ble_fw_download_status' : {'title': _('Ble FW downaload status')}, +}) + +from cmk.gui.plugins.views.inventory import declare_invtable_view + +declare_invtable_view('invwlcapslwap', '.networking.wlan.controller.accesspoints_lwap:', _('Cisco WLC APs LWAP info'), _('Cisco WLC APs LWAP info)')) diff --git a/web/plugins/wato/inv_cisco_wlc_aps_lwap.py b/web/plugins/wato/inv_cisco_wlc_aps_lwap.py new file mode 100644 index 0000000000000000000000000000000000000000..e2bb1515fc68873bdb2a29495be89bf59fe4d5ed --- /dev/null +++ b/web/plugins/wato/inv_cisco_wlc_aps_lwap.py @@ -0,0 +1,104 @@ +#!/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 = [ + ('adj_channel_rogue_enabled', 'Adj. channel rogue'), + ('admin', 'Admin state'), + ('amsdu', 'Aggregate MAC Service Data Unit'), + ('antenna_band_mode', 'Antenna band mode'), + ('is_master', 'AP is master'), + ('is_universal', 'AP is universal'), + ('submode', 'AP submode'), + ('universal_prime_status', 'AP universal prime status'), + ('ble_fw_download_status', 'Ble FW downaload status'), + ('data_encryption', 'Data encryption'), + ('encryption', 'Encryption enabled'), + ('encryption_supported', 'Encryption supported'), + ('failover_priority', 'failover priority'), + ('floor_label', 'Floor label'), + ('last_reboot_reason', 'Last reboot reason'), + ('led_state', 'LED state'), + ('location', 'Location'), + ('max_#_of_dot11_slots', 'max # of dot11 slots'), + ('max_#_of_ethernet_slots', 'max # of ethernet slots'), + ('max_client_limit_cause', 'Max client cause'), + ('max_client_limit_number_trap', 'Max client limit'), + ('max_client_limit_set', 'Max client set'), + ('trunk_vlan', 'Mgmt VLAN ID'), + ('trunk_vlan_status', 'Mgmt VLAN tagged state'), + ('enable_module', 'Module enabled'), + ('module_inserted', 'Module inserted'), + ('monitor_mode_optimization', 'monitor mode optimization'), + ('port_number', 'Port number'), + ('power_status', 'Power status'), + ('pwr_injector_selection', 'Pow. inj. selection'), + ('pwr_injector_state', 'Pow. inj. state'), + ('pwr_injector_sw_mac_addr', 'Pow. inj. MAC address'), + ('pwr_pre_std_state', 'PoE pre standard'), + ('real_time_stats_mode_enabled', 'Real time stats'), + ('rogue_detection', 'Rogue detection enabled'), + ('ssh', 'SSH enabled'), + ('sys_net_id', 'Sys net ID'), + ('tcp_mss', 'TCP MSS'), + ('telnet', 'Telnet enabled'), + ('upgrade_failure_cause', 'Upgrade failure cause'), + ('upgrade_from_version', 'Upgrade from version'), + ('upgrade_to_version', 'Upgrade to version'), + ('venue_config_language', 'Venue language'), + ('venue_config_venue_group', 'Venue group'), + ('venue_config_venue_name', 'Venue name'), + ('venue_config_venue_type', 'Venue type'), + ('wips', 'wireless IPS,'), + ('wlc_primary_address', 'primary WLC'), + ('wlc_secondary_address', 'secondary WLC'), + ('wlc_tertiary_address', 'tertiary WLC'), +] + + +def _valuespec_inv_cisco_wlc_aps_lwap(): + return Dictionary( + title=_('Cisco WLC AP LWAP info'), + elements=[ + ('removecolumns', + ListChoice( + title=_('list of columns to remove'), + help=_('information to remove from inventory'), + choices=removecolumns, + default_value=[ + 'adj_channel_rogue_enabled', 'amsdu', 'is_master', 'is_universal', 'submode', + 'universal_prime_status', 'max_client_limit_cause', 'ble_fw_download_status', 'antenna_band_mode', + 'module_inserted', 'floor_label', 'max_client_limit_set', 'enable_module', + 'pwr_injector_sw_mac_addr', 'pwr_injector_selection', 'pwr_injector_state', 'pwr_pre_std_state', + 'trunk_vlan', 'trunk_vlan_status', 'tcp_mss', 'monitor_mode_optimization', 'sys_net_id', + 'upgrade_failure_cause', 'upgrade_from_version', 'upgrade_to_version', 'venue_config_language', + 'venue_config_venue_group', 'venue_config_venue_name', 'port_number', 'venue_config_venue_type', + 'max_#_of_dot11_slots', 'max_#_of_ethernet_slots', 'failover_priority', 'wlc_primary_address', + 'wlc_secondary_address', 'wlc_tertiary_address' + ], + )), + ], + ) + + +rulespec_registry.register( + HostRulespec( + group=RulespecGroupInventory, + match_type='dict', + name='inv_parameters:inv_cisco_wlc_aps_lwap', + valuespec=_valuespec_inv_cisco_wlc_aps_lwap, + ))