From ddebe2d3e4f9fbef9e566dfb2cf62bee75cb43d5 Mon Sep 17 00:00:00 2001 From: Casey Schoonover Date: Thu, 28 Apr 2016 15:08:48 -0500 Subject: [PATCH 001/133] Added Barracuda NG firewall OS detection --- includes/definitions.php | 2209 +++++++++++++++++++++++ includes/discovery/os/barracuda.inc.php | 4 + 2 files changed, 2213 insertions(+) create mode 100644 includes/definitions.php diff --git a/includes/definitions.php b/includes/definitions.php new file mode 100644 index 0000000000..80965a62ba --- /dev/null +++ b/includes/definitions.php @@ -0,0 +1,2209 @@ +MySQL Error'; + if ($config['db']['extension'] == 'mysqli') { + echo mysqli_error($database_link); + } + else { + echo mysql_error(); + } +die; +} + +if ($config['db']['extension'] == 'mysqli') { + $database_db = mysqli_select_db($database_link, $config['db_name']); +} +else { + $database_db = mysql_select_db($config['db_name'], $database_link); +} + +if ($config['memcached']['enable'] === true) { + if (class_exists('Memcached')) { + $config['memcached']['ttl'] = 60; + $config['memcached']['resource'] = new Memcached(); + $config['memcached']['resource']->addServer($config['memcached']['host'], $config['memcached']['port']); + } + else { + echo "WARNING: You have enabled memcached but have not installed the PHP bindings. Disabling memcached support.\n"; + echo "Try 'apt-get install php5-memcached' or 'pecl install memcached'. You will need the php5-dev and libmemcached-dev packages to use pecl.\n\n"; + $config['memcached']['enable'] = 0; + } +} + +$clone = $config; +foreach (dbFetchRows('select config_name,config_value from config') as $obj) { + $clone = array_replace_recursive($clone, mergecnf($obj)); +} + +$config = array_replace_recursive($clone, $config); + +// +// NO CHANGES TO THIS FILE, IT IS NOT USER-EDITABLE # +// +// YES, THAT MEANS YOU # +// +umask(0002); + +$config['os']['default']['over'][0]['graph'] = 'device_processor'; +$config['os']['default']['over'][0]['text'] = 'Processor Usage'; +$config['os']['default']['over'][1]['graph'] = 'device_mempool'; +$config['os']['default']['over'][1]['text'] = 'Memory Usage'; + +$os_group = 'unix'; +$config['os_group'][$os_group]['type'] = 'server'; +$config['os_group'][$os_group]['processor_stacked'] = 1; +$config['os_group'][$os_group]['over'][0]['graph'] = 'device_processor'; +$config['os_group'][$os_group]['over'][0]['text'] = 'Processor Usage'; +$config['os_group'][$os_group]['over'][1]['graph'] = 'device_ucd_memory'; +$config['os_group'][$os_group]['over'][1]['text'] = 'Memory Usage'; + +$os = 'generic'; +$config['os'][$os]['text'] = 'Generic Device'; + +// Linux-based routers/switches +$os = 'vyatta'; +$config['os'][$os]['text'] = 'Vyatta'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'vyos'; +$config['os'][$os]['text'] = 'VyOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'viprinux'; +$config['os'][$os]['text'] = 'Viprinux'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'viprinux'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; + +$os = 'edgeos'; +$config['os'][$os]['text'] = 'EdgeOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'infinity'; +$config['os'][$os]['text'] = 'LigoWave Infinity'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'ligowave'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +// Ubiquiti +$os = 'unifi'; +$config['os'][$os]['text'] = 'Ubiquiti UniFi'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'ubiquiti'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'airos'; +$config['os'][$os]['text'] = 'Ubiquiti AirOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'ubiquiti'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; + +$os = 'airos-af'; +$config['os'][$os]['text'] = 'Ubiquiti AirFiber'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'ubiquiti'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; + + +// Linux-based OSes here please. +$os = 'linux'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Linux'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_processor'; +$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][1]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_storage'; +$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; + +$os = 'qnap'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'QNAP TurboNAS'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_processor'; +$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][1]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_storage'; +$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; + +$os = 'netapp'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['text'] = 'NetApp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'endian'; +$config['os'][$os]['text'] = 'Endian'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'ciscosmblinux'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Cisco SMB Linux'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'powercode'; +$onfig['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Powercode BMU'; +$config['os'][$os]['icon'] = 'powercode'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'procera'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Procera Networks'; +$config['os'][$os]['icon'] = 'procera'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'pktj'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Gandi Packet Journey'; +$config['os'][$os]['icon'] = 'gandi'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'cumulus'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Cumulus Linux'; +$config['os'][$os]['icon'] = 'cumulus'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +// Other Unix-based OSes here please. +$os = 'freebsd'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'FreeBSD'; + +$os = 'pfsense'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'pfSense'; + +$os = 'openbsd'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'OpenBSD'; + +$os = 'netbsd'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'NetBSD'; + +$os = 'dragonfly'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'DragonflyBSD'; + +$os = 'netware'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['text'] = 'Novell Netware'; +$config['os'][$os]['icon'] = 'novell'; + +$os = 'monowall'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'm0n0wall'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; + +$os = 'solaris'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Sun Solaris'; +$config['os'][$os]['type'] = 'server'; + +$os = 'opensolaris'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'Sun OpenSolaris'; + +$os = 'openindiana'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['text'] = 'OpenIndiana'; + +// Alcatel +$os = 'aos'; +$config['os'][$os]['group'] = 'aos'; +$config['os'][$os]['text'] = 'Alcatel-Lucent OS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['icon'] = 'alcatellucent'; + +$os = 'timos'; +$config['os'][$os]['group'] = 'timos'; +$config['os'][$os]['text'] = 'Alcatel-Lucent TimOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['icon'] = 'alcatellucent'; + +// Barracuda +$os = 'barracudaloadbalancer'; +$config['os'][$os]['text'] = 'Barracuda Load Balancer'; +$config['os'][$os]['type'] = 'loadbalancer'; +$config['os'][$os]['icon'] = 'barracuda'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'barracudaspamfirewall'; +$config['os'][$os]['text'] = 'Barracuda Spam Firewall'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'barracuda'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'barracudangfirewall'; +$config['os'][$os]['text'] = 'Barracuda NG Firewall'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'barracuda'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + + + +// Calix +$os = 'calix'; +$config['os'][$os]['text'] = 'Calix E7'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['empty_ifdescr'] = 1; +$config['os'][$os]['icon'] = 'calix'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +// Cisco OSes +$os = 'ios'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco IOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['icon'] = 'cisco'; + +$os = 'acsw'; +// $config['os'][$os]['group'] = "cisco"; +$config['os'][$os]['text'] = 'Cisco ACE'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'loadbalancer'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'cat1900'; +$config['os'][$os]['group'] = 'cat1900'; +$config['os'][$os]['text'] = 'Cisco Catalyst 1900'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'cisco-old'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'iosxe'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco IOS-XE'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['icon'] = 'cisco'; + +$os = 'iosxr'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco IOS-XR'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'asa'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco ASA'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; + +$os = 'pixos'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco PIX-OS'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'nxos'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco NX-OS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'sanos'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco SAN-OS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'cisco'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'catos'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco CatOS'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'cisco-old'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'ciscowlc'; +$config['os'][$os]['text'] = 'Cisco WLC'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][3]['graph'] = 'device_ciscowlc_numaps'; +$config['os'][$os]['over'][3]['text'] = 'Number of APs'; +$config['os'][$os]['over'][4]['graph'] = 'device_ciscowlc_numclients'; +$config['os'][$os]['over'][4]['text'] = 'Number of Clients'; +$config['os'][$os]['icon'] = 'cisco'; + +// Brocade NOS +$os = 'nos'; +$config['os'][$os]['text'] = 'Brocade NOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['icon'] = 'brocade'; + +// Brocade/Foundry ServerIron +$os = 'serveriron'; +$config['os'][$os]['text'] = 'Brocade ServerIron'; +$config['os'][$os]['type'] = 'loadbalancer'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['icon'] = 'brocade'; + +// Cisco Small Business +$os = 'ciscosb'; +$config['os'][$os]['group'] = 'cisco'; +$config['os'][$os]['text'] = 'Cisco Small Business'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'linksys'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; + +// Huawei +$os = 'vrp'; +$config['os'][$os]['group'] = 'vrp'; +$config['os'][$os]['text'] = 'Huawei VRP'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'huawei'; + +// ZTE +$os = 'zxr10'; +$config['os'][$os]['group'] = 'zxr10'; +$config['os'][$os]['text'] = 'ZTE ZXR10'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'zte'; + +// Ruckus Wireless +$os = 'ruckuswireless'; +$config['os'][$os]['text'] = 'Ruckus Wireless'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'ruckus'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Siklu Wireless +$os = 'siklu'; +$config['os'][$os]['text'] = 'Siklu Wireless'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'siklu'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Saf Wireless +$os = 'saf'; +$config['os'][$os]['text'] = 'SAF Wireless'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'saf'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Sub10 +$os = 'sub10'; +$config['os'][$os]['text'] = 'Sub10 Systems'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'sub10'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Supermicro Switch +$os = 'supermicro-switch'; +$config['os'][$os]['group'] = 'supermicro'; +$config['os'][$os]['text'] = 'Supermicro Switch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'supermicro'; +$config['os'][$os]['ifname'] = 1; + +// Netgear ProSafe switches +$os = 'netgear'; +$config['os'][$os]['text'] = 'Netgear ProSafe'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['bad_if'][] = 'cpu'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +//Quanta switches +$os = 'quanta'; +$config['os'][$os]['text'] = 'Quanta'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'quanta'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'netonix'; +$config['os'][$os]['text'] = 'Netonix'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'netonix'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +// Juniper +$os = 'junos'; +$config['os'][$os]['text'] = 'Juniper JunOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'junose'; +$config['os'][$os]['text'] = 'Juniper JunOSe'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'junos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'jwos'; +$config['os'][$os]['text'] = 'Juniper JWOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'junos'; + +$os = 'screenos'; +$config['os'][$os]['text'] = 'Juniper ScreenOS'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'juniperex2500os'; +$config['os'][$os]['text'] = 'Juniper EX2500'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'junos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +// Pulse Secure OS definition +$os = 'pulse'; +$config['os'][$os]['text'] = 'Pulse Secure'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'junos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'fortigate'; +$config['os'][$os]['text'] = 'Fortinet Fortigate'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'fortinet'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_fortigate_cpu'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'routeros'; +$config['os'][$os]['text'] = 'Mikrotik RouterOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'ironware'; +$config['os'][$os]['text'] = 'Brocade IronWare'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'brocade'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'fabos'; +$config['os'][$os]['text'] = 'Brocade FabricOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'brocade'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'extremeware'; +$config['os'][$os]['text'] = 'Extremeware'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['icon'] = 'extreme'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'packetshaper'; +$config['os'][$os]['text'] = 'Blue Coat Packetshaper'; +$config['os'][$os]['type'] = 'network'; + +$os = 'xos'; +$config['os'][$os]['text'] = 'Extreme XOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['group'] = 'extremeware'; +$config['os'][$os]['icon'] = 'extreme'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'ftos'; +$config['os'][$os]['text'] = 'Force10 FTOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'force10'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'dnos'; +$config['os'][$os]['text'] = 'Dell Networking OS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'avaya-ers'; +$config['os'][$os]['text'] = 'ERS Firmware'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'avaya'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'avaya-ipo'; +$config['os'][$os]['text'] = 'IP Office Firmware'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'avaya'; + + +$os = 'arista_eos'; +$config['os'][$os]['text'] = 'Arista EOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'arista'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'mellanox'; +$config['os'][$os]['text'] = 'Mellanox'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'netscaler'; +$config['os'][$os]['text'] = 'Citrix Netscaler'; +$config['os'][$os]['type'] = 'loadbalancer'; +$config['os'][$os]['icon'] = 'citrix'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; + +$os = 'f5'; +$config['os'][$os]['text'] = 'F5 Big IP'; +$config['os'][$os]['type'] = 'loadbalancer'; +$config['os'][$os]['icon'] = 'f5'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'proxim'; +$config['os'][$os]['text'] = 'Proxim'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'proxim'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'powerconnect'; +$config['os'][$os]['text'] = 'Dell PowerConnect'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'radlan'; +$config['os'][$os]['text'] = 'Radlan'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; + +$os = 'powervault'; +$config['os'][$os]['text'] = 'Dell PowerVault'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['type'] = 'storage'; + +$os = 'equallogic'; +$config['os'][$os]['text'] = 'Dell EqualLogic'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'drac'; +$config['os'][$os]['text'] = 'Dell DRAC'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['type'] = 'server'; + +$os = 'bcm963'; +$config['os'][$os]['text'] = 'Broadcom BCM963xx'; +$config['os'][$os]['icon'] = 'broadcom'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'netopia'; +$config['os'][$os]['text'] = 'Motorola Netopia'; +$config['os'][$os]['type'] = 'network'; + +$os = 'tranzeo'; +$config['os'][$os]['text'] = 'Tranzeo'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'dlink'; +$config['os'][$os]['text'] = 'D-Link Switch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'dlink'; +$config['os'][$os]['ifname'] = 1; + +$os = 'dlinkap'; +$config['os'][$os]['text'] = 'D-Link Access Point'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'dlink'; + +// TP-Link +$os = 'tplink'; +$config['os'][$os]['text'] = 'TP-Link Switch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'tplink'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'axiscam'; +$config['os'][$os]['text'] = 'AXIS Network Camera'; +$config['os'][$os]['icon'] = 'axis'; + +$os = 'axisdocserver'; +$config['os'][$os]['text'] = 'AXIS Network Document Server'; +$config['os'][$os]['icon'] = 'axis'; + +$os = 'gamatronicups'; +$config['os'][$os]['text'] = 'Gamatronic UPS Stack'; +$config['os'][$os]['type'] = 'power'; + +$os = 'powerware'; +$config['os'][$os]['text'] = 'Powerware UPS'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'eaton'; +$config['os'][$os]['over'][0]['graph'] = 'device_voltage'; +$config['os'][$os]['over'][0]['text'] = 'Voltage'; +$config['os'][$os]['over'][1]['graph'] = 'device_current'; +$config['os'][$os]['over'][1]['text'] = 'Current'; +$config['os'][$os]['over'][2]['graph'] = 'device_frequency'; +$config['os'][$os]['over'][2]['text'] = 'Frequencies'; + +$os = 'deltaups'; +$config['os'][$os]['text'] = 'Delta UPS'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'delta'; + +$os = 'liebert'; +$config['os'][$os]['text'] = 'Liebert'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'liebert'; + +$os = 'engenius'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['text'] = 'EnGenius Access Point'; +$config['os'][$os]['icon'] = 'engenius'; +$config['os'][$os]['over'][0]['graph'] = 'device_ucd_cpu'; +$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][1]['graph'] = 'device_ucd_memory'; +$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_bits'; +$config['os'][$os]['over'][2]['text'] = 'Device Traffic'; + +$os = 'airport'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['text'] = 'Apple AirPort'; +$config['os'][$os]['icon'] = 'apple'; + +$os = 'windows'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['text'] = 'Microsoft Windows'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['processor_stacked'] = 1; + +$os = 'bnt'; +$config['os'][$os]['text'] = 'Blade Network Technologies'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'bnt'; + +$os = 'ibmnos'; +$config['os'][$os]['text'] = 'IBM Networking Operating System'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'ibmnos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'ibmtl'; +$config['os'][$os]['text'] = 'IBM Tape Library'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['icon'] = 'generic'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'comware'; +$config['os'][$os]['text'] = 'HP Comware'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +// $config['os'][$os]['over'][1]['graph'] = "device_processor"; +// $config['os'][$os]['over'][1]['text'] = "CPU Usage"; +// $config['os'][$os]['over'][2]['graph'] = "device_mempool"; +// $config['os'][$os]['over'][2]['text'] = "Memory Usage"; +$os = 'procurve'; +$config['os'][$os]['text'] = 'HP ProCurve'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'speedtouch'; +$config['os'][$os]['text'] = 'Thomson Speedtouch'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'sonicwall'; +$config['os'][$os]['text'] = 'SonicWALL'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory'; + +$os = 'zywall'; +$config['os'][$os]['text'] = 'ZyXEL ZyWALL'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['icon'] = 'zyxel'; + +$os = 'prestige'; +$config['os'][$os]['text'] = 'ZyXEL Prestige'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'zyxel'; + +$os = 'zynos'; +$config['os'][$os]['text'] = 'ZyXEL Ethernet Switch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'zyxel'; + +$os = 'zyxelnwa'; +$config['os'][$os]['text'] = 'ZyXEL NWA'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'zyxel'; + +$os = 'ies'; +$config['os'][$os]['text'] = 'ZyXEL DSLAM'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'zyxel'; + +$os = 'allied'; +$config['os'][$os]['text'] = 'AlliedWare'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +$os = 'mgeups'; +$config['os'][$os]['text'] = 'MGE UPS'; +$config['os'][$os]['group'] = 'ups'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'mge'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +$os = 'mgepdu'; +$config['os'][$os]['text'] = 'MGE PDU'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'mge'; + +$os = 'apc'; +$config['os'][$os]['text'] = 'APC Management Module'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +$os = 'webpower'; +$config['os'][$os]['text'] = 'WebPower'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +$os = 'avtech'; +$config['os'][$os]['text'] = 'Avtech Environment Sensor'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['icon'] = 'avtech'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'Temperature'; + +$os = 'netbotz'; +$config['os'][$os]['text'] = 'Netbotz Environment sensor'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'Temperature'; +$config['os'][$os]['over'][1]['graph'] = 'device_humidity'; +$config['os'][$os]['over'][1]['text'] = 'Humidity'; + +$os = 'pcoweb'; +$config['os'][$os]['text'] = 'Carel pCOWeb'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'Temperature'; +$config['os'][$os]['over'][1]['graph'] = 'device_humidity'; +$config['os'][$os]['over'][1]['text'] = 'Humidity'; +$config['os'][$os]['icon'] = 'carel'; +$config['os'][$os]['icons'][] = 'uniflair'; + +$os = 'netvision'; +$config['os'][$os]['text'] = 'Socomec Net Vision'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +$os = 'areca'; +$config['os'][$os]['text'] = 'Areca RAID Subsystem'; +$config['os'][$os]['over'][0]['graph'] = ''; +$config['os'][$os]['over'][0]['text'] = ''; + +$os = 'netmanplus'; +$config['os'][$os]['text'] = 'NetMan Plus'; +$config['os'][$os]['group'] = 'ups'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +$os = 'akcp'; +$config['os'][$os]['text'] = 'AKCP SensorProbe'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'temperature'; + +$os = 'minkelsrms'; +$config['os'][$os]['text'] = 'Minkels RMS'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'temperature'; + +$os = 'ipoman'; +$config['os'][$os]['text'] = 'Ingrasys iPoMan'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'ingrasys'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; +$config['os'][$os]['over'][1]['graph'] = 'device_power'; +$config['os'][$os]['over'][1]['text'] = 'Power'; + +$os = 'wxgoos'; +$config['os'][$os]['text'] = 'ITWatchDogs Goose'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'temperature'; + +$os = 'papouch-tme'; +$config['os'][$os]['text'] = 'Papouch TME'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'temperature'; + +$os = 'cometsystem-p85xx'; +$config['os'][$os]['text'] = 'Comet System P85xx'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['icon'] = 'comet'; +$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; +$config['os'][$os]['over'][0]['text'] = 'temperature'; + + //printer +$os = 'dell-laser'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Dell Laser'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'dell'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'ricoh'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Ricoh Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'ricoh'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'nrg'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'NRG Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'nrg'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'epson'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Epson Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'epson'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'xerox'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Xerox Printer'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'jetdirect'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'HP Print server'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'richoh'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Ricoh Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'okilan'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'OKI Printer'; +$config['os'][$os]['overgraph'][] = 'device_toner'; +$config['os'][$os]['overtext'] = 'Toner'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'oki'; + +$os = 'brother'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Brother Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'konica'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Konica-Minolta Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = 'kyocera'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Kyocera Mita Printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['type'] = 'printer'; + +$os ='samsungprinter'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Samsung Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os ='canonprinter'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Canon Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'canon'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os ='lexmarkprinter'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Lexmark Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'lexmark'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os ='developprinter'; +$config['os'][$os]['group'] = 'printer'; +$config['os'][$os]['text'] = 'Develop Printer'; +$config['os'][$os]['type'] = 'printer'; +$config['os'][$os]['icon'] = 'develop'; +$config['os'][$os]['over'][0]['graph'] = 'device_toner'; +$config['os'][$os]['over'][0]['text'] = 'Toner'; + +$os = '3com'; +$config['os'][$os]['text'] = '3Com'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['type'] = 'network'; + +$os = 'sentry3'; +$config['os'][$os]['text'] = 'ServerTech Sentry3'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; +$config['os'][$os]['icon'] = 'servertech'; + +$os = 'raritan'; +$config['os'][$os]['text'] = 'Raritan PDU'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; +$config['os'][$os]['icon'] = 'raritan'; + +$os = 'vmware'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['text'] = 'VMware'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'mrvld'; +$config['os'][$os]['group'] = 'mrv'; +$config['os'][$os]['text'] = 'MRV LambdaDriver'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'mrv'; + +$os = 'poweralert'; +$config['os'][$os]['text'] = 'Tripp Lite PowerAlert'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; +$config['os'][$os]['icon'] = 'tripplite'; + +$os = 'avocent'; +$config['os'][$os]['text'] = 'Avocent'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'avocent'; + +$os = 'symbol'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['text'] = 'Symbol AP'; +$config['os'][$os]['icon'] = 'symbol'; + +$os = 'firebox'; +$config['os'][$os]['text'] = 'Watchguard Firebox'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['icon'] = 'watchguard'; + +$os = 'fireware'; +$config['os'][$os]['text'] = 'Watchguard Fireware'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['icon'] = 'watchguard'; + +$os = 'panos'; +$config['os'][$os]['text'] = 'PanOS'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'panos'; + +$os = 'arubaos'; +$config['os'][$os]['text'] = 'ArubaOS'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'arubaos'; +$config['os'][$os]['over'][0]['graph'] = 'device_arubacontroller_numaps'; +$config['os'][$os]['over'][0]['text'] = 'Number of APs'; +$config['os'][$os]['over'][1]['graph'] = 'device_arubacontroller_numclients'; +$config['os'][$os]['over'][1]['text'] = 'Number of Clients'; + +$os = 'dsm'; +$config['os'][$os]['text'] = 'Synology DSM'; +$config['os'][$os]['group'] = 'unix'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['icon'] = 'synology'; +$config['os'][$os]['over'][0]['graph'] = 'device_processor'; +$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; +$config['os'][$os]['over'][1]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_storage'; +$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; + +$os = 'hikvision'; +$config['os'][$os]['text'] = 'Hikvision'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'hikvision'; + +// Canopy / Cambium support +$os = 'cambium'; +$config['os'][$os]['text'] = 'Cambium'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'cambium'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'canopy'; +$config['os'][$os]['text'] = 'Canopy'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'cambium'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'datacom'; +$config['os'][$os]['text'] = 'Datacom'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'datacom'; + +// UBNT EdgeSwitch 750W +$os = 'edgeswitch'; +$config['os'][$os]['text'] = 'EdgeSwitch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'ubiquiti'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['ifname'] = 1; + +// Fiberhome +$os = 'fiberhome'; +$config['os'][$os]['text'] = 'Fiberhome'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'fiberhome'; + +// PBN, Pacific Broadband Networks +$os = 'pbn'; +$config['os'][$os]['text'] = 'PBN'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['ifXmcbc'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['icon'] = 'pbn'; + +// Enterasys +$os = 'enterasys'; +$config['os'][$os]['text'] = 'Enterasys'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['icon'] = 'enterasys'; + +// Multimatic UPS (Generex CS121 SNMP Adapter) +$os = 'multimatic'; +$config['os'][$os]['text'] = 'Multimatic UPS'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'multimatic'; + +// Huawei UPS +$os = 'huaweiups'; +$config['os'][$os]['text'] = 'Huawei UPS'; +$config['os'][$os]['group'] = 'ups'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'huawei'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +foreach ($config['os'] as $this_os => $blah) { + if (isset($config['os'][$this_os]['group'])) { + $this_os_group = $config['os'][$this_os]['group']; + if (isset($config['os_group'][$this_os_group])) { + foreach ($config['os_group'][$this_os_group] as $property => $value) { + if (!isset($config['os'][$this_os][$property])) { + $config['os'][$this_os][$property] = $value; + } + } + } + } +} + +// Meraki Devices +$os = 'merakimx'; +$config['os'][$os]['text'] = 'Meraki MX Appliance'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'meraki'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'merakimr'; +$config['os'][$os]['text'] = 'Meraki AP'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'meraki'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +$os = 'merakims'; +$config['os'][$os]['text'] = 'Meraki Switch'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'meraki'; +$config['os'][$os]['ifname'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +// Aerohive +$os = 'aerohive'; +$config['os'][$os]['text'] = 'Aerohive HiveOS'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Perle +$os = 'perle'; +$config['os'][$os]['text'] = 'Perle'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'perle'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// MACOSX +$os = 'macosx'; +$config['os'][$os]['text'] = 'Apple OS X'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['icon'] = 'generic'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// HP MSM +$os = 'hpmsm'; +$config['os'][$os]['text'] = 'HP MSM'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Riverbed +$os = 'riverbed'; +$config['os'][$os]['text'] = 'Riverbed'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'riverbed'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Ligowave LigoOS +$os = 'ligoos'; +$config['os'][$os]['text'] = 'LigoWave LigoOS'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'ligowave'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// HWGroup Poseidon +$os = 'poseidon'; +$config['os'][$os]['text'] = 'Poseidon'; +$config['os'][$os]['type'] = 'environment'; +$config['os'][$os]['icon'] = 'generic'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// EATON PDU +$os = 'eatonpdu'; +$config['os'][$os]['text'] = 'Eaton PDU'; +$config['os'][$os]['type'] = 'power'; +$config['os'][$os]['icon'] = 'eaton'; +$config['os'][$os]['over'][0]['graph'] = 'device_current'; +$config['os'][$os]['over'][0]['text'] = 'Current'; + +// Appliances +$os = 'fortios'; +$config['os'][$os]['text'] = 'FortiOS'; +$config['os'][$os]['type'] = 'appliance'; +$config['os'][$os]['icon'] = 'fortios'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +$os = 'nios'; +$config['os'][$os]['text'] = 'Infoblox'; +$config['os'][$os]['type'] = 'appliance'; +$config['os'][$os]['icon'] = 'infoblox'; + +// Lenovo EMC (NAS) +$os = 'lenovoemc'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['group'] = 'storage'; +$config['os'][$os]['text'] = 'LenovoEMC'; +$config['os'][$os]['icon'] = 'lenovo'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +// Deliberant WiFi +$os = 'deliberant'; +$config['os'][$os]['text'] = 'Deliberant OS'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'deliberant'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + +// Graph Types +require_once $config['install_dir'].'/includes/load_db_graph_types.inc.php'; + + +// Device - Wireless - AirMAX +$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['order'] = '0'; +$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['descr'] = 'Wireless Clients'; + +$config['graph_types']['device']['ubnt_airmax_RadioDistance']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_RadioDistance']['order'] = '1'; +$config['graph_types']['device']['ubnt_airmax_RadioDistance']['descr'] = 'Radio Distance'; + +$config['graph_types']['device']['ubnt_airmax_RadioFreq']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_RadioFreq']['order'] = '2'; +$config['graph_types']['device']['ubnt_airmax_RadioFreq']['descr'] = 'Radio Frequency'; + +$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['order'] = '3'; +$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['descr'] = 'Radio Tx Power'; + +$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['order'] = '4'; +$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['descr'] = 'Radio Rssi Chain 0'; + +$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['order'] = '5'; +$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['descr'] = 'Radio Rssi Chain 1'; + +$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['order'] = '6'; +$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['descr'] = 'Radio Signal'; + +$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['order'] = '7'; +$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['descr'] = 'Radio Overall RSSI'; + +$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['order'] = '8'; +$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['descr'] = 'Radio CCQ'; + +$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['order'] = '10'; +$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['descr'] = 'Radio Noise Floor'; + +$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['order'] = '11'; +$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['descr'] = 'Radio Tx Rate'; + +$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['order'] = '12'; +$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['descr'] = 'Radio Rx Rate'; + +$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['order'] = '13'; +$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['descr'] = 'AirMax Quality'; + +$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['order'] = '14'; +$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['descr'] = 'AirMax Capacity'; + +// Device - AirFIBER +$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['order'] = '0'; +$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['descr'] = 'Radio Frequencies'; + +$config['graph_types']['device']['ubnt_airfiber_TxPower']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_TxPower']['order'] = '0'; +$config['graph_types']['device']['ubnt_airfiber_TxPower']['descr'] = 'Radio Tx Power'; + +$config['graph_types']['device']['ubnt_airfiber_LinkDist']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_LinkDist']['order'] = '1'; +$config['graph_types']['device']['ubnt_airfiber_LinkDist']['descr'] = 'Link Distance'; + +$config['graph_types']['device']['ubnt_airfiber_Capacity']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_Capacity']['order'] = '2'; +$config['graph_types']['device']['ubnt_airfiber_Capacity']['descr'] = 'Link Capacity'; + +$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['order'] = '3'; +$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['descr'] = 'Radio Temperatures'; + +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['order'] = '4'; +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['descr'] = 'RF Total Octets Tx'; + +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['order'] = '5'; +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['descr'] = 'RF Total Packets Tx'; + +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['order'] = '6'; +$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['descr'] = 'RF Total Octets Rx'; + +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['section'] = 'wireless'; +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['order'] = '7'; +$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['descr'] = 'RF Total Packets Rx'; + +// Siklu support +$config['graph_types']['device']['siklu_rfAverageRssi']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfAverageRssi']['order'] = '0'; +$config['graph_types']['device']['siklu_rfAverageRssi']['descr'] = 'Radio Average RSSI'; + +$config['graph_types']['device']['siklu_rfAverageCinr']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfAverageCinr']['order'] = '1'; +$config['graph_types']['device']['siklu_rfAverageCinr']['descr'] = 'Radio Average CINR'; + +$config['graph_types']['device']['siklu_rfOperationalFrequency']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfOperationalFrequency']['order'] = '2'; +$config['graph_types']['device']['siklu_rfOperationalFrequency']['descr'] = 'Operational Frequency'; + +$config['graph_types']['device']['siklu_rfinterfacePkts']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfinterfacePkts']['order'] = '3'; +$config['graph_types']['device']['siklu_rfinterfacePkts']['descr'] = 'Packets'; + +$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['order'] = '4'; +$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['descr'] = 'Other Packets'; + +$config['graph_types']['device']['siklu_rfinterfaceOctets']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfinterfaceOctets']['order'] = '5'; +$config['graph_types']['device']['siklu_rfinterfaceOctets']['descr'] = 'Traffic'; + +$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['section'] = 'wireless'; +$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['order'] = '6'; +$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['descr'] = 'Other Octets'; + +// Sub10 support +$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['order'] = '0'; +$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['descr'] = 'Radio Transmit Power'; + +$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['order'] = '1'; +$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['descr'] = 'Radio Receive Power'; + +$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['order'] = '3'; +$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['descr'] = 'Radio Vector Error'; + +$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['order'] = '3'; +$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['descr'] = 'Radio Link Loss'; + +$config['graph_types']['device']['sub10_sub10RadioLclAFER']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclAFER']['order'] = '4'; +$config['graph_types']['device']['sub10_sub10RadioLclAFER']['descr'] = 'Radio Air Frame Error Rate'; + +$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['section'] = 'wireless'; +$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['order'] = '4'; +$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['descr'] = 'Data Rate on the Airside interface'; + +//cambium graphs +$config['graph_types']['device']['cambium_650_rawReceivePower']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_rawReceivePower']['order'] = '0'; +$config['graph_types']['device']['cambium_650_rawReceivePower']['descr'] = 'Raw Receive Power'; +$config['graph_types']['device']['cambium_650_transmitPower']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_transmitPower']['order'] = '1'; +$config['graph_types']['device']['cambium_650_transmitPower']['descr'] = 'Transmit Power'; +$config['graph_types']['device']['cambium_650_modulationMode']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_modulationMode']['order'] = '2'; +$config['graph_types']['device']['cambium_650_modulationMode']['descr'] = 'Moduation Mode'; +$config['graph_types']['device']['cambium_650_dataRate']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_dataRate']['order'] = '3'; +$config['graph_types']['device']['cambium_650_dataRate']['descr'] = 'Data Rate'; +$config['graph_types']['device']['cambium_650_ssr']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_ssr']['order'] = '4'; +$config['graph_types']['device']['cambium_650_ssr']['descr'] = 'Signal Strength Ratio'; +$config['graph_types']['device']['cambium_650_gps']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_650_gps']['order'] = '5'; +$config['graph_types']['device']['cambium_650_gps']['descr'] = 'GPS Status'; + +$config['graph_types']['device']['cambium_250_receivePower']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_250_receivePower']['order'] = '0'; +$config['graph_types']['device']['cambium_250_receivePower']['descr'] = 'Raw Receive Power'; +$config['graph_types']['device']['cambium_250_transmitPower']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_250_transmitPower']['order'] = '1'; +$config['graph_types']['device']['cambium_250_transmitPower']['descr'] = 'Transmit Power'; +$config['graph_types']['device']['cambium_250_modulationMode']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_250_modulationMode']['order'] = '2'; +$config['graph_types']['device']['cambium_250_modulationMode']['descr'] = 'Moduation Mode'; +$config['graph_types']['device']['cambium_250_dataRate']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_250_dataRate']['order'] = '3'; +$config['graph_types']['device']['cambium_250_dataRate']['descr'] = 'Data Rate'; +$config['graph_types']['device']['cambium_250_ssr']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_250_ssr']['order'] = '4'; +$config['graph_types']['device']['cambium_250_ssr']['descr'] = 'Signal Strength Ratio'; + +$config['graph_types']['device']['canopy_generic_whispGPSStats']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_whispGPSStats']['order'] = '0'; +$config['graph_types']['device']['canopy_generic_whispGPSStats']['descr'] = 'GPS Status'; +$config['graph_types']['device']['canopy_generic_gpsStats']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_gpsStats']['order'] = '0'; +$config['graph_types']['device']['canopy_generic_gpsStats']['descr'] = 'GPS Stats'; +$config['graph_types']['device']['canopy_generic_rssi']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_rssi']['order'] = '1'; +$config['graph_types']['device']['canopy_generic_rssi']['descr'] = 'Signal Rssi'; +$config['graph_types']['device']['canopy_generic_jitter']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_jitter']['order'] = '2'; +$config['graph_types']['device']['canopy_generic_jitter']['descr'] = 'Jitter'; +$config['graph_types']['device']['canopy_generic_signalHV']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_signalHV']['order'] = '3'; +$config['graph_types']['device']['canopy_generic_signalHV']['descr'] = 'Signal'; +$config['graph_types']['device']['canopy_generic_450_powerlevel']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_powerlevel']['order'] = '4'; +$config['graph_types']['device']['canopy_generic_450_powerlevel']['descr'] = 'Power Level of Registered SM'; +$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['order'] = '5'; +$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['descr'] = 'Radio Link H/V'; +$config['graph_types']['device']['canopy_generic_450_ptpSNR']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_ptpSNR']['order'] = '6'; +$config['graph_types']['device']['canopy_generic_450_ptpSNR']['descr'] = 'Master SNR'; +$config['graph_types']['device']['canopy_generic_450_slaveHV']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_slaveHV']['order'] = '7'; +$config['graph_types']['device']['canopy_generic_450_slaveHV']['descr'] = 'Dbm H/V'; +$config['graph_types']['device']['canopy_generic_450_slaveSNR']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_slaveSNR']['order'] = '8'; +$config['graph_types']['device']['canopy_generic_450_slaveSNR']['descr'] = 'SNR'; +$config['graph_types']['device']['canopy_generic_450_slaveSSR']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_slaveSSR']['order'] = '9'; +$config['graph_types']['device']['canopy_generic_450_slaveSSR']['descr'] = 'SSR'; +$config['graph_types']['device']['canopy_generic_450_masterSSR']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_450_masterSSR']['order'] = '10'; +$config['graph_types']['device']['canopy_generic_450_masterSSR']['descr'] = 'Master SSR'; +$config['graph_types']['device']['canopy_generic_regCount']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_regCount']['order'] = '11'; +$config['graph_types']['device']['canopy_generic_regCount']['descr'] = 'Registered SM'; +$config['graph_types']['device']['canopy_generic_freq']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_freq']['order'] = '12'; +$config['graph_types']['device']['canopy_generic_freq']['descr'] = 'Radio Frequency'; +$config['graph_types']['device']['canopy_generic_radioDbm']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_radioDbm']['order'] = '13'; +$config['graph_types']['device']['canopy_generic_radioDbm']['descr'] = 'Radio Dbm'; +$config['graph_types']['device']['canopy_generic_errorCount']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_errorCount']['order'] = '14'; +$config['graph_types']['device']['canopy_generic_errorCount']['descr'] = 'Error Count'; +$config['graph_types']['device']['canopy_generic_crcErrors']['section'] = 'wireless'; +$config['graph_types']['device']['canopy_generic_crcErrors']['order'] = '15'; +$config['graph_types']['device']['canopy_generic_crcErrors']['descr'] = 'CRC Errors'; + +$config['graph_types']['device']['cambium_epmp_RFStatus']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_RFStatus']['order'] = '0'; +$config['graph_types']['device']['cambium_epmp_RFStatus']['descr'] = 'RF Status'; +$config['graph_types']['device']['cambium_epmp_gps']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_gps']['order'] = '1'; +$config['graph_types']['device']['cambium_epmp_gps']['descr'] = 'GPS Info'; +$config['graph_types']['device']['cambium_epmp_modulation']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_modulation']['order'] = '2'; +$config['graph_types']['device']['cambium_epmp_modulation']['descr'] = 'ePMP Modulation'; +$config['graph_types']['device']['cambium_epmp_registeredSM']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_registeredSM']['order'] = '3'; +$config['graph_types']['device']['cambium_epmp_registeredSM']['descr'] = 'ePMP Registered SM'; +$config['graph_types']['device']['cambium_epmp_access']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_access']['order'] = '4'; +$config['graph_types']['device']['cambium_epmp_access']['descr'] = 'Access Info'; +$config['graph_types']['device']['cambium_epmp_gpsSync']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_gpsSync']['order'] = '5'; +$config['graph_types']['device']['cambium_epmp_gpsSync']['descr'] = 'GPS Sync Status'; +$config['graph_types']['device']['cambium_epmp_freq']['section'] = 'wireless'; +$config['graph_types']['device']['cambium_epmp_freq']['order'] = '6'; +$config['graph_types']['device']['cambium_epmp_freq']['descr'] = 'Frequency'; + +$config['graph_types']['device']['wifi_clients']['section'] = 'wireless'; +$config['graph_types']['device']['wifi_clients']['order'] = '0'; +$config['graph_types']['device']['wifi_clients']['descr'] = 'Wireless Clients'; + +$config['graph_types']['device']['agent']['section'] = 'poller'; +$config['graph_types']['device']['agent']['order'] = '0'; +$config['graph_types']['device']['agent']['descr'] = 'Agent Execution Time'; + +$config['graph_types']['device']['cipsec_flow_bits']['section'] = 'firewall'; +$config['graph_types']['device']['cipsec_flow_bits']['order'] = '0'; +$config['graph_types']['device']['cipsec_flow_bits']['descr'] = 'IPSec Tunnel Traffic Volume'; +$config['graph_types']['device']['cipsec_flow_pkts']['section'] = 'firewall'; +$config['graph_types']['device']['cipsec_flow_pkts']['order'] = '0'; +$config['graph_types']['device']['cipsec_flow_pkts']['descr'] = 'IPSec Tunnel Traffic Packets'; +$config['graph_types']['device']['cipsec_flow_stats']['section'] = 'firewall'; +$config['graph_types']['device']['cipsec_flow_stats']['order'] = '0'; +$config['graph_types']['device']['cipsec_flow_stats']['descr'] = 'IPSec Tunnel Statistics'; +$config['graph_types']['device']['cipsec_flow_tunnels']['section'] = 'firewall'; +$config['graph_types']['device']['cipsec_flow_tunnels']['order'] = '0'; +$config['graph_types']['device']['cipsec_flow_tunnels']['descr'] = 'IPSec Active Tunnels'; +$config['graph_types']['device']['cras_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['cras_sessions']['order'] = '0'; +$config['graph_types']['device']['cras_sessions']['descr'] = 'Remote Access Sessions'; +$config['graph_types']['device']['fortigate_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['fortigate_sessions']['order'] = '0'; +$config['graph_types']['device']['fortigate_sessions']['descr'] = 'Active Sessions'; +$config['graph_types']['device']['fortigate_cpu']['section'] = 'system'; +$config['graph_types']['device']['fortigate_cpu']['order'] = '0'; +$config['graph_types']['device']['fortigate_cpu']['descr'] = 'CPU'; +$config['graph_types']['device']['screenos_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['screenos_sessions']['order'] = '0'; +$config['graph_types']['device']['screenos_sessions']['descr'] = 'Active Sessions'; +$config['graph_types']['device']['panos_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['panos_sessions']['order'] = '0'; +$config['graph_types']['device']['panos_sessions']['descr'] = 'Active Sessions'; + +//Pulse Secure Graphs +$config['graph_types']['device']['pulse_users']['section'] = 'firewall'; +$config['graph_types']['device']['pulse_users']['order'] = '0'; +$config['graph_types']['device']['pulse_users']['descr'] = 'Active Users'; +$config['graph_types']['device']['pulse_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['pulse_sessions']['order'] = '0'; +$config['graph_types']['device']['pulse_sessions']['descr'] = 'Active Sessions'; + +// Infoblox dns/dhcp Graphs +$config['graph_types']['device']['ib_dns_dyn_updates']['section'] = 'dns'; +$config['graph_types']['device']['ib_dns_dyn_updates']['order'] = '0'; +$config['graph_types']['device']['ib_dns_dyn_updates']['descr'] = 'DNS dynamic updates'; +$config['graph_types']['device']['ib_dns_request_return_codes']['section'] = 'dns'; +$config['graph_types']['device']['ib_dns_request_return_codes']['order'] = '0'; +$config['graph_types']['device']['ib_dns_request_return_codes']['descr'] = 'DNS request return codes'; +$config['graph_types']['device']['ib_dns_performance']['section'] = 'dns'; +$config['graph_types']['device']['ib_dns_performance']['order'] = '0'; +$config['graph_types']['device']['ib_dns_performance']['descr'] = 'DNS performance'; +$config['graph_types']['device']['ib_dhcp_messages']['section'] = 'dhcp'; +$config['graph_types']['device']['ib_dhcp_messages']['order'] = '0'; +$config['graph_types']['device']['ib_dhcp_messages']['descr'] = 'DHCP messages'; + +$config['graph_types']['device']['bits']['section'] = 'netstats'; +$config['graph_types']['device']['bits']['order'] = '0'; +$config['graph_types']['device']['bits']['descr'] = 'Total Traffic'; +$config['graph_types']['device']['ipsystemstats_ipv4']['section'] = 'netstats'; +$config['graph_types']['device']['ipsystemstats_ipv4']['order'] = '0'; +$config['graph_types']['device']['ipsystemstats_ipv4']['descr'] = 'IPv4 Packet Statistics'; +$config['graph_types']['device']['ipsystemstats_ipv4_frag']['section'] = 'netstats'; +$config['graph_types']['device']['ipsystemstats_ipv4_frag']['order'] = '0'; +$config['graph_types']['device']['ipsystemstats_ipv4_frag']['descr'] = 'IPv4 Fragmentation Statistics'; +$config['graph_types']['device']['ipsystemstats_ipv6']['section'] = 'netstats'; +$config['graph_types']['device']['ipsystemstats_ipv6']['order'] = '0'; +$config['graph_types']['device']['ipsystemstats_ipv6']['descr'] = 'IPv6 Packet Statistics'; +$config['graph_types']['device']['ipsystemstats_ipv6_frag']['section'] = 'netstats'; +$config['graph_types']['device']['ipsystemstats_ipv6_frag']['order'] = '0'; +$config['graph_types']['device']['ipsystemstats_ipv6_frag']['descr'] = 'IPv6 Fragmentation Statistics'; +$config['graph_types']['device']['netstat_icmp_info']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_icmp_info']['order'] = '0'; +$config['graph_types']['device']['netstat_icmp_info']['descr'] = 'ICMP Informational Statistics'; +$config['graph_types']['device']['netstat_icmp']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_icmp']['order'] = '0'; +$config['graph_types']['device']['netstat_icmp']['descr'] = 'ICMP Statistics'; +$config['graph_types']['device']['netstat_ip']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_ip']['order'] = '0'; +$config['graph_types']['device']['netstat_ip']['descr'] = 'IP Statistics'; +$config['graph_types']['device']['netstat_ip_frag']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_ip_frag']['order'] = '0'; +$config['graph_types']['device']['netstat_ip_frag']['descr'] = 'IP Fragmentation Statistics'; +$config['graph_types']['device']['netstat_snmp']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_snmp']['order'] = '0'; +$config['graph_types']['device']['netstat_snmp']['descr'] = 'SNMP Statistics'; +$config['graph_types']['device']['netstat_snmp_pkt']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_snmp_pkt']['order'] = '0'; +$config['graph_types']['device']['netstat_snmp_pkt']['descr'] = 'SNMP Packet Type Statistics'; + +$config['graph_types']['device']['netstat_ip_forward']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_ip_forward']['order'] = '0'; +$config['graph_types']['device']['netstat_ip_forward']['descr'] = 'IP Forwarding Statistics'; + +$config['graph_types']['device']['netstat_tcp']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_tcp']['order'] = '0'; +$config['graph_types']['device']['netstat_tcp']['descr'] = 'TCP Statistics'; +$config['graph_types']['device']['netstat_udp']['section'] = 'netstats'; +$config['graph_types']['device']['netstat_udp']['order'] = '0'; +$config['graph_types']['device']['netstat_udp']['descr'] = 'UDP Statistics'; + +$config['graph_types']['device']['fdb_count']['section'] = 'system'; +$config['graph_types']['device']['fdb_count']['order'] = '0'; +$config['graph_types']['device']['fdb_count']['descr'] = 'MAC Addresses Learnt'; +$config['graph_types']['device']['hr_processes']['section'] = 'system'; +$config['graph_types']['device']['hr_processes']['order'] = '0'; +$config['graph_types']['device']['hr_processes']['descr'] = 'Running Processes'; +$config['graph_types']['device']['hr_users']['section'] = 'system'; +$config['graph_types']['device']['hr_users']['order'] = '0'; +$config['graph_types']['device']['hr_users']['descr'] = 'Users Logged In'; +$config['graph_types']['device']['mempool']['section'] = 'system'; +$config['graph_types']['device']['mempool']['order'] = '0'; +$config['graph_types']['device']['mempool']['descr'] = 'Memory Pool Usage'; +$config['graph_types']['device']['processor']['section'] = 'system'; +$config['graph_types']['device']['processor']['order'] = '0'; +$config['graph_types']['device']['processor']['descr'] = 'Processor Usage'; +$config['graph_types']['device']['storage']['section'] = 'system'; +$config['graph_types']['device']['storage']['order'] = '0'; +$config['graph_types']['device']['storage']['descr'] = 'Filesystem Usage'; +$config['graph_types']['device']['temperature']['section'] = 'system'; +$config['graph_types']['device']['temperature']['order'] = '0'; +$config['graph_types']['device']['temperature']['descr'] = 'temperature'; +$config['graph_types']['device']['charge']['section'] = 'system'; +$config['graph_types']['device']['charge']['order'] = '0'; +$config['graph_types']['device']['charge']['descr'] = 'Battery Charge'; +$config['graph_types']['device']['ucd_cpu']['section'] = 'system'; +$config['graph_types']['device']['ucd_cpu']['order'] = '0'; +$config['graph_types']['device']['ucd_cpu']['descr'] = 'Detailed Processor Usage'; +$config['graph_types']['device']['ucd_load']['section'] = 'system'; +$config['graph_types']['device']['ucd_load']['order'] = '0'; +$config['graph_types']['device']['ucd_load']['descr'] = 'Load Averages'; +$config['graph_types']['device']['ucd_memory']['section'] = 'system'; +$config['graph_types']['device']['ucd_memory']['order'] = '0'; +$config['graph_types']['device']['ucd_memory']['descr'] = 'Detailed Memory Usage'; +$config['graph_types']['device']['ucd_swap_io']['section'] = 'system'; +$config['graph_types']['device']['ucd_swap_io']['order'] = '0'; +$config['graph_types']['device']['ucd_swap_io']['descr'] = 'Swap I/O Activity'; +$config['graph_types']['device']['ucd_io']['section'] = 'system'; +$config['graph_types']['device']['ucd_io']['order'] = '0'; +$config['graph_types']['device']['ucd_io']['descr'] = 'System I/O Activity'; +$config['graph_types']['device']['ucd_contexts']['section'] = 'system'; +$config['graph_types']['device']['ucd_contexts']['order'] = '0'; +$config['graph_types']['device']['ucd_contexts']['descr'] = 'Context Switches'; +$config['graph_types']['device']['ucd_interrupts']['section'] = 'system'; +$config['graph_types']['device']['ucd_interrupts']['order'] = '0'; +$config['graph_types']['device']['ucd_interrupts']['descr'] = 'Interrupts'; +$config['graph_types']['device']['uptime']['section'] = 'system'; +$config['graph_types']['device']['uptime']['order'] = '0'; +$config['graph_types']['device']['uptime']['descr'] = 'System Uptime'; +$config['graph_types']['device']['poller_perf']['section'] = 'poller'; +$config['graph_types']['device']['poller_perf']['order'] = '0'; +$config['graph_types']['device']['poller_perf']['descr'] = 'Poller Time'; +$config['graph_types']['device']['ping_perf']['section'] = 'poller'; +$config['graph_types']['device']['ping_perf']['order'] = '0'; +$config['graph_types']['device']['ping_perf']['descr'] = 'Ping Response'; +$config['graph_types']['device']['poller_modules_perf']['section'] = 'poller'; +$config['graph_types']['device']['poller_modules_perf']['order'] = '0'; +$config['graph_types']['device']['poller_modules_perf']['descr'] = 'Poller Modules Performance'; + +$config['graph_types']['device']['vpdn_sessions_l2tp']['section'] = 'vpdn'; +$config['graph_types']['device']['vpdn_sessions_l2tp']['order'] = '0'; +$config['graph_types']['device']['vpdn_sessions_l2tp']['descr'] = 'VPDN L2TP Sessions'; + +$config['graph_types']['device']['vpdn_tunnels_l2tp']['section'] = 'vpdn'; +$config['graph_types']['device']['vpdn_tunnels_l2tp']['order'] = '0'; +$config['graph_types']['device']['vpdn_tunnels_l2tp']['descr'] = 'VPDN L2TP Tunnels'; + +$config['graph_types']['device']['netscaler_tcp_conn']['section'] = 'load balancer'; +$config['graph_types']['device']['netscaler_tcp_conn']['order'] = '0'; +$config['graph_types']['device']['netscaler_tcp_conn']['descr'] = 'TCP Connections'; + +$config['graph_types']['device']['netscaler_tcp_bits']['section'] = 'load balancer'; +$config['graph_types']['device']['netscaler_tcp_bits']['order'] = '0'; +$config['graph_types']['device']['netscaler_tcp_bits']['descr'] = 'TCP Traffic'; + +$config['graph_types']['device']['netscaler_tcp_pkts']['section'] = 'load balancer'; +$config['graph_types']['device']['netscaler_tcp_pkts']['order'] = '0'; +$config['graph_types']['device']['netscaler_tcp_pkts']['descr'] = 'TCP Packets'; + +$config['graph_types']['device']['asa_conns']['section'] = 'firewall'; +$config['graph_types']['device']['asa_conns']['order'] = '0'; +$config['graph_types']['device']['asa_conns']['descr'] = 'Current connections'; + +$config['graph_types']['device']['cisco-iospri']['section'] = 'voice'; +$config['graph_types']['device']['cisco-iospri']['order'] = '0'; +$config['graph_types']['device']['cisco-iospri']['descr'] = 'PRI Utilisation'; + +$config['graph_types']['device']['cisco-iosdsp']['section'] = 'voice'; +$config['graph_types']['device']['cisco-iosdsp']['order'] = '0'; +$config['graph_types']['device']['cisco-iosdsp']['descr'] = 'DSP Utilisation'; + +$config['graph_types']['device']['cisco-iosmtp']['section'] = 'voice'; +$config['graph_types']['device']['cisco-iosmtp']['order'] = '0'; +$config['graph_types']['device']['cisco-iosmtp']['descr'] = 'Hardware MTP Utilisation'; + +$config['graph_types']['device']['cisco-iosxcode']['section'] = 'voice'; +$config['graph_types']['device']['cisco-iosxcode']['order'] = '0'; +$config['graph_types']['device']['cisco-iosxcode']['descr'] = 'Transcoder Utilisation'; + +$config['graph_descr']['device_smokeping_in_all'] = 'This is an aggregate graph of the incoming smokeping tests to this host. The line corresponds to the average RTT. The shaded area around each line denotes the standard deviation.'; +$config['graph_descr']['device_processor'] = 'This is an aggregate graph of all processors in the system.'; + +$config['graph_types']['device']['cisco_wwan_rssi']['section'] = 'wireless'; +$config['graph_types']['device']['cisco_wwan_rssi']['order'] = '0'; +$config['graph_types']['device']['cisco_wwan_rssi']['descr'] = 'Signal Rssi'; +$config['graph_types']['device']['cisco_wwan_mnc']['section'] = 'wireless'; +$config['graph_types']['device']['cisco_wwan_mnc']['order'] = '1'; +$config['graph_types']['device']['cisco_wwan_mnc']['descr'] = 'MNC'; + + +// Device Types +$i = 0; +$config['device_types'][$i]['text'] = 'Servers'; +$config['device_types'][$i]['type'] = 'server'; +$config['device_types'][$i]['icon'] = 'server.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Network'; +$config['device_types'][$i]['type'] = 'network'; +$config['device_types'][$i]['icon'] = 'network.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Wireless'; +$config['device_types'][$i]['type'] = 'wireless'; +$config['device_types'][$i]['icon'] = 'wireless.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Firewalls'; +$config['device_types'][$i]['type'] = 'firewall'; +$config['device_types'][$i]['icon'] = 'firewall.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Power'; +$config['device_types'][$i]['type'] = 'power'; +$config['device_types'][$i]['icon'] = 'power.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Environment'; +$config['device_types'][$i]['type'] = 'environment'; +$config['device_types'][$i]['icon'] = 'environment.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Load Balancers'; +$config['device_types'][$i]['type'] = 'loadbalancer'; +$config['device_types'][$i]['icon'] = 'loadbalancer.png'; + +$i++; +$config['device_types'][$i]['text'] = 'Storage'; +$config['device_types'][$i]['type'] = 'storage'; +$config['device_types'][$i]['icon'] = 'storage.png'; + +if (isset($config['enable_printers']) && $config['enable_printers']) { + $i++; + $config['device_types'][$i]['text'] = 'Printers'; + $config['device_types'][$i]['type'] = 'printer'; + $config['device_types'][$i]['icon'] = 'printer.png'; +} + +$i++; +$config['device_types'][$i]['text'] = 'Appliance'; +$config['device_types'][$i]['type'] = 'appliance'; +$config['device_types'][$i]['icon'] = 'appliance.png'; + +// +// No changes below this line # +// +$config['version'] = '2015.master'; +$config['project_name_version'] = $config['project_name'].' '.$config['version']; + +if (isset($config['rrdgraph_def_text'])) { + $config['rrdgraph_def_text'] = str_replace(' ', ' ', $config['rrdgraph_def_text']); + $config['rrd_opts_array'] = explode(' ', trim($config['rrdgraph_def_text'])); +} + +if (isset($config['cdp_autocreate'])) { + $config['dp_autocreate'] = $config['cdp_autocreate']; +} + +if (!isset($config['mibdir'])) { + $config['mibdir'] = $config['install_dir'].'/mibs'; +} + +$config['mib_dir'] = $config['mibdir']; + +// If we're on SSL, let's properly detect it +if (isset($_SERVER['HTTPS'])) { + $config['base_url'] = preg_replace('/^http:/', 'https:', $config['base_url']); +} + +// Set some times needed by loads of scripts (it's dynamic, so we do it here!) +$config['time']['now'] = time(); +$config['time']['now'] -= ($config['time']['now'] % 300); +$config['time']['fourhour'] = ($config['time']['now'] - 14400); +// time() - (4 * 60 * 60); +$config['time']['sixhour'] = ($config['time']['now'] - 21600); +// time() - (6 * 60 * 60); +$config['time']['twelvehour'] = ($config['time']['now'] - 43200); +// time() - (12 * 60 * 60); +$config['time']['day'] = ($config['time']['now'] - 86400); +// time() - (24 * 60 * 60); +$config['time']['twoday'] = ($config['time']['now'] - 172800); +// time() - (2 * 24 * 60 * 60); +$config['time']['week'] = ($config['time']['now'] - 604800); +// time() - (7 * 24 * 60 * 60); +$config['time']['twoweek'] = ($config['time']['now'] - 1209600); +// time() - (2 * 7 * 24 * 60 * 60); +$config['time']['month'] = ($config['time']['now'] - 2678400); +// time() - (31 * 24 * 60 * 60); +$config['time']['twomonth'] = ($config['time']['now'] - 5356800); +// time() - (2 * 31 * 24 * 60 * 60); +$config['time']['threemonth'] = ($config['time']['now'] - 8035200); +// time() - (3 * 31 * 24 * 60 * 60); +$config['time']['sixmonth'] = ($config['time']['now'] - 16070400); +// time() - (6 * 31 * 24 * 60 * 60); +$config['time']['year'] = ($config['time']['now'] - 31536000); +// time() - (365 * 24 * 60 * 60); +$config['time']['twoyear'] = ($config['time']['now'] - 63072000); +// time() - (2 * 365 * 24 * 60 * 60); +// IPMI sensor type mappings +$config['ipmi_unit']['Volts'] = 'voltage'; +$config['ipmi_unit']['degrees C'] = 'temperature'; +$config['ipmi_unit']['RPM'] = 'fanspeed'; +$config['ipmi_unit']['Watts'] = 'power'; +$config['ipmi_unit']['discrete'] = ''; + +// INCLUDE THE VMWARE DEFINITION FILE. +require_once 'vmware_guestid.inc.php'; + +// Define some variables if they aren't set by user definition in config.php +if (!isset($config['html_dir'])) { + $config['html_dir'] = $config['install_dir'].'/html'; +} + +if (!isset($config['rrd_dir'])) { + $config['rrd_dir'] = $config['install_dir'].'/rrd'; +} + +if (!isset($config['log_dir'])) { + $config['log_dir'] = $config['install_dir'].'/logs'; +} + +if (!isset($config['log_file'])) { + $config['log_file'] = $config['log_dir'].'/'.$config['project_id'].'.log'; +} + +if (!isset($config['plugin_dir'])) { + $config['plugin_dir'] = $config['html_dir'].'/plugins'; +} + +if (!isset($config['title_image'])) { + $config['title_image'] = 'images/librenms_logo_'.$config['site_style'].'.png'; +} diff --git a/includes/discovery/os/barracuda.inc.php b/includes/discovery/os/barracuda.inc.php index e73d1a9ac6..ef19614432 100644 --- a/includes/discovery/os/barracuda.inc.php +++ b/includes/discovery/os/barracuda.inc.php @@ -17,4 +17,8 @@ if (!$os) { if (stristr($sysDescr, 'Barracuda Spam Firewall')) { $os = 'barracudaspamfirewall'; } + if (stristr($sysDescr, 'Barracuda Firewall')) { + $os = 'barracudangfirewall'; + } + } From cdfe2f0c9e03b3a4d4b6c9a1243bf8d5bd21c53c Mon Sep 17 00:00:00 2001 From: Casey Schoonover Date: Thu, 28 Apr 2016 15:54:56 -0500 Subject: [PATCH 002/133] Fixed definitions filename broken on previous commit --- includes/definitions.inc.php | 9 +++++++++ includes/discovery/os/barracuda.inc.php | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index e3aa214fc9..80965a62ba 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -352,6 +352,15 @@ $config['os'][$os]['icon'] = 'barracuda'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Traffic'; +$os = 'barracudangfirewall'; +$config['os'][$os]['text'] = 'Barracuda NG Firewall'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'barracuda'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + + + // Calix $os = 'calix'; $config['os'][$os]['text'] = 'Calix E7'; diff --git a/includes/discovery/os/barracuda.inc.php b/includes/discovery/os/barracuda.inc.php index e73d1a9ac6..ef19614432 100644 --- a/includes/discovery/os/barracuda.inc.php +++ b/includes/discovery/os/barracuda.inc.php @@ -17,4 +17,8 @@ if (!$os) { if (stristr($sysDescr, 'Barracuda Spam Firewall')) { $os = 'barracudaspamfirewall'; } + if (stristr($sysDescr, 'Barracuda Firewall')) { + $os = 'barracudangfirewall'; + } + } From bda6e7750ddb46c9c2468a6d628e5e8cbd3ecc81 Mon Sep 17 00:00:00 2001 From: Casey Schoonover Date: Thu, 28 Apr 2016 16:06:58 -0500 Subject: [PATCH 003/133] Removed incorrectly named definitions.php and replaced with correctly modified definitions.inc.php --- includes/definitions.php | 2209 -------------------------------------- 1 file changed, 2209 deletions(-) delete mode 100644 includes/definitions.php diff --git a/includes/definitions.php b/includes/definitions.php deleted file mode 100644 index 80965a62ba..0000000000 --- a/includes/definitions.php +++ /dev/null @@ -1,2209 +0,0 @@ -MySQL Error'; - if ($config['db']['extension'] == 'mysqli') { - echo mysqli_error($database_link); - } - else { - echo mysql_error(); - } -die; -} - -if ($config['db']['extension'] == 'mysqli') { - $database_db = mysqli_select_db($database_link, $config['db_name']); -} -else { - $database_db = mysql_select_db($config['db_name'], $database_link); -} - -if ($config['memcached']['enable'] === true) { - if (class_exists('Memcached')) { - $config['memcached']['ttl'] = 60; - $config['memcached']['resource'] = new Memcached(); - $config['memcached']['resource']->addServer($config['memcached']['host'], $config['memcached']['port']); - } - else { - echo "WARNING: You have enabled memcached but have not installed the PHP bindings. Disabling memcached support.\n"; - echo "Try 'apt-get install php5-memcached' or 'pecl install memcached'. You will need the php5-dev and libmemcached-dev packages to use pecl.\n\n"; - $config['memcached']['enable'] = 0; - } -} - -$clone = $config; -foreach (dbFetchRows('select config_name,config_value from config') as $obj) { - $clone = array_replace_recursive($clone, mergecnf($obj)); -} - -$config = array_replace_recursive($clone, $config); - -// -// NO CHANGES TO THIS FILE, IT IS NOT USER-EDITABLE # -// -// YES, THAT MEANS YOU # -// -umask(0002); - -$config['os']['default']['over'][0]['graph'] = 'device_processor'; -$config['os']['default']['over'][0]['text'] = 'Processor Usage'; -$config['os']['default']['over'][1]['graph'] = 'device_mempool'; -$config['os']['default']['over'][1]['text'] = 'Memory Usage'; - -$os_group = 'unix'; -$config['os_group'][$os_group]['type'] = 'server'; -$config['os_group'][$os_group]['processor_stacked'] = 1; -$config['os_group'][$os_group]['over'][0]['graph'] = 'device_processor'; -$config['os_group'][$os_group]['over'][0]['text'] = 'Processor Usage'; -$config['os_group'][$os_group]['over'][1]['graph'] = 'device_ucd_memory'; -$config['os_group'][$os_group]['over'][1]['text'] = 'Memory Usage'; - -$os = 'generic'; -$config['os'][$os]['text'] = 'Generic Device'; - -// Linux-based routers/switches -$os = 'vyatta'; -$config['os'][$os]['text'] = 'Vyatta'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'vyos'; -$config['os'][$os]['text'] = 'VyOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'viprinux'; -$config['os'][$os]['text'] = 'Viprinux'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'viprinux'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; - -$os = 'edgeos'; -$config['os'][$os]['text'] = 'EdgeOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'infinity'; -$config['os'][$os]['text'] = 'LigoWave Infinity'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'ligowave'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -// Ubiquiti -$os = 'unifi'; -$config['os'][$os]['text'] = 'Ubiquiti UniFi'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'ubiquiti'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'airos'; -$config['os'][$os]['text'] = 'Ubiquiti AirOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'ubiquiti'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; - -$os = 'airos-af'; -$config['os'][$os]['text'] = 'Ubiquiti AirFiber'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'ubiquiti'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; - - -// Linux-based OSes here please. -$os = 'linux'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Linux'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_processor'; -$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][1]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_storage'; -$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; - -$os = 'qnap'; -$config['os'][$os]['type'] = 'storage'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'QNAP TurboNAS'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_processor'; -$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][1]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_storage'; -$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; - -$os = 'netapp'; -$config['os'][$os]['type'] = 'storage'; -$config['os'][$os]['text'] = 'NetApp'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'endian'; -$config['os'][$os]['text'] = 'Endian'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'ciscosmblinux'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Cisco SMB Linux'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'powercode'; -$onfig['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Powercode BMU'; -$config['os'][$os]['icon'] = 'powercode'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'procera'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Procera Networks'; -$config['os'][$os]['icon'] = 'procera'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'pktj'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Gandi Packet Journey'; -$config['os'][$os]['icon'] = 'gandi'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'cumulus'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Cumulus Linux'; -$config['os'][$os]['icon'] = 'cumulus'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -// Other Unix-based OSes here please. -$os = 'freebsd'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'FreeBSD'; - -$os = 'pfsense'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'pfSense'; - -$os = 'openbsd'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'OpenBSD'; - -$os = 'netbsd'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'NetBSD'; - -$os = 'dragonfly'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'DragonflyBSD'; - -$os = 'netware'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['text'] = 'Novell Netware'; -$config['os'][$os]['icon'] = 'novell'; - -$os = 'monowall'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'm0n0wall'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; - -$os = 'solaris'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Sun Solaris'; -$config['os'][$os]['type'] = 'server'; - -$os = 'opensolaris'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'Sun OpenSolaris'; - -$os = 'openindiana'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['text'] = 'OpenIndiana'; - -// Alcatel -$os = 'aos'; -$config['os'][$os]['group'] = 'aos'; -$config['os'][$os]['text'] = 'Alcatel-Lucent OS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['icon'] = 'alcatellucent'; - -$os = 'timos'; -$config['os'][$os]['group'] = 'timos'; -$config['os'][$os]['text'] = 'Alcatel-Lucent TimOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['icon'] = 'alcatellucent'; - -// Barracuda -$os = 'barracudaloadbalancer'; -$config['os'][$os]['text'] = 'Barracuda Load Balancer'; -$config['os'][$os]['type'] = 'loadbalancer'; -$config['os'][$os]['icon'] = 'barracuda'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'barracudaspamfirewall'; -$config['os'][$os]['text'] = 'Barracuda Spam Firewall'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'barracuda'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'barracudangfirewall'; -$config['os'][$os]['text'] = 'Barracuda NG Firewall'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'barracuda'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - - - -// Calix -$os = 'calix'; -$config['os'][$os]['text'] = 'Calix E7'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['empty_ifdescr'] = 1; -$config['os'][$os]['icon'] = 'calix'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -// Cisco OSes -$os = 'ios'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco IOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['icon'] = 'cisco'; - -$os = 'acsw'; -// $config['os'][$os]['group'] = "cisco"; -$config['os'][$os]['text'] = 'Cisco ACE'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'loadbalancer'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'cat1900'; -$config['os'][$os]['group'] = 'cat1900'; -$config['os'][$os]['text'] = 'Cisco Catalyst 1900'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'cisco-old'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'iosxe'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco IOS-XE'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['icon'] = 'cisco'; - -$os = 'iosxr'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco IOS-XR'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'asa'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco ASA'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; - -$os = 'pixos'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco PIX-OS'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'nxos'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco NX-OS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'sanos'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco SAN-OS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'cisco'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'catos'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco CatOS'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'cisco-old'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'ciscowlc'; -$config['os'][$os]['text'] = 'Cisco WLC'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['over'][3]['graph'] = 'device_ciscowlc_numaps'; -$config['os'][$os]['over'][3]['text'] = 'Number of APs'; -$config['os'][$os]['over'][4]['graph'] = 'device_ciscowlc_numclients'; -$config['os'][$os]['over'][4]['text'] = 'Number of Clients'; -$config['os'][$os]['icon'] = 'cisco'; - -// Brocade NOS -$os = 'nos'; -$config['os'][$os]['text'] = 'Brocade NOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['icon'] = 'brocade'; - -// Brocade/Foundry ServerIron -$os = 'serveriron'; -$config['os'][$os]['text'] = 'Brocade ServerIron'; -$config['os'][$os]['type'] = 'loadbalancer'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['icon'] = 'brocade'; - -// Cisco Small Business -$os = 'ciscosb'; -$config['os'][$os]['group'] = 'cisco'; -$config['os'][$os]['text'] = 'Cisco Small Business'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'linksys'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; - -// Huawei -$os = 'vrp'; -$config['os'][$os]['group'] = 'vrp'; -$config['os'][$os]['text'] = 'Huawei VRP'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'huawei'; - -// ZTE -$os = 'zxr10'; -$config['os'][$os]['group'] = 'zxr10'; -$config['os'][$os]['text'] = 'ZTE ZXR10'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'zte'; - -// Ruckus Wireless -$os = 'ruckuswireless'; -$config['os'][$os]['text'] = 'Ruckus Wireless'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'ruckus'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Siklu Wireless -$os = 'siklu'; -$config['os'][$os]['text'] = 'Siklu Wireless'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'siklu'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Saf Wireless -$os = 'saf'; -$config['os'][$os]['text'] = 'SAF Wireless'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'saf'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Sub10 -$os = 'sub10'; -$config['os'][$os]['text'] = 'Sub10 Systems'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'sub10'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Supermicro Switch -$os = 'supermicro-switch'; -$config['os'][$os]['group'] = 'supermicro'; -$config['os'][$os]['text'] = 'Supermicro Switch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'supermicro'; -$config['os'][$os]['ifname'] = 1; - -// Netgear ProSafe switches -$os = 'netgear'; -$config['os'][$os]['text'] = 'Netgear ProSafe'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['bad_if'][] = 'cpu'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -//Quanta switches -$os = 'quanta'; -$config['os'][$os]['text'] = 'Quanta'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'quanta'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'netonix'; -$config['os'][$os]['text'] = 'Netonix'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'netonix'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -// Juniper -$os = 'junos'; -$config['os'][$os]['text'] = 'Juniper JunOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'junose'; -$config['os'][$os]['text'] = 'Juniper JunOSe'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'junos'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'jwos'; -$config['os'][$os]['text'] = 'Juniper JWOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'junos'; - -$os = 'screenos'; -$config['os'][$os]['text'] = 'Juniper ScreenOS'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'juniperex2500os'; -$config['os'][$os]['text'] = 'Juniper EX2500'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'junos'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -// Pulse Secure OS definition -$os = 'pulse'; -$config['os'][$os]['text'] = 'Pulse Secure'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'junos'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'fortigate'; -$config['os'][$os]['text'] = 'Fortinet Fortigate'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'fortinet'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_fortigate_cpu'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'routeros'; -$config['os'][$os]['text'] = 'Mikrotik RouterOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'ironware'; -$config['os'][$os]['text'] = 'Brocade IronWare'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'brocade'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'fabos'; -$config['os'][$os]['text'] = 'Brocade FabricOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'brocade'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'extremeware'; -$config['os'][$os]['text'] = 'Extremeware'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['icon'] = 'extreme'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'packetshaper'; -$config['os'][$os]['text'] = 'Blue Coat Packetshaper'; -$config['os'][$os]['type'] = 'network'; - -$os = 'xos'; -$config['os'][$os]['text'] = 'Extreme XOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['group'] = 'extremeware'; -$config['os'][$os]['icon'] = 'extreme'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'ftos'; -$config['os'][$os]['text'] = 'Force10 FTOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'force10'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'dnos'; -$config['os'][$os]['text'] = 'Dell Networking OS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'avaya-ers'; -$config['os'][$os]['text'] = 'ERS Firmware'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'avaya'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'avaya-ipo'; -$config['os'][$os]['text'] = 'IP Office Firmware'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'avaya'; - - -$os = 'arista_eos'; -$config['os'][$os]['text'] = 'Arista EOS'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'arista'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'mellanox'; -$config['os'][$os]['text'] = 'Mellanox'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'netscaler'; -$config['os'][$os]['text'] = 'Citrix Netscaler'; -$config['os'][$os]['type'] = 'loadbalancer'; -$config['os'][$os]['icon'] = 'citrix'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; - -$os = 'f5'; -$config['os'][$os]['text'] = 'F5 Big IP'; -$config['os'][$os]['type'] = 'loadbalancer'; -$config['os'][$os]['icon'] = 'f5'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'proxim'; -$config['os'][$os]['text'] = 'Proxim'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'proxim'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'powerconnect'; -$config['os'][$os]['text'] = 'Dell PowerConnect'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'radlan'; -$config['os'][$os]['text'] = 'Radlan'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; - -$os = 'powervault'; -$config['os'][$os]['text'] = 'Dell PowerVault'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['type'] = 'storage'; - -$os = 'equallogic'; -$config['os'][$os]['text'] = 'Dell EqualLogic'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'drac'; -$config['os'][$os]['text'] = 'Dell DRAC'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['type'] = 'server'; - -$os = 'bcm963'; -$config['os'][$os]['text'] = 'Broadcom BCM963xx'; -$config['os'][$os]['icon'] = 'broadcom'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'netopia'; -$config['os'][$os]['text'] = 'Motorola Netopia'; -$config['os'][$os]['type'] = 'network'; - -$os = 'tranzeo'; -$config['os'][$os]['text'] = 'Tranzeo'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'dlink'; -$config['os'][$os]['text'] = 'D-Link Switch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'dlink'; -$config['os'][$os]['ifname'] = 1; - -$os = 'dlinkap'; -$config['os'][$os]['text'] = 'D-Link Access Point'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'dlink'; - -// TP-Link -$os = 'tplink'; -$config['os'][$os]['text'] = 'TP-Link Switch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'tplink'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'axiscam'; -$config['os'][$os]['text'] = 'AXIS Network Camera'; -$config['os'][$os]['icon'] = 'axis'; - -$os = 'axisdocserver'; -$config['os'][$os]['text'] = 'AXIS Network Document Server'; -$config['os'][$os]['icon'] = 'axis'; - -$os = 'gamatronicups'; -$config['os'][$os]['text'] = 'Gamatronic UPS Stack'; -$config['os'][$os]['type'] = 'power'; - -$os = 'powerware'; -$config['os'][$os]['text'] = 'Powerware UPS'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'eaton'; -$config['os'][$os]['over'][0]['graph'] = 'device_voltage'; -$config['os'][$os]['over'][0]['text'] = 'Voltage'; -$config['os'][$os]['over'][1]['graph'] = 'device_current'; -$config['os'][$os]['over'][1]['text'] = 'Current'; -$config['os'][$os]['over'][2]['graph'] = 'device_frequency'; -$config['os'][$os]['over'][2]['text'] = 'Frequencies'; - -$os = 'deltaups'; -$config['os'][$os]['text'] = 'Delta UPS'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'delta'; - -$os = 'liebert'; -$config['os'][$os]['text'] = 'Liebert'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'liebert'; - -$os = 'engenius'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['text'] = 'EnGenius Access Point'; -$config['os'][$os]['icon'] = 'engenius'; -$config['os'][$os]['over'][0]['graph'] = 'device_ucd_cpu'; -$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][1]['graph'] = 'device_ucd_memory'; -$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_bits'; -$config['os'][$os]['over'][2]['text'] = 'Device Traffic'; - -$os = 'airport'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['text'] = 'Apple AirPort'; -$config['os'][$os]['icon'] = 'apple'; - -$os = 'windows'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['text'] = 'Microsoft Windows'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['processor_stacked'] = 1; - -$os = 'bnt'; -$config['os'][$os]['text'] = 'Blade Network Technologies'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'bnt'; - -$os = 'ibmnos'; -$config['os'][$os]['text'] = 'IBM Networking Operating System'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'ibmnos'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'ibmtl'; -$config['os'][$os]['text'] = 'IBM Tape Library'; -$config['os'][$os]['type'] = 'storage'; -$config['os'][$os]['icon'] = 'generic'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'comware'; -$config['os'][$os]['text'] = 'HP Comware'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'hp'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -// $config['os'][$os]['over'][1]['graph'] = "device_processor"; -// $config['os'][$os]['over'][1]['text'] = "CPU Usage"; -// $config['os'][$os]['over'][2]['graph'] = "device_mempool"; -// $config['os'][$os]['over'][2]['text'] = "Memory Usage"; -$os = 'procurve'; -$config['os'][$os]['text'] = 'HP ProCurve'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'hp'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'speedtouch'; -$config['os'][$os]['text'] = 'Thomson Speedtouch'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'sonicwall'; -$config['os'][$os]['text'] = 'SonicWALL'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory'; - -$os = 'zywall'; -$config['os'][$os]['text'] = 'ZyXEL ZyWALL'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['icon'] = 'zyxel'; - -$os = 'prestige'; -$config['os'][$os]['text'] = 'ZyXEL Prestige'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'zyxel'; - -$os = 'zynos'; -$config['os'][$os]['text'] = 'ZyXEL Ethernet Switch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'zyxel'; - -$os = 'zyxelnwa'; -$config['os'][$os]['text'] = 'ZyXEL NWA'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'zyxel'; - -$os = 'ies'; -$config['os'][$os]['text'] = 'ZyXEL DSLAM'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'zyxel'; - -$os = 'allied'; -$config['os'][$os]['text'] = 'AlliedWare'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -$os = 'mgeups'; -$config['os'][$os]['text'] = 'MGE UPS'; -$config['os'][$os]['group'] = 'ups'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'mge'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -$os = 'mgepdu'; -$config['os'][$os]['text'] = 'MGE PDU'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'mge'; - -$os = 'apc'; -$config['os'][$os]['text'] = 'APC Management Module'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -$os = 'webpower'; -$config['os'][$os]['text'] = 'WebPower'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -$os = 'avtech'; -$config['os'][$os]['text'] = 'Avtech Environment Sensor'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['icon'] = 'avtech'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'Temperature'; - -$os = 'netbotz'; -$config['os'][$os]['text'] = 'Netbotz Environment sensor'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'Temperature'; -$config['os'][$os]['over'][1]['graph'] = 'device_humidity'; -$config['os'][$os]['over'][1]['text'] = 'Humidity'; - -$os = 'pcoweb'; -$config['os'][$os]['text'] = 'Carel pCOWeb'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'Temperature'; -$config['os'][$os]['over'][1]['graph'] = 'device_humidity'; -$config['os'][$os]['over'][1]['text'] = 'Humidity'; -$config['os'][$os]['icon'] = 'carel'; -$config['os'][$os]['icons'][] = 'uniflair'; - -$os = 'netvision'; -$config['os'][$os]['text'] = 'Socomec Net Vision'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -$os = 'areca'; -$config['os'][$os]['text'] = 'Areca RAID Subsystem'; -$config['os'][$os]['over'][0]['graph'] = ''; -$config['os'][$os]['over'][0]['text'] = ''; - -$os = 'netmanplus'; -$config['os'][$os]['text'] = 'NetMan Plus'; -$config['os'][$os]['group'] = 'ups'; -$config['os'][$os]['nobulk'] = 1; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -$os = 'akcp'; -$config['os'][$os]['text'] = 'AKCP SensorProbe'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'temperature'; - -$os = 'minkelsrms'; -$config['os'][$os]['text'] = 'Minkels RMS'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'temperature'; - -$os = 'ipoman'; -$config['os'][$os]['text'] = 'Ingrasys iPoMan'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'ingrasys'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; -$config['os'][$os]['over'][1]['graph'] = 'device_power'; -$config['os'][$os]['over'][1]['text'] = 'Power'; - -$os = 'wxgoos'; -$config['os'][$os]['text'] = 'ITWatchDogs Goose'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'temperature'; - -$os = 'papouch-tme'; -$config['os'][$os]['text'] = 'Papouch TME'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'temperature'; - -$os = 'cometsystem-p85xx'; -$config['os'][$os]['text'] = 'Comet System P85xx'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['icon'] = 'comet'; -$config['os'][$os]['over'][0]['graph'] = 'device_temperature'; -$config['os'][$os]['over'][0]['text'] = 'temperature'; - - //printer -$os = 'dell-laser'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Dell Laser'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'dell'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'ricoh'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Ricoh Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'ricoh'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'nrg'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'NRG Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'nrg'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'epson'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Epson Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'epson'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'xerox'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Xerox Printer'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'jetdirect'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'HP Print server'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'hp'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'richoh'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Ricoh Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'okilan'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'OKI Printer'; -$config['os'][$os]['overgraph'][] = 'device_toner'; -$config['os'][$os]['overtext'] = 'Toner'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'oki'; - -$os = 'brother'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Brother Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'konica'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Konica-Minolta Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = 'kyocera'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Kyocera Mita Printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['type'] = 'printer'; - -$os ='samsungprinter'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Samsung Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os ='canonprinter'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Canon Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'canon'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os ='lexmarkprinter'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Lexmark Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'lexmark'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os ='developprinter'; -$config['os'][$os]['group'] = 'printer'; -$config['os'][$os]['text'] = 'Develop Printer'; -$config['os'][$os]['type'] = 'printer'; -$config['os'][$os]['icon'] = 'develop'; -$config['os'][$os]['over'][0]['graph'] = 'device_toner'; -$config['os'][$os]['over'][0]['text'] = 'Toner'; - -$os = '3com'; -$config['os'][$os]['text'] = '3Com'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['type'] = 'network'; - -$os = 'sentry3'; -$config['os'][$os]['text'] = 'ServerTech Sentry3'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; -$config['os'][$os]['icon'] = 'servertech'; - -$os = 'raritan'; -$config['os'][$os]['text'] = 'Raritan PDU'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; -$config['os'][$os]['icon'] = 'raritan'; - -$os = 'vmware'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['text'] = 'VMware'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'mrvld'; -$config['os'][$os]['group'] = 'mrv'; -$config['os'][$os]['text'] = 'MRV LambdaDriver'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'mrv'; - -$os = 'poweralert'; -$config['os'][$os]['text'] = 'Tripp Lite PowerAlert'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; -$config['os'][$os]['icon'] = 'tripplite'; - -$os = 'avocent'; -$config['os'][$os]['text'] = 'Avocent'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'avocent'; - -$os = 'symbol'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['text'] = 'Symbol AP'; -$config['os'][$os]['icon'] = 'symbol'; - -$os = 'firebox'; -$config['os'][$os]['text'] = 'Watchguard Firebox'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['icon'] = 'watchguard'; - -$os = 'fireware'; -$config['os'][$os]['text'] = 'Watchguard Fireware'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['icon'] = 'watchguard'; - -$os = 'panos'; -$config['os'][$os]['text'] = 'PanOS'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'panos'; - -$os = 'arubaos'; -$config['os'][$os]['text'] = 'ArubaOS'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'arubaos'; -$config['os'][$os]['over'][0]['graph'] = 'device_arubacontroller_numaps'; -$config['os'][$os]['over'][0]['text'] = 'Number of APs'; -$config['os'][$os]['over'][1]['graph'] = 'device_arubacontroller_numclients'; -$config['os'][$os]['over'][1]['text'] = 'Number of Clients'; - -$os = 'dsm'; -$config['os'][$os]['text'] = 'Synology DSM'; -$config['os'][$os]['group'] = 'unix'; -$config['os'][$os]['type'] = 'storage'; -$config['os'][$os]['icon'] = 'synology'; -$config['os'][$os]['over'][0]['graph'] = 'device_processor'; -$config['os'][$os]['over'][0]['text'] = 'Processor Usage'; -$config['os'][$os]['over'][1]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][1]['text'] = 'Memory Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_storage'; -$config['os'][$os]['over'][2]['text'] = 'Storage Usage'; - -$os = 'hikvision'; -$config['os'][$os]['text'] = 'Hikvision'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'hikvision'; - -// Canopy / Cambium support -$os = 'cambium'; -$config['os'][$os]['text'] = 'Cambium'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'cambium'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'canopy'; -$config['os'][$os]['text'] = 'Canopy'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'cambium'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'datacom'; -$config['os'][$os]['text'] = 'Datacom'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'datacom'; - -// UBNT EdgeSwitch 750W -$os = 'edgeswitch'; -$config['os'][$os]['text'] = 'EdgeSwitch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'ubiquiti'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['ifname'] = 1; - -// Fiberhome -$os = 'fiberhome'; -$config['os'][$os]['text'] = 'Fiberhome'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'fiberhome'; - -// PBN, Pacific Broadband Networks -$os = 'pbn'; -$config['os'][$os]['text'] = 'PBN'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['ifXmcbc'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; -$config['os'][$os]['icon'] = 'pbn'; - -// Enterasys -$os = 'enterasys'; -$config['os'][$os]['text'] = 'Enterasys'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['icon'] = 'enterasys'; - -// Multimatic UPS (Generex CS121 SNMP Adapter) -$os = 'multimatic'; -$config['os'][$os]['text'] = 'Multimatic UPS'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'multimatic'; - -// Huawei UPS -$os = 'huaweiups'; -$config['os'][$os]['text'] = 'Huawei UPS'; -$config['os'][$os]['group'] = 'ups'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'huawei'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -foreach ($config['os'] as $this_os => $blah) { - if (isset($config['os'][$this_os]['group'])) { - $this_os_group = $config['os'][$this_os]['group']; - if (isset($config['os_group'][$this_os_group])) { - foreach ($config['os_group'][$this_os_group] as $property => $value) { - if (!isset($config['os'][$this_os][$property])) { - $config['os'][$this_os][$property] = $value; - } - } - } - } -} - -// Meraki Devices -$os = 'merakimx'; -$config['os'][$os]['text'] = 'Meraki MX Appliance'; -$config['os'][$os]['type'] = 'firewall'; -$config['os'][$os]['icon'] = 'meraki'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'merakimr'; -$config['os'][$os]['text'] = 'Meraki AP'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'meraki'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -$os = 'merakims'; -$config['os'][$os]['text'] = 'Meraki Switch'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'meraki'; -$config['os'][$os]['ifname'] = 1; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -// Aerohive -$os = 'aerohive'; -$config['os'][$os]['text'] = 'Aerohive HiveOS'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Perle -$os = 'perle'; -$config['os'][$os]['text'] = 'Perle'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'perle'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// MACOSX -$os = 'macosx'; -$config['os'][$os]['text'] = 'Apple OS X'; -$config['os'][$os]['type'] = 'server'; -$config['os'][$os]['icon'] = 'generic'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// HP MSM -$os = 'hpmsm'; -$config['os'][$os]['text'] = 'HP MSM'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'hp'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Riverbed -$os = 'riverbed'; -$config['os'][$os]['text'] = 'Riverbed'; -$config['os'][$os]['type'] = 'network'; -$config['os'][$os]['icon'] = 'riverbed'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// Ligowave LigoOS -$os = 'ligoos'; -$config['os'][$os]['text'] = 'LigoWave LigoOS'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'ligowave'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// HWGroup Poseidon -$os = 'poseidon'; -$config['os'][$os]['text'] = 'Poseidon'; -$config['os'][$os]['type'] = 'environment'; -$config['os'][$os]['icon'] = 'generic'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; - -// EATON PDU -$os = 'eatonpdu'; -$config['os'][$os]['text'] = 'Eaton PDU'; -$config['os'][$os]['type'] = 'power'; -$config['os'][$os]['icon'] = 'eaton'; -$config['os'][$os]['over'][0]['graph'] = 'device_current'; -$config['os'][$os]['over'][0]['text'] = 'Current'; - -// Appliances -$os = 'fortios'; -$config['os'][$os]['text'] = 'FortiOS'; -$config['os'][$os]['type'] = 'appliance'; -$config['os'][$os]['icon'] = 'fortios'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -$os = 'nios'; -$config['os'][$os]['text'] = 'Infoblox'; -$config['os'][$os]['type'] = 'appliance'; -$config['os'][$os]['icon'] = 'infoblox'; - -// Lenovo EMC (NAS) -$os = 'lenovoemc'; -$config['os'][$os]['type'] = 'storage'; -$config['os'][$os]['group'] = 'storage'; -$config['os'][$os]['text'] = 'LenovoEMC'; -$config['os'][$os]['icon'] = 'lenovo'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_processor'; -$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; -$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; -$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; - -// Deliberant WiFi -$os = 'deliberant'; -$config['os'][$os]['text'] = 'Deliberant OS'; -$config['os'][$os]['type'] = 'wireless'; -$config['os'][$os]['icon'] = 'deliberant'; -$config['os'][$os]['over'][0]['graph'] = 'device_bits'; -$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; - -// Graph Types -require_once $config['install_dir'].'/includes/load_db_graph_types.inc.php'; - - -// Device - Wireless - AirMAX -$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['order'] = '0'; -$config['graph_types']['device']['ubnt_airmax_WlStatStaCount']['descr'] = 'Wireless Clients'; - -$config['graph_types']['device']['ubnt_airmax_RadioDistance']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_RadioDistance']['order'] = '1'; -$config['graph_types']['device']['ubnt_airmax_RadioDistance']['descr'] = 'Radio Distance'; - -$config['graph_types']['device']['ubnt_airmax_RadioFreq']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_RadioFreq']['order'] = '2'; -$config['graph_types']['device']['ubnt_airmax_RadioFreq']['descr'] = 'Radio Frequency'; - -$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['order'] = '3'; -$config['graph_types']['device']['ubnt_airmax_RadioTxPower']['descr'] = 'Radio Tx Power'; - -$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['order'] = '4'; -$config['graph_types']['device']['ubnt_airmax_RadioRssi_0']['descr'] = 'Radio Rssi Chain 0'; - -$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['order'] = '5'; -$config['graph_types']['device']['ubnt_airmax_RadioRssi_1']['descr'] = 'Radio Rssi Chain 1'; - -$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['order'] = '6'; -$config['graph_types']['device']['ubnt_airmax_WlStatSignal']['descr'] = 'Radio Signal'; - -$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['order'] = '7'; -$config['graph_types']['device']['ubnt_airmax_WlStatRssi']['descr'] = 'Radio Overall RSSI'; - -$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['order'] = '8'; -$config['graph_types']['device']['ubnt_airmax_WlStatCcq']['descr'] = 'Radio CCQ'; - -$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['order'] = '10'; -$config['graph_types']['device']['ubnt_airmax_WlStatNoiseFloor']['descr'] = 'Radio Noise Floor'; - -$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['order'] = '11'; -$config['graph_types']['device']['ubnt_airmax_WlStatTxRate']['descr'] = 'Radio Tx Rate'; - -$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['order'] = '12'; -$config['graph_types']['device']['ubnt_airmax_WlStatRxRate']['descr'] = 'Radio Rx Rate'; - -$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['order'] = '13'; -$config['graph_types']['device']['ubnt_airmax_AirMaxQuality']['descr'] = 'AirMax Quality'; - -$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['order'] = '14'; -$config['graph_types']['device']['ubnt_airmax_AirMaxCapacity']['descr'] = 'AirMax Capacity'; - -// Device - AirFIBER -$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['order'] = '0'; -$config['graph_types']['device']['ubnt_airfiber_RadioFreqs']['descr'] = 'Radio Frequencies'; - -$config['graph_types']['device']['ubnt_airfiber_TxPower']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_TxPower']['order'] = '0'; -$config['graph_types']['device']['ubnt_airfiber_TxPower']['descr'] = 'Radio Tx Power'; - -$config['graph_types']['device']['ubnt_airfiber_LinkDist']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_LinkDist']['order'] = '1'; -$config['graph_types']['device']['ubnt_airfiber_LinkDist']['descr'] = 'Link Distance'; - -$config['graph_types']['device']['ubnt_airfiber_Capacity']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_Capacity']['order'] = '2'; -$config['graph_types']['device']['ubnt_airfiber_Capacity']['descr'] = 'Link Capacity'; - -$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['order'] = '3'; -$config['graph_types']['device']['ubnt_airfiber_RadioTemp']['descr'] = 'Radio Temperatures'; - -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['order'] = '4'; -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsTx']['descr'] = 'RF Total Octets Tx'; - -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['order'] = '5'; -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsTx']['descr'] = 'RF Total Packets Tx'; - -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['order'] = '6'; -$config['graph_types']['device']['ubnt_airfiber_RFTotOctetsRx']['descr'] = 'RF Total Octets Rx'; - -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['section'] = 'wireless'; -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['order'] = '7'; -$config['graph_types']['device']['ubnt_airfiber_RFTotPktsRx']['descr'] = 'RF Total Packets Rx'; - -// Siklu support -$config['graph_types']['device']['siklu_rfAverageRssi']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfAverageRssi']['order'] = '0'; -$config['graph_types']['device']['siklu_rfAverageRssi']['descr'] = 'Radio Average RSSI'; - -$config['graph_types']['device']['siklu_rfAverageCinr']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfAverageCinr']['order'] = '1'; -$config['graph_types']['device']['siklu_rfAverageCinr']['descr'] = 'Radio Average CINR'; - -$config['graph_types']['device']['siklu_rfOperationalFrequency']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfOperationalFrequency']['order'] = '2'; -$config['graph_types']['device']['siklu_rfOperationalFrequency']['descr'] = 'Operational Frequency'; - -$config['graph_types']['device']['siklu_rfinterfacePkts']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfinterfacePkts']['order'] = '3'; -$config['graph_types']['device']['siklu_rfinterfacePkts']['descr'] = 'Packets'; - -$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['order'] = '4'; -$config['graph_types']['device']['siklu_rfinterfaceOtherPkts']['descr'] = 'Other Packets'; - -$config['graph_types']['device']['siklu_rfinterfaceOctets']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfinterfaceOctets']['order'] = '5'; -$config['graph_types']['device']['siklu_rfinterfaceOctets']['descr'] = 'Traffic'; - -$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['section'] = 'wireless'; -$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['order'] = '6'; -$config['graph_types']['device']['siklu_rfinterfaceOtherOctets']['descr'] = 'Other Octets'; - -// Sub10 support -$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['order'] = '0'; -$config['graph_types']['device']['sub10_sub10RadioLclTxPower']['descr'] = 'Radio Transmit Power'; - -$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['order'] = '1'; -$config['graph_types']['device']['sub10_sub10RadioLclRxPower']['descr'] = 'Radio Receive Power'; - -$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['order'] = '3'; -$config['graph_types']['device']['sub10_sub10RadioLclVectErr']['descr'] = 'Radio Vector Error'; - -$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['order'] = '3'; -$config['graph_types']['device']['sub10_sub10RadioLclLnkLoss']['descr'] = 'Radio Link Loss'; - -$config['graph_types']['device']['sub10_sub10RadioLclAFER']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclAFER']['order'] = '4'; -$config['graph_types']['device']['sub10_sub10RadioLclAFER']['descr'] = 'Radio Air Frame Error Rate'; - -$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['section'] = 'wireless'; -$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['order'] = '4'; -$config['graph_types']['device']['sub10_sub10RadioLclDataRate']['descr'] = 'Data Rate on the Airside interface'; - -//cambium graphs -$config['graph_types']['device']['cambium_650_rawReceivePower']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_rawReceivePower']['order'] = '0'; -$config['graph_types']['device']['cambium_650_rawReceivePower']['descr'] = 'Raw Receive Power'; -$config['graph_types']['device']['cambium_650_transmitPower']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_transmitPower']['order'] = '1'; -$config['graph_types']['device']['cambium_650_transmitPower']['descr'] = 'Transmit Power'; -$config['graph_types']['device']['cambium_650_modulationMode']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_modulationMode']['order'] = '2'; -$config['graph_types']['device']['cambium_650_modulationMode']['descr'] = 'Moduation Mode'; -$config['graph_types']['device']['cambium_650_dataRate']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_dataRate']['order'] = '3'; -$config['graph_types']['device']['cambium_650_dataRate']['descr'] = 'Data Rate'; -$config['graph_types']['device']['cambium_650_ssr']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_ssr']['order'] = '4'; -$config['graph_types']['device']['cambium_650_ssr']['descr'] = 'Signal Strength Ratio'; -$config['graph_types']['device']['cambium_650_gps']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_650_gps']['order'] = '5'; -$config['graph_types']['device']['cambium_650_gps']['descr'] = 'GPS Status'; - -$config['graph_types']['device']['cambium_250_receivePower']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_250_receivePower']['order'] = '0'; -$config['graph_types']['device']['cambium_250_receivePower']['descr'] = 'Raw Receive Power'; -$config['graph_types']['device']['cambium_250_transmitPower']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_250_transmitPower']['order'] = '1'; -$config['graph_types']['device']['cambium_250_transmitPower']['descr'] = 'Transmit Power'; -$config['graph_types']['device']['cambium_250_modulationMode']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_250_modulationMode']['order'] = '2'; -$config['graph_types']['device']['cambium_250_modulationMode']['descr'] = 'Moduation Mode'; -$config['graph_types']['device']['cambium_250_dataRate']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_250_dataRate']['order'] = '3'; -$config['graph_types']['device']['cambium_250_dataRate']['descr'] = 'Data Rate'; -$config['graph_types']['device']['cambium_250_ssr']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_250_ssr']['order'] = '4'; -$config['graph_types']['device']['cambium_250_ssr']['descr'] = 'Signal Strength Ratio'; - -$config['graph_types']['device']['canopy_generic_whispGPSStats']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_whispGPSStats']['order'] = '0'; -$config['graph_types']['device']['canopy_generic_whispGPSStats']['descr'] = 'GPS Status'; -$config['graph_types']['device']['canopy_generic_gpsStats']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_gpsStats']['order'] = '0'; -$config['graph_types']['device']['canopy_generic_gpsStats']['descr'] = 'GPS Stats'; -$config['graph_types']['device']['canopy_generic_rssi']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_rssi']['order'] = '1'; -$config['graph_types']['device']['canopy_generic_rssi']['descr'] = 'Signal Rssi'; -$config['graph_types']['device']['canopy_generic_jitter']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_jitter']['order'] = '2'; -$config['graph_types']['device']['canopy_generic_jitter']['descr'] = 'Jitter'; -$config['graph_types']['device']['canopy_generic_signalHV']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_signalHV']['order'] = '3'; -$config['graph_types']['device']['canopy_generic_signalHV']['descr'] = 'Signal'; -$config['graph_types']['device']['canopy_generic_450_powerlevel']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_powerlevel']['order'] = '4'; -$config['graph_types']['device']['canopy_generic_450_powerlevel']['descr'] = 'Power Level of Registered SM'; -$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['order'] = '5'; -$config['graph_types']['device']['canopy_generic_450_linkRadioDbm']['descr'] = 'Radio Link H/V'; -$config['graph_types']['device']['canopy_generic_450_ptpSNR']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_ptpSNR']['order'] = '6'; -$config['graph_types']['device']['canopy_generic_450_ptpSNR']['descr'] = 'Master SNR'; -$config['graph_types']['device']['canopy_generic_450_slaveHV']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_slaveHV']['order'] = '7'; -$config['graph_types']['device']['canopy_generic_450_slaveHV']['descr'] = 'Dbm H/V'; -$config['graph_types']['device']['canopy_generic_450_slaveSNR']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_slaveSNR']['order'] = '8'; -$config['graph_types']['device']['canopy_generic_450_slaveSNR']['descr'] = 'SNR'; -$config['graph_types']['device']['canopy_generic_450_slaveSSR']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_slaveSSR']['order'] = '9'; -$config['graph_types']['device']['canopy_generic_450_slaveSSR']['descr'] = 'SSR'; -$config['graph_types']['device']['canopy_generic_450_masterSSR']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_450_masterSSR']['order'] = '10'; -$config['graph_types']['device']['canopy_generic_450_masterSSR']['descr'] = 'Master SSR'; -$config['graph_types']['device']['canopy_generic_regCount']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_regCount']['order'] = '11'; -$config['graph_types']['device']['canopy_generic_regCount']['descr'] = 'Registered SM'; -$config['graph_types']['device']['canopy_generic_freq']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_freq']['order'] = '12'; -$config['graph_types']['device']['canopy_generic_freq']['descr'] = 'Radio Frequency'; -$config['graph_types']['device']['canopy_generic_radioDbm']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_radioDbm']['order'] = '13'; -$config['graph_types']['device']['canopy_generic_radioDbm']['descr'] = 'Radio Dbm'; -$config['graph_types']['device']['canopy_generic_errorCount']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_errorCount']['order'] = '14'; -$config['graph_types']['device']['canopy_generic_errorCount']['descr'] = 'Error Count'; -$config['graph_types']['device']['canopy_generic_crcErrors']['section'] = 'wireless'; -$config['graph_types']['device']['canopy_generic_crcErrors']['order'] = '15'; -$config['graph_types']['device']['canopy_generic_crcErrors']['descr'] = 'CRC Errors'; - -$config['graph_types']['device']['cambium_epmp_RFStatus']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_RFStatus']['order'] = '0'; -$config['graph_types']['device']['cambium_epmp_RFStatus']['descr'] = 'RF Status'; -$config['graph_types']['device']['cambium_epmp_gps']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_gps']['order'] = '1'; -$config['graph_types']['device']['cambium_epmp_gps']['descr'] = 'GPS Info'; -$config['graph_types']['device']['cambium_epmp_modulation']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_modulation']['order'] = '2'; -$config['graph_types']['device']['cambium_epmp_modulation']['descr'] = 'ePMP Modulation'; -$config['graph_types']['device']['cambium_epmp_registeredSM']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_registeredSM']['order'] = '3'; -$config['graph_types']['device']['cambium_epmp_registeredSM']['descr'] = 'ePMP Registered SM'; -$config['graph_types']['device']['cambium_epmp_access']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_access']['order'] = '4'; -$config['graph_types']['device']['cambium_epmp_access']['descr'] = 'Access Info'; -$config['graph_types']['device']['cambium_epmp_gpsSync']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_gpsSync']['order'] = '5'; -$config['graph_types']['device']['cambium_epmp_gpsSync']['descr'] = 'GPS Sync Status'; -$config['graph_types']['device']['cambium_epmp_freq']['section'] = 'wireless'; -$config['graph_types']['device']['cambium_epmp_freq']['order'] = '6'; -$config['graph_types']['device']['cambium_epmp_freq']['descr'] = 'Frequency'; - -$config['graph_types']['device']['wifi_clients']['section'] = 'wireless'; -$config['graph_types']['device']['wifi_clients']['order'] = '0'; -$config['graph_types']['device']['wifi_clients']['descr'] = 'Wireless Clients'; - -$config['graph_types']['device']['agent']['section'] = 'poller'; -$config['graph_types']['device']['agent']['order'] = '0'; -$config['graph_types']['device']['agent']['descr'] = 'Agent Execution Time'; - -$config['graph_types']['device']['cipsec_flow_bits']['section'] = 'firewall'; -$config['graph_types']['device']['cipsec_flow_bits']['order'] = '0'; -$config['graph_types']['device']['cipsec_flow_bits']['descr'] = 'IPSec Tunnel Traffic Volume'; -$config['graph_types']['device']['cipsec_flow_pkts']['section'] = 'firewall'; -$config['graph_types']['device']['cipsec_flow_pkts']['order'] = '0'; -$config['graph_types']['device']['cipsec_flow_pkts']['descr'] = 'IPSec Tunnel Traffic Packets'; -$config['graph_types']['device']['cipsec_flow_stats']['section'] = 'firewall'; -$config['graph_types']['device']['cipsec_flow_stats']['order'] = '0'; -$config['graph_types']['device']['cipsec_flow_stats']['descr'] = 'IPSec Tunnel Statistics'; -$config['graph_types']['device']['cipsec_flow_tunnels']['section'] = 'firewall'; -$config['graph_types']['device']['cipsec_flow_tunnels']['order'] = '0'; -$config['graph_types']['device']['cipsec_flow_tunnels']['descr'] = 'IPSec Active Tunnels'; -$config['graph_types']['device']['cras_sessions']['section'] = 'firewall'; -$config['graph_types']['device']['cras_sessions']['order'] = '0'; -$config['graph_types']['device']['cras_sessions']['descr'] = 'Remote Access Sessions'; -$config['graph_types']['device']['fortigate_sessions']['section'] = 'firewall'; -$config['graph_types']['device']['fortigate_sessions']['order'] = '0'; -$config['graph_types']['device']['fortigate_sessions']['descr'] = 'Active Sessions'; -$config['graph_types']['device']['fortigate_cpu']['section'] = 'system'; -$config['graph_types']['device']['fortigate_cpu']['order'] = '0'; -$config['graph_types']['device']['fortigate_cpu']['descr'] = 'CPU'; -$config['graph_types']['device']['screenos_sessions']['section'] = 'firewall'; -$config['graph_types']['device']['screenos_sessions']['order'] = '0'; -$config['graph_types']['device']['screenos_sessions']['descr'] = 'Active Sessions'; -$config['graph_types']['device']['panos_sessions']['section'] = 'firewall'; -$config['graph_types']['device']['panos_sessions']['order'] = '0'; -$config['graph_types']['device']['panos_sessions']['descr'] = 'Active Sessions'; - -//Pulse Secure Graphs -$config['graph_types']['device']['pulse_users']['section'] = 'firewall'; -$config['graph_types']['device']['pulse_users']['order'] = '0'; -$config['graph_types']['device']['pulse_users']['descr'] = 'Active Users'; -$config['graph_types']['device']['pulse_sessions']['section'] = 'firewall'; -$config['graph_types']['device']['pulse_sessions']['order'] = '0'; -$config['graph_types']['device']['pulse_sessions']['descr'] = 'Active Sessions'; - -// Infoblox dns/dhcp Graphs -$config['graph_types']['device']['ib_dns_dyn_updates']['section'] = 'dns'; -$config['graph_types']['device']['ib_dns_dyn_updates']['order'] = '0'; -$config['graph_types']['device']['ib_dns_dyn_updates']['descr'] = 'DNS dynamic updates'; -$config['graph_types']['device']['ib_dns_request_return_codes']['section'] = 'dns'; -$config['graph_types']['device']['ib_dns_request_return_codes']['order'] = '0'; -$config['graph_types']['device']['ib_dns_request_return_codes']['descr'] = 'DNS request return codes'; -$config['graph_types']['device']['ib_dns_performance']['section'] = 'dns'; -$config['graph_types']['device']['ib_dns_performance']['order'] = '0'; -$config['graph_types']['device']['ib_dns_performance']['descr'] = 'DNS performance'; -$config['graph_types']['device']['ib_dhcp_messages']['section'] = 'dhcp'; -$config['graph_types']['device']['ib_dhcp_messages']['order'] = '0'; -$config['graph_types']['device']['ib_dhcp_messages']['descr'] = 'DHCP messages'; - -$config['graph_types']['device']['bits']['section'] = 'netstats'; -$config['graph_types']['device']['bits']['order'] = '0'; -$config['graph_types']['device']['bits']['descr'] = 'Total Traffic'; -$config['graph_types']['device']['ipsystemstats_ipv4']['section'] = 'netstats'; -$config['graph_types']['device']['ipsystemstats_ipv4']['order'] = '0'; -$config['graph_types']['device']['ipsystemstats_ipv4']['descr'] = 'IPv4 Packet Statistics'; -$config['graph_types']['device']['ipsystemstats_ipv4_frag']['section'] = 'netstats'; -$config['graph_types']['device']['ipsystemstats_ipv4_frag']['order'] = '0'; -$config['graph_types']['device']['ipsystemstats_ipv4_frag']['descr'] = 'IPv4 Fragmentation Statistics'; -$config['graph_types']['device']['ipsystemstats_ipv6']['section'] = 'netstats'; -$config['graph_types']['device']['ipsystemstats_ipv6']['order'] = '0'; -$config['graph_types']['device']['ipsystemstats_ipv6']['descr'] = 'IPv6 Packet Statistics'; -$config['graph_types']['device']['ipsystemstats_ipv6_frag']['section'] = 'netstats'; -$config['graph_types']['device']['ipsystemstats_ipv6_frag']['order'] = '0'; -$config['graph_types']['device']['ipsystemstats_ipv6_frag']['descr'] = 'IPv6 Fragmentation Statistics'; -$config['graph_types']['device']['netstat_icmp_info']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_icmp_info']['order'] = '0'; -$config['graph_types']['device']['netstat_icmp_info']['descr'] = 'ICMP Informational Statistics'; -$config['graph_types']['device']['netstat_icmp']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_icmp']['order'] = '0'; -$config['graph_types']['device']['netstat_icmp']['descr'] = 'ICMP Statistics'; -$config['graph_types']['device']['netstat_ip']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_ip']['order'] = '0'; -$config['graph_types']['device']['netstat_ip']['descr'] = 'IP Statistics'; -$config['graph_types']['device']['netstat_ip_frag']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_ip_frag']['order'] = '0'; -$config['graph_types']['device']['netstat_ip_frag']['descr'] = 'IP Fragmentation Statistics'; -$config['graph_types']['device']['netstat_snmp']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_snmp']['order'] = '0'; -$config['graph_types']['device']['netstat_snmp']['descr'] = 'SNMP Statistics'; -$config['graph_types']['device']['netstat_snmp_pkt']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_snmp_pkt']['order'] = '0'; -$config['graph_types']['device']['netstat_snmp_pkt']['descr'] = 'SNMP Packet Type Statistics'; - -$config['graph_types']['device']['netstat_ip_forward']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_ip_forward']['order'] = '0'; -$config['graph_types']['device']['netstat_ip_forward']['descr'] = 'IP Forwarding Statistics'; - -$config['graph_types']['device']['netstat_tcp']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_tcp']['order'] = '0'; -$config['graph_types']['device']['netstat_tcp']['descr'] = 'TCP Statistics'; -$config['graph_types']['device']['netstat_udp']['section'] = 'netstats'; -$config['graph_types']['device']['netstat_udp']['order'] = '0'; -$config['graph_types']['device']['netstat_udp']['descr'] = 'UDP Statistics'; - -$config['graph_types']['device']['fdb_count']['section'] = 'system'; -$config['graph_types']['device']['fdb_count']['order'] = '0'; -$config['graph_types']['device']['fdb_count']['descr'] = 'MAC Addresses Learnt'; -$config['graph_types']['device']['hr_processes']['section'] = 'system'; -$config['graph_types']['device']['hr_processes']['order'] = '0'; -$config['graph_types']['device']['hr_processes']['descr'] = 'Running Processes'; -$config['graph_types']['device']['hr_users']['section'] = 'system'; -$config['graph_types']['device']['hr_users']['order'] = '0'; -$config['graph_types']['device']['hr_users']['descr'] = 'Users Logged In'; -$config['graph_types']['device']['mempool']['section'] = 'system'; -$config['graph_types']['device']['mempool']['order'] = '0'; -$config['graph_types']['device']['mempool']['descr'] = 'Memory Pool Usage'; -$config['graph_types']['device']['processor']['section'] = 'system'; -$config['graph_types']['device']['processor']['order'] = '0'; -$config['graph_types']['device']['processor']['descr'] = 'Processor Usage'; -$config['graph_types']['device']['storage']['section'] = 'system'; -$config['graph_types']['device']['storage']['order'] = '0'; -$config['graph_types']['device']['storage']['descr'] = 'Filesystem Usage'; -$config['graph_types']['device']['temperature']['section'] = 'system'; -$config['graph_types']['device']['temperature']['order'] = '0'; -$config['graph_types']['device']['temperature']['descr'] = 'temperature'; -$config['graph_types']['device']['charge']['section'] = 'system'; -$config['graph_types']['device']['charge']['order'] = '0'; -$config['graph_types']['device']['charge']['descr'] = 'Battery Charge'; -$config['graph_types']['device']['ucd_cpu']['section'] = 'system'; -$config['graph_types']['device']['ucd_cpu']['order'] = '0'; -$config['graph_types']['device']['ucd_cpu']['descr'] = 'Detailed Processor Usage'; -$config['graph_types']['device']['ucd_load']['section'] = 'system'; -$config['graph_types']['device']['ucd_load']['order'] = '0'; -$config['graph_types']['device']['ucd_load']['descr'] = 'Load Averages'; -$config['graph_types']['device']['ucd_memory']['section'] = 'system'; -$config['graph_types']['device']['ucd_memory']['order'] = '0'; -$config['graph_types']['device']['ucd_memory']['descr'] = 'Detailed Memory Usage'; -$config['graph_types']['device']['ucd_swap_io']['section'] = 'system'; -$config['graph_types']['device']['ucd_swap_io']['order'] = '0'; -$config['graph_types']['device']['ucd_swap_io']['descr'] = 'Swap I/O Activity'; -$config['graph_types']['device']['ucd_io']['section'] = 'system'; -$config['graph_types']['device']['ucd_io']['order'] = '0'; -$config['graph_types']['device']['ucd_io']['descr'] = 'System I/O Activity'; -$config['graph_types']['device']['ucd_contexts']['section'] = 'system'; -$config['graph_types']['device']['ucd_contexts']['order'] = '0'; -$config['graph_types']['device']['ucd_contexts']['descr'] = 'Context Switches'; -$config['graph_types']['device']['ucd_interrupts']['section'] = 'system'; -$config['graph_types']['device']['ucd_interrupts']['order'] = '0'; -$config['graph_types']['device']['ucd_interrupts']['descr'] = 'Interrupts'; -$config['graph_types']['device']['uptime']['section'] = 'system'; -$config['graph_types']['device']['uptime']['order'] = '0'; -$config['graph_types']['device']['uptime']['descr'] = 'System Uptime'; -$config['graph_types']['device']['poller_perf']['section'] = 'poller'; -$config['graph_types']['device']['poller_perf']['order'] = '0'; -$config['graph_types']['device']['poller_perf']['descr'] = 'Poller Time'; -$config['graph_types']['device']['ping_perf']['section'] = 'poller'; -$config['graph_types']['device']['ping_perf']['order'] = '0'; -$config['graph_types']['device']['ping_perf']['descr'] = 'Ping Response'; -$config['graph_types']['device']['poller_modules_perf']['section'] = 'poller'; -$config['graph_types']['device']['poller_modules_perf']['order'] = '0'; -$config['graph_types']['device']['poller_modules_perf']['descr'] = 'Poller Modules Performance'; - -$config['graph_types']['device']['vpdn_sessions_l2tp']['section'] = 'vpdn'; -$config['graph_types']['device']['vpdn_sessions_l2tp']['order'] = '0'; -$config['graph_types']['device']['vpdn_sessions_l2tp']['descr'] = 'VPDN L2TP Sessions'; - -$config['graph_types']['device']['vpdn_tunnels_l2tp']['section'] = 'vpdn'; -$config['graph_types']['device']['vpdn_tunnels_l2tp']['order'] = '0'; -$config['graph_types']['device']['vpdn_tunnels_l2tp']['descr'] = 'VPDN L2TP Tunnels'; - -$config['graph_types']['device']['netscaler_tcp_conn']['section'] = 'load balancer'; -$config['graph_types']['device']['netscaler_tcp_conn']['order'] = '0'; -$config['graph_types']['device']['netscaler_tcp_conn']['descr'] = 'TCP Connections'; - -$config['graph_types']['device']['netscaler_tcp_bits']['section'] = 'load balancer'; -$config['graph_types']['device']['netscaler_tcp_bits']['order'] = '0'; -$config['graph_types']['device']['netscaler_tcp_bits']['descr'] = 'TCP Traffic'; - -$config['graph_types']['device']['netscaler_tcp_pkts']['section'] = 'load balancer'; -$config['graph_types']['device']['netscaler_tcp_pkts']['order'] = '0'; -$config['graph_types']['device']['netscaler_tcp_pkts']['descr'] = 'TCP Packets'; - -$config['graph_types']['device']['asa_conns']['section'] = 'firewall'; -$config['graph_types']['device']['asa_conns']['order'] = '0'; -$config['graph_types']['device']['asa_conns']['descr'] = 'Current connections'; - -$config['graph_types']['device']['cisco-iospri']['section'] = 'voice'; -$config['graph_types']['device']['cisco-iospri']['order'] = '0'; -$config['graph_types']['device']['cisco-iospri']['descr'] = 'PRI Utilisation'; - -$config['graph_types']['device']['cisco-iosdsp']['section'] = 'voice'; -$config['graph_types']['device']['cisco-iosdsp']['order'] = '0'; -$config['graph_types']['device']['cisco-iosdsp']['descr'] = 'DSP Utilisation'; - -$config['graph_types']['device']['cisco-iosmtp']['section'] = 'voice'; -$config['graph_types']['device']['cisco-iosmtp']['order'] = '0'; -$config['graph_types']['device']['cisco-iosmtp']['descr'] = 'Hardware MTP Utilisation'; - -$config['graph_types']['device']['cisco-iosxcode']['section'] = 'voice'; -$config['graph_types']['device']['cisco-iosxcode']['order'] = '0'; -$config['graph_types']['device']['cisco-iosxcode']['descr'] = 'Transcoder Utilisation'; - -$config['graph_descr']['device_smokeping_in_all'] = 'This is an aggregate graph of the incoming smokeping tests to this host. The line corresponds to the average RTT. The shaded area around each line denotes the standard deviation.'; -$config['graph_descr']['device_processor'] = 'This is an aggregate graph of all processors in the system.'; - -$config['graph_types']['device']['cisco_wwan_rssi']['section'] = 'wireless'; -$config['graph_types']['device']['cisco_wwan_rssi']['order'] = '0'; -$config['graph_types']['device']['cisco_wwan_rssi']['descr'] = 'Signal Rssi'; -$config['graph_types']['device']['cisco_wwan_mnc']['section'] = 'wireless'; -$config['graph_types']['device']['cisco_wwan_mnc']['order'] = '1'; -$config['graph_types']['device']['cisco_wwan_mnc']['descr'] = 'MNC'; - - -// Device Types -$i = 0; -$config['device_types'][$i]['text'] = 'Servers'; -$config['device_types'][$i]['type'] = 'server'; -$config['device_types'][$i]['icon'] = 'server.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Network'; -$config['device_types'][$i]['type'] = 'network'; -$config['device_types'][$i]['icon'] = 'network.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Wireless'; -$config['device_types'][$i]['type'] = 'wireless'; -$config['device_types'][$i]['icon'] = 'wireless.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Firewalls'; -$config['device_types'][$i]['type'] = 'firewall'; -$config['device_types'][$i]['icon'] = 'firewall.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Power'; -$config['device_types'][$i]['type'] = 'power'; -$config['device_types'][$i]['icon'] = 'power.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Environment'; -$config['device_types'][$i]['type'] = 'environment'; -$config['device_types'][$i]['icon'] = 'environment.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Load Balancers'; -$config['device_types'][$i]['type'] = 'loadbalancer'; -$config['device_types'][$i]['icon'] = 'loadbalancer.png'; - -$i++; -$config['device_types'][$i]['text'] = 'Storage'; -$config['device_types'][$i]['type'] = 'storage'; -$config['device_types'][$i]['icon'] = 'storage.png'; - -if (isset($config['enable_printers']) && $config['enable_printers']) { - $i++; - $config['device_types'][$i]['text'] = 'Printers'; - $config['device_types'][$i]['type'] = 'printer'; - $config['device_types'][$i]['icon'] = 'printer.png'; -} - -$i++; -$config['device_types'][$i]['text'] = 'Appliance'; -$config['device_types'][$i]['type'] = 'appliance'; -$config['device_types'][$i]['icon'] = 'appliance.png'; - -// -// No changes below this line # -// -$config['version'] = '2015.master'; -$config['project_name_version'] = $config['project_name'].' '.$config['version']; - -if (isset($config['rrdgraph_def_text'])) { - $config['rrdgraph_def_text'] = str_replace(' ', ' ', $config['rrdgraph_def_text']); - $config['rrd_opts_array'] = explode(' ', trim($config['rrdgraph_def_text'])); -} - -if (isset($config['cdp_autocreate'])) { - $config['dp_autocreate'] = $config['cdp_autocreate']; -} - -if (!isset($config['mibdir'])) { - $config['mibdir'] = $config['install_dir'].'/mibs'; -} - -$config['mib_dir'] = $config['mibdir']; - -// If we're on SSL, let's properly detect it -if (isset($_SERVER['HTTPS'])) { - $config['base_url'] = preg_replace('/^http:/', 'https:', $config['base_url']); -} - -// Set some times needed by loads of scripts (it's dynamic, so we do it here!) -$config['time']['now'] = time(); -$config['time']['now'] -= ($config['time']['now'] % 300); -$config['time']['fourhour'] = ($config['time']['now'] - 14400); -// time() - (4 * 60 * 60); -$config['time']['sixhour'] = ($config['time']['now'] - 21600); -// time() - (6 * 60 * 60); -$config['time']['twelvehour'] = ($config['time']['now'] - 43200); -// time() - (12 * 60 * 60); -$config['time']['day'] = ($config['time']['now'] - 86400); -// time() - (24 * 60 * 60); -$config['time']['twoday'] = ($config['time']['now'] - 172800); -// time() - (2 * 24 * 60 * 60); -$config['time']['week'] = ($config['time']['now'] - 604800); -// time() - (7 * 24 * 60 * 60); -$config['time']['twoweek'] = ($config['time']['now'] - 1209600); -// time() - (2 * 7 * 24 * 60 * 60); -$config['time']['month'] = ($config['time']['now'] - 2678400); -// time() - (31 * 24 * 60 * 60); -$config['time']['twomonth'] = ($config['time']['now'] - 5356800); -// time() - (2 * 31 * 24 * 60 * 60); -$config['time']['threemonth'] = ($config['time']['now'] - 8035200); -// time() - (3 * 31 * 24 * 60 * 60); -$config['time']['sixmonth'] = ($config['time']['now'] - 16070400); -// time() - (6 * 31 * 24 * 60 * 60); -$config['time']['year'] = ($config['time']['now'] - 31536000); -// time() - (365 * 24 * 60 * 60); -$config['time']['twoyear'] = ($config['time']['now'] - 63072000); -// time() - (2 * 365 * 24 * 60 * 60); -// IPMI sensor type mappings -$config['ipmi_unit']['Volts'] = 'voltage'; -$config['ipmi_unit']['degrees C'] = 'temperature'; -$config['ipmi_unit']['RPM'] = 'fanspeed'; -$config['ipmi_unit']['Watts'] = 'power'; -$config['ipmi_unit']['discrete'] = ''; - -// INCLUDE THE VMWARE DEFINITION FILE. -require_once 'vmware_guestid.inc.php'; - -// Define some variables if they aren't set by user definition in config.php -if (!isset($config['html_dir'])) { - $config['html_dir'] = $config['install_dir'].'/html'; -} - -if (!isset($config['rrd_dir'])) { - $config['rrd_dir'] = $config['install_dir'].'/rrd'; -} - -if (!isset($config['log_dir'])) { - $config['log_dir'] = $config['install_dir'].'/logs'; -} - -if (!isset($config['log_file'])) { - $config['log_file'] = $config['log_dir'].'/'.$config['project_id'].'.log'; -} - -if (!isset($config['plugin_dir'])) { - $config['plugin_dir'] = $config['html_dir'].'/plugins'; -} - -if (!isset($config['title_image'])) { - $config['title_image'] = 'images/librenms_logo_'.$config['site_style'].'.png'; -} From 8a46c7611de06f95796ba7678f57e75435c18836 Mon Sep 17 00:00:00 2001 From: laf Date: Mon, 2 May 2016 20:20:29 +0000 Subject: [PATCH 004/133] Add support for stopping devices being added with duplicate sysNames --- addhost.php | 11 ++++++++--- doc/Support/Configuration.md | 6 ++++++ includes/defaults.inc.php | 4 ++++ includes/functions.php | 20 +++++++++++++++----- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/addhost.php b/addhost.php index 381c602daf..0b4401aca5 100755 --- a/addhost.php +++ b/addhost.php @@ -204,9 +204,13 @@ if (!empty($argv[1])) { echo 'Added device '.$device['hostname'].' ('.$device_id.")\n"; exit; } -}//end if + else { + print $console_color->convert("%rWe couldn't add this device, please check the snmp details%n\n"); + } +} +else { -print $console_color->convert( + print $console_color->convert( "\n".$config['project_name_version'].' Add Host Tool Usage (SNMPv1/2c): ./addhost.php [-g ] [-f] [-p ] <%Whostname%n> [community] [v1|v2c] [port] ['.implode('|', $config['snmp']['transports']).'] @@ -224,4 +228,5 @@ print $console_color->convert( %rRemember to run discovery for the host afterwards.%n ' -); + ); +} diff --git a/doc/Support/Configuration.md b/doc/Support/Configuration.md index 1a653030c0..0954a063f8 100644 --- a/doc/Support/Configuration.md +++ b/doc/Support/Configuration.md @@ -220,6 +220,12 @@ $config['addhost_alwayscheckip'] = FALSE; #TRUE - check for duplicate ips even #FALSE- only check when adding host by ip. ``` +By default we allow hosts to be added with duplicate sysName's, you can disable this with the following config: + +```php +$config['allow_duplicate_sysName'] = false; +``` + #### SNMP Settings ```php diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index 2b292f58a3..1a44343f0d 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -793,6 +793,10 @@ $config['dateformat']['mysql']['time'] = '%H:%i:%s'; $config['enable_clear_discovery'] = 1; // Set this to 0 if you want to disable the web option to rediscover devices $config['force_ip_to_sysname'] = false;// Set to true if you want to use sysName in place of IPs + +// Allow duplicate devices by sysName +$config['allow_duplicate_sysName'] = true;// Set to false if you want to only allow unique sysName's + $config['enable_port_relationship'] = true; // Set this to false to not display neighbour relationships for ports $config['enable_footer'] = 1; diff --git a/includes/functions.php b/includes/functions.php index 029bc83ccb..64a7748750 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -299,7 +299,7 @@ function addHost($host, $snmpver, $port = '161', $transport = 'udp', $quiet = '0 if ($force_add == 1 || isSNMPable($device)) { $snmphost = snmp_get($device, "sysName.0", "-Oqv", "SNMPv2-MIB"); if (empty($snmphost) or ($snmphost == $host || $hostshort = $host)) { - $device_id = createHost ($host, NULL, $snmpver, $port, $transport, $v3, $poller_group, $port_assoc_mode); + $device_id = createHost ($host, NULL, $snmpver, $port, $transport, $v3, $poller_group, $port_assoc_mode, $snmphost); return $device_id; } else { @@ -325,7 +325,7 @@ function addHost($host, $snmpver, $port = '161', $transport = 'udp', $quiet = '0 if ($force_add == 1 || isSNMPable($device)) { $snmphost = snmp_get($device, "sysName.0", "-Oqv", "SNMPv2-MIB"); if (empty($snmphost) || ($snmphost && ($snmphost == $host || $hostshort = $host))) { - $device_id = createHost ($host, $community, $snmpver, $port, $transport,array(),$poller_group, $port_assoc_mode); + $device_id = createHost ($host, $community, $snmpver, $port, $transport,array(),$poller_group, $port_assoc_mode, $snmphost); return $device_id; } else { @@ -575,7 +575,7 @@ function getpollergroup($poller_group='0') { } } -function createHost($host, $community = NULL, $snmpver, $port = 161, $transport = 'udp', $v3 = array(), $poller_group='0', $port_assoc_mode = 'ifIndex') { +function createHost($host, $community = NULL, $snmpver, $port = 161, $transport = 'udp', $v3 = array(), $poller_group='0', $port_assoc_mode = 'ifIndex', $snmphost) { global $config; $host = trim(strtolower($host)); @@ -604,7 +604,7 @@ function createHost($host, $community = NULL, $snmpver, $port = 161, $transport if ($device['os']) { - if (host_exists($host) === false) { + if (host_exists($host, $snmphost) === false) { $device_id = dbInsert($device, 'devices'); if ($device_id) { oxidized_reload_nodes(); @@ -1339,12 +1339,22 @@ function snmpTransportToAddressFamily($transport) { * @return bool true if hostname already exists * false if hostname doesn't exist **/ -function host_exists($hostname) { +function host_exists($hostname, $snmphost='') { + global $config; $count = dbFetchCell("SELECT COUNT(*) FROM `devices` WHERE `hostname` = ?", array($hostname)); if ($count > 0) { return true; } else { + if ($config['allow_duplicate_sysName'] === false && !empty($snmphost)) { + $count = dbFetchCell("SELECT COUNT(*) FROM `devices` WHERE `sysName` = ?", array($snmphost)); + if ($count > 0) { + return true; + } + else { + return false; + } + } return false; } } From 886fcaf04c1dbaf77f4b6f9a2bbee9e21c067b44 Mon Sep 17 00:00:00 2001 From: Sawachier Date: Tue, 12 Apr 2016 16:21:43 +0200 Subject: [PATCH 005/133] Update bgp-peers.inc.php --- includes/discovery/bgp-peers.inc.php | 402 ++++++++++++++------------- 1 file changed, 208 insertions(+), 194 deletions(-) diff --git a/includes/discovery/bgp-peers.inc.php b/includes/discovery/bgp-peers.inc.php index 1b87eaecf5..bf093e3276 100644 --- a/includes/discovery/bgp-peers.inc.php +++ b/includes/discovery/bgp-peers.inc.php @@ -4,231 +4,245 @@ if ($config['enable_bgp']) { // Discover BGP peers echo 'BGP Sessions : '; + if( key_exists('vrf_lite_cisco', $device) && (count($device['vrf_lite_cisco'])!=0) ){ + $vrfs_lite_cisco = $device['vrf_lite_cisco']; + } + else{ + $vrfs_lite_cisco = array(array('context_name'=>null)); + } + $bgpLocalAs = trim(snmp_walk($device, '.1.3.6.1.2.1.15.2', '-Oqvn', 'BGP4-MIB', $config['mibdir'])); - if (is_numeric($bgpLocalAs)) { - echo "AS$bgpLocalAs "; + foreach ($vrfs_lite_cisco as $vrf) { + $device['context_name'] = $vrf['context_name']; - if ($bgpLocalAs != $device['bgpLocalAs']) { - dbUpdate(array('bgpLocalAs' => $bgpLocalAs), 'devices', 'device_id=?', array($device['device_id'])); - echo 'Updated AS '; - } + if (is_numeric($bgpLocalAs)) { + echo "AS$bgpLocalAs "; - $peer2 = false; - $peers_data = snmp_walk($device, 'cbgpPeer2RemoteAs', '-Oq', 'CISCO-BGP4-MIB', $config['mibdir']); - if (empty($peers_data)) { - $peers_data = snmp_walk($device, 'BGP4-MIB::bgpPeerRemoteAs', '-Oq', 'BGP4-MIB', $config['mibdir']); - } - else { - $peer2 = true; - } - - d_echo("Peers : $peers_data \n"); - - $peers = trim(str_replace('CISCO-BGP4-MIB::cbgpPeer2RemoteAs.', '', $peers_data)); - $peers = trim(str_replace('BGP4-MIB::bgpPeerRemoteAs.', '', $peers)); - - foreach (explode("\n", $peers) as $peer) { - if ($peer2 === true) { - list($ver, $peer) = explode('.', $peer, 2); - } - - list($peer_ip, $peer_as) = explode(' ', $peer); - if (strstr($peer_ip, ':')) { - $peer_ip_snmp = preg_replace('/:/', ' ', $peer_ip); - $peer_ip = preg_replace('/(\S+\s+\S+)\s/', '$1:', $peer_ip_snmp); - $peer_ip = str_replace('"', '', str_replace(' ', '', $peer_ip)); - } - - if ($peer && $peer_ip != '0.0.0.0') { - d_echo("Found peer $peer_ip (AS$peer_as)\n"); - - $peerlist[] = array( - 'ip' => $peer_ip, - 'as' => $peer_as, - 'ver' => $ver, - ); - } - } - - if ($device['os'] == 'junos') { - // Juniper BGP4-V2 MIB - // FIXME: needs a big cleanup! also see below. - // FIXME: is .0.ipv6 the only possible value here? - $result = snmp_walk($device, 'jnxBgpM2PeerRemoteAs.0.ipv6', '-Onq', 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); - $peers = trim(str_replace('.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.13.0.', '', $result)); - foreach (explode("\n", $peers) as $peer) { - list($peer_ip_snmp, $peer_as) = explode(' ', $peer); - - // Magic! Basically, takes SNMP form and finds peer IPs from the walk OIDs. - $peer_ip = Net_IPv6::compress(snmp2ipv6(implode('.', array_slice(explode('.', $peer_ip_snmp), (count(explode('.', $peer_ip_snmp)) - 16))))); - - if ($peer) { - d_echo("Found peer $peer_ip (AS$peer_as)\n"); - - $peerlist[] = array( - 'ip' => $peer_ip, - 'as' => $peer_as, - ); - } - } - } - } - else { - echo 'No BGP on host'; - if ($device['bgpLocalAs']) { - dbUpdate(array('bgpLocalAs' => 'NULL'), 'devices', 'device_id=?', array($device['device_id'])); - echo ' (Removed ASN) '; - } - } - - // Process disovered peers - if (isset($peerlist)) { - foreach ($peerlist as $peer) { - $astext = get_astext($peer['as']); - - if (dbFetchCell('SELECT COUNT(*) from `bgpPeers` WHERE device_id = ? AND bgpPeerIdentifier = ?', array($device['device_id'], $peer['ip'])) < '1') { - $add = dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'bgpPeerRemoteAs' => $peer['as']), 'bgpPeers'); - if ($config['autodiscovery']['bgp'] === true) { - $name = gethostbyaddr($peer['ip']); - $remote_device_id = discover_new_device($name, $device, 'BGP'); + if ($bgpLocalAs != $device['bgpLocalAs']) { + dbUpdate(array('bgpLocalAs' => $bgpLocalAs,'context_name' => $device['context_name']), 'devices', 'device_id=?', array($device['device_id'])); + echo 'Updated AS '; } - echo '+'; - } - else { - $update = dbUpdate(array('bgpPeerRemoteAs' => $peer['as'], 'astext' => mres($astext)), 'bgpPeers', 'device_id=? AND bgpPeerIdentifier=?', array($device['device_id'], $peer['ip'])); - echo '.'; - } + $peer2 = false; + $peers_data = snmp_walk($device, 'cbgpPeer2RemoteAs', '-Oq', 'CISCO-BGP4-MIB', $config['mibdir']); + if (empty($peers_data)) { + $peers_data = snmp_walk($device, 'BGP4-MIB::bgpPeerRemoteAs', '-Oq', 'BGP4-MIB', $config['mibdir']); + } + else { + $peer2 = true; + } - if ($device['os_group'] == 'cisco' || $device['os'] == 'junos') { - if ($device['os_group'] == 'cisco') { - // Get afi/safi and populate cbgp on cisco ios (xe/xr) - unset($af_list); + d_echo("Peers : $peers_data \n"); + $peers = trim(str_replace('CISCO-BGP4-MIB::cbgpPeer2RemoteAs.', '', $peers_data)); + $peers = trim(str_replace('BGP4-MIB::bgpPeerRemoteAs.', '', $peers)); + + foreach (explode("\n", $peers) as $peer) { if ($peer2 === true) { - $af_data = snmpwalk_cache_oid($device, 'cbgpPeer2AddrFamilyEntry', $cbgp, 'CISCO-BGP4-MIB', $config['mibdir']); - } - else { - $af_data = snmpwalk_cache_oid($device, 'cbgpPeerAddrFamilyEntry', $cbgp, 'CISCO-BGP4-MIB', $config['mibdir']); + list($ver, $peer) = explode('.', $peer, 2); } - d_echo('afi data :: '); - d_echo($af_data); + list($peer_ip, $peer_as) = explode(' ', $peer); + if (strstr($peer_ip, ':')) { + $peer_ip_snmp = preg_replace('/:/', ' ', $peer_ip); + $peer_ip = preg_replace('/(\S+\s+\S+)\s/', '$1:', $peer_ip_snmp); + $peer_ip = str_replace('"', '', str_replace(' ', '', $peer_ip)); + } - foreach ($af_data as $k => $v) { - if ($peer2 === true) { - list(,$k) = explode('.', $k, 2); - } + if ($peer && $peer_ip != '0.0.0.0') { + d_echo("Found peer $peer_ip (AS$peer_as)\n"); - d_echo("AFISAFI = $k\n"); - - $afisafi_tmp = explode('.', $k); - $safi = array_pop($afisafi_tmp); - $afi = array_pop($afisafi_tmp); - $bgp_ip = str_replace(".$afi.$safi", '', $k); - $bgp_ip = preg_replace('/:/', ' ', $bgp_ip); - $bgp_ip = preg_replace('/(\S+\s+\S+)\s/', '$1:', $bgp_ip); - $bgp_ip = str_replace('"', '', str_replace(' ', '', $bgp_ip)); - if ($afi && $safi && $bgp_ip == $peer['ip']) { - $af_list[$bgp_ip][$afi][$safi] = 1; - if (dbFetchCell('SELECT COUNT(*) from `bgpPeers_cbgp` WHERE device_id = ? AND bgpPeerIdentifier = ?, AND afi=? AND safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)) == 0) { - dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'afi' => $afi, 'safi' => $safi), 'bgpPeers_cbgp'); - } - } + $peerlist[] = array( + 'ip' => $peer_ip, + 'as' => $peer_as, + 'ver' => $ver, + ); } } if ($device['os'] == 'junos') { - $safis[1] = 'unicast'; - $safis[2] = 'multicast'; + // Juniper BGP4-V2 MIB + // FIXME: needs a big cleanup! also see below. + // FIXME: is .0.ipv6 the only possible value here? + $result = snmp_walk($device, 'jnxBgpM2PeerRemoteAs.0.ipv6', '-Onq', 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); + $peers = trim(str_replace('.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.13.0.', '', $result)); + foreach (explode("\n", $peers) as $peer) { + list($peer_ip_snmp, $peer_as) = explode(' ', $peer); - if (!isset($j_peerIndexes)) { - $j_bgp = snmpwalk_cache_multi_oid($device, 'jnxBgpM2PeerTable', $jbgp, 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); + // Magic! Basically, takes SNMP form and finds peer IPs from the walk OIDs. + $peer_ip = Net_IPv6::compress(snmp2ipv6(implode('.', array_slice(explode('.', $peer_ip_snmp), (count(explode('.', $peer_ip_snmp)) - 16))))); - foreach ($j_bgp as $index => $entry) { - switch ($entry['jnxBgpM2PeerRemoteAddrType']) { - case 'ipv4': - $ip = long2ip(hexdec($entry['jnxBgpM2PeerRemoteAddr'])); - d_echo("peerindex for ipv4 $ip is ".$entry['jnxBgpM2PeerIndex']."\n"); + if ($peer) { + d_echo("Found peer $peer_ip (AS$peer_as)\n"); - $j_peerIndexes[$ip] = $entry['jnxBgpM2PeerIndex']; - break; + $peerlist[] = array( + 'ip' => $peer_ip, + 'as' => $peer_as, + ); + } + } + } + } + else { + echo 'No BGP on host'; + if ($device['bgpLocalAs']) { + dbUpdate(array('bgpLocalAs' => 'NULL'), 'devices', 'device_id=?', array($device['device_id'])); + echo ' (Removed ASN) '; + } + } - case 'ipv6': - $ip6 = trim(str_replace(' ', '', $entry['jnxBgpM2PeerRemoteAddr']), '"'); - $ip6 = substr($ip6, 0, 4).':'.substr($ip6, 4, 4).':'.substr($ip6, 8, 4).':'.substr($ip6, 12, 4).':'.substr($ip6, 16, 4).':'.substr($ip6, 20, 4).':'.substr($ip6, 24, 4).':'.substr($ip6, 28, 4); - $ip6 = Net_IPv6::compress($ip6); - d_echo("peerindex for ipv6 $ip6 is ".$entry['jnxBgpM2PeerIndex']."\n"); + // Process disovered peers + if (isset($peerlist)) { + foreach ($peerlist as $peer) { + $astext = get_astext($peer['as']); - $j_peerIndexes[$ip6] = $entry['jnxBgpM2PeerIndex']; - break; + if (dbFetchCell('SELECT COUNT(*) from `bgpPeers` WHERE device_id = ? AND bgpPeerIdentifier = ?', array($device['device_id'], $peer['ip'])) < '1') { + $add = dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'bgpPeerRemoteAs' => $peer['as'], 'context_name' => $device['context_name']), 'bgpPeers'); + if ($config['autodiscovery']['bgp'] === true) { + $name = gethostbyaddr($peer['ip']); + $remote_device_id = discover_new_device($name, $device, 'BGP'); + } - default: - echo "HALP? Don't know RemoteAddrType ".$entry['jnxBgpM2PeerRemoteAddrType']."!\n"; - break; + echo '+'; + } + else { + $update = dbUpdate(array('bgpPeerRemoteAs' => $peer['as'], 'astext' => mres($astext)), 'bgpPeers', 'device_id=? AND bgpPeerIdentifier=?', array($device['device_id'], $peer['ip'])); + echo '.'; + } + + if ($device['os_group'] == 'cisco' || $device['os'] == 'junos') { + if ($device['os_group'] == 'cisco') { + // Get afi/safi and populate cbgp on cisco ios (xe/xr) + unset($af_list); + + if ($peer2 === true) { + $af_data = snmpwalk_cache_oid($device, 'cbgpPeer2AddrFamilyEntry', $cbgp, 'CISCO-BGP4-MIB', $config['mibdir']); + } + else { + $af_data = snmpwalk_cache_oid($device, 'cbgpPeerAddrFamilyEntry', $cbgp, 'CISCO-BGP4-MIB', $config['mibdir']); + } + + d_echo('afi data :: '); + d_echo($af_data); + + foreach ($af_data as $k => $v) { + if ($peer2 === true) { + list(,$k) = explode('.', $k, 2); + } + + d_echo("AFISAFI = $k\n"); + + $afisafi_tmp = explode('.', $k); + $safi = array_pop($afisafi_tmp); + $afi = array_pop($afisafi_tmp); + $bgp_ip = str_replace(".$afi.$safi", '', $k); + $bgp_ip = preg_replace('/:/', ' ', $bgp_ip); + $bgp_ip = preg_replace('/(\S+\s+\S+)\s/', '$1:', $bgp_ip); + $bgp_ip = str_replace('"', '', str_replace(' ', '', $bgp_ip)); + if ($afi && $safi && $bgp_ip == $peer['ip']) { + $af_list[$bgp_ip][$afi][$safi] = 1; + if (dbFetchCell('SELECT COUNT(*) from `bgpPeers_cbgp` WHERE device_id = ? AND bgpPeerIdentifier = ?, AND afi=? AND safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)) == 0) { + dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'afi' => $afi, 'safi' => $safi, 'context_name' => $device['context_name']), 'bgpPeers_cbgp'); + } + } + } + } + + if ($device['os'] == 'junos') { + $safis[1] = 'unicast'; + $safis[2] = 'multicast'; + + if (!isset($j_peerIndexes)) { + $j_bgp = snmpwalk_cache_multi_oid($device, 'jnxBgpM2PeerTable', $jbgp, 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); + + foreach ($j_bgp as $index => $entry) { + switch ($entry['jnxBgpM2PeerRemoteAddrType']) { + case 'ipv4': + $ip = long2ip(hexdec($entry['jnxBgpM2PeerRemoteAddr'])); + d_echo("peerindex for ipv4 $ip is ".$entry['jnxBgpM2PeerIndex']."\n"); + + $j_peerIndexes[$ip] = $entry['jnxBgpM2PeerIndex']; + break; + + case 'ipv6': + $ip6 = trim(str_replace(' ', '', $entry['jnxBgpM2PeerRemoteAddr']), '"'); + $ip6 = substr($ip6, 0, 4).':'.substr($ip6, 4, 4).':'.substr($ip6, 8, 4).':'.substr($ip6, 12, 4).':'.substr($ip6, 16, 4).':'.substr($ip6, 20, 4).':'.substr($ip6, 24, 4).':'.substr($ip6, 28, 4); + $ip6 = Net_IPv6::compress($ip6); + d_echo("peerindex for ipv6 $ip6 is ".$entry['jnxBgpM2PeerIndex']."\n"); + + $j_peerIndexes[$ip6] = $entry['jnxBgpM2PeerIndex']; + break; + + default: + echo "HALP? Don't know RemoteAddrType ".$entry['jnxBgpM2PeerRemoteAddrType']."!\n"; + break; + } + } + } + + if (!isset($j_afisafi)) { + $j_prefixes = snmpwalk_cache_multi_oid($device, 'jnxBgpM2PrefixCountersTable', $jbgp, 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); + foreach (array_keys($j_prefixes) as $key) { + list($index,$afisafi) = explode('.', $key, 2); + $j_afisafi[$index][] = $afisafi; + } + } + + foreach ($j_afisafi[$j_peerIndexes[$peer['ip']]] as $afisafi) { + list ($afi,$safi) = explode('.', $afisafi); + $safi = $safis[$safi]; + $af_list[$afi][$safi] = 1; + if (dbFetchCell('SELECT COUNT(*) from `bgpPeers_cbgp` WHERE device_id = ? AND bgpPeerIdentifier = ?, AND afi=? AND safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)) == 0) { + dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'afi' => $afi, 'safi' => $safi), 'bgpPeers_cbgp'); + } + } + } + + $af_query = "SELECT * FROM bgpPeers_cbgp WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"; + foreach (dbFetchRows($af_query) as $entry) { + $afi = $entry['afi']; + $safi = $entry['safi']; + if (!$af_list[$afi][$safi] || !$af_list[$entry['bgpPeerIdentifier']][$afi][$safi]) { + dbDelete('bgpPeers_cbgp', '`device_id` = ? AND `bgpPeerIdentifier` = ?, afi=?, safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)); } } } - - if (!isset($j_afisafi)) { - $j_prefixes = snmpwalk_cache_multi_oid($device, 'jnxBgpM2PrefixCountersTable', $jbgp, 'BGP4-V2-MIB-JUNIPER', $config['install_dir'].'/mibs/junos'); - foreach (array_keys($j_prefixes) as $key) { - list($index,$afisafi) = explode('.', $key, 2); - $j_afisafi[$index][] = $afisafi; - } - } - - foreach ($j_afisafi[$j_peerIndexes[$peer['ip']]] as $afisafi) { - list ($afi,$safi) = explode('.', $afisafi); - $safi = $safis[$safi]; - $af_list[$afi][$safi] = 1; - if (dbFetchCell('SELECT COUNT(*) from `bgpPeers_cbgp` WHERE device_id = ? AND bgpPeerIdentifier = ?, AND afi=? AND safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)) == 0) { - dbInsert(array('device_id' => $device['device_id'], 'bgpPeerIdentifier' => $peer['ip'], 'afi' => $afi, 'safi' => $safi), 'bgpPeers_cbgp'); - } - } } - $af_query = "SELECT * FROM bgpPeers_cbgp WHERE `device_id` = '".$device['device_id']."' AND bgpPeerIdentifier = '".$peer['ip']."'"; - foreach (dbFetchRows($af_query) as $entry) { - $afi = $entry['afi']; - $safi = $entry['safi']; - if (!$af_list[$afi][$safi] || !$af_list[$entry['bgpPeerIdentifier']][$afi][$safi]) { - dbDelete('bgpPeers_cbgp', '`device_id` = ? AND `bgpPeerIdentifier` = ?, afi=?, safi=?', array($device['device_id'], $peer['ip'], $afi, $safi)); + unset($j_afisafi); + unset($j_prefixes); + unset($j_bgp); + unset($j_peerIndexes); + } + + // Delete removed peers + $sql = "SELECT * FROM bgpPeers AS B, devices AS D WHERE B.device_id = D.device_id AND D.device_id = '".$device['device_id']."'"; + + foreach (dbFetchRows($sql) as $entry) { + unset($exists); + $i = 0; + + while ($i < count($peerlist) && !isset($exists)) { + if ($peerlist[$i]['ip'] == $entry['bgpPeerIdentifier']) { + $exists = 1; } + + $i++; + } + + if (!isset($exists)) { + dbDelete('bgpPeers', '`bgpPeer_id` = ?', array($entry['bgpPeer_id'])); + dbDelete('bgpPeers_cbgp', '`bgpPeer_id` = ?', array($entry['bgpPeer_id'])); + echo '-'; } } - } - unset($j_afisafi); - unset($j_prefixes); - unset($j_bgp); - unset($j_peerIndexes); + unset($peerlist); + + echo "\n"; + unset($device['context_name']); } - - // Delete removed peers - $sql = "SELECT * FROM bgpPeers AS B, devices AS D WHERE B.device_id = D.device_id AND D.device_id = '".$device['device_id']."'"; - - foreach (dbFetchRows($sql) as $entry) { - unset($exists); - $i = 0; - - while ($i < count($peerlist) && !isset($exists)) { - if ($peerlist[$i]['ip'] == $entry['bgpPeerIdentifier']) { - $exists = 1; - } - - $i++; - } - - if (!isset($exists)) { - dbDelete('bgpPeers', '`bgpPeer_id` = ?', array($entry['bgpPeer_id'])); - dbDelete('bgpPeers_cbgp', '`bgpPeer_id` = ?', array($entry['bgpPeer_id'])); - echo '-'; - } - } - - unset($peerlist); - - echo "\n"; + unset($device['context_name']); + unset($vrfs_c); } From 5e540ff6cd488d461d2bd16db261286c08a55f79 Mon Sep 17 00:00:00 2001 From: Sawachier Date: Tue, 26 Apr 2016 15:00:39 +0200 Subject: [PATCH 006/133] Update bgp-peers.inc.php --- includes/discovery/bgp-peers.inc.php | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/includes/discovery/bgp-peers.inc.php b/includes/discovery/bgp-peers.inc.php index bf093e3276..99f5fc8bc6 100644 --- a/includes/discovery/bgp-peers.inc.php +++ b/includes/discovery/bgp-peers.inc.php @@ -1,9 +1,8 @@ $bgpLocalAs,'context_name' => $device['context_name']), 'devices', 'device_id=?', array($device['device_id'])); + dbUpdate(array('bgpLocalAs' => $bgpLocalAs), 'devices', 'device_id=?', array($device['device_id'])); echo 'Updated AS '; } @@ -92,7 +89,7 @@ if ($config['enable_bgp']) { } } - // Process disovered peers + // Process disovered peers if (isset($peerlist)) { foreach ($peerlist as $peer) { $astext = get_astext($peer['as']); @@ -217,12 +214,11 @@ if ($config['enable_bgp']) { } // Delete removed peers - $sql = "SELECT * FROM bgpPeers AS B, devices AS D WHERE B.device_id = D.device_id AND D.device_id = '".$device['device_id']."'"; + $sql = "SELECT * FROM bgpPeers WHERE device_id = '".$device['device_id']."' AND context_name = '".$device['context_name']."'"; foreach (dbFetchRows($sql) as $entry) { unset($exists); $i = 0; - while ($i < count($peerlist) && !isset($exists)) { if ($peerlist[$i]['ip'] == $entry['bgpPeerIdentifier']) { $exists = 1; @@ -241,8 +237,9 @@ if ($config['enable_bgp']) { unset($peerlist); echo "\n"; - unset($device['context_name']); + unset($device['context_name']); } unset($device['context_name']); unset($vrfs_c); } +echo "FIN BGP \n\n\n"; From 7664464dd9753d0bf62cad40e7c61308884cc002 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 6 May 2016 10:45:49 -0500 Subject: [PATCH 007/133] Don't alert unless the sensor value actually surpasses the threshold. Use >/< instead of >=/<= --- includes/polling/functions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index a34ba514e9..e3ad021cac 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -128,11 +128,11 @@ function poll_sensor($device, $class, $unit) { influx_update($device,'sensor',$tags,$fields); // FIXME also warn when crossing WARN level!! - if ($sensor['sensor_limit_low'] != '' && $sensor['sensor_current'] > $sensor['sensor_limit_low'] && $sensor_value <= $sensor['sensor_limit_low'] && $sensor['sensor_alert'] == 1) { + if ($sensor['sensor_limit_low'] != '' && $sensor['sensor_current'] > $sensor['sensor_limit_low'] && $sensor_value < $sensor['sensor_limit_low'] && $sensor['sensor_alert'] == 1) { echo 'Alerting for '.$device['hostname'].' '.$sensor['sensor_descr']."\n"; log_event(ucfirst($class).' '.$sensor['sensor_descr'].' under threshold: '.$sensor_value." $unit (< ".$sensor['sensor_limit_low']." $unit)", $device, $class, $sensor['sensor_id']); } - else if ($sensor['sensor_limit'] != '' && $sensor['sensor_current'] < $sensor['sensor_limit'] && $sensor_value >= $sensor['sensor_limit'] && $sensor['sensor_alert'] == 1) { + else if ($sensor['sensor_limit'] != '' && $sensor['sensor_current'] < $sensor['sensor_limit'] && $sensor_value > $sensor['sensor_limit'] && $sensor['sensor_alert'] == 1) { echo 'Alerting for '.$device['hostname'].' '.$sensor['sensor_descr']."\n"; log_event(ucfirst($class).' '.$sensor['sensor_descr'].' above threshold: '.$sensor_value." $unit (> ".$sensor['sensor_limit']." $unit)", $device, $class, $sensor['sensor_id']); } From 599bb094dda029c674534c203d982b1b4ac4f247 Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 12 May 2016 11:59:46 +0000 Subject: [PATCH 008/133] Updated ubuntu image hashes --- doc/Installation/Ubuntu-image.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/Installation/Ubuntu-image.md b/doc/Installation/Ubuntu-image.md index c998a2a877..bc20c91d1e 100644 --- a/doc/Installation/Ubuntu-image.md +++ b/doc/Installation/Ubuntu-image.md @@ -33,17 +33,17 @@ Any issues with these images should be reported via [Github](https://github.com/ #### Download -[OVA Image](http://www.lathwood.co.uk/librenms/librenms_ubuntu_1604.ova) - 1.2G +[OVA Image](http://www.lathwood.co.uk/librenms/librenms_ubuntu_1604.ova) - 1.3G - - md5sum: 00fe34b925d09aa24ef05038d813e095 + - md5sum: 944fcd73e918eabec7509569c2d98cf0 - - sha256sum: 10c82dc30962f319bcea04838b1a46fb8dec225648c38e9aff26f9812f14d176 + - sha256sum: 2a792e1d39813f0bdd510445aa04bc88e226311e825dddeb3780cf5d58bef43c -[VMDK Image](http://www.lathwood.co.uk/librenms/librenms_ubuntu_1604.vmdk) - 3.2G +[VMDK Image](http://www.lathwood.co.uk/librenms/librenms_ubuntu_1604.vmdk) - 3.3G - - md5sum: 063fbbdd506d78fa1de801d04ad0db99 + - md5sum: e84e31e437e946a9a01d0c87059bfe04 - - sha256sum: deccef6e62462ce905b7c423ad5da753d49d9eb5173ca2faeef27d92e970a5d2 + - sha256sum: 4f687608291161ffd8f5e1aee38be1d6b9e0c2a13d15252da62fe783578f5708 #### Credentials From c99c74bd9554ad24654cd690b5b337ed5da8f47c Mon Sep 17 00:00:00 2001 From: Peter TKATCHENKO Date: Thu, 12 May 2016 17:36:08 +0200 Subject: [PATCH 009/133] Improved support for Equallogic storage arrays and DELL servers --- includes/definitions.inc.php | 2 + .../discovery/sensors/states/dell.inc.php | 83 +++++++++- .../sensors/states/equallogic.inc.php | 148 +++++++++++++++--- .../discovery/storage/eql-storage.inc.php | 37 +++++ includes/polling/storage/eql-storage.inc.php | 59 +++++++ 5 files changed, 300 insertions(+), 29 deletions(-) create mode 100644 includes/discovery/storage/eql-storage.inc.php create mode 100644 includes/polling/storage/eql-storage.inc.php diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index fe53e37ed2..a60ae8df0b 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -922,6 +922,8 @@ $config['os'][$os]['text'] = 'Dell EqualLogic'; $config['os'][$os]['icon'] = 'dell'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_storage'; +$config['os'][$os]['over'][1]['text'] = 'Storage Usage'; $os = 'drac'; $config['os'][$os]['text'] = 'Dell DRAC'; diff --git a/includes/discovery/sensors/states/dell.inc.php b/includes/discovery/sensors/states/dell.inc.php index b8dca50df3..73caec3cef 100644 --- a/includes/discovery/sensors/states/dell.inc.php +++ b/includes/discovery/sensors/states/dell.inc.php @@ -4,6 +4,7 @@ * LibreNMS * * Copyright (c) 2014 Neil Lathwood + * Modyfied by Peter TKATCHENKO https://github.com/Peter2121/ 2016 * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -12,19 +13,85 @@ * the source code distribution for details. */ -if ($device['os'] == 'linux') { - $oids = snmp_walk($device, 'virtualDiskNumber', '-Oesqn', 'StorageManagement-MIB'); - $main_oid = '.1.3.6.1.4.1.674.10893.1.20.140.1.1.'; + $oids = snmp_walk($device, 'virtualDiskDeviceName', '-Oesqn', 'StorageManagement-MIB'); + $name_oid = '.1.3.6.1.4.1.674.10893.1.20.140.1.1.3'; + $main_oid = '.1.3.6.1.4.1.674.10893.1.20.140.1.1.4.'; d_echo($oids."\n"); $oids = trim($oids); if ($oids) { echo 'Dell '; + + $state_name = 'dellVirtualDiskState'; + $state_index_id = create_state_index($state_name); +/* +-- 1.3.6.1.4.1.674.10893.1.20.140.1.1.4 +virtualDiskState +INTEGER + { + unknown(0), + ready(1), + failed(2), + online(3), + offline(4), + degraded(6), + verifying(7), + resynching(15), + regenerating(16), + failedRedundancy(18), + rebuilding(24), + formatting(26), + reconstructing(32), + initializing(35), + backgroundInit(36), + permanentlyDegraded(52) + } +*/ + if ($state_index_id) { + $states = array( + array($state_index_id,'unknown',0,0,3) , + array($state_index_id,'ready',1,1,0) , + array($state_index_id,'failed',1,2,2) , + array($state_index_id,'online',1,3,1) , + array($state_index_id,'offline',1,4,2) , + array($state_index_id,'degraded',1,6,2) , + array($state_index_id,'verifying',1,7,1) , + array($state_index_id,'resynching',1,15,1) , + array($state_index_id,'regenerating',1,16,1) , + array($state_index_id,'failedRedundancy',1,18,2) , + array($state_index_id,'rebuilding',1,24,1) , + array($state_index_id,'formatting',1,26,1) , + array($state_index_id,'reconstructing',1,32,1) , + array($state_index_id,'initializing',1,35,1) , + array($state_index_id,'backgroundInit',1,36,1) , + array($state_index_id,'permanentlyDegraded',1,52,2) + ); + + foreach($states as $value){ + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + foreach (explode("\n", $oids) as $data) { - list($oid,) = explode(' ', $data, 2); - $state_oid = '4.1'; - $state_current = snmp_get($device, $main_oid.$state_oid, '-Oevq'); - discover_sensor($valid['sensor'], 'state', $device, $main_oid.$state_oid, "virtualDiskState.$state_oid", 'dell', 'Raid State', '1', '1', null, null, null, null, $state_current); + list($oid,$name) = explode(' ', $data, 2); + $name = trim($name,"\""); + if($oid==$name_oid) continue; // Something goes wrong, we should have $name_oid.$num_index in $oid + $split_oid = explode('.', $oid); + $num_index = $split_oid[(count($split_oid) - 1)]; + $index = (int)$num_index+0; + $oid = $main_oid.$num_index; + $low_limit = 0.5; + $high_limit = 1.5; + + $state_current = snmp_get($device, $oid, '-Oevq'); + discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name, $name, '1', '1', $low_limit, $low_limit, $high_limit, $high_limit, $state_current,'snmp',$index); + create_sensor_to_state_index($device, $state_name, $index); } } -} diff --git a/includes/discovery/sensors/states/equallogic.inc.php b/includes/discovery/sensors/states/equallogic.inc.php index 2aec66a9cb..cc249d7141 100644 --- a/includes/discovery/sensors/states/equallogic.inc.php +++ b/includes/discovery/sensors/states/equallogic.inc.php @@ -1,40 +1,146 @@ $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + + foreach (explode("\n", $oids) as $data) { + $data = trim($data); + if (!empty($data)) { + list($oid,$current) = explode(' = ', $data, 2); + $split_oid = explode('.', $oid); + $num_index = $split_oid[(count($split_oid) - 1)]; + $index = (int)$num_index+0; + $low_limit = 0.5; + $high_limit = 2.5; + discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name, $descr, 1, 1, $low_limit, $low_limit, $high_limit, $high_limit, $current, 'snmp', $index); + create_sensor_to_state_index($device, $state_name, $index); + } + } + } + + $oids1 = snmp_walk($device, 'eqlMemberHealthDetailsPowerSupplyName', '-OQn', 'EQLMEMBER-MIB', $config['install_dir'].'/mibs/equallogic'); + + d_echo('PowerSupplyName oids:'); + d_echo($oids1."\n"); /* .1.3.6.1.4.1.12740.2.1.8.1.2.1.329840783.1 = Power Cooling Module 0 .1.3.6.1.4.1.12740.2.1.8.1.2.1.329840783.2 = Power Cooling Module 1 **/ - d_echo($oids."\n"); - if (!empty($oids)) { - echo 'EQLCONTROLLER-MIB '; - foreach (explode("\n", $oids) as $data) { + $base_oid = '.1.3.6.1.4.1.12740.2.1.8.1.3.1.'; // eqlMemberHealthDetailsPowerSupplyCurrentState + + if (!empty($oids1)) { +/* +eqlMemberHealthDetailsPowerSupplyCurrentState + INTEGER { + on-and-operating (1), + no-ac-power (2), + failed-or-no-data (3) -- has ac but no dc out or we have no data + } +*/ + $state_name1 = 'eqlMemberPowerSupplyCurrentState'; + $state_index_id1 = create_state_index($state_name1); + + if ($state_index_id1) { + $states1 = array( + array($state_index_id1,'on-and-operating',1,1,0) , + array($state_index_id1,'no-ac-power',1,2,1) , + array($state_index_id1,'failed-or-no-data',1,3,2) + ); + foreach($states1 as $value){ + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + + foreach (explode("\n", $oids1) as $data) { $data = trim($data); if (!empty($data)) { list($oid,$descr) = explode(' = ', $data, 2); $split_oid = explode('.', $oid); $num_index = $split_oid[(count($split_oid) - 1)]; - $index = $num_index; - $part_oid = $split_oid[(count($split_oid) - 2)]; - $num_index = $part_oid.'.'.$num_index; - $base_oid = '.1.3.6.1.4.1.12740.2.1.8.1.3.1.'; + $index = (int)$num_index+0; + $member_id = $split_oid[(count($split_oid) - 2)]; + $num_index = $member_id.'.'.$num_index; $oid = $base_oid.$num_index; - $extra = snmp_get_multi($device, "eqlMemberHealthDetailsPowerSupplyCurrentState.3.329840783.$index", '-OQUse', 'EQLMEMBER-MIB', $config['install_dir'].'/mibs/equallogic'); - $keys = array_keys($extra); - $temperature = $extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyValue']; - $low_limit = $extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyLowCriticalThreshold']; - $low_warn = $extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyLowWarningThreshold']; - $high_limit = $extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyHighCriticalThreshold']; - $high_warn = $extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyHighWarningThreshold']; - $index = (100 + $index); - - if ($extra[$keys[0]]['eqlMemberHealthDetailsPowerSupplyCurrentState'] != 'unknown') { - discover_sensor($valid['sensor'], 'state', $device, $oid, $index, 'snmp', $descr, 1, 1, $low_limit, $low_warn, $high_limit, $high_warn, $temperature); + $extra = snmp_get_multi($device, $oid, '-OQne', 'EQLMEMBER-MIB', $config['install_dir'].'/mibs/equallogic'); + d_echo($extra); + if(!empty($extra)) { + list($foid,$pstatus) = explode(' = ',$extra,2); + $index = (100 + $index); + $low_limit = 0.5; + $high_limit = 1.5; + discover_sensor($valid['sensor'], 'state', $device, $oid, $index, $state_name1, $descr, 1, 1, $low_limit, $low_limit, $high_limit, $high_limit, $pstatus, 'snmp', $index); + create_sensor_to_state_index($device, $state_name1, $index); } }//end if }//end foreach - }//end if + }//end if empty oids }//end if diff --git a/includes/discovery/storage/eql-storage.inc.php b/includes/discovery/storage/eql-storage.inc.php new file mode 100644 index 0000000000..cbd0e957b0 --- /dev/null +++ b/includes/discovery/storage/eql-storage.inc.php @@ -0,0 +1,37 @@ + $storage) { + $fstype = $storage['eqliscsiVolumeAdminStatus']; + $descr = $storage['eqliscsiVolumeName']; + $units = 1; + $size = $storage['eqliscsiVolumeSize'] * $units; + $used = $storage['eqliscsiVolumeStatusAllocatedSpace'] * $units; + if (is_int($index)) { + discover_storage($valid_storage, $device, $index, $fstype, 'eql-storage', $descr, $size, $units, $used); + } else { + // Trying to search the last '.' and take something after it as index + $arrindex = explode(".", $index); + $newindex = (int)(end($arrindex))+0; + if (is_int($newindex)) { + discover_storage($valid_storage, $device, $newindex, $fstype, 'eql-storage', $descr, $size, $units, $used); + } + } + unset($deny, $fstype, $descr, $size, $used, $units, $storage_rrd, $old_storage_rrd, $hrstorage_array); + } +} diff --git a/includes/polling/storage/eql-storage.inc.php b/includes/polling/storage/eql-storage.inc.php new file mode 100644 index 0000000000..77d05e8b55 --- /dev/null +++ b/includes/polling/storage/eql-storage.inc.php @@ -0,0 +1,59 @@ + $ventry) { + if (!array_key_exists('eqliscsiVolumeName', $ventry)) continue; + if (is_int($index)) $iind = $index; + else { + $arrindex = explode(".", $index); + $iind = (int)(end($arrindex))+0; + } + if (is_int($iind)) $storage_cache10[$iind] = $ventry; +} +d_echo($storage_cache10); + +foreach ($storage_cache2['eql-storage'] as $index => $vsentry) { + if (!array_key_exists('eqliscsiVolumeStatusAvailable', $vsentry)) continue; + if (is_int($index)) $iind = $index; + else { + $arrindex = explode(".", $index); + $iind = (int)(end($arrindex))+0; + } + if (is_int($iind)) $storage_cache20[$iind] = $vsentry; +} +d_echo($storage_cache20); + +$entry1 = $storage_cache10[$storage[storage_index]]; +$entry2 = $storage_cache20[$storage[storage_index]]; + +$storage['units'] = 1; +$storage['size'] = ($entry1['eqliscsiVolumeSize'] * $storage['units']); +$storage['used'] = ($entry2['eqliscsiVolumeStatusAllocatedSpace'] * $storage['units']); +$storage['free'] = ($storage['size'] - $storage['used']); From 9e1cbff8ed8522db204e61a8d84c74e0ae513fac Mon Sep 17 00:00:00 2001 From: Bud Date: Fri, 13 May 2016 13:15:38 -0500 Subject: [PATCH 010/133] Send Slack alerts as pure json Now works with mattermost as well as slack Set the Content-type header application/json Removed extraneous code that was urlencoding some apparently unused data ($api) Removed "payload=" from the alert messsage as it is not proper json --- includes/alerts/transport.slack.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/includes/alerts/transport.slack.php b/includes/alerts/transport.slack.php index cbb9101211..3d295b01a7 100644 --- a/includes/alerts/transport.slack.php +++ b/includes/alerts/transport.slack.php @@ -23,9 +23,6 @@ foreach( $opts as $tmp_api ) { $host = $tmp_api['url']; - foreach( $obj as $k=>$v ) { - $api = str_replace("%".$k,$method == "get" ? urlencode($v) : $v, $api); - } $curl = curl_init(); $data = array( 'text' => $obj['msg'], @@ -34,11 +31,15 @@ foreach( $opts as $tmp_api ) { 'icon_url' => $tmp_api['icon_url'], 'icon_emoji' => $tmp_api['icon_emoji'], ); - $alert_message = "payload=" . json_encode($data); + $alert_message = json_encode($data); + curl_setopt($curl, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json') + ); curl_setopt($curl, CURLOPT_URL, $host); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST,true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message ); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if( $code != 200 ) { From 3e1b3a0d965f6649199fe1828c0f17d39d1ae1dc Mon Sep 17 00:00:00 2001 From: Mark Schouten Date: Tue, 17 May 2016 15:26:59 +0200 Subject: [PATCH 011/133] Add example configuration for SNMP Proxy --- doc/Extensions/SNMP-Proxy.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 doc/Extensions/SNMP-Proxy.md diff --git a/doc/Extensions/SNMP-Proxy.md b/doc/Extensions/SNMP-Proxy.md new file mode 100644 index 0000000000..19ceb983e0 --- /dev/null +++ b/doc/Extensions/SNMP-Proxy.md @@ -0,0 +1,29 @@ +# SNMP Proxy + +If you have machines that you want to monitor but are not reachable directly, you can use [SNMPD Proxy](http://www.net-snmp.org/wiki/index.php/Snmpd_proxy). This will use the reachable SNMPD to proxy requests to the unreachable SNMPD. + +## Example configuration +We want to poll ```unreachable.example.com``` via ```hereweare.example.com```. Use the following config: + +On ```hereweare.example.com```: +``` + view all included .1 + com2sec -Cn ctx_unreachable readonly unreachable + access MyROGroup ctx_unreachable any noauth prefix all none none + proxy -Cn ctx_unreachable -v 2c -c private unreachable.example.com .1.3 +``` + +On ```unreachable.example.com```: +``` + view all included .1 80 + com2sec readonly private + group MyROGroup v1 readonly + group MyROGroup v2c readonly + group MyROGroup usm readonly + access MyROGroup "" any noauth exact all none none +``` + + +You can now poll community ```private``` on ```unreachable.example.com``` via community ```unreachable``` on host ```hereweare.example.com```. Please note that requests on ```unreachable.example.com``` will be coming from ```hereweare.example.com```, not your poller. + + From 1d2a49746d3e6d43c491a04057c9c07c6f473744 Mon Sep 17 00:00:00 2001 From: Adam Winberg Date: Wed, 18 May 2016 10:06:12 +0200 Subject: [PATCH 012/133] Added authentication module combining http authentication and Active Directory authorization --- .../authentication/ad-authorization.inc.php | 359 ++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100644 html/includes/authentication/ad-authorization.inc.php diff --git a/html/includes/authentication/ad-authorization.inc.php b/html/includes/authentication/ad-authorization.inc.php new file mode 100644 index 0000000000..2f30129984 --- /dev/null +++ b/html/includes/authentication/ad-authorization.inc.php @@ -0,0 +1,359 @@ +Fatal error while connecting to AD url ' . $config['auth_ad_url'] . ': ' . ldap_error($ds) . ''; + exit; +} + +// disable referrals and force ldap version to 3 +ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); +ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + +// Bind to AD +if (isset($config['auth_ad_binduser']) && isset($config['auth_ad_bindpassword'])) { + // With specified bind user + if (! ldap_bind($ds, "${config['auth_ad_binduser']}@${config['auth_ad_domain']}", "${config['auth_ad_bindpassword']}")) { + echo ldap_error($ds); + } +} +else { + // Anonymous + if (! ldap_bind($ds)) { + echo ldap_error($ds); + } +} + +function authenticate ($username, $password) { + global $config; + + if (isset ($_SERVER['REMOTE_USER'])) { + $_SESSION['username'] = mres ($_SERVER['REMOTE_USER']); + + if (user_exists ($_SESSION['username'])) { + adduser($username); + return 1; + + } + + $_SESSION['username'] = $config['http_auth_guest']; + return 1; + } + + return 0; +} + + +function reauthenticate() { + // not supported so return 0 + return 0; +} + + +function passwordscanchange() { + // not supported so return 0 + return 0; +} + + +function changepassword() { + // not supported so return 0 + return 0; +} + + +function auth_usermanagement() { + // not supported so return 0 + return 0; +} + + +function adduser($username, $level=0, $email='', $realname='', $can_modify_passwd=0, $description='', $twofactor=0) { + // Check to see if user is already added in the database + if (!user_exists_in_db($username)) { + $userid = dbInsert(array('username' => $username, 'realname' => $realname, 'email' => $email, 'descr' => $description, 'level' => $level, 'can_modify_passwd' => $can_modify_passwd, 'twofactor' => $twofactor, 'user_id' => get_userid($username)), 'users'); + if ($userid == false) { + return false; + } + else { + foreach (dbFetchRows('select notifications.* from notifications where not exists( select 1 from notifications_attribs where notifications.notifications_id = notifications_attribs.notifications_id and notifications_attribs.user_id = ?) order by notifications.notifications_id desc',array($userid)) as $notif) { + dbInsert(array('notifications_id'=>$notif['notifications_id'],'user_id'=>$userid,'key'=>'read','value'=>1),'notifications_attribs'); + } + } + return $userid; + } + else { + return false; + } +} + +function user_exists_in_db($username) { + $return = dbFetchCell('SELECT COUNT(*) FROM users WHERE username = ?', array($username), true); + return $return; +} + +function user_exists($username) { + global $config, $ds; + + if (auth_ldap_session_cache_get ('user_exists')) + return 1; + + $search = ldap_search($ds, $config['auth_ad_base_dn'], + "(samaccountname=${username})",array('samaccountname')); + $entries = ldap_get_entries($ds, $search); + + if ($entries['count']) { + /* + * Cache positiv result as this will result in more queries which we + * want to speed up. + */ + auth_ldap_session_cache_set ('user_exists', 1); + return 1; + } + + return 0; +} + + +function get_userlevel($username) { + global $config, $ds; + + $userlevel = auth_ldap_session_cache_get ('userlevel'); + if ($userlevel) { + return $userlevel; + } + else { + $userlevel = 0; + } + + // Find all defined groups $username is in + $search = ldap_search($ds, $config['auth_ad_base_dn'], + "(samaccountname={$username})", array('memberOf')); + $entries = ldap_get_entries($ds, $search); + + // Loop the list and find the highest level + foreach ($entries[0]['memberof'] as $entry) { + $group_cn = get_cn($entry); + if ($config['auth_ad_groups'][$group_cn]['level'] > $userlevel) { + $userlevel = $config['auth_ad_groups'][$group_cn]['level']; + } + } + + auth_ldap_session_cache_set ('userlevel', $userlevel); + return $userlevel; +} + + +function get_userid($username) { + global $config, $ds; + + $user_id = auth_ldap_session_cache_get ('userid'); + if (isset ($user_id)) { + return $user_id; + } + else { + $user_id = -1; + } + + $attributes = array('objectsid'); + $search = ldap_search($ds, $config['auth_ad_base_dn'], + "(samaccountname={$username})", $attributes); + $entries = ldap_get_entries($ds, $search); + + if ($entries['count']) { + $user_id = preg_replace('/.*-(\d+)$/','$1',sid_from_ldap($entries[0]['objectsid'][0])); + } + + auth_ldap_session_cache_set ('userid', $user_id); + return $user_id; +} + + +function deluser($username) { + dbDelete('bill_perms', '`user_name` = ?', array($username)); + dbDelete('devices_perms', '`user_name` = ?', array($username)); + dbDelete('ports_perms', '`user_name` = ?', array($username)); + dbDelete('users_prefs', '`user_name` = ?', array($username)); + dbDelete('users', '`user_name` = ?', array($username)); + return dbDelete('users', '`username` = ?', array($username)); +} + + +function get_userlist() { + global $config, $ds; + $userlist = array(); + $userhash = array(); + + $ldap_groups = get_group_list(); + + foreach($ldap_groups as $ldap_group) { + $group_cn = get_cn($ldap_group); + $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$group_cn})", array('member')); + $entries = ldap_get_entries($ds, $search); + + foreach($entries[0]['member'] as $member) { + $member_cn = get_cn($member); + $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$member_cn})", + array('sAMAccountname', 'displayName', 'objectSID', 'mail')); + $results = ldap_get_entries($ds, $search); + foreach($results as $result) { + if(isset($result['samaccountname'][0])) { + $userid = preg_replace('/.*-(\d+)$/','$1', + sid_from_ldap($result['objectsid'][0])); + + // don't make duplicates, user may be member of more than one group + $userhash[$result['samaccountname'][0]] = array( + 'realname' => $result['displayName'][0], + 'user_id' => $userid, + 'email' => $result['mail'][0] + ); + } + } + } + } + + foreach(array_keys($userhash) as $key) { + $userlist[] = array( + 'username' => $key, + 'realname' => $userhash[$key]['realname'], + 'user_id' => $userhash[$key]['user_id'], + 'email' => $userhash[$key]['email'] + ); + } + + return $userlist; +} + + +function can_update_users() { + // not supported so return 0 + return 0; +} + + +function get_user($user_id) { + // not supported so return 0 + return dbFetchRow('SELECT * FROM `users` WHERE `user_id` = ?', array($user_id), true); +} + + +function update_user($user_id, $realname, $level, $can_modify_passwd, $email) { + dbUpdate(array('realname' => $realname, 'can_modify_passwd' => $can_modify_passwd, 'email' => $email), 'users', '`user_id` = ?', array($user_id)); +} + + +function get_fullname($username) { + global $config, $ds; + + $attributes = array('name'); + $result = ldap_search($ds, $config['auth_ad_base_dn'], + "(samaccountname={$username})", $attributes); + $entries = ldap_get_entries($ds, $result); + if ($entries['count'] > 0) { + $membername = $entries[0]['name'][0]; + } + else { + $membername = $username; + } + + return $membername; +} + + +function get_group_list() { + global $config; + + $ldap_groups = array(); + + // show all Active Directory Users by default + $default_group = 'Users'; + + if (isset($config['auth_ad_group'])) { + if ($config['auth_ad_group'] !== $default_group) { + $ldap_groups[] = $config['auth_ad_group']; + } + } + + if (!isset($config['auth_ad_groups']) && !isset($config['auth_ad_group'])) { + $ldap_groups[] = get_dn($default_group); + } + + foreach ($config['auth_ad_groups'] as $key => $value) { + $ldap_groups[] = get_dn($key); + } + + return $ldap_groups; + +} + +function get_dn($samaccountname) { + global $config, $ds; + + + $attributes = array('dn'); + $result = ldap_search($ds, $config['auth_ad_base_dn'], + "(samaccountname={$samaccountname})", $attributes); + $entries = ldap_get_entries($ds, $result); + if ($entries['count'] > 0) { + return $entries[0]['dn']; + } + else { + return ''; + } +} + +function get_cn($dn) { + preg_match('/[^,]*/', $dn, $matches, PREG_OFFSET_CAPTURE, 3); + return $matches[0][0]; +} + +function sid_from_ldap($sid) +{ + $sidHex = unpack('H*hex', $sid); + $subAuths = unpack('H2/H2/n/N/V*', $sid); + $revLevel = hexdec(substr($sidHex, 0, 2)); + $authIdent = hexdec(substr($sidHex, 4, 12)); + return 'S-'.$revLevel.'-'.$authIdent.'-'.implode('-', $subAuths); +} + +function auth_ldap_session_cache_get ($attr) { + global $config; + + $ttl = 300; + if ($config['auth_ldap_cache_ttl']) + $ttl = $config['auth_ldap_cache_ttl']; + + // auth_ldap cache present in this session? + if (! isset ($_SESSION['auth_ldap'])) + return Null; + + $cache = $_SESSION['auth_ldap']; + + // $attr present in cache? + if (! isset ($cache[$attr])) + return Null; + + // Value still valid? + if (time () - $cache[$attr]['last_updated'] >= $ttl) + return Null; + + return $cache[$attr]['value']; +} + + +function auth_ldap_session_cache_set ($attr, $value) { + $_SESSION['auth_ldap'][$attr]['value'] = $value; + $_SESSION['auth_ldap'][$attr]['last_updated'] = time (); +} + From 7f4a05f30a524df9545b2d97dfbb076745ff849e Mon Sep 17 00:00:00 2001 From: Peter TKATCHENKO Date: Wed, 18 May 2016 14:55:35 +0200 Subject: [PATCH 013/133] I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 63f0456d10..3fe57e5685 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -102,6 +102,7 @@ LibreNMS contributors: - Jussi Sorjonen (mieleton) - Jens Langhammer (BeryJu) - Robert Verspuy (exarv) +- Peter Tkatchenko (Peter2121) [1]: http://observium.org/ "Observium web site" Observium was written by: From 38d28ec9b1985dc1516e6c5e9f18dac52291bc31 Mon Sep 17 00:00:00 2001 From: Peter TKATCHENKO Date: Wed, 18 May 2016 15:14:03 +0200 Subject: [PATCH 014/133] Reformatting if-else --- includes/discovery/storage/eql-storage.inc.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/includes/discovery/storage/eql-storage.inc.php b/includes/discovery/storage/eql-storage.inc.php index cbd0e957b0..2951fcd5af 100644 --- a/includes/discovery/storage/eql-storage.inc.php +++ b/includes/discovery/storage/eql-storage.inc.php @@ -24,7 +24,8 @@ if (is_array($eql_storage)) { $used = $storage['eqliscsiVolumeStatusAllocatedSpace'] * $units; if (is_int($index)) { discover_storage($valid_storage, $device, $index, $fstype, 'eql-storage', $descr, $size, $units, $used); - } else { + } + else { // Trying to search the last '.' and take something after it as index $arrindex = explode(".", $index); $newindex = (int)(end($arrindex))+0; From 75223146f343ab203e50478390021065b84582a4 Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Wed, 18 May 2016 16:40:10 -0400 Subject: [PATCH 015/133] add basic inventory support for Alcatel-Lucent SR devices --- includes/discovery/entity-physical.inc.php | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/includes/discovery/entity-physical.inc.php b/includes/discovery/entity-physical.inc.php index caacb5be21..ae635ac56b 100644 --- a/includes/discovery/entity-physical.inc.php +++ b/includes/discovery/entity-physical.inc.php @@ -10,6 +10,12 @@ if ($config['enable_inventory']) { echo ' jnxBoxAnatomy'; $entity_array = snmpwalk_cache_oid($device, 'jnxBoxAnatomy', $entity_array, 'JUNIPER-MIB'); } + elseif ($device['os'] == 'timos') { + $entity_array = array(); + echo 'tmnxHwObjs'; + $entity_array = snmpwalk_cache_multi_oid($device, 'tmnxHwObjs', $entity_array, 'TIMETRA-CHASSIS-MIB', '+'.$config['mib_dir'].'/aos:'.$config['mib_dir']); + //print_r($entity_array); + } else { $entity_array = array(); echo ' entPhysicalEntry'; @@ -41,6 +47,24 @@ if ($config['enable_inventory']) { // using str_replace to remove all dots should fix this even if it changes in future $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); } + elseif ($device['os'] == 'timos') { + $entPhysicalDescr = $entry['tmnxCardTypeDescription']; + $entPhysicalContainedIn = $entry['tmnxHwContainedIn']; + $entPhysicalClass = $entry['tmnxHwClass']; + $entPhysicalName = $entry['tmnxCardTypeName']; + $entPhysicalSerialNum = $entry['tmnxHwSerialNumber']; + $entPhysicalModelName = $entry['tmnxHwMfgBoardNumber']; + $entPhysicalMfgName = $entry['tmnxHwMfgBoardNumber']; + $entPhysicalVendorType = $entry['tmnxCardTypeName']; + $entPhysicalParentRelPos = $entry['tmnxHwParentRelPos']; + $entPhysicalHardwareRev = '1.0'; + $entPhysicalFirmwareRev = $entry['tmnxHwBootCodeVersion']; + $entPhysicalSoftwareRev = $entry['tmnxHwBootCodeVersion']; + $entPhysicalIsFRU = $entry['tmnxHwIsFRU']; + $entPhysicalAlias = $entry['tmnxHwAlias']; + $entPhysicalAssetID = $entry['tmnxHwAssetID']; + $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); + } else { $entPhysicalDescr = $entry['entPhysicalDescr']; $entPhysicalContainedIn = $entry['entPhysicalContainedIn']; From 94b2fcb9f0d309258c1c25775ebdf136e9cc817e Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Wed, 18 May 2016 16:48:39 -0400 Subject: [PATCH 016/133] remove debug print statement and submit this as a PR for Alcatel-Lucent inventory support --- includes/discovery/entity-physical.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/includes/discovery/entity-physical.inc.php b/includes/discovery/entity-physical.inc.php index ae635ac56b..f82418c200 100644 --- a/includes/discovery/entity-physical.inc.php +++ b/includes/discovery/entity-physical.inc.php @@ -14,7 +14,6 @@ if ($config['enable_inventory']) { $entity_array = array(); echo 'tmnxHwObjs'; $entity_array = snmpwalk_cache_multi_oid($device, 'tmnxHwObjs', $entity_array, 'TIMETRA-CHASSIS-MIB', '+'.$config['mib_dir'].'/aos:'.$config['mib_dir']); - //print_r($entity_array); } else { $entity_array = array(); From 4920c39dfd65181524caedc108fdb165cbb0008a Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 19 May 2016 14:20:42 -0500 Subject: [PATCH 017/133] List service plugins alphabetically. --- html/pages/addsrv.inc.php | 12 ++++-------- html/pages/device/edit/services.inc.php | 11 ++++------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/html/pages/addsrv.inc.php b/html/pages/addsrv.inc.php index e75ff24fd9..7a360bfb7d 100644 --- a/html/pages/addsrv.inc.php +++ b/html/pages/addsrv.inc.php @@ -16,15 +16,11 @@ else { } } - if ($handle = opendir($config['nagios_plugins'])) { - while (false !== ($file = readdir($handle))) { - if ($file != '.' && $file != '..' && !strstr($file, '.') && strstr($file, 'check_')) { - list(,$check_name) = explode('_',$file,2); - $servicesform .= ""; - } + foreach (scandir($config['nagios_plugins']) as $file) { + if (substr($file, 0, 6) === 'check_') { + $check_name = substr($file, 6); + $servicesform .= ""; } - - closedir($handle); } foreach (dbFetchRows('SELECT * FROM `devices` ORDER BY `hostname`') as $device) { diff --git a/html/pages/device/edit/services.inc.php b/html/pages/device/edit/services.inc.php index e480f88edb..8a7f5ac4ee 100644 --- a/html/pages/device/edit/services.inc.php +++ b/html/pages/device/edit/services.inc.php @@ -14,14 +14,11 @@ if (is_admin() === true || is_read() === true) { } // Build the types list. - if ($handle = opendir($config['nagios_plugins'])) { - while (false !== ($file = readdir($handle))) { - if ($file != '.' && $file != '..' && !strstr($file, '.') && strstr($file, 'check_')) { - list(,$check_name) = explode('_',$file,2); - $servicesform .= ""; - } + foreach (scandir($config['nagios_plugins']) as $file) { + if (substr($file, 0, 6) === 'check_') { + $check_name = substr($file, 6); + $servicesform .= ""; } - closedir($handle); } $dev = device_by_id_cache($device['device_id']); From 1a297b8ac585f23cb6b0da7ba4233aa26d273a25 Mon Sep 17 00:00:00 2001 From: Adam Winberg Date: Fri, 20 May 2016 09:47:53 +0200 Subject: [PATCH 018/133] Added documentation --- doc/Extensions/Authentication.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/doc/Extensions/Authentication.md b/doc/Extensions/Authentication.md index adb468a51a..a2ae521361 100644 --- a/doc/Extensions/Authentication.md +++ b/doc/Extensions/Authentication.md @@ -168,3 +168,27 @@ $config['radius']['timeout'] = 3; $config['radius']['users_purge'] = 14;//Purge users who haven't logged in for 14 days. $config['radius']['default_level'] = 1;//Set the default user level when automatically creating a user. ``` + +#### HTTP Authentication / AD Authorization + +Config option: `ad-authorization` + +This module is a combination of ___http-auth___ and ___active_directory___ + +LibreNMS will expect the user to have authenticated via your webservice already (e.g. using Kerberos Authentication in Apache) but will use Active Directory lookups to determine and assign the userlevel of a user. +The userlevel will be calculated by using AD group membership information as the ___active_directory___ module does. + +The configuration is the same as for the ___active_directory___ module with two extra, optional options: auth_ad_binduser and auth_ad_bindpassword. +These should be set to a AD user with read capabilities in your AD Domain in order to be able to perform searches. +If these options are omitted, the module will attempt an anonymous bind (which then of course must be allowed by your Active Directory server(s)). + +There is also one extra option for controlling user information caching: auth_ldap_cache_ttl. +This option allows to control how long user information (user_exists, userid, userlevel) are cached within the PHP Session. +The default value is 300 seconds. +To disable this caching (highly discourage) set this option to 0. + +```php +$config['auth_ad_binduser'] = "ad_binduser"; +$config['auth_ad_bindpassword'] = "ad_bindpassword"; +$config['auth_ldap_cache_ttl'] = 300; +``` From 12d713686fee15e6b025ab14e22c1f7350f7c29d Mon Sep 17 00:00:00 2001 From: Marc Runkel Date: Sat, 21 May 2016 10:28:18 +0200 Subject: [PATCH 019/133] Changes to actually change the color of hipchat alerts when a device recovers. I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 3 +-- includes/alerts/transport.hipchat.php | 15 +++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 3fe57e5685..83644c51ed 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -103,11 +103,10 @@ LibreNMS contributors: - Jens Langhammer (BeryJu) - Robert Verspuy (exarv) - Peter Tkatchenko (Peter2121) +- Marc Runkel (mrunkel) [1]: http://observium.org/ "Observium web site" Observium was written by: - Adam Armstrong - Tom Laermans - various others as indicated in the file contents and commit logs - - diff --git a/includes/alerts/transport.hipchat.php b/includes/alerts/transport.hipchat.php index a829004c4b..7a709cfa37 100644 --- a/includes/alerts/transport.hipchat.php +++ b/includes/alerts/transport.hipchat.php @@ -36,20 +36,23 @@ foreach($opts as $option) { $option["message_format"] = 'text'; } + // Sane default of making the message color green if the message indicates + // that the alert recovered. + if(stripos($data["message"], "recovered")) { + $color = "green"; + } else { + $color = $option["color"]; + } + $data[] = "message=".urlencode($obj["msg"]); $data[] = "room_id=".urlencode($option["room_id"]); $data[] = "from=".urlencode($option["from"]); - $data[] = "color=".urlencode($option["color"]); + $data[] = "color=".urlencode($color); $data[] = "notify=".urlencode($option["notify"]); $data[] = "message_format=".urlencode($option["message_format"]); $data = implode('&', $data); - // Sane default of making the message color green if the message indicates - // that the alert recovered. - if(strstr($data["message"], "recovered")) { - $data["color"] = "green"; - } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, true); From 2dd60f1c3d64e5bdd88bde97c10bd412cd6c12c8 Mon Sep 17 00:00:00 2001 From: Marc Runkel Date: Sun, 22 May 2016 11:08:26 +0200 Subject: [PATCH 020/133] This time, really fix it. --- includes/alerts/transport.hipchat.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/includes/alerts/transport.hipchat.php b/includes/alerts/transport.hipchat.php index 7a709cfa37..1bc9bd48c4 100644 --- a/includes/alerts/transport.hipchat.php +++ b/includes/alerts/transport.hipchat.php @@ -21,6 +21,7 @@ * @subpackage Alerts */ +// loop through each room foreach($opts as $option) { $url = $option['url']; foreach($obj as $key=>$value) { @@ -37,9 +38,11 @@ foreach($opts as $option) { } // Sane default of making the message color green if the message indicates - // that the alert recovered. - if(stripos($data["message"], "recovered")) { + // that the alert recovered. If it rebooted, make it yellow. + if(stripos($obj["msg"], "recovered")) { $color = "green"; + } elseif(stripos($obj["msg"], "rebooted")) { + $color = "yellow"; } else { $color = $option["color"]; } From 50ad9e594332fcb2a4f9ceadf12f12178d5f7a7b Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Sun, 22 May 2016 21:26:55 +0100 Subject: [PATCH 021/133] Unset unrequired index from snmp netstats --- includes/polling/netstats-snmp.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/polling/netstats-snmp.inc.php b/includes/polling/netstats-snmp.inc.php index c1d6b461c0..0bc04e57d0 100644 --- a/includes/polling/netstats-snmp.inc.php +++ b/includes/polling/netstats-snmp.inc.php @@ -49,6 +49,7 @@ if ($device['os'] != 'Snom') { $data_array = snmpwalk_cache_oid($device, 'snmp', array(), 'SNMPv2-MIB'); $fields = $data_array[0]; + unset($fields['snmpEnableAuthenTraps']); if (isset($data_array[0]['snmpInPkts']) && isset($data_array[0]['snmpOutPkts'])) { if (!file_exists($rrd_file)) { From bbc8a0979aab2f63bb982533d5ae1985434d3861 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Mon, 23 May 2016 21:27:43 +0100 Subject: [PATCH 022/133] Basic support for Xirrus Wireless Access Points. I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- html/images/os/xirrus.png | Bin 0 -> 1739 bytes includes/definitions.inc.php | 12 + includes/discovery/os/xirrus.inc.php | 9 + includes/polling/wifi.inc.php | 13 + mibs/XIRRUS-MIB | 17437 +++++++++++++++++++++++++ 5 files changed, 17471 insertions(+) create mode 100644 html/images/os/xirrus.png create mode 100644 includes/discovery/os/xirrus.inc.php create mode 100644 mibs/XIRRUS-MIB diff --git a/html/images/os/xirrus.png b/html/images/os/xirrus.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d05ed4afa817af7c9b6daa0961caf780b3c8e9 GIT binary patch literal 1739 zcmV;+1~mDJP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0008Y zP)t-s|NsB>_4VW9w>#>AmwsJm}XG522N0@L>n0a5EfosR7kNefSxS@}lhj*E8 zP0f2hu%@5re>BvEOFBnMFGNc=L`UYutkb!qEIva}P)WLdPUU_x!j5EDfsR#wj6`Q~ zW@%>n$D{VisZ(BFNNsptfr{LdTe7UE@Q+BTmVRH8qg02MIay<)i+1_Hl#P9DK4EKF zjh)7vc-?w3^OH@6l8ji7pi_&TN_mGhPF1jsZ%uuSpPGr?-QBHpN$QqZXN;3ihL=5P zb}da;Ky7I2*>^D3mt;$Zm`8t*L3V~kfRkB=leM+A)O9hZl6k|KbE~VX z(Q_~AlT%S>YCCz1JbaKjc8Pp-WW{eW&T%g7kV|A#LnTyWG;)PCcZ?xQSFdL@=7~j$ zW=I-APAO)2E^>!1bBHEiaU45DySuxSVLZxjE!%)T7db;ATyG<5fhcZ-RC#^Vnrj?W zWhp#9;ea}NVo=0wEYNs3!hTC2I6WX|eJyN#)sbAKh-e&Td=*JqLPR~;hDz0WHhOq= zx@RlHaW%<)M>Re>8DV#&g=FiEN@#a*7+rD@K26bnLd$Y8prD|DRyMq8EL2H34Lwa0 zT5uI&d1rKM;fF@ri%>LZa}rf)3pGKAUp{7GUA1H?vT8JPSU-1cSb%k3&wxhReL8`6 zV|Qp%dRRJ|nwn%vIK6E&%XT=wa5iL0H*<4yc1kN-TU&TZCsb5aU_K_UUnj9)Ctf`z zV`F1KGb@8jB7A&&Mn*AgqO=eK z$|6)i3c|xnN{WG=EU&020lT8Is=5XQYU?5(E-0y}C}#vJsBfqMTB6k0)ZEev0xfMu zvZ|&)3o07w!3x?NKq@*qySjUNds}*Yd;0qA_`vcF?LY+#6DCfY)KD@xY0A`T)2Gjv z*)o0lv{|#w=7d)?Oqw)t0w|{E&YRaTf5F08i>6Imyd+}jv}x0pEnl&6Rl}rt^X7u$ zJaP4!d283LU%p}4vSl0jls0V!(p$DRZQDL?-kQ~*a8TQ^b6586J$v`<+qeIKefXS% zhk&fZM~<$Yw`=DPaC}N1JAUHisk*wl(`Qzd5SPh=$%WvPgdk+Y}GRHxzyZ3LGBc*(%@&^we-9-YA9zG~X$r)-B z9zS{d>^VgC`Lm}_9#2qXKmm*j<&ST_c=`0ztEVqt+#r|P zP*7vQ1{l>66@Va74Ouq;n|?hVpwnQ20000bbVXQnWMOn=I%9HWVRU5xGB7bVEig4L zGBZ>%Fgh|fIx;pZFflqXFbQFw_W%F@C3HntbYx+4WjbwdWNBu305UK!HZ3qSEigA! hF*Q0hIXW^qD=;uRFfje4RBQkM002ovPDHLkV1oNs5B&fD literal 0 HcmV?d00001 diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index a60ae8df0b..79be553dfc 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1671,6 +1671,18 @@ $config['os'][$os]['icon'] = 'deliberant'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +// Xirrus AP +$os = 'xirrus'; +$config['os'][$os]['text'] = 'Xirrus'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'xirrus'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_wifi_clients'; +$config['os'][$os]['over'][1]['text'] = 'Wifi Clients'; + + + // Graph Types require_once $config['install_dir'].'/includes/load_db_graph_types.inc.php'; diff --git a/includes/discovery/os/xirrus.inc.php b/includes/discovery/os/xirrus.inc.php new file mode 100644 index 0000000000..a4723a0f4c --- /dev/null +++ b/includes/discovery/os/xirrus.inc.php @@ -0,0 +1,9 @@ + diff --git a/includes/polling/wifi.inc.php b/includes/polling/wifi.inc.php index 685fac9641..5255856468 100644 --- a/includes/polling/wifi.inc.php +++ b/includes/polling/wifi.inc.php @@ -78,6 +78,19 @@ if ($device['type'] == 'network' || $device['type'] == 'firewall' || $device['ty echo (($wificlients1 + 0).' clients on wireless connector, '); } + if ($device['os'] == 'xirrus') { + $wificlients1=0; $wificlients2=0; + $assoc = snmpwalk_cache_oid($device, 'XIRRUS-MIB::stationAssociationIAP', array(), 'XIRRUS-MIB'); + foreach($assoc as $station) { + if ($station['stationAssociationIAP']=='iap1') { + $wificlients1++; + } else { + $wificlients2++; + } + } + echo "Xirrus - $wificlients1 / $wificlients2\n"; + } + if (isset($wificlients1) && $wificlients1 != '') { $tags = array( 'rrd_def' => 'DS:wificlients:GAUGE:600:-273:1000', diff --git a/mibs/XIRRUS-MIB b/mibs/XIRRUS-MIB new file mode 100644 index 0000000000..8eb8f30a70 --- /dev/null +++ b/mibs/XIRRUS-MIB @@ -0,0 +1,17437 @@ +XIRRUS-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, enterprises, + IpAddress, Counter32, Counter64 FROM SNMPv2-SMI + + DisplayString, MacAddress, RowStatus FROM SNMPv2-TC; + + xirrus MODULE-IDENTITY + LAST-UPDATED "201412081200Z" + ORGANIZATION "Xirrus" + CONTACT-INFO "support@xirrus.com" + DESCRIPTION "Xirrus enterprise MIB tree" + REVISION "201412081200Z" + DESCRIPTION "xirrus mib" + ::= { enterprises 21013 } + + + products OBJECT IDENTIFIER ::= { xirrus 1 } + + + xmManage OBJECT IDENTIFIER ::= { products 1 } + xsArray OBJECT IDENTIFIER ::= { products 2 } + xs3500Array OBJECT IDENTIFIER ::= { products 100 } + xs3700Array OBJECT IDENTIFIER ::= { products 101 } + xs3900Array OBJECT IDENTIFIER ::= { products 102 } + xs3500-512Array OBJECT IDENTIFIER ::= { products 103 } + xs3700-1GArray OBJECT IDENTIFIER ::= { products 104 } + xs3900-1GArray OBJECT IDENTIFIER ::= { products 105 } + xs4Array OBJECT IDENTIFIER ::= { products 106 } + xs8Array OBJECT IDENTIFIER ::= { products 107 } + xs16Array OBJECT IDENTIFIER ::= { products 108 } + xn4Array OBJECT IDENTIFIER ::= { products 109 } + xn8Array OBJECT IDENTIFIER ::= { products 110 } + xn16Array OBJECT IDENTIFIER ::= { products 111 } + xs12Array OBJECT IDENTIFIER ::= { products 112 } + xn12Array OBJECT IDENTIFIER ::= { products 113 } + xr4420Array OBJECT IDENTIFIER ::= { products 114 } + xr4430Array OBJECT IDENTIFIER ::= { products 115 } + xr4820Array OBJECT IDENTIFIER ::= { products 116 } + xr4830Array OBJECT IDENTIFIER ::= { products 117 } + xr6820Array OBJECT IDENTIFIER ::= { products 118 } + xr6830Array OBJECT IDENTIFIER ::= { products 119 } + xr7220Array OBJECT IDENTIFIER ::= { products 120 } + xr7230Array OBJECT IDENTIFIER ::= { products 121 } + xr7620Array OBJECT IDENTIFIER ::= { products 122 } + xr7630Array OBJECT IDENTIFIER ::= { products 123 } + xr1220Array OBJECT IDENTIFIER ::= { products 124 } + xr1230Array OBJECT IDENTIFIER ::= { products 125 } + xr2420Array OBJECT IDENTIFIER ::= { products 126 } + xr2430Array OBJECT IDENTIFIER ::= { products 127 } + xr2220Array OBJECT IDENTIFIER ::= { products 128 } + xr2230Array OBJECT IDENTIFIER ::= { products 129 } + xr1120Array OBJECT IDENTIFIER ::= { products 130 } + xr1130Array OBJECT IDENTIFIER ::= { products 131 } + xr1120hArray OBJECT IDENTIFIER ::= { products 132 } + xr1130hArray OBJECT IDENTIFIER ::= { products 133 } + xr520hArray OBJECT IDENTIFIER ::= { products 134 } + xr1230hArray OBJECT IDENTIFIER ::= { products 135 } + xr2420hArray OBJECT IDENTIFIER ::= { products 136 } + xr2430hArray OBJECT IDENTIFIER ::= { products 137 } + xr2220hArray OBJECT IDENTIFIER ::= { products 138 } + xr2230hArray OBJECT IDENTIFIER ::= { products 139 } + xr520Array OBJECT IDENTIFIER ::= { products 142 } + xr530Array OBJECT IDENTIFIER ::= { products 143 } + xr1220hArray OBJECT IDENTIFIER ::= { products 144 } + xr530hArray OBJECT IDENTIFIER ::= { products 145 } + xr420hArray OBJECT IDENTIFIER ::= { products 146 } + xr430hArray OBJECT IDENTIFIER ::= { products 147 } + xr2425Array OBJECT IDENTIFIER ::= { products 148 } + xr2435Array OBJECT IDENTIFIER ::= { products 149 } + xr2425hArray OBJECT IDENTIFIER ::= { products 150 } + xr2225Array OBJECT IDENTIFIER ::= { products 151 } + xr2235Array OBJECT IDENTIFIER ::= { products 152 } + xr620Array OBJECT IDENTIFIER ::= { products 153 } + xr620hArray OBJECT IDENTIFIER ::= { products 154 } + xr630Array OBJECT IDENTIFIER ::= { products 155 } + xr2426Array OBJECT IDENTIFIER ::= { products 156 } + xr2436Array OBJECT IDENTIFIER ::= { products 157 } + xr2426hArray OBJECT IDENTIFIER ::= { products 158 } + xr2226Array OBJECT IDENTIFIER ::= { products 159 } + xr2226hArray OBJECT IDENTIFIER ::= { products 160 } + xr2236Array OBJECT IDENTIFIER ::= { products 161 } + xr630hArray OBJECT IDENTIFIER ::= { products 162 } + xr2225hArray OBJECT IDENTIFIER ::= { products 163 } + xr2235hArray OBJECT IDENTIFIER ::= { products 164 } + xr2236hArray OBJECT IDENTIFIER ::= { products 165 } + xr2435hArray OBJECT IDENTIFIER ::= { products 166 } + xr2436hArray OBJECT IDENTIFIER ::= { products 167 } + xr1126Array OBJECT IDENTIFIER ::= { products 168 } + xr1136Array OBJECT IDENTIFIER ::= { products 169 } + xr1226Array OBJECT IDENTIFIER ::= { products 170 } + xr1236Array OBJECT IDENTIFIER ::= { products 171 } + xr1126hArray OBJECT IDENTIFIER ::= { products 172 } + xr1136hArray OBJECT IDENTIFIER ::= { products 173 } + xr1226hArray OBJECT IDENTIFIER ::= { products 174 } + xr1236hArray OBJECT IDENTIFIER ::= { products 175 } + xr4426Array OBJECT IDENTIFIER ::= { products 176 } + xr4436Array OBJECT IDENTIFIER ::= { products 177 } + xr4826Array OBJECT IDENTIFIER ::= { products 178 } + xr4836Array OBJECT IDENTIFIER ::= { products 179 } + xr6826Array OBJECT IDENTIFIER ::= { products 180 } + xr6836Array OBJECT IDENTIFIER ::= { products 181 } + xr7226Array OBJECT IDENTIFIER ::= { products 182 } + xr7236Array OBJECT IDENTIFIER ::= { products 183 } + xr7626Array OBJECT IDENTIFIER ::= { products 184 } + xr7636Array OBJECT IDENTIFIER ::= { products 185 } + +-- xsArray + + acl OBJECT IDENTIFIER ::= { xsArray 2 } + admin OBJECT IDENTIFIER ::= { xsArray 4 } + cdp OBJECT IDENTIFIER ::= { xsArray 5 } + dateTime OBJECT IDENTIFIER ::= { xsArray 6 } + dhcp OBJECT IDENTIFIER ::= { xsArray 8 } + dns OBJECT IDENTIFIER ::= { xsArray 10 } + filter OBJECT IDENTIFIER ::= { xsArray 11 } + interface OBJECT IDENTIFIER ::= { xsArray 12 } + networkMap OBJECT IDENTIFIER ::= { xsArray 13 } + radius OBJECT IDENTIFIER ::= { xsArray 14 } + roamAssist OBJECT IDENTIFIER ::= { xsArray 15 } + security OBJECT IDENTIFIER ::= { xsArray 16 } + snmpAgent OBJECT IDENTIFIER ::= { xsArray 18 } + ssid OBJECT IDENTIFIER ::= { xsArray 20 } + stations OBJECT IDENTIFIER ::= { xsArray 22 } + statistics OBJECT IDENTIFIER ::= { xsArray 24 } + syslog OBJECT IDENTIFIER ::= { xsArray 26 } + system OBJECT IDENTIFIER ::= { xsArray 28 } + tunnel OBJECT IDENTIFIER ::= { xsArray 29 } + vlan OBJECT IDENTIFIER ::= { xsArray 30 } + cluster OBJECT IDENTIFIER ::= { xsArray 31 } + envCtrl OBJECT IDENTIFIER ::= { xsArray 32 } + location OBJECT IDENTIFIER ::= { xsArray 33 } + group OBJECT IDENTIFIER ::= { xsArray 34 } + mdm OBJECT IDENTIFIER ::= { xsArray 35 } + netflow OBJECT IDENTIFIER ::= { xsArray 36 } + wifiTag OBJECT IDENTIFIER ::= { xsArray 37 } + wpr OBJECT IDENTIFIER ::= { xsArray 38 } + oauth OBJECT IDENTIFIER ::= { xsArray 39 } + proxyFwd OBJECT IDENTIFIER ::= { xsArray 40 } + proxyMgmt OBJECT IDENTIFIER ::= { xsArray 41 } + traps OBJECT IDENTIFIER ::= { xsArray 50 } + + +-- +-- ACL +-- + + aclEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), allow(1) , deny(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Access Control List enable" + ::= { acl 1 } + + aclTable OBJECT-TYPE + SYNTAX SEQUENCE OF AclEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Access Control List for the Array" + ::= { acl 2 } + + aclEntry OBJECT-TYPE + SYNTAX AclEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "ACL table entry" + INDEX { aclIndex } + ::= { aclTable 1 } + + AclEntry ::= SEQUENCE { + aclIndex Integer32, + aclMacAddress DisplayString, + aclRowStatus RowStatus + } + + aclIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Access Control List Index" + ::= { aclEntry 1 } + + aclMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Mac address to be allowed or denied" + ::= { aclEntry 2 } + + aclRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the ACL row entry" + ::= { aclEntry 3 } + + aclTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset Access Control List (clear all entries)" + ::= { acl 3 } + + aclSsidTable OBJECT-TYPE + SYNTAX SEQUENCE OF AclSsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Access Control List per SSID" + ::= { acl 4 } + + aclSsidEntry OBJECT-TYPE + SYNTAX AclSsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "ACL per SSID table entry" + INDEX { aclSsidIndex } + ::= { aclSsidTable 1 } + + AclSsidEntry ::= SEQUENCE { + aclSsidIndex Integer32, + aclSsidMacAddress DisplayString, + aclSsidName DisplayString, + aclSsidRowStatus RowStatus + } + + aclSsidIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "ACL per SSID index" + ::= { aclSsidEntry 1 } + + aclSsidMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Mac address to be allowed or denied" + ::= { aclSsidEntry 2 } + + aclSsidName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID this ACL entry belongs to" + ::= { aclSsidEntry 3 } + + aclSsidRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the ACL row entry" + ::= { aclSsidEntry 4 } + + aclSsidTableReset OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset ACL (clear all entries) for given SSID" + ::= { acl 5 } + +-- +-- ADMIN +-- + + adminTable OBJECT-TYPE + SYNTAX SEQUENCE OF AdminEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator List for the Array" + ::= { admin 1 } + + adminEntry OBJECT-TYPE + SYNTAX AdminEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Admin table entry" + INDEX { adminIndex } + ::= { adminTable 1 } + + AdminEntry ::= SEQUENCE { + adminIndex Integer32, + adminUsername DisplayString, + adminPassword DisplayString, + adminPasswordForm INTEGER, + adminPrivilege INTEGER, + adminRowStatus RowStatus, + adminPrivilegeLevel Integer32 + } + + adminIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Admin Index" + ::= { adminEntry 1 } + + adminUsername OBJECT-TYPE + SYNTAX DisplayString(SIZE(5..50)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Admin username" + ::= { adminEntry 2 } + + adminPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(5..50)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Admin password" + ::= { adminEntry 3 } + + adminPasswordForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Admin password form" + ::= { adminEntry 4 } + + adminPrivilege OBJECT-TYPE + SYNTAX INTEGER { read-only(0), read-write(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Admin privilege" + ::= { adminEntry 5 } + + adminRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the admin row entry" + ::= { adminEntry 6 } + + adminPrivilegeLevel OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Admin privilege level" + ::= { adminEntry 7 } + + adminTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset administrator list (clear all entries and restore default)" + ::= { admin 2 } + + adminTableClear OBJECT-TYPE + SYNTAX INTEGER { clear(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Clear all entries in administrator list" + ::= { admin 3 } + + adminRadius OBJECT IDENTIFIER ::= { admin 4 } + +-- +-- ADMIN RADIUS +-- + + adminRadiusEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable admin authentication via Radius" + ::= { adminRadius 1 } + + adminRadiusPriServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Primary Radius server host name or IP address" + ::= { adminRadius 2 } + + adminRadiusPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Primary Radius server port" + ::= { adminRadius 3 } + + adminRadiusPriServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Primary Radius server secret" + ::= { adminRadius 4 } + + adminRadiusPriServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Primary Radius server secret (encrypted)" + ::= { adminRadius 5 } + + adminRadiusSecServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Secondary Radius server host name or IP address" + ::= { adminRadius 6 } + + adminRadiusSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Secondary Radius server port" + ::= { adminRadius 7 } + + adminRadiusSecServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Secondary Radius server secret" + ::= { adminRadius 8 } + + adminRadiusSecServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Admin Secondary Radius server secret (encrypted)" + ::= { adminRadius 9 } + + adminRadiusTimeout OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Timeout before server is retried after it initially failed" + ::= { adminRadius 10 } + + adminRadiusAuthType OBJECT-TYPE + SYNTAX INTEGER { chap(0), pap(1), ms-chap(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set authentication protocol for admin authentication via RADIUS" + ::= { adminRadius 11 } + + adminHistoryTable OBJECT-TYPE + SYNTAX SEQUENCE OF AdminHistoryEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator history list" + ::= { admin 5 } + + adminHistoryEntry OBJECT-TYPE + SYNTAX AdminHistoryEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator history table entry" + INDEX { adminHistoryIndex } + ::= { adminHistoryTable 1 } + + AdminHistoryEntry ::= SEQUENCE { + adminHistoryIndex Integer32, + adminHistoryUsername DisplayString, + adminHistoryIPAddress DisplayString, + adminHistoryInterface INTEGER, + adminHistoryLoginTime DisplayString, + adminHistoryLogoutTime DisplayString + } + + adminHistoryIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Admin history table index" + ::= { adminHistoryEntry 1 } + + adminHistoryUsername OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Admin username" + ::= { adminHistoryEntry 2 } + + adminHistoryIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IP Address admin logged in from" + ::= { adminHistoryEntry 3 } + + adminHistoryInterface OBJECT-TYPE + SYNTAX INTEGER { console(0), telnet(1), ssh(2), https(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface admin logged in via" + ::= { adminHistoryEntry 4 } + + adminHistoryLoginTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Admin login time" + ::= { adminHistoryEntry 5 } + + adminHistoryLogoutTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Admin logout time" + ::= { adminHistoryEntry 6 } + + adminPrivLevelTable OBJECT-TYPE + SYNTAX SEQUENCE OF AdminPrivLevelEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator privilege level table" + ::= { admin 6 } + + adminPrivLevelEntry OBJECT-TYPE + SYNTAX AdminPrivLevelEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator privilege level table entry" + INDEX { adminPrivLevelNumber } + ::= { adminPrivLevelTable 1 } + + AdminPrivLevelEntry ::= SEQUENCE { + adminPrivLevelNumber Integer32, + adminPrivLevelName DisplayString + } + + adminPrivLevelNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Administrator privilege level number" + ::= { adminPrivLevelEntry 1 } + + adminPrivLevelName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Administrator privilege level name" + ::= { adminPrivLevelEntry 2 } + + adminPrivSectionTable OBJECT-TYPE + SYNTAX SEQUENCE OF AdminPrivSectionEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator privilege section table" + ::= { admin 7 } + + adminPrivSectionEntry OBJECT-TYPE + SYNTAX AdminPrivSectionEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator privilege section table entry" + INDEX { adminPrivSectionIndex } + ::= { adminPrivSectionTable 1 } + + AdminPrivSectionEntry ::= SEQUENCE { + adminPrivSectionIndex Integer32, + adminPrivSectionName DisplayString, + adminPrivSectionLevel Integer32 + } + + adminPrivSectionIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Administrator privilege section table index" + ::= { adminPrivSectionEntry 1 } + + adminPrivSectionName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Administrator privilege section name" + ::= { adminPrivSectionEntry 2 } + + adminPrivSectionLevel OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Administrator privilege level required by config section" + ::= { adminPrivSectionEntry 3 } + +-- +-- CDP +-- + + cdpInfoTable OBJECT-TYPE + SYNTAX SEQUENCE OF CdpInfoEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Cisco Discovery Protocol information table" + ::= { cdp 1 } + + cdpInfoEntry OBJECT-TYPE + SYNTAX CdpInfoEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "CDP info table entry" + INDEX { cdpInfoIndex } + ::= { cdpInfoTable 1 } + + CdpInfoEntry ::= SEQUENCE { + cdpInfoIndex Integer32, + cdpInfoHostname DisplayString, + cdpInfoIPAddress DisplayString, + cdpInfoModel DisplayString, + cdpInfoInterface DisplayString, + cdpInfoNativeVlan DisplayString, + cdpInfoCapabilities DisplayString, + cdpInfoSoftware DisplayString + } + + cdpInfoIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "CDP info table index" + ::= { cdpInfoEntry 1 } + + cdpInfoHostname OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device hostname" + ::= { cdpInfoEntry 2 } + + cdpInfoIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device IP Address" + ::= { cdpInfoEntry 3 } + + cdpInfoModel OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device model" + ::= { cdpInfoEntry 4 } + + cdpInfoInterface OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device interface" + ::= { cdpInfoEntry 5 } + + cdpInfoNativeVlan OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device native vlan" + ::= { cdpInfoEntry 6 } + + cdpInfoCapabilities OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device capabilities" + ::= { cdpInfoEntry 7 } + + cdpInfoSoftware OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Device software" + ::= { cdpInfoEntry 8 } + + cdpEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable CDP" + ::= { cdp 2 } + + cdpInterval OBJECT-TYPE + SYNTAX Integer32(5..900) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "CDP message interval (in seconds)" + ::= { cdp 3 } + + cdpHoldTime OBJECT-TYPE + SYNTAX Integer32(10..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "CDP message hold time (in seconds)" + ::= { cdp 4 } + +-- +-- DATE/TIME +-- + + dateTimeSet OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..12)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Date and time. To set use the following format: MMDDhhmmYYYY" + ::= { dateTime 1 } + + dateTimeZoneHours OBJECT-TYPE + SYNTAX Integer32(-12..12) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Hours offset from UTC" + ::= { dateTime 2 } + + dateTimeZoneMins OBJECT-TYPE + SYNTAX Integer32(0..59) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minutes offset from UTC" + ::= { dateTime 3 } + + dateTimeDSTAdjust OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable DST adjustment" + ::= { dateTime 4 } + + ntp OBJECT IDENTIFIER ::= { dateTime 5 } + +-- +-- DATE/TIME NTP +-- + + ntpEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable NTP" + ::= { ntp 1 } + + ntpPrimary OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary NTP IP address" + ::= { ntp 2 } + + ntpSecondary OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary NTP IP address" + ::= { ntp 3 } + + ntpPrimaryAuthType OBJECT-TYPE + SYNTAX INTEGER { none(0), md5(1), sha1(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary NTP server authentication type" + ::= { ntp 4 } + + ntpPrimaryAuthKeyID OBJECT-TYPE + SYNTAX Integer32(1..65534) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary NTP server authentication key ID" + ::= { ntp 5 } + + ntpPrimaryAuthKey OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary NTP server authentication key" + ::= { ntp 6 } + + ntpPrimaryAuthKeyEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..40)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary NTP server authentication key (encrypted)" + ::= { ntp 7 } + + ntpSecondaryAuthType OBJECT-TYPE + SYNTAX INTEGER { none(0), md5(1), sha1(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary NTP server authentication type" + ::= { ntp 8 } + + ntpSecondaryAuthKeyID OBJECT-TYPE + SYNTAX Integer32(1..65534) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary NTP server authentication key ID" + ::= { ntp 9 } + + ntpSecondaryAuthKey OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary NTP server authentication key" + ::= { ntp 10 } + + ntpSecondaryAuthKeyEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..40)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary NTP server authentication key (encrypted)" + ::= { ntp 11 } + +-- +-- DHCP +-- + + dhcpPoolTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset DHCP table (clear all entries)" + ::= { dhcp 1 } + + dhcpPoolTable OBJECT-TYPE + SYNTAX SEQUENCE OF DhcpPoolEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DHCP pool table for the Array" + ::= { dhcp 2 } + + dhcpPoolEntry OBJECT-TYPE + SYNTAX DhcpPoolEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DHCP pool table entry" + INDEX { dhcpPoolIndex } + ::= { dhcpPoolTable 1 } + + DhcpPoolEntry ::= SEQUENCE { + dhcpPoolIndex Integer32, + dhcpPoolName DisplayString, + dhcpPoolEnable INTEGER, + dhcpPoolRangeStartIP IpAddress, + dhcpPoolRangeEndIP IpAddress, + dhcpPoolDefaultLease Integer32, + dhcpPoolMaxLease Integer32, + dhcpPoolMask IpAddress, + dhcpPoolGateway IpAddress, + dhcpPoolDNSDomain DisplayString, + dhcpPoolDNSServer1 IpAddress, + dhcpPoolDNSServer2 IpAddress, + dhcpPoolDNSServer3 IpAddress, + dhcpPoolNAT INTEGER, + dhcpPoolRowStatus RowStatus + } + + dhcpPoolIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DHCP pool table index" + ::= { dhcpPoolEntry 1 } + + dhcpPoolName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool name" + ::= { dhcpPoolEntry 2 } + + dhcpPoolEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable DHCP pool" + ::= { dhcpPoolEntry 3 } + + dhcpPoolRangeStartIP OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool address range start" + ::= { dhcpPoolEntry 4 } + + dhcpPoolRangeEndIP OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool address range end" + ::= { dhcpPoolEntry 5 } + + dhcpPoolDefaultLease OBJECT-TYPE + SYNTAX Integer32(60..3000000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool default lease (in seconds)" + ::= { dhcpPoolEntry 6 } + + dhcpPoolMaxLease OBJECT-TYPE + SYNTAX Integer32(60..3000000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool max lease (in seconds)" + ::= { dhcpPoolEntry 7 } + + dhcpPoolMask OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool subnet mask" + ::= { dhcpPoolEntry 8 } + + dhcpPoolGateway OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool gateway" + ::= { dhcpPoolEntry 9 } + + dhcpPoolDNSDomain OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool DNS domain" + ::= { dhcpPoolEntry 10 } + + dhcpPoolDNSServer1 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool DNS first server" + ::= { dhcpPoolEntry 11 } + + dhcpPoolDNSServer2 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool DNS second server" + ::= { dhcpPoolEntry 12 } + + dhcpPoolDNSServer3 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "DHCP pool DNS third server" + ::= { dhcpPoolEntry 13 } + + dhcpPoolNAT OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable NAT" + ::= { dhcpPoolEntry 14 } + + dhcpPoolRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the DHCP pool row entry" + ::= { dhcpPoolEntry 15 } + +-- +-- DNS +-- + + dnsDomain OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "DNS Domain" + ::= { dns 1 } + + dnsSrv1 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "DNS first server" + ::= { dns 2 } + + dnsSrv2 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "DNS second server" + ::= { dns 3 } + + dnsSrv3 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "DNS third server" + ::= { dns 4 } + + dnsUseDhcp OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable updates to DNS settings via DHCP" + ::= { dns 5 } + +-- +-- FILTER +-- + + filterMoveDown OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Decrease filter priority (Global filter list)" + ::= { filter 1 } + + filterMoveUp OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Increase filter priority (Global filter list)" + ::= { filter 2 } + + filterTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset filter table and filter list table (clear all entries)" + ::= { filter 3 } + + filterTable OBJECT-TYPE + SYNTAX SEQUENCE OF FilterEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter table for the Array" + ::= { filter 4 } + + filterEntry OBJECT-TYPE + SYNTAX FilterEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter table entry" + INDEX { filterIndex } + ::= { filterTable 1 } + + FilterEntry ::= SEQUENCE { + filterIndex Integer32, + filterName DisplayString, + filterEnable INTEGER, + filterType INTEGER, + filterProtocol Integer32, + filterPort Integer32, + filterSrcType INTEGER, + filterSrcInvertSense INTEGER, + filterSrcSsid DisplayString, + filterSrcVlan Integer32, + filterSrcIPAddress IpAddress, + filterSrcIPAddressMask IpAddress, + filterSrcMacAddress DisplayString, + filterSrcMacAddressMask DisplayString, + filterSrcIface INTEGER, + filterDstType INTEGER, + filterDstInvertSense INTEGER, + filterDstSsid DisplayString, + filterDstVlan Integer32, + filterDstIPAddress IpAddress, + filterDstIPAddressMask IpAddress, + filterDstMacAddress DisplayString, + filterDstMacAddressMask DisplayString, + filterDstIface INTEGER, + filterSetQOS Integer32, + filterSetVlan Integer32, + filterPriority Integer32, + filterRowStatus RowStatus, + filterList DisplayString, + filterPortRange Integer32, + filterSrcGroup DisplayString, + filterDstGroup DisplayString, + filterLog INTEGER, + filterPackets Counter64, + filterBytes Counter64, + filterApplication DisplayString, + filterLayer INTEGER, + filterSetDSCP Integer32, + filterTrafficLimit Integer32, + filterTrafficLimitType INTEGER, + filterTimeOn Integer32, + filterTimeOff Integer32, + filterDays DisplayString + } + + filterIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter table index" + ::= { filterEntry 1 } + + filterName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter name" + ::= { filterEntry 2 } + + filterEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable filter" + ::= { filterEntry 3 } + + filterType OBJECT-TYPE + SYNTAX INTEGER { allow(1), deny(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter type: allow/deny traffic" + ::= { filterEntry 4 } + + filterProtocol OBJECT-TYPE + SYNTAX Integer32(0..255) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Protocol to filter on (0 - any protocol, 255 - any IP protocol)" + ::= { filterEntry 5 } + + filterPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Port to filter on (0 - any port)" + ::= { filterEntry 6 } + + filterSrcType OBJECT-TYPE + SYNTAX INTEGER { any(0), ssid(1), vlan(2), ip(3), + mac(4), interface(5), group(6) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source type" + ::= { filterEntry 7 } + + filterSrcInvertSense OBJECT-TYPE + SYNTAX INTEGER { no(0), yes(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Invert sense of filter source address" + ::= { filterEntry 8 } + + filterSrcSsid OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source SSID" + ::= { filterEntry 9 } + + filterSrcVlan OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source VLAN" + ::= { filterEntry 10 } + + filterSrcIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source IP address" + ::= { filterEntry 11 } + + filterSrcIPAddressMask OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source IP address mask" + ::= { filterEntry 12 } + + filterSrcMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source MAC address" + ::= { filterEntry 13 } + + filterSrcMacAddressMask OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source MAC address mask" + ::= { filterEntry 14 } + + filterSrcIface OBJECT-TYPE + SYNTAX INTEGER { iap(0), wds-client-1(1), wds-client-2(2), + wds-client-3(3), wds-client-4(4), wds-all(5), + gig(6), wds-host-1(7), wds-host-2(8), + wds-host-3(9), wds-host-4(10), tunnel(11) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source interface" + ::= { filterEntry 15 } + + filterDstType OBJECT-TYPE + SYNTAX INTEGER { any(0), ssid(1), vlan(2), ip(3), + mac(4), interface(5), group(6) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination type" + ::= { filterEntry 16 } + + filterDstInvertSense OBJECT-TYPE + SYNTAX INTEGER { no(0), yes(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Invert sense of filter destination address" + ::= { filterEntry 17 } + + filterDstSsid OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination SSID" + ::= { filterEntry 18 } + + filterDstVlan OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination VLAN" + ::= { filterEntry 19 } + + filterDstIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination IP address" + ::= { filterEntry 20 } + + filterDstIPAddressMask OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination IP address mask" + ::= { filterEntry 21 } + + filterDstMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination MAC address" + ::= { filterEntry 22 } + + filterDstMacAddressMask OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination MAC address mask" + ::= { filterEntry 23 } + + filterDstIface OBJECT-TYPE + SYNTAX INTEGER { iap(0), wds-client-1(1), wds-client-2(2), + wds-client-3(3), wds-client-4(4), wds-all(5), + gig(6), wds-host-1(7), wds-host-2(8), + wds-host-3(9), wds-host-4(10), tunnel(11) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination interface" + ::= { filterEntry 24 } + + filterSetQOS OBJECT-TYPE + SYNTAX Integer32(-1..3) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Modify QoS setting for this filter (0..3), if -1 - do not modify QoS setting" + ::= { filterEntry 25 } + + filterSetVlan OBJECT-TYPE + SYNTAX Integer32(-1..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Modify VLAN setting for this filter (0..4095), if -1 - do not modify VLAN setting" + ::= { filterEntry 26 } + + filterPriority OBJECT-TYPE + SYNTAX Integer32(1..50) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter priority" + ::= { filterEntry 27 } + + filterRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the filter row entry" + ::= { filterEntry 28 } + + filterList OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter list this filter belongs to" + ::= { filterEntry 29 } + + filterPortRange OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Port range ending number (0 - no range)" + ::= { filterEntry 30 } + + filterSrcGroup OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter source user group" + ::= { filterEntry 31 } + + filterDstGroup OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter destination user group" + ::= { filterEntry 32 } + + filterLog OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable filter packet logging" + ::= { filterEntry 33 } + + filterPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of packets that matched the filter" + ::= { filterEntry 34 } + + filterBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of bytes that matched the filter" + ::= { filterEntry 35 } + + filterApplication OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..8)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Application GUID to filter on" + ::= { filterEntry 36 } + + filterLayer OBJECT-TYPE + SYNTAX INTEGER { layer-2(0), layer-3(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter layer" + ::= { filterEntry 37 } + + filterSetDSCP OBJECT-TYPE + SYNTAX Integer32(-1..63) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Modify QoS setting for this filter (0..63), if -1 - do not modify DSCP setting" + ::= { filterEntry 38 } + + filterTrafficLimit OBJECT-TYPE + SYNTAX Integer32(10..4000000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter traffic limit (10 to 1000000 if pps, 10 to 4000000 if Kbps)" + ::= { filterEntry 39 } + + filterTrafficLimitType OBJECT-TYPE + SYNTAX INTEGER { none(0), all-pps(1), all-kbps(2), sta-pps(3), sta-kbps(4) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter traffic limit type" + ::= { filterEntry 40 } + + filterTimeOn OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Time on for this filter in minutes after midnight" + ::= { filterEntry 41 } + + filterTimeOff OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Time off for this filter in minutes after midnight" + ::= { filterEntry 42 } + + filterDays OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..100)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Days of the week the filter is active" + ::= { filterEntry 43 } + + filterListTable OBJECT-TYPE + SYNTAX SEQUENCE OF FilterListEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter list table for the Array" + ::= { filter 5 } + + filterListEntry OBJECT-TYPE + SYNTAX FilterListEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter list table entry" + INDEX { filterListIndex } + ::= { filterListTable 1 } + + FilterListEntry ::= SEQUENCE { + filterListIndex Integer32, + filterListName DisplayString, + filterListEnable INTEGER, + filterListLength Integer32, + filterListReset INTEGER, + filterListRowStatus RowStatus + } + + filterListIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter list table index" + ::= { filterListEntry 1 } + + filterListName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Filter list name" + ::= { filterListEntry 2 } + + filterListEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable filter list" + ::= { filterListEntry 3 } + + filterListLength OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of filters in filter list" + ::= { filterListEntry 4 } + + filterListReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Delete all filters from filter list" + ::= { filterListEntry 5 } + + filterListRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the filter list row entry" + ::= { filterListEntry 6 } + + filterStateful OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable stateful filtering" + ::= { filter 6 } + + filterTrackApps OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable application tracking" + ::= { filter 7 } + + filterAppTable OBJECT-TYPE + SYNTAX SEQUENCE OF FilterAppEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application table for the Array" + ::= { filter 8 } + + filterAppEntry OBJECT-TYPE + SYNTAX FilterAppEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application table entry" + INDEX { filterAppIndex } + ::= { filterAppTable 1 } + + FilterAppEntry ::= SEQUENCE { + filterAppIndex Integer32, + filterAppGuid DisplayString, + filterAppCategory DisplayString, + filterAppDescription DisplayString + } + + filterAppIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application table index" + ::= { filterAppEntry 1 } + + filterAppGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Filter application global unique identifier" + ::= { filterAppEntry 2 } + + filterAppCategory OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Filter application category global unique identifier" + ::= { filterAppEntry 3 } + + filterAppDescription OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Filter application description" + ::= { filterAppEntry 4 } + + filterAppCatTable OBJECT-TYPE + SYNTAX SEQUENCE OF FilterAppCatEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application category table for the Array" + ::= { filter 9 } + + filterAppCatEntry OBJECT-TYPE + SYNTAX FilterAppCatEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application category table entry" + INDEX { filterAppCatIndex } + ::= { filterAppCatTable 1 } + + FilterAppCatEntry ::= SEQUENCE { + filterAppCatIndex Integer32, + filterAppCatGuid DisplayString, + filterAppCatDescription DisplayString + } + + filterAppCatIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Filter application category table index" + ::= { filterAppCatEntry 1 } + + filterAppCatGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Filter application category global unique identifier" + ::= { filterAppCatEntry 2 } + + filterAppCatDescription OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Filter application category description" + ::= { filterAppCatEntry 3 } + +-- +-- INTERFACE +-- + + iap OBJECT IDENTIFIER ::= { interface 1 } + ethernet OBJECT IDENTIFIER ::= { interface 2 } + console OBJECT IDENTIFIER ::= { interface 3 } + +-- +-- INTERFACE IAP +-- + + iapTable OBJECT-TYPE + SYNTAX SEQUENCE OF IapEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of IAPs" + ::= { iap 1 } + + iapEntry OBJECT-TYPE + SYNTAX IapEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IAP table entry" + INDEX { iapIndex } + ::= { iapTable 1 } + + IapEntry ::= SEQUENCE { + iapIndex Integer32, + iapName DisplayString, + iapMacAddress DisplayString, + iapNumStations Integer32, + iapEnable INTEGER, + iapCellSize INTEGER, + iapTxPwr Integer32, + iapRxThreshold Integer32, + iapChannel Integer32, + iapDot11Mode INTEGER, + iapAntenna INTEGER, + iapDescription DisplayString, + iapWdsClientLink Integer32, + iapWdsHostLink Integer32, + iapChannelBondMode INTEGER, + iapBondedChannel Integer32, + iapMaxStationsHour Integer32, + iapMaxStationsDay Integer32, + iapMaxStationsWeek Integer32, + iapMaxStationsMonth Integer32, + iapMaxStationsYear Integer32, + iapChannelMode INTEGER, + iapWifiMode INTEGER, + iapPresent INTEGER, + iapWdsLinkDistance Integer32, + iapResetsMonitor Counter64, + iapResetsBeacon Counter64, + iapResetsPhy Counter64, + iapResetsMac Counter64, + iapResetsSystem Counter64, + iapSpatialStreams INTEGER, + iapChannelBond80Mhz INTEGER, + iapBondedChannelList DisplayString, + iapType INTEGER + } + + iapIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IAP table index" + ::= { iapEntry 1 } + + iapName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP name" + ::= { iapEntry 2 } + + iapMacAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP Mac address" + ::= { iapEntry 3 } + + iapNumStations OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of associated stations per IAP" + ::= { iapEntry 4 } + + iapEnable OBJECT-TYPE + SYNTAX INTEGER { down(0), up(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Bring IAP up or down" + ::= { iapEntry 5 } + + iapCellSize OBJECT-TYPE + SYNTAX INTEGER { manual(0), small(1), medium(2), large(3), + max(4), auto(5), monitor(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set up RF cell size base on Tx pwr and Rx Threshold" + ::= { iapEntry 6 } + + iapTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum Tx power output from radio" + ::= { iapEntry 7 } + + iapRxThreshold OBJECT-TYPE + SYNTAX Integer32(-100..0) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Rx (deferred) threshold setting" + ::= { iapEntry 8 } + + iapChannel OBJECT-TYPE + SYNTAX Integer32(0..256) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set channel (0 to set monitor mode for abg2 only)" + ::= { iapEntry 9 } + + iapAntenna OBJECT-TYPE + SYNTAX INTEGER { internal(1), external(2), omni(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set antenna (abg only radios)" + ::= { iapEntry 10 } + + iapDot11Mode OBJECT-TYPE + SYNTAX INTEGER { dot11a(0), dot11g(1), monitor(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 802.11 mode (band), where dot11a mode is 5GHz band and dot11g mode is 2.4GHz band (abg only radios)" + ::= { iapEntry 11 } + + iapDescription OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "IAP description" + ::= { iapEntry 12 } + + iapWdsClientLink OBJECT-TYPE + SYNTAX Integer32(0..4) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Assign this IAP to a WDS client link (1-4), 0 means no link" + ::= { iapEntry 13 } + + iapWdsHostLink OBJECT-TYPE + SYNTAX Integer32(0..4) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Assign this IAP to a WDS host link (1-4), 0 means no link" + ::= { iapEntry 14 } + + iapChannelBondMode OBJECT-TYPE + SYNTAX INTEGER { minus1(-1), off(0), plus1(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Channel bonding setting (802.11n)" + ::= { iapEntry 15 } + + iapBondedChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bonded channel (802.11n)" + ::= { iapEntry 16 } + + iapMaxStationsHour OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of associated stations over last hour" + ::= { iapEntry 17 } + + iapMaxStationsDay OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of associated stations over last day" + ::= { iapEntry 18 } + + iapMaxStationsWeek OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of associated stations over last week" + ::= { iapEntry 19 } + + iapMaxStationsMonth OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of associated stations over last month" + ::= { iapEntry 20 } + + iapMaxStationsYear OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of associated stations over last year" + ::= { iapEntry 21 } + + iapChannelMode OBJECT-TYPE + SYNTAX INTEGER { default(0), manual(1), auto(2), radar(3), + locked(4), monitor(5), timeshare(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Channel mode (on set, use 4 to lock, 0 to unlock channel)" + ::= { iapEntry 22 } + + iapWifiMode OBJECT-TYPE + SYNTAX INTEGER { dot11a(1), dot11b(2), dot11ab(3), dot11g(4), + dot11ag(5), dot11bg(6), dot11abg(7), dot11n(8), + dot11an(9), dot11bn(10), dot11abn(11), dot11gn(12), + dot11agn(13), dot11bgn(14), dot11abgn(15), + dot11ac(16), dot11nac(24), dot11anac(25), dot11abgnac(31) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Wifi mode" + ::= { iapEntry 23 } + + iapPresent OBJECT-TYPE + SYNTAX INTEGER { not-present(0), present(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Indicates whether IAP slot is populated" + ::= { iapEntry 24 } + + iapWdsLinkDistance OBJECT-TYPE + SYNTAX Integer32(0..30) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WDS link distance (in miles)" + ::= { iapEntry 25 } + + iapResetsMonitor OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of monitor radio resets" + ::= { iapEntry 26 } + + iapResetsBeacon OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of interface beacon resets" + ::= { iapEntry 27 } + + iapResetsPhy OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of interface PHY resets" + ::= { iapEntry 28 } + + iapResetsMac OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of interface MAC resets" + ::= { iapEntry 29 } + + iapResetsSystem OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of system resets" + ::= { iapEntry 30 } + + iapSpatialStreams OBJECT-TYPE + SYNTAX INTEGER { not-present(0), type-1x1(1), type-2x2(2), type-2x3(3), type-3x3(4) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of spatial streams on the IAP" + ::= { iapEntry 31 } + + iapChannelBond80Mhz OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Channel bonding 80Mhz setting" + ::= { iapEntry 32 } + + iapBondedChannelList OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP Bonded Channel List" + ::= { iapEntry 33 } + + iapType OBJECT-TYPE + SYNTAX INTEGER { not-present(0), unknown(1), dot11abgn(2), dot11abgnac(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP type" + ::= { iapEntry 34 } + + global OBJECT IDENTIFIER ::= { iap 2 } + global11a OBJECT IDENTIFIER ::= { iap 3 } + global11bg OBJECT IDENTIFIER ::= { iap 4 } + wds OBJECT IDENTIFIER ::= { iap 5 } + global11n OBJECT IDENTIFIER ::= { iap 6 } + global11ac OBJECT IDENTIFIER ::= { iap 8 } + +-- +-- INTERFACE IAP GLOBAL +-- + + globalIAPEnable OBJECT-TYPE + SYNTAX INTEGER { all-down(0), all-up(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Bring all IAPs up or down" + ::= { global 1 } + + globalIAPCellSize OBJECT-TYPE + SYNTAX INTEGER { none(0), small(1), medium(2), large(3), + max(4), auto(5), monitor(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set up RF cell size base on Tx pwr and Rx Threshold" + ::= { global 2 } + + globalIAPTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum Tx power output from any radio" + ::= { global 3 } + + globalIAPRxThreshold OBJECT-TYPE + SYNTAX Integer32(-100..0) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Rx (deferred) threshold setting" + ::= { global 4 } + + globalIAPBeaconRate OBJECT-TYPE + SYNTAX Integer32(100..1000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time between beacons in kilo_microseconds" + ::= { global 5 } + + globalIAPBeaconDTIM OBJECT-TYPE + SYNTAX Integer32(1..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of beacons between DTIM being transmitted" + ::= { global 6 } + + globalIAPLongRetry OBJECT-TYPE + SYNTAX Integer32(1..128) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Long retry" + ::= { global 7 } + + globalIAPShortRetry OBJECT-TYPE + SYNTAX Integer32(1..128) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Short retry" + ::= { global 8 } + + globalIAPMaxStations OBJECT-TYPE + SYNTAX Integer32(1..240) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Limit the number of STA that can be associated per IAP" + ::= { global 9 } + + globalIAPInactiveTime OBJECT-TYPE + SYNTAX Integer32(1..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time, in seconds, without any activity before removing the client from the association table" + ::= { global 10 } + + globalIAPReauthPeriod OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time (sec) between 802.1x re_authentication attempts" + ::= { global 11 } + + globalIAPSta2Sta OBJECT-TYPE + SYNTAX INTEGER { forward(0), block(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Block or forward intra-Array STA to STA traffic" + ::= { global 12 } + + globalMgmt OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable management on the WLAN interfaces" + ::= { global 13 } + + leds OBJECT IDENTIFIER ::= { global 14 } + autoChannel OBJECT IDENTIFIER ::= { global 15 } + rogueDetect OBJECT IDENTIFIER ::= { global 16 } + fastRoaming OBJECT IDENTIFIER ::= { global 17 } + autoCell OBJECT IDENTIFIER ::= { global 24 } + ids OBJECT IDENTIFIER ::= { global 33 } + rfMonitor OBJECT IDENTIFIER ::= { global 40 } + + globalLoadBalancing OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable load balancing across IAPs" + ::= { global 18 } + + globalCountryCode OBJECT-TYPE + SYNTAX INTEGER { not-set(0), united-states(1), canada(2), + australia(3), new-zealand(4), austria(5), + belgium(6), denmark(7), finland(8), + france(9), germany(10), hungary(11), + ireland(12), italy(13), luxembourg(14), + netherlands(15), norway(16), poland(17), + portugal(18), slovenia(19), spain(20), + sweden(21), switzerland(22), united-kingdom(23), + japan(24), united-states-ext(25), mexico(26), + thailand(27), greece(28), israel(29), + south-africa(30), brazil(31), india(32), + singapore(33), malaysia(34), korea(35), + hong-kong(36), china(37), macao (38), + united-states-outdoor (39), united-status-weather-radar (40), + russia (41), united-states-non-dfs (42), + united-arab-emirates (43), argentina (44), bahrain (45), + brunei (46), bahamas (47), chile (48), + columbia (49), dominican-republic (50), egypt (51), + indonesia (52), kuwait (53), lebanon (54), + oman (55), peru (56), philippines (57), + qatar (58), saudi-arabia (59), taiwan (60), + turkey (61), trinidad (62), ukraine (63), + venezuela (64) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Country code" + ::= { global 19 } + + globalSharpCell OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable sharp cell TX power shaping" + ::= { global 20 } + + globalIAPMaxPhones OBJECT-TYPE + SYNTAX Integer32(0..16) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Limit the number of phones that can be associated per IAP. Note this is not used and essentially deprecated." + ::= { global 21 } + + globalNumStations OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of stations associated with array" + ::= { global 22 } + + globalBroadcastRates OBJECT-TYPE + SYNTAX INTEGER { standard(0), optimized(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Select standard or optimized broadcast rates" + ::= { global 23 } + + globalPublicSafety OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable public safety band" + ::= { global 25 } + + globalDot11hSupport OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable support for 802.11h beacons" + ::= { global 26 } + + globalLoopbackTest OBJECT-TYPE + SYNTAX INTEGER { disabled(0), alert-only(1), + repair-without-reboot(2), reboot-allowed(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "IAP radio assurance mode" + ::= { global 27 } + + globalArpFilter OBJECT-TYPE + SYNTAX INTEGER { disable(0), passthru(1), proxy(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable ARP filtering" + ::= { global 28 } + + globalIAPChannelReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset all channels back to factory defaults" + ::= { global 29 } + + globalWfaMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable WiFi Alliance mode" + ::= { global 30 } + + globalMaxStations OBJECT-TYPE + SYNTAX Integer32(1..3840) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of associated stations per array" + ::= { global 31 } + + globalMulticastMode OBJECT-TYPE + SYNTAX INTEGER { standard(0), convert(1), snoop(2), prune(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Select multicast mode" + ::= { global 32 } + + globalAutoBandEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Automatically assign bands (2.4GHz or 5GHz) to all IAPs" + ::= { global 34 } + + globalWmmPowerSave OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable WMM power save mode" + ::= { global 35 } + + globalDscpMappingMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable DSCP to QoS mapping" + ::= { global 36 } + + globalDscpMappingTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalDscpMappingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DSCP to QoS mapping" + ::= { global 37 } + + globalDscpMappingEntry OBJECT-TYPE + SYNTAX GlobalDscpMappingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DSCP to QoS mapping entry" + INDEX { globalDscpMappingIndex } + ::= { globalDscpMappingTable 1 } + + GlobalDscpMappingEntry ::= SEQUENCE { + globalDscpMappingIndex Integer32, + globalDscpMappingDscp Integer32, + globalDscpMappingQos Integer32 + } + + globalDscpMappingIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "DSCP to QoS mapping index" + ::= { globalDscpMappingEntry 1 } + + globalDscpMappingDscp OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "DSCP value mapped" + ::= { globalDscpMappingEntry 2 } + + globalDscpMappingQos OBJECT-TYPE + SYNTAX Integer32(0..3) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "QoS setting" + ::= { globalDscpMappingEntry 3 } + + globalMulticastExcludeTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalMulticastExcludeEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion exclude list" + ::= { global 38 } + + globalMulticastExcludeEntry OBJECT-TYPE + SYNTAX GlobalMulticastExcludeEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion exclude list entry" + INDEX { globalMulticastExcludeIndex } + ::= { globalMulticastExcludeTable 1 } + + GlobalMulticastExcludeEntry ::= SEQUENCE { + globalMulticastExcludeIndex Integer32, + globalMulticastExcludeIpAddress IpAddress, + globalMulticastExcludeRowStatus RowStatus + } + + globalMulticastExcludeIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion exclude list Index" + ::= { globalMulticastExcludeEntry 1 } + + globalMulticastExcludeIpAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Multicast IP address excluded from conversion" + ::= { globalMulticastExcludeEntry 2 } + + globalMulticastExcludeRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the multicast conversion exclude list row entry" + ::= { globalMulticastExcludeEntry 3 } + + globalMulticastExcludeTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset multicast conversion exclude list" + ::= { global 39 } + + globalExtractStaInfoTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalExtractStaInfoEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station information to be extracted table" + ::= { global 41 } + + globalExtractStaInfoEntry OBJECT-TYPE + SYNTAX GlobalExtractStaInfoEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station information to be extracted table entry" + INDEX { globalExtractStaInfoIndex } + ::= { globalExtractStaInfoTable 1 } + + GlobalExtractStaInfoEntry ::= SEQUENCE { + globalExtractStaInfoIndex Integer32, + globalExtractStaInfoType DisplayString, + globalExtractStaInfoStatus INTEGER + } + + globalExtractStaInfoIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station information to be extracted table index" + ::= { globalExtractStaInfoEntry 1 } + + globalExtractStaInfoType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Type of station information to be extracted" + ::= { globalExtractStaInfoEntry 2 } + + globalExtractStaInfoStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable station information to be extracted" + ::= { globalExtractStaInfoEntry 3 } + + globalStaAuthTimeout OBJECT-TYPE + SYNTAX Integer32(60..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time to complete 802.1x authentication (seconds)" + ::= { global 42 } + + globalIPv6Filter OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable IPv6 packet filtering" + ::= { global 43 } + + globalMulticastForwardingTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalMulticastForwardingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion forwarding list" + ::= { global 44 } + + globalMulticastForwardingEntry OBJECT-TYPE + SYNTAX GlobalMulticastForwardingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion forwarding list entry" + INDEX { globalMulticastForwardingIndex } + ::= { globalMulticastForwardingTable 1 } + + GlobalMulticastForwardingEntry ::= SEQUENCE { + globalMulticastForwardingIndex Integer32, + globalMulticastForwardingIpAddress IpAddress, + globalMulticastForwardingRowStatus RowStatus + } + + globalMulticastForwardingIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion forwarding list Index" + ::= { globalMulticastForwardingEntry 1 } + + globalMulticastForwardingIpAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Multicast IP address forwarding from conversion" + ::= { globalMulticastForwardingEntry 2 } + + globalMulticastForwardingRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the multicast conversion forwarding list row entry" + ::= { globalMulticastForwardingEntry 3 } + + globalMulticastForwardingTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset multicast conversion forwarding list" + ::= { global 45 } + + globalMulticastVlanForwardingTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalMulticastVlanForwardingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion vlan forwarding list" + ::= { global 46 } + + globalMulticastVlanForwardingEntry OBJECT-TYPE + SYNTAX GlobalMulticastVlanForwardingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion vlan forwarding list entry" + INDEX { globalMulticastVlanForwardingIndex } + ::= { globalMulticastVlanForwardingTable 1 } + + GlobalMulticastVlanForwardingEntry ::= SEQUENCE { + globalMulticastVlanForwardingIndex Integer32, + globalMulticastVlanForwardingVlanNumber Integer32, + globalMulticastVlanForwardingRowStatus RowStatus + } + + globalMulticastVlanForwardingIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast conversion vlan forwarding list Index" + ::= { globalMulticastVlanForwardingEntry 1 } + + globalMulticastVlanForwardingVlanNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Multicast IP vlan forwarding from conversion" + ::= { globalMulticastVlanForwardingEntry 2 } + + globalMulticastVlanForwardingRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the multicast conversion vlan forwarding list row entry" + ::= { globalMulticastVlanForwardingEntry 3 } + + globalMulticastVlanForwardingTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset multicast conversion vlan forwarding list" + ::= { global 47 } + + globalMulticastDnsFilteringTable OBJECT-TYPE + SYNTAX SEQUENCE OF GlobalMulticastDnsFilteringEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast DNS filtering list" + ::= { global 48 } + + globalMulticastDnsFilteringEntry OBJECT-TYPE + SYNTAX GlobalMulticastDnsFilteringEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast DNS filtering list entry" + INDEX { globalMulticastDnsFilteringIndex } + ::= { globalMulticastDnsFilteringTable 1 } + + GlobalMulticastDnsFilteringEntry ::= SEQUENCE { + globalMulticastDnsFilteringIndex Integer32, + globalMulticastDnsFilteringName DisplayString, + globalMulticastDnsFilteringRowStatus RowStatus + } + + globalMulticastDnsFilteringIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Multicast DNS filtering list Index" + ::= { globalMulticastDnsFilteringEntry 1 } + + globalMulticastDnsFilteringName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..24)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Multicast DNS filtering list" + ::= { globalMulticastDnsFilteringEntry 2 } + + globalMulticastDnsFilteringRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the multicast DNS filtering list row entry" + ::= { globalMulticastDnsFilteringEntry 3 } + + globalMulticastDnsFilteringTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset multicast DNS filtering list" + ::= { global 49 } + + globalDot11kSupport OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable support for 802.11k beacons" + ::= { global 50 } + + globalDot11wProtectedManagement OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable support for 802.11w Protected Management" + ::= { global 51 } + + globalExtractIpAddrDhcpPeriod OBJECT-TYPE + SYNTAX Integer32(0..300) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Station IP address extraction via DHCP period" + ::= { global 52 } + +-- +-- INTERFACE IAP GLOBAL LEDS +-- + + ledsEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), iapUp(1), associated(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/Disable LED operations" + ::= { leds 1 } + + ledsActivityTable OBJECT-TYPE + SYNTAX SEQUENCE OF LedsActivityEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "LED activity table" + ::= { leds 2 } + + ledsActivityEntry OBJECT-TYPE + SYNTAX LedsActivityEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "LED activity table entry" + INDEX { ledsActivityIndex } + ::= { ledsActivityTable 1 } + + LedsActivityEntry ::= SEQUENCE { + ledsActivityIndex Integer32, + ledsActivityPacketType DisplayString, + ledsActivityStatus INTEGER + } + + ledsActivityIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "LED activity table index" + ::= { ledsActivityEntry 1 } + + ledsActivityPacketType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet type" + ::= { ledsActivityEntry 2 } + + ledsActivityStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable blinking" + ::= { ledsActivityEntry 3 } + +-- +-- INTERFACE IAP GLOBAL AUTO CHANNEL +-- + + autoChannelEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1), negotiate(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set to 1 to enable auto channel configuration, 2 to negotiate airtime with other arrays before enabling auto channel configuration" + ::= { autoChannel 1 } + + autoChannelPowerUp OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable auto channel configuration at power up" + ::= { autoChannel 2 } + + autoChannelSchedule OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Times to run auto channel in 'hh:mm hh:mm ...' format" + ::= { autoChannel 3 } + +-- +-- INTERFACE IAP GLOBAL ROGUE DETECT +-- + + rogueDetectEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), standard(1), advanced(2), + standard-auto-block(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable rogue AP detection" + ::= { rogueDetect 1 } + + rogueDetectSSIDTable OBJECT-TYPE + SYNTAX SEQUENCE OF RogueDetectSSIDEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue detect SSID table for the Array" + ::= { rogueDetect 2 } + + rogueDetectSSIDEntry OBJECT-TYPE + SYNTAX RogueDetectSSIDEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue detect SSID table entry" + INDEX { rogueDetectSSIDIndex } + ::= { rogueDetectSSIDTable 1 } + + RogueDetectSSIDEntry ::= SEQUENCE { + rogueDetectSSIDIndex Integer32, + rogueDetectSSIDName DisplayString, + rogueDetectSSIDStatus INTEGER, + rogueDetectSSIDRowStatus RowStatus, + rogueDetectSSIDMatch INTEGER + } + + rogueDetectSSIDIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue detect SSID table index" + ::= { rogueDetectSSIDEntry 1 } + + rogueDetectSSIDName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID" + ::= { rogueDetectSSIDEntry 2 } + + rogueDetectSSIDStatus OBJECT-TYPE + SYNTAX INTEGER { known(1), approved(2), blocked(3) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID status" + ::= { rogueDetectSSIDEntry 3 } + + rogueDetectSSIDRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the rogue detect SSID table row entry" + ::= { rogueDetectSSIDEntry 4 } + + rogueDetectSSIDMatch OBJECT-TYPE + SYNTAX INTEGER { bssid-or-ssid(0), bssid(1), ssid(2), manufacturer(3) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID match" + ::= { rogueDetectSSIDEntry 5 } + + rogueDetectAPTable OBJECT-TYPE + SYNTAX SEQUENCE OF RogueDetectAPEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of rogue AP's" + ::= { rogueDetect 3 } + + rogueDetectAPEntry OBJECT-TYPE + SYNTAX RogueDetectAPEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP table entry" + INDEX { rogueDetectAPIndex } + ::= { rogueDetectAPTable 1 } + + RogueDetectAPEntry ::= SEQUENCE { + rogueDetectAPIndex Integer32, + rogueDetectAPStatus INTEGER, + rogueDetectAPSSID DisplayString, + rogueDetectAPBSSID DisplayString, + rogueDetectAPManufacturer DisplayString, + rogueDetectAPChannel Integer32, + rogueDetectAPRSSI Integer32, + rogueDetectAPSecurity DisplayString, + rogueDetectAPIPAddress DisplayString, + rogueDetectAPTimeDiscovered DisplayString, + rogueDetectAPTimeLastActive DisplayString, + rogueDetectAPType INTEGER + } + + rogueDetectAPIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP index" + ::= { rogueDetectAPEntry 1 } + + rogueDetectAPStatus OBJECT-TYPE + SYNTAX INTEGER { unknown(0), known(1), approved(2), blocked(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP status" + ::= { rogueDetectAPEntry 2 } + + rogueDetectAPSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP SSID" + ::= { rogueDetectAPEntry 3 } + + rogueDetectAPBSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP BSSID" + ::= { rogueDetectAPEntry 4 } + + rogueDetectAPManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP manufacturer" + ::= { rogueDetectAPEntry 5 } + + rogueDetectAPChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP channel" + ::= { rogueDetectAPEntry 6 } + + rogueDetectAPRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP RSSI" + ::= { rogueDetectAPEntry 7 } + + rogueDetectAPSecurity OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP security" + ::= { rogueDetectAPEntry 8 } + + rogueDetectAPIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP IP Address" + ::= { rogueDetectAPEntry 9 } + + rogueDetectAPTimeDiscovered OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP time discovered" + ::= { rogueDetectAPEntry 10 } + + rogueDetectAPTimeLastActive OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP IP time last active" + ::= { rogueDetectAPEntry 11 } + + rogueDetectAPType OBJECT-TYPE + SYNTAX INTEGER { ibss(1), ess(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP type" + ::= { rogueDetectAPEntry 12 } + + rogueDetectSSIDTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset rogue detect SSID table (clear all entries)" + ::= { rogueDetect 4 } + + rogueDetectAPOrigTable OBJECT-TYPE + SYNTAX SEQUENCE OF RogueDetectAPOrigTableEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of rogue AP's (original)" + ::= { rogueDetect 5 } + + rogueDetectAPOrigTableEntry OBJECT-TYPE + SYNTAX RogueDetectAPOrigTableEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP original table entry" + INDEX { rogueDetectAPOrigTableIndex } + ::= { rogueDetectAPOrigTable 1 } + + RogueDetectAPOrigTableEntry ::= SEQUENCE { + rogueDetectAPOrigTableIndex Integer32, + rogueDetectAPOrigTableSSID DisplayString, + rogueDetectAPOrigTableBSSID DisplayString, + rogueDetectAPOrigTableManufacturer DisplayString, + rogueDetectAPOrigTableChannel Integer32, + rogueDetectAPOrigTableBand INTEGER, + rogueDetectAPOrigTableRSSI Integer32, + rogueDetectAPOrigTableSecurity DisplayString, + rogueDetectAPOrigTableIPAddress DisplayString, + rogueDetectAPOrigTableTimeDiscovered Counter32, + rogueDetectAPOrigTableTimeLastActive Counter32, + rogueDetectAPOrigTableActive INTEGER, + rogueDetectAPOrigTableType INTEGER + } + + rogueDetectAPOrigTableIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP index" + ::= { rogueDetectAPOrigTableEntry 1 } + + rogueDetectAPOrigTableSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP SSID" + ::= { rogueDetectAPOrigTableEntry 2 } + + rogueDetectAPOrigTableBSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP BSSID" + ::= { rogueDetectAPOrigTableEntry 3 } + + rogueDetectAPOrigTableManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP manufacturer" + ::= { rogueDetectAPOrigTableEntry 4 } + + rogueDetectAPOrigTableChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP channel" + ::= { rogueDetectAPOrigTableEntry 5 } + + rogueDetectAPOrigTableBand OBJECT-TYPE + SYNTAX INTEGER { dot11a(1), dot11g(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP 802.11 band" + ::= { rogueDetectAPOrigTableEntry 6 } + + rogueDetectAPOrigTableRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP RSSI" + ::= { rogueDetectAPOrigTableEntry 7 } + + rogueDetectAPOrigTableSecurity OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP security" + ::= { rogueDetectAPOrigTableEntry 8 } + + rogueDetectAPOrigTableIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP IP Address" + ::= { rogueDetectAPOrigTableEntry 9 } + + rogueDetectAPOrigTableTimeDiscovered OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP time discovered" + ::= { rogueDetectAPOrigTableEntry 10 } + + rogueDetectAPOrigTableTimeLastActive OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP IP time last active" + ::= { rogueDetectAPOrigTableEntry 11 } + + rogueDetectAPOrigTableActive OBJECT-TYPE + SYNTAX INTEGER { active(1), not-active(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Is Rogue AP active?" + ::= { rogueDetectAPOrigTableEntry 12 } + + rogueDetectAPOrigTableType OBJECT-TYPE + SYNTAX INTEGER { ibss(1), ess(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rogue AP type" + ::= { rogueDetectAPOrigTableEntry 13 } + + rogueDetectAutoBlockEnc OBJECT-TYPE + SYNTAX INTEGER { none(0), wep-and-none(1), all(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Encryption type for automatic blocking of unknown rogue APs" + ::= { rogueDetect 6 } + + rogueDetectAutoBlockRSSI OBJECT-TYPE + SYNTAX Integer32(-95..-50) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum RSSI value for automatic blocking of unknown rogue APs" + ::= { rogueDetect 7 } + + rogueDetectAutoBlockType OBJECT-TYPE + SYNTAX INTEGER { all(0), ibss(1), ess(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Type of rogue AP networks to automatically block" + ::= { rogueDetect 8 } + + rogueDetectAPOrigTablePeriod OBJECT-TYPE + SYNTAX Counter32(0..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify period for rogue AP table entries (in seconds, 0 - all table entries)" + ::= { rogueDetect 9 } + + rogueDetectAutoBlockWhitelistTable OBJECT-TYPE + SYNTAX SEQUENCE OF RogueDetectAutoBlockWhitelistEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP Auto Block channel whitelist" + ::= { rogueDetect 10 } + + rogueDetectAutoBlockWhitelistEntry OBJECT-TYPE + SYNTAX RogueDetectAutoBlockWhitelistEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP Auto Block channel whitelist entry" + INDEX { rogueDetectAutoBlockWhitelistIndex } + ::= { rogueDetectAutoBlockWhitelistTable 1 } + + RogueDetectAutoBlockWhitelistEntry ::= SEQUENCE { + rogueDetectAutoBlockWhitelistIndex Integer32, + rogueDetectAutoBlockWhitelistChannel Integer32, + rogueDetectAutoBlockWhitelistRowStatus RowStatus + } + + rogueDetectAutoBlockWhitelistIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rogue AP Auto Block channel whitelist Index" + ::= { rogueDetectAutoBlockWhitelistEntry 1 } + + rogueDetectAutoBlockWhitelistChannel OBJECT-TYPE + SYNTAX Integer32(1..255) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Rogue AP Auto Block channel whitelist channel" + ::= { rogueDetectAutoBlockWhitelistEntry 2 } + + rogueDetectAutoBlockWhitelistRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the Rogue AP Auto Block channel whitelist row entry" + ::= { rogueDetectAutoBlockWhitelistEntry 3 } + + rogueDetectAutoBlockWhitelistTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset Rogue AP Auto Block channel whitelist" + ::= { rogueDetect 11 } + +-- +-- INTERFACE IAP GLOBAL FAST ROAMING +-- + + fastRoamingEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), broadcast(1), tunnel(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable fast roaming" + ::= { fastRoaming 1 } + + fastRoamingPeerMode OBJECT-TYPE + SYNTAX INTEGER { target-only(0), in-range(1), all(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set fast roaming peer mode" + ::= { fastRoaming 2 } + + fastRoamingTargetArrayTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset fast roaming target array table (clear all entries)" + ::= { fastRoaming 3 } + + fastRoamingLayer OBJECT-TYPE + SYNTAX INTEGER { layer-2-only(0), layer-2-and-3(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set fast roaming layer" + ::= { fastRoaming 5 } + + fastRoamingTargetTable OBJECT-TYPE + SYNTAX SEQUENCE OF FastRoamingTargetEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Fast roaming target array table" + ::= { fastRoaming 6 } + + fastRoamingTargetEntry OBJECT-TYPE + SYNTAX FastRoamingTargetEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Fast roaming target array table entry" + INDEX { fastRoamingTargetIndex } + ::= { fastRoamingTargetTable 1 } + + FastRoamingTargetEntry ::= SEQUENCE { + fastRoamingTargetIndex Integer32, + fastRoamingTargetType INTEGER, + fastRoamingTargetMacAddress DisplayString, + fastRoamingTargetIpAddress IpAddress, + fastRoamingTargetHostname DisplayString, + fastRoamingTargetRowStatus RowStatus + } + + fastRoamingTargetIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Fast roaming target array table index" + ::= { fastRoamingTargetEntry 1 } + + fastRoamingTargetType OBJECT-TYPE + SYNTAX INTEGER { mac(0), ip(1), hostname(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Type of the fast roaming target array table row entry" + ::= { fastRoamingTargetEntry 2 } + + fastRoamingTargetMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Base IAP MAC address of the target array" + ::= { fastRoamingTargetEntry 3 } + + fastRoamingTargetIpAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "IP address of the target array" + ::= { fastRoamingTargetEntry 4 } + + fastRoamingTargetHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(1.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Hostname of the target array" + ::= { fastRoamingTargetEntry 5 } + + fastRoamingTargetRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the fast roaming target array table row entry" + ::= { fastRoamingTargetEntry 6 } + +-- +-- INTERFACE IAP GLOBAL AUTO CELL +-- + + autoCellEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable auto cell size configuration" + ::= { autoCell 1 } + + autoCellOverlap OBJECT-TYPE + SYNTAX Integer32(0..100) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size overlap (in percents)" + ::= { autoCell 2 } + + autoCellPeriod OBJECT-TYPE + SYNTAX Integer32(0..3000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set period to run auto cell size assignment (in seconds from 60 to 3000000, 0 - none)" + ::= { autoCell 3 } + + autoCellMinTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size minimum Tx power" + ::= { autoCell 4 } + +-- +-- INTERFACE IAP GLOBAL IDS +-- + + idsEventTable OBJECT-TYPE + SYNTAX SEQUENCE OF IdsEventEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IDS event table" + ::= { ids 1 } + + idsEventEntry OBJECT-TYPE + SYNTAX IdsEventEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IDS event table entry" + INDEX { idsEventIndex } + ::= { idsEventTable 1 } + + IdsEventEntry ::= SEQUENCE { + idsEventIndex Integer32, + idsEventId INTEGER, + idsEventTime DisplayString, + idsEventTimestamp Counter32, + idsEventIAP DisplayString, + idsEventChannel Integer32, + idsEventPeriod Counter32, + idsEventCurPackets Counter32, + idsEventAvgPackets Counter32, + idsEventMaxPackets Counter32, + idsEventMacAddress DisplayString, + idsEventSSID DisplayString + } + + idsEventIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IDS event index" + ::= { idsEventEntry 1 } + + idsEventId OBJECT-TYPE + SYNTAX INTEGER { beacon-flood(1), probe-req-flood(2), auth-flood(3), + assoc-flood(4), disassoc-flood(5), deauth-flood(6), + eap-flood(7), ap-impersonation(8), disassoc-attack(9), + deauth-attack(10), duration-attack(11), mic-error-attack(12), + null-probe-resp(13), seq-num-anomaly(14), sta-impersonation(15), + sta-broadcast(16), evil-twin-attack(17), rf-jamming(18) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event detected" + ::= { idsEventEntry 2 } + + idsEventTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event detection time" + ::= { idsEventEntry 3 } + + idsEventTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event detection time (in seconds)" + ::= { idsEventEntry 4 } + + idsEventIAP OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP IDS event was detected on" + ::= { idsEventEntry 5 } + + idsEventChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel IDS event was detected on" + ::= { idsEventEntry 6 } + + idsEventPeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event detection time period (in seconds)" + ::= { idsEventEntry 7 } + + idsEventCurPackets OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event current number of packets received" + ::= { idsEventEntry 8 } + + idsEventAvgPackets OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event average number of packets received" + ::= { idsEventEntry 9 } + + idsEventMaxPackets OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event maximum number of packets received" + ::= { idsEventEntry 10 } + + idsEventMacAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event MAC address" + ::= { idsEventEntry 11 } + + idsEventSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IDS event SSID" + ::= { idsEventEntry 12 } + + idsDosAttack OBJECT IDENTIFIER ::= { ids 2 } + idsImpersonation OBJECT IDENTIFIER ::= { ids 3 } + +-- +-- INTERFACE IAP GLOBAL IDS DOS ATTACK +-- + + idsBeaconFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Beacon flood detection mode" + ::= { idsDosAttack 1 } + + idsBeaconFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger beacon flood detection" + ::= { idsDosAttack 2 } + + idsBeaconFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for beacon flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 3 } + + idsProbeReqFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Probe request flood detection mode" + ::= { idsDosAttack 4 } + + idsProbeReqFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger probe request flood detection" + ::= { idsDosAttack 5 } + + idsProbeReqFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for probe request flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 6 } + + idsAuthFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Authentication flood detection mode" + ::= { idsDosAttack 7 } + + idsAuthFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger authentication flood detection" + ::= { idsDosAttack 8 } + + idsAuthFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for authentication flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 9 } + + idsAssocFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Association flood detection mode" + ::= { idsDosAttack 10 } + + idsAssocFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger association flood detection" + ::= { idsDosAttack 11 } + + idsAssocFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for association flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 12 } + + idsDisassocFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disassociation flood detection mode" + ::= { idsDosAttack 13 } + + idsDisassocFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger disassociation flood detection" + ::= { idsDosAttack 14 } + + idsDisassocFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for disassociation flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 15 } + + idsDeauthFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Deauthentication flood detection mode" + ::= { idsDosAttack 16 } + + idsDeauthFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger deauthentication flood detection" + ::= { idsDosAttack 17 } + + idsDeauthFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for deauthentication flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 18 } + + idsEAPFloodMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), manual(1), auto(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "EAP flood detection mode" + ::= { idsDosAttack 19 } + + idsEAPFloodThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger EAP flood detection" + ::= { idsDosAttack 20 } + + idsEAPFloodPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for EAP flood detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 21 } + + idsNullProbeRespEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable null probe response detection" + ::= { idsDosAttack 22 } + + idsNullProbeRespThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of packets received in a period of time to trigger null probe response detection" + ::= { idsDosAttack 23 } + + idsNullProbeRespPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for null probe response detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 24 } + + idsMICErrorAttackEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable MIC error attack detection" + ::= { idsDosAttack 25 } + + idsMICErrorAttackThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of errors captured in a period of time to trigger MIC error attack detection" + ::= { idsDosAttack 26 } + + idsMICErrorAttackPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for MIC error attack detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 27 } + + idsDisassocAttackEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable disassociation attack detection" + ::= { idsDosAttack 28 } + + idsDisassocAttackThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of spoofed packets captured in a period of time to trigger disassociation attack detection" + ::= { idsDosAttack 29 } + + idsDisassocAttackPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for disassociation attack detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 30 } + + idsDeauthAttackEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable deauthentication attack detection" + ::= { idsDosAttack 31 } + + idsDeauthAttackThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of spoofed packets captured in a period of time to trigger deauthentication attack detection" + ::= { idsDosAttack 32 } + + idsDeauthAttackPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for deauthentication attack detection (in seconds, must be an increment of 10)" + ::= { idsDosAttack 33 } + + idsDurationAttackEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable duration attack detection" + ::= { idsDosAttack 34 } + + idsDurationAttackThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of bad NAV occurrences in a period of time to trigger duration attack detection" + ::= { idsDosAttack 35 } + + idsDurationAttackPeriod OBJECT-TYPE + SYNTAX Integer32(1..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for duration attack detection (in seconds)" + ::= { idsDosAttack 36 } + + idsDurationAttackNAV OBJECT-TYPE + SYNTAX Integer32(1..32767) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "NAV value to trigger duration attack detection" + ::= { idsDosAttack 37 } + +-- +-- INTERFACE IAP GLOBAL IDS IMPERSONATION +-- + + idsAPImpersonationEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable AP impersonation detection" + ::= { idsImpersonation 1 } + + idsAPImpersonationThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of spoofed packets captured in a period of time to trigger AP impersonation detection" + ::= { idsImpersonation 2 } + + idsAPImpersonationPeriod OBJECT-TYPE + SYNTAX Integer32(10..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for AP impersonation detection (in seconds, must be an increment of 10)" + ::= { idsImpersonation 3 } + + idsStationImpersonationEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable station impersonation detection" + ::= { idsImpersonation 4 } + + idsStationImpersonationThreshold OBJECT-TYPE + SYNTAX Integer32(1..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of events detected in a period of time to trigger station impersonation detection" + ::= { idsImpersonation 5 } + + idsStationImpersonationPeriod OBJECT-TYPE + SYNTAX Integer32(1..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time period for station impersonation detection (in seconds)" + ::= { idsImpersonation 6 } + + idsSeqNumAnomalyMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), mgmt(1), data(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Packet sequence number anomaly detection mode" + ::= { idsImpersonation 7 } + + idsEvilTwinAttackEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable evil twin attack detection" + ::= { idsImpersonation 8 } + + idsSeqNumAnomalyGap OBJECT-TYPE + SYNTAX Integer32(5..1000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Sequence number gap considered as a normal sequence number change" + ::= { idsImpersonation 9 } + + idsEventTablePeriod OBJECT-TYPE + SYNTAX Counter32(0..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify period for IDS event table entries (in seconds, 0 - all table entries)" + ::= { ids 4 } + +-- +-- INTERFACE IAP GLOBAL RF MONITOR +-- + + rfMonitorMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), dedicated(1), timeshare(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set RF monitor mode" + ::= { rfMonitor 1 } + + rfMonitorTimeshareScanInterval OBJECT-TYPE + SYNTAX Integer32(6..600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set RF monitor timeshare scanning interval (seconds between off channel scans)" + ::= { rfMonitor 2 } + + rfMonitorTimeshareStationThreshold OBJECT-TYPE + SYNTAX Integer32(0..240) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set RF monitor timeshare station threshold (station count above which scanning stops)" + ::= { rfMonitor 3 } + + rfMonitorTimeshareTrafficThreshold OBJECT-TYPE + SYNTAX Integer32(0..50000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set RF monitor timeshare traffic threshold (packets/second above which scanning stops)" + ::= { rfMonitor 4 } + +-- +-- INTERFACE IAP GLOBAL 11A +-- + + global11aIAPEnable OBJECT-TYPE + SYNTAX INTEGER { all-down(0), all-up(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Bring all IAPs up or down" + ::= { global11a 1 } + + global11aIAPCellSize OBJECT-TYPE + SYNTAX INTEGER { none(0), small(1), medium(2), large(3), + max(4), auto(5), monitor(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set up RF cell size base on Tx pwr and Rx Threshold" + ::= { global11a 2 } + + global11aIAPTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum Tx power output from any radio" + ::= { global11a 3 } + + global11aIAPRxThreshold OBJECT-TYPE + SYNTAX Integer32(-100..0) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Rx (deferred) threshold setting" + ::= { global11a 4 } + + global11aIAPAutoChannelEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1), negotiate(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set to 1 to enable auto channel configuration, 2 to negotiate airtime with other arrays before enabling auto channel configuration" + ::= { global11a 5 } + + global11aIAPFragThreshold OBJECT-TYPE + SYNTAX Integer32(256..2346) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Fragmentation threshold" + ::= { global11a 6 } + + global11aIAPRTSThreshold OBJECT-TYPE + SYNTAX Integer32(1..2347) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "RTS threshold" + ::= { global11a 7 } + + rates11a OBJECT IDENTIFIER ::= { global11a 8 } + + global11aIAPAutoCellEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable auto cell size configuration" + ::= { global11a 9 } + + autoChannelList11a OBJECT IDENTIFIER ::= { global11a 10 } + + global11aIAPChannelReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset all 5GHz channels back to factory defaults" + ::= { global11a 11 } + + global11aIAPAutoCellOverlap OBJECT-TYPE + SYNTAX Integer32(0..100) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size overlap (in percents)" + ::= { global11a 12 } + + global11aIAPAutoCellPeriod OBJECT-TYPE + SYNTAX Integer32(0..3000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set period to run auto cell size assignment (in seconds from 60 to 3000000, 0 - none)" + ::= { global11a 13 } + + global11aIAPAutoCellMinTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size minimum Tx power" + ::= { global11a 14 } + + global11aIAPMaxStations OBJECT-TYPE + SYNTAX Integer32(1..3840) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of associated stations per array" + ::= { global11a 15 } + + global11aIAPMaxIapStations OBJECT-TYPE + SYNTAX Integer32(1..240) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of associated stations per IAP" + ::= { global11a 16 } + +-- +-- INTERFACE IAP GLOBAL 11A RATES +-- + + rates11aSet OBJECT-TYPE + SYNTAX INTEGER { default(1), optimize-range(2), + optimize-throughput(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set rates to a pre-defined set" + ::= { rates11a 1 } + + rates11aTable OBJECT-TYPE + SYNTAX SEQUENCE OF Rates11aEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "802.11a Rates for the Array" + ::= { rates11a 2 } + + rates11aEntry OBJECT-TYPE + SYNTAX Rates11aEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rates table entry" + INDEX { rates11aIndex } + ::= { rates11aTable 1 } + + Rates11aEntry ::= SEQUENCE { + rates11aIndex Integer32, + rates11aRate DisplayString, + rates11aStatus INTEGER + } + + rates11aIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rates table index" + ::= { rates11aEntry 1 } + + rates11aRate OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11a rate" + ::= { rates11aEntry 2 } + + rates11aStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), basic(1), supported(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "802.11a rate status" + ::= { rates11aEntry 3 } + +-- +-- INTERFACE IAP GLOBAL 11A AUTO CHANNEL LIST +-- + + autoChannelList11aSet OBJECT-TYPE + SYNTAX INTEGER { default(1), use-all(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set channel list to defaults or all available channels" + ::= { autoChannelList11a 1 } + + autoChannelList11aTable OBJECT-TYPE + SYNTAX SEQUENCE OF AutoChannelList11aEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "802.11a auto channel list" + ::= { autoChannelList11a 2 } + + autoChannelList11aEntry OBJECT-TYPE + SYNTAX AutoChannelList11aEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Auto channel list entry" + INDEX { autoChannelList11aIndex } + ::= { autoChannelList11aTable 1 } + + AutoChannelList11aEntry ::= SEQUENCE { + autoChannelList11aIndex Integer32, + autoChannelList11aChannel Integer32, + autoChannelList11aStatus INTEGER + } + + autoChannelList11aIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Auto channel list index" + ::= { autoChannelList11aEntry 1 } + + autoChannelList11aChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel number" + ::= { autoChannelList11aEntry 2 } + + autoChannelList11aStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Channel status" + ::= { autoChannelList11aEntry 3 } + +-- +-- INTERFACE IAP GLOBAL 11BG +-- + + global11bgIAPEnable OBJECT-TYPE + SYNTAX INTEGER { all-down(0), all-up(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Bring all IAPs up or down" + ::= { global11bg 1 } + + global11bgIAPCellSize OBJECT-TYPE + SYNTAX INTEGER { none(0), small(1), medium(2), large(3), + max(4), auto(5), monitor(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set up RF cell size base on Tx pwr and Rx Threshold" + ::= { global11bg 2 } + + global11bgIAPTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum Tx power output from any radio" + ::= { global11bg 3 } + + global11bgIAPRxThreshold OBJECT-TYPE + SYNTAX Integer32(-100..0) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Rx (deferred) threshold setting" + ::= { global11bg 4 } + + global11bgIAPAutoChannelEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1), negotiate(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set to 1 to enable auto channel configuration, 2 to negotiate airtime with other arrays before enabling auto channel configuration" + ::= { global11bg 5 } + + global11bgIAPFragThreshold OBJECT-TYPE + SYNTAX Integer32(256..2346) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Fragmentation threshold" + ::= { global11bg 6 } + + global11bgIAPRTSThreshold OBJECT-TYPE + SYNTAX Integer32(1..2347) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "RTS threshold" + ::= { global11bg 7 } + + global11bgIAPgOnly OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable 802.11g only mode" + ::= { global11bg 8 } + + global11bgIAPgProtect OBJECT-TYPE + SYNTAX INTEGER { disable(0), auto-cts(1), auto-rts(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable automatic 802.11g protection" + ::= { global11bg 9 } + + global11bgIAPPreamble OBJECT-TYPE + SYNTAX INTEGER { long-only(0), auto-length(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set preamble" + ::= { global11bg 10 } + + global11bgIAPSlotTime OBJECT-TYPE + SYNTAX INTEGER { auto-time(0), short-only(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set slot time" + ::= { global11bg 11 } + + rates11bg OBJECT IDENTIFIER ::= { global11bg 12 } + + global11bgIAPAutoCellEnable OBJECT-TYPE + SYNTAX INTEGER { enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable auto cell size configuration" + ::= { global11bg 13 } + + autoChannelList11bg OBJECT IDENTIFIER ::= { global11bg 14 } + + global11bgIAPChannelReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset all 2.4GHz channels back to factory defaults" + ::= { global11bg 15 } + + global11bgIAPAutoCellOverlap OBJECT-TYPE + SYNTAX Integer32(0..100) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size overlap (in percents)" + ::= { global11bg 16 } + + global11bgIAPAutoCellPeriod OBJECT-TYPE + SYNTAX Integer32(0..3000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set period to run auto cell size assignment (in seconds from 60 to 3000000, 0 - none)" + ::= { global11bg 17 } + + global11bgIAPAutoCellMinTxPwr OBJECT-TYPE + SYNTAX Integer32(-15..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set auto cell size minimum Tx power" + ::= { global11bg 18 } + + global11bgIAPMaxStations OBJECT-TYPE + SYNTAX Integer32(1..3840) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of associated stations per array" + ::= { global11bg 19 } + + global11bgIAPMaxIapStations OBJECT-TYPE + SYNTAX Integer32(1..240) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of associated stations per IAP" + ::= { global11bg 20 } + +-- +-- INTERFACE IAP GLOBAL 11BG RATES +-- + + rates11bgSet OBJECT-TYPE + SYNTAX INTEGER { default(1), optimize-range(2), + optimize-throughput(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set rates to a pre-defined set" + ::= { rates11bg 1 } + + rates11bgTable OBJECT-TYPE + SYNTAX SEQUENCE OF Rates11bgEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "802.11bg Rates for the Array" + ::= { rates11bg 2 } + + rates11bgEntry OBJECT-TYPE + SYNTAX Rates11bgEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rates table entry" + INDEX { rates11bgIndex } + ::= { rates11bgTable 1 } + + Rates11bgEntry ::= SEQUENCE { + rates11bgIndex Integer32, + rates11bgRate DisplayString, + rates11bgStatus INTEGER + } + + rates11bgIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rates table index" + ::= { rates11bgEntry 1 } + + rates11bgRate OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11bg rate" + ::= { rates11bgEntry 2 } + + rates11bgStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), basic(1), supported(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "802.11bg rate status" + ::= { rates11bgEntry 3 } + +-- +-- INTERFACE IAP GLOBAL 11BG AUTO CHANNEL LIST +-- + + autoChannelList11bgSet OBJECT-TYPE + SYNTAX INTEGER { default(1), use-all(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set channel list to defaults or all available channels" + ::= { autoChannelList11bg 1 } + + autoChannelList11bgTable OBJECT-TYPE + SYNTAX SEQUENCE OF AutoChannelList11bgEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "802.11bg auto channel list" + ::= { autoChannelList11bg 2 } + + autoChannelList11bgEntry OBJECT-TYPE + SYNTAX AutoChannelList11bgEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Auto channel list entry" + INDEX { autoChannelList11bgIndex } + ::= { autoChannelList11bgTable 1 } + + AutoChannelList11bgEntry ::= SEQUENCE { + autoChannelList11bgIndex Integer32, + autoChannelList11bgChannel Integer32, + autoChannelList11bgStatus INTEGER + } + + autoChannelList11bgIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Auto channel list index" + ::= { autoChannelList11bgEntry 1 } + + autoChannelList11bgChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel number" + ::= { autoChannelList11bgEntry 2 } + + autoChannelList11bgStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Channel status" + ::= { autoChannelList11bgEntry 3 } + +-- +-- INTERFACE IAP WDS +-- + + wdsAutoChannel OBJECT-TYPE + SYNTAX INTEGER { enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Automatically assign IAPs and channels for WDS client links" + ::= { wds 1 } + + wdsClientLinkTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset all WDS client links to off" + ::= { wds 2 } + + wdsClientLinkTable OBJECT-TYPE + SYNTAX SEQUENCE OF WdsClientLinkEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of WDS client links" + ::= { wds 3 } + + wdsClientLinkEntry OBJECT-TYPE + SYNTAX WdsClientLinkEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WDS client link table entry" + INDEX { wdsClientLinkIndex } + ::= { wdsClientLinkTable 1 } + + WdsClientLinkEntry ::= SEQUENCE { + wdsClientLinkIndex Integer32, + wdsClientLinkEnable INTEGER, + wdsClientLinkMaxIAPs Integer32, + wdsClientLinkTarget DisplayString, + wdsClientLinkSSID DisplayString, + wdsClientLinkUsername DisplayString, + wdsClientLinkPassword DisplayString, + wdsClientLinkPasswordForm INTEGER + } + + wdsClientLinkIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WDS client link table index" + ::= { wdsClientLinkEntry 1 } + + wdsClientLinkEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable WDS client link" + ::= { wdsClientLinkEntry 2 } + + wdsClientLinkMaxIAPs OBJECT-TYPE + SYNTAX Integer32(1..3) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of IAPs for WDS client link during auto channel" + ::= { wdsClientLinkEntry 3 } + + wdsClientLinkTarget OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Base IAP MAC address of target array for WDS client link" + ::= { wdsClientLinkEntry 4 } + + wdsClientLinkSSID OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID to use for association to target array" + ::= { wdsClientLinkEntry 5 } + + wdsClientLinkUsername OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Username to use for association to target array" + ::= { wdsClientLinkEntry 6 } + + wdsClientLinkPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Password to use for association to target array" + ::= { wdsClientLinkEntry 7 } + + wdsClientLinkPasswordForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Password form" + ::= { wdsClientLinkEntry 8 } + + wdsHostLinkTable OBJECT-TYPE + SYNTAX SEQUENCE OF WdsHostLinkEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of WDS host links" + ::= { wds 4 } + + wdsHostLinkEntry OBJECT-TYPE + SYNTAX WdsHostLinkEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WDS host link table entry" + INDEX { wdsHostLinkIndex } + ::= { wdsHostLinkTable 1 } + + WdsHostLinkEntry ::= SEQUENCE { + wdsHostLinkIndex Integer32, + wdsHostLinkState INTEGER, + wdsHostLinkNumIAPs Integer32, + wdsHostLinkSource DisplayString, + wdsHostLinkSSID DisplayString + } + + wdsHostLinkIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WDS host link table index" + ::= { wdsHostLinkEntry 1 } + + wdsHostLinkState OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link state" + ::= { wdsHostLinkEntry 2 } + + wdsHostLinkNumIAPs OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of IAPs for WDS host link" + ::= { wdsHostLinkEntry 3 } + + wdsHostLinkSource OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Base IAP MAC address of source array for WDS host link" + ::= { wdsHostLinkEntry 4 } + + wdsHostLinkSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link SSID" + ::= { wdsHostLinkEntry 5 } + + wdsAllowStations OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable stations on WDS host links" + ::= { wds 5 } + + wdsStpEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable Spanning Tree Protocol on WDS links" + ::= { wds 6 } + + wdsRoamThreshold OBJECT-TYPE + SYNTAX Integer32(1..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum RSSI difference (in dB) required to trigger a roam" + ::= { wds 7 } + + wdsRoamAvgWeight OBJECT-TYPE + SYNTAX Integer32(0..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "RSSI averaging weight for roaming (0 = no averaging)" + ::= { wds 8 } + +-- +-- INTERFACE IAP GLOBAL 11N +-- + + global11nEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable 802.11n MIMO operation" + ::= { global11n 1 } + + global11nTxChains OBJECT-TYPE + SYNTAX Integer32(1..3) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set number of TX chains used for 802.11n operation" + ::= { global11n 2 } + + global11nRxChains OBJECT-TYPE + SYNTAX Integer32(1..3) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set number of RX chains used for 802.11n operation" + ::= { global11n 3 } + + global11nGuardInterval OBJECT-TYPE + SYNTAX INTEGER { long(0), short(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 802.11n guard interval" + ::= { global11n 4 } + + global11nAutoBond OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable 802.11n 5GHz automatic channel bonding" + ::= { global11n 5 } + + global11nBondedChannelWidth5GHz OBJECT-TYPE + SYNTAX INTEGER { dynamic(0), static(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 5GHz band 802.11n bonded channel width" + ::= { global11n 6 } + + global11nBondedChannelWidth2GHz OBJECT-TYPE + SYNTAX INTEGER { dynamic(0), static(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 2.4GHz band 802.11n bonded channel width" + ::= { global11n 7 } + + rates11n OBJECT IDENTIFIER ::= { global11n 8 } + +-- +-- INTERFACE IAP GLOBAL 11N RATES +-- + + rates11nSet OBJECT-TYPE + SYNTAX INTEGER { default(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 802.11n rates to a pre-defined set" + ::= { rates11n 1 } + + rates11nTable OBJECT-TYPE + SYNTAX SEQUENCE OF Rates11nEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Set 802.11n rates" + ::= { rates11n 2 } + + rates11nEntry OBJECT-TYPE + SYNTAX Rates11nEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Rates table entry" + INDEX { rates11nMCSIndex } + ::= { rates11nTable 1 } + + Rates11nEntry ::= SEQUENCE { + rates11nMCSIndex Integer32, + rates11nMCSStatus INTEGER + } + + rates11nMCSIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Modulation & coding scheme (MCS) index" + ::= { rates11nEntry 1 } + + rates11nMCSStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), basic(1), supported(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set status for MCS index" + ::= { rates11nEntry 2 } + + iapSsidToBssidMappingTable OBJECT-TYPE + SYNTAX SEQUENCE OF IapSsidToBssidMappingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID to BSSID mapping table" + ::= { iap 7 } + + iapSsidToBssidMappingEntry OBJECT-TYPE + SYNTAX IapSsidToBssidMappingEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID to BSSID mapping table entry" + INDEX { iapSsidToBssidMappingIndex } + ::= { iapSsidToBssidMappingTable 1 } + + IapSsidToBssidMappingEntry ::= SEQUENCE { + iapSsidToBssidMappingIndex Integer32, + iapSsidToBssidMappingIAP DisplayString, + iapSsidToBssidMappingSSID DisplayString, + iapSsidToBssidMappingBSSID DisplayString + } + + iapSsidToBssidMappingIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID to BSSID mapping table index" + ::= { iapSsidToBssidMappingEntry 1 } + + iapSsidToBssidMappingIAP OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP name" + ::= { iapSsidToBssidMappingEntry 2 } + + iapSsidToBssidMappingSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SSID name" + ::= { iapSsidToBssidMappingEntry 3 } + + iapSsidToBssidMappingBSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "BSSID for IAP/SSID specified" + ::= { iapSsidToBssidMappingEntry 4 } + +-- +-- INTERFACE IAP GLOBAL 11AC +-- + + global11acEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable 802.11ac MIMO operation" + ::= { global11ac 1 } + + global11acGuardInterval OBJECT-TYPE + SYNTAX INTEGER { long(0), short(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set 802.11ac guard interval" + ::= { global11ac 2 } + + global11acMaxMCS1SS OBJECT-TYPE + SYNTAX INTEGER { mcs7(0), mcs8(1), mcs9(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set max MCS for 1 spatial stream for 802.11ac operation" + ::= { global11ac 3 } + + global11acMaxMCS2SS OBJECT-TYPE + SYNTAX INTEGER { mcs7(0), mcs8(1), mcs9(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set max MCS for 2 spatial streams for 802.11ac operation" + ::= { global11ac 4 } + + global11acMaxMCS3SS OBJECT-TYPE + SYNTAX INTEGER { mcs7(0), mcs8(1), mcs9(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set max MCS for 3 spatial streams for 802.11ac operation" + ::= { global11ac 5 } + +-- +-- INTERFACE ETHERNET +-- + + ethTable OBJECT-TYPE + SYNTAX SEQUENCE OF EthEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of ethernet interfaces" + ::= { ethernet 1 } + + ethEntry OBJECT-TYPE + SYNTAX EthEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Ethernet table entry" + INDEX { ethIndex } + ::= { ethTable 1 } + + EthEntry ::= SEQUENCE { + ethIndex Integer32, + ethName DisplayString, + ethEnable INTEGER, + ethDHCPBind INTEGER, + ethIPAddress IpAddress, + ethIPMask IpAddress, + ethGateway IpAddress, + ethAutoneg INTEGER, + ethDuplex INTEGER, + ethSpeed INTEGER, + ethMTU Integer32, + ethMgmt INTEGER, + ethDefault INTEGER, + ethPortMode INTEGER, + ethBond DisplayString, + ethLED INTEGER + } + + ethIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Ethernet table index" + ::= { ethEntry 1 } + + ethName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Ethernet interface name" + ::= { ethEntry 2 } + + ethEnable OBJECT-TYPE + SYNTAX INTEGER { down(0), up (1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable this interface" + ::= { ethEntry 3 } + + ethDHCPBind OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Use DHCP" + ::= { ethEntry 4 } + + ethIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "IP address" + ::= { ethEntry 5 } + + ethIPMask OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "IP Mask" + ::= { ethEntry 6 } + + ethGateway OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Gateway IP address" + ::= { ethEntry 7 } + + ethAutoneg OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable autonegotiation" + ::= { ethEntry 8 } + + ethDuplex OBJECT-TYPE + SYNTAX INTEGER { half(0), full(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Duplex settings" + ::= { ethEntry 9 } + + ethSpeed OBJECT-TYPE + SYNTAX INTEGER { speed-10Mbps(1), speed-100Mbps(2), speed-1000Mbps(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Speed settings: 10 and 100 for fast eth, 100 and 1000 for gig eth" + ::= { ethEntry 10 } + + ethMTU OBJECT-TYPE + SYNTAX Integer32(64..1732) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "MTU size" + ::= { ethEntry 11 } + + ethMgmt OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable management (gig eth only)" + ::= { ethEntry 12 } + + ethDefault OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset to default values" + ::= { ethEntry 13 } + + ethPortMode OBJECT-TYPE + SYNTAX INTEGER { link-backup(0), load-balance(3), bridge(4), + ieee802dot3ad(5), broadcast(6), mirror(7) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Select the configuration of the gig eth ports" + ::= { ethEntry 14 } + + ethBond OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify bond for this gig eth port" + ::= { ethEntry 15 } + + ethLED OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable LED operation" + ::= { ethEntry 16 } + + bondTable OBJECT-TYPE + SYNTAX SEQUENCE OF BondEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of bond interfaces" + ::= { ethernet 2 } + + bondEntry OBJECT-TYPE + SYNTAX BondEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Bond table entry" + INDEX { bondIndex } + ::= { bondTable 1 } + + BondEntry ::= SEQUENCE { + bondIndex Integer32, + bondName DisplayString, + bondMode INTEGER, + bondMirror DisplayString, + bondActiveVlans DisplayString + } + + bondIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Bond table index" + ::= { bondEntry 1 } + + bondName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bond name" + ::= { bondEntry 2 } + + bondMode OBJECT-TYPE + SYNTAX INTEGER { link-backup(0), load-balance(3), + ieee802dot3ad(5), broadcast(6) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Bond mode" + ::= { bondEntry 3 } + + bondMirror OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify mirror bond to mirror traffic" + ::= { bondEntry 4 } + + bondActiveVlans OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..160)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify VLANs active on bond" + ::= { bondEntry 5 } + +-- +-- INTERFACE CONSOLE +-- + + consoleBaud OBJECT-TYPE + SYNTAX Integer32(300..115200) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Baud rate" + ::= { console 1 } + + consoleByteSize OBJECT-TYPE + SYNTAX Integer32(7..8) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Byte/word size in bits" + ::= { console 2 } + + consoleParity OBJECT-TYPE + SYNTAX INTEGER { none(0), odd(1), even(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of parity bits" + ::= { console 3 } + + consoleStopBits OBJECT-TYPE + SYNTAX Integer32(1..2) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Number of stop bits" + ::= { console 4 } + + consoleTimeout OBJECT-TYPE + SYNTAX Integer32(30..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Inactivity timeout" + ::= { console 5 } + + consoleMgmt OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable management" + ::= { console 6 } + +-- +-- NETWORK MAP +-- + + neighborArrayTable OBJECT-TYPE + SYNTAX SEQUENCE OF NeighborArrayEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of neighbor arrays seen by our array" + ::= { networkMap 1 } + + neighborArrayEntry OBJECT-TYPE + SYNTAX NeighborArrayEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for neighbor array" + INDEX { neighborArrayIndex } + ::= { neighborArrayTable 1 } + + NeighborArrayEntry ::= SEQUENCE { + neighborArrayIndex Integer32, + neighborArrayHostname DisplayString, + neighborArrayLocation DisplayString, + neighborArrayIPAddress DisplayString, + neighborArrayModel INTEGER, + neighborArrayNumIAPsUp Integer32, + neighborArrayNumSSIDs Integer32, + neighborArrayNumActiveSSIDs Integer32, + neighborArrayNumStationsAssoc Integer32, + neighborArrayInRange INTEGER, + neighborArrayFastRoam INTEGER, + neighborArrayUptime DisplayString + } + + neighborArrayIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Neighbor array index" + ::= { neighborArrayEntry 1 } + + neighborArrayHostname OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Hostname of the neighbor array" + ::= { neighborArrayEntry 2 } + + neighborArrayLocation OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Location of the neighbor array" + ::= { neighborArrayEntry 3 } + + neighborArrayIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IP Address of the neighbor array" + ::= { neighborArrayEntry 4 } + + neighborArrayModel OBJECT-TYPE + SYNTAX INTEGER { xs-3500(1), xs-3700(2), xs-3900(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Model of the neighbor array" + ::= { neighborArrayEntry 5 } + + neighborArrayNumIAPsUp OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of IAPs enabled on the neighbor array" + ::= { neighborArrayEntry 6 } + + neighborArrayNumSSIDs OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of SSIDs defined on the neighbor array" + ::= { neighborArrayEntry 7 } + + neighborArrayNumActiveSSIDs OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of active SSIDs on the neighbor array" + ::= { neighborArrayEntry 8 } + + neighborArrayNumStationsAssoc OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of stations associated with the neighbor array" + ::= { neighborArrayEntry 9 } + + neighborArrayInRange OBJECT-TYPE + SYNTAX INTEGER { not-in-range(0), in-range(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether neighbor array is in our range" + ::= { neighborArrayEntry 10 } + + neighborArrayFastRoam OBJECT-TYPE + SYNTAX INTEGER { no-fast-roam(0), fast-roam(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether stations can fast roam between us and neighbor array" + ::= { neighborArrayEntry 11 } + + neighborArrayUptime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Uptime (in D:H:M) of the neighbor array" + ::= { neighborArrayEntry 12 } + +-- +-- RADIUS +-- + + radiusEnable OBJECT-TYPE + SYNTAX INTEGER { external(1), internal(2), active-directory(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Radius server enabled" + ::= { radius 1 } + + radiusServerExternal OBJECT IDENTIFIER ::= { radius 2 } + radiusServerInternal OBJECT IDENTIFIER ::= { radius 3 } + radiusServerAD OBJECT IDENTIFIER ::= { radius 4 } + +-- +-- RADIUS SERVER EXTERNAL +-- + + radiusPriServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius server IP address" + ::= { radiusServerExternal 1 } + + radiusPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius server port" + ::= { radiusServerExternal 2 } + + radiusPriServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius server secret" + ::= { radiusServerExternal 3 } + + radiusSecServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius server IP address" + ::= { radiusServerExternal 4 } + + radiusSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius server port" + ::= { radiusServerExternal 5 } + + radiusSecServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius server secret" + ::= { radiusServerExternal 6 } + + radiusTimeout OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Timeout until the primary server is retired _ given up on" + ::= { radiusServerExternal 7 } + + radiusAcctEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable Radius Accounting" + ::= { radiusServerExternal 8 } + + radiusAcctPriServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius Accounting server IP address" + ::= { radiusServerExternal 9 } + + radiusAcctPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius Accounting server port" + ::= { radiusServerExternal 10 } + + radiusAcctPriServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius Accounting server secret" + ::= { radiusServerExternal 11 } + + radiusAcctSecServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius Accounting server IP address" + ::= { radiusServerExternal 12 } + + radiusAcctSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius Accounting server port" + ::= { radiusServerExternal 13 } + + radiusAcctSecServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius Accounting server secret" + ::= { radiusServerExternal 14 } + + radiusAcctInterval OBJECT-TYPE + SYNTAX Integer32(60..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Interim accounting update interval" + ::= { radiusServerExternal 15 } + + radiusNasIdentifier OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Radius NAS Identifier" + ::= { radiusServerExternal 16 } + + radiusPriServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius server hostname" + ::= { radiusServerExternal 17 } + + radiusSecServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius server hostname" + ::= { radiusServerExternal 18 } + + radiusAcctPriServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius Accounting server hostname" + ::= { radiusServerExternal 19 } + + radiusAcctSecServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius Accounting server hostname" + ::= { radiusServerExternal 20 } + + radiusPriServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius server secret (encrypted)" + ::= { radiusServerExternal 21 } + + radiusSecServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius server secret (encrypted)" + ::= { radiusServerExternal 22 } + + radiusAcctPriServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary Radius Accounting server secret (encrypted)" + ::= { radiusServerExternal 23 } + + radiusAcctSecServerSecretEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary Radius Accounting server secret (encrypted)" + ::= { radiusServerExternal 24 } + + radiusDASPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "RADIUS Dynamic Authorization port" + ::= { radiusServerExternal 25 } + + radiusDASTimeWindow OBJECT-TYPE + SYNTAX Integer32(5..10000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "RADIUS Dynamic Authorization time window (in seconds)" + ::= { radiusServerExternal 26 } + + radiusDASEventTimestamp OBJECT-TYPE + SYNTAX INTEGER { optional(0), required(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify whether Event-Timestamp attribute is required for RADIUS Dynamic Authorization replay protection" + ::= { radiusServerExternal 27 } + + radiusCalledStationIdFormat OBJECT-TYPE + SYNTAX INTEGER { bssid-ssid(0), bssid(1), ethernet-mac(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify Called-Station-Id attribute format used in RADIUS packets" + ::= { radiusServerExternal 28 } + + radiusStationMACFormat OBJECT-TYPE + SYNTAX INTEGER { lower(0), upper(1), lower-hyphen(2), upper-hyphen(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify station MAC address format used in a User-Name attribute during RADIUS MAC authentication" + ::= { radiusServerExternal 29 } + +-- +-- RADIUS SERVER INTERNAL +-- + + radiusUserTable OBJECT-TYPE + SYNTAX SEQUENCE OF RadiusUserEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table containing Radius User details" + ::= { radiusServerInternal 1 } + + radiusUserEntry OBJECT-TYPE + SYNTAX RadiusUserEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Radius user table entry" + INDEX { radiusUserIndex } + ::= { radiusUserTable 1 } + + RadiusUserEntry ::= SEQUENCE { + radiusUserIndex Integer32, + radiusUserID DisplayString, + radiusUserPassword DisplayString, + radiusUserSSID DisplayString, + radiusUserRowStatus RowStatus, + radiusUserGroup DisplayString, + radiusUserPasswordForm INTEGER + } + + radiusUserIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Radius user table index" + ::= { radiusUserEntry 1 } + + radiusUserID OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius user ID" + ::= { radiusUserEntry 2 } + + radiusUserPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..100)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius user password" + ::= { radiusUserEntry 3 } + + radiusUserSSID OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius user SSID" + ::= { radiusUserEntry 4 } + + radiusUserRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the radius user table entry" + ::= { radiusUserEntry 5 } + + radiusUserGroup OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius user group" + ::= { radiusUserEntry 6 } + + radiusUserPasswordForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Password form" + ::= { radiusUserEntry 7 } + + radiusUserTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset Radius user table (clear all entries)" + ::= { radiusServerInternal 2 } + +-- +-- RADIUS SERVER ACTIVE DIRECTORY +-- + + activeDirectoryUser OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Active Directory domain administrator user name" + ::= { radiusServerAD 1 } + + activeDirectoryPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Active Directory domain administrator password" + ::= { radiusServerAD 2 } + + activeDirectoryDomainController OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Active Directory domain controller" + ::= { radiusServerAD 3 } + + activeDirectoryWorkgroup OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Active Directory workgroup" + ::= { radiusServerAD 4 } + + activeDirectoryRealm OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Active Directory realm" + ::= { radiusServerAD 5 } + + activeDirectoryJoin OBJECT-TYPE + SYNTAX INTEGER { join(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Join Active Directory domain" + ::= { radiusServerAD 6 } + + activeDirectoryLeave OBJECT-TYPE + SYNTAX INTEGER { leave(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Leave Active Directory domain" + ::= { radiusServerAD 7 } + +-- +-- ROAM ASSIST +-- + + roamAssistEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable roaming assist" + ::= { roamAssist 1 } + + roamAssistPeriod OBJECT-TYPE + SYNTAX Integer32(60..9999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Roaming assist backoff period (in seconds)" + ::= { roamAssist 2 } + + roamAssistThreshold OBJECT-TYPE + SYNTAX Integer32(-50..50) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Roaming RSSI threshold in db relative to nearest array RSSI" + ::= { roamAssist 3 } + + roamAssistDataRate OBJECT-TYPE + SYNTAX Integer32(1..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum packet data rate before roaming (in Mbps)" + ::= { roamAssist 4 } + + roamAssistDevices OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Device types or classes to assist" + ::= { roamAssist 5 } + +-- +-- SECURITY +-- + + wep OBJECT IDENTIFIER ::= { security 1 } + wpa OBJECT IDENTIFIER ::= { security 2 } + +-- +-- SECURITY WEP +-- + + wepDefaultKeyID OBJECT-TYPE + SYNTAX Integer32(1..4) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Default encryption key id for WEP" + ::= { wep 1 } + + wepKeyTable OBJECT-TYPE + SYNTAX SEQUENCE OF WepKeyEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WEP encryption key table for the Array" + ::= { wep 2 } + + wepKeyEntry OBJECT-TYPE + SYNTAX WepKeyEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WEP key table entry" + INDEX { wepKeyNum } + ::= { wepKeyTable 1 } + + WepKeyEntry ::= SEQUENCE { + wepKeyNum Integer32, + wepKeySize INTEGER, + wepKeyString DisplayString, + wepKeyStringForm INTEGER + } + + wepKeyNum OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key number" + ::= { wepKeyEntry 1 } + + wepKeySize OBJECT-TYPE + SYNTAX INTEGER{ wep40(1), wep128(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key size - 40 or 128 bits" + ::= { wepKeyEntry 2 } + + wepKeyString OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..26)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WEP encryption key" + ::= { wepKeyEntry 3 } + + wepKeyStringForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Key string form" + ::= { wepKeyEntry 4 } + +-- +-- SECURITY WPA +-- + + wpaTKIP OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "TKIP enable or disable" + ::= { wpa 1 } + + wpaAES OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AES enable or disable" + ::= { wpa 2 } + + wpaEAP OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "EAP enable or disable" + ::= { wpa 3 } + + wpaPSK OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "PSK enable or disable" + ::= { wpa 4 } + + wpaPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(0|8..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "PSK ASCII passphrase or Hex key" + ::= { wpa 5 } + + wpaRekey OBJECT-TYPE + SYNTAX Integer32(0..1000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Rekey every 100 to 1000000 seconds, 0 - never" + ::= { wpa 6 } + + wpaPassphraseEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(16..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "PSK ASCII passphrase or Hex key (encrypted)" + ::= { wpa 7 } + +-- +-- SNMP AGENT +-- + + snmpAgentEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable SNMPv2" + ::= { snmpAgent 1 } + + snmpAgentReadWriteCommunity OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP read-write community string" + ::= { snmpAgent 2 } + + snmpAgentTrapHost OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap IP address or host name" + ::= { snmpAgent 3 } + + snmpAgentTrapPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap port" + ::= { snmpAgent 4 } + + snmpAgentTrapAuth OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable traps for authentication failures" + ::= { snmpAgent 5 } + + snmpAgentReadOnlyCommunity OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP read-only community string" + ::= { snmpAgent 6 } + + snmpAgentTrapHost2 OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap IP address or host name (host 2)" + ::= { snmpAgent 7 } + + snmpAgentTrapPort2 OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap port (host 2)" + ::= { snmpAgent 8 } + + snmpAgentTrapHost3 OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap IP address or host name (host 3)" + ::= { snmpAgent 9 } + + snmpAgentTrapPort3 OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap port (host 3) " + ::= { snmpAgent 10 } + + snmpAgentTrapHost4 OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap IP address or host name (host 4)" + ::= { snmpAgent 11 } + + snmpAgentTrapPort4 OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap port (host 4)" + ::= { snmpAgent 12 } + + snmpAgentV3Enable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable SNMPv3" + ::= { snmpAgent 13 } + + snmpAgentV3AuthType OBJECT-TYPE + SYNTAX INTEGER { md5(0), sha(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 authentication type" + ::= { snmpAgent 14 } + + snmpAgentV3PrivProtocol OBJECT-TYPE + SYNTAX INTEGER { des(0), aes(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 privacy protocol" + ::= { snmpAgent 15 } + + snmpAgentV3ReadWriteUser OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-write user" + ::= { snmpAgent 16 } + + snmpAgentV3ReadWriteUserAuthPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(8..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-write user authentication passphrase" + ::= { snmpAgent 17 } + + snmpAgentV3ReadWriteUserAuthPassphraseEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(16..60)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-write user authentication passphrase (encrypted)" + ::= { snmpAgent 18 } + + snmpAgentV3ReadWriteUserPrivPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(8..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-write user privacy passphrase" + ::= { snmpAgent 19 } + + snmpAgentV3ReadWriteUserPrivPassphraseEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(16..60)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-write user privacy passphrase (encrypted)" + ::= { snmpAgent 20 } + + snmpAgentV3ReadOnlyUser OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-only user" + ::= { snmpAgent 21 } + + snmpAgentV3ReadOnlyUserAuthPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(8..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-only user authentication passphrase" + ::= { snmpAgent 22 } + + snmpAgentV3ReadOnlyUserAuthPassphraseEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(16..60)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-only user authentication passphrase (encrypted)" + ::= { snmpAgent 23 } + + snmpAgentV3ReadOnlyUserPrivPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(8..30)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-only user privacy passphrase" + ::= { snmpAgent 24 } + + snmpAgentV3ReadOnlyUserPrivPassphraseEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(16..60)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMPv3 read-only user privacy passphrase (encrypted)" + ::= { snmpAgent 25 } + + snmpAgentEngineID OBJECT-TYPE + SYNTAX DisplayString(SIZE(24..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP agent engine ID (in hex)" + ::= { snmpAgent 26 } + + snmpAgentRestart OBJECT-TYPE + SYNTAX INTEGER { restart(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Restart SNMP agent" + ::= { snmpAgent 27 } + + snmpAgentKeepAlive OBJECT-TYPE + SYNTAX Integer32(0..999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP trap keepalive time (in minutes)" + ::= { snmpAgent 28 } + + snmpAgentReadWriteCommunityEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..100)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP read-write community string (encrypted)" + ::= { snmpAgent 29 } + + snmpAgentReadOnlyCommunityEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..100)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SNMP read-only community string (encrypted)" + ::= { snmpAgent 30 } + +-- +-- SSID +-- + + ssidTable OBJECT-TYPE + SYNTAX SEQUENCE OF SsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID table for the Array" + ::= { ssid 1 } + + ssidEntry OBJECT-TYPE + SYNTAX SsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID table entry" + INDEX { ssidIndex } + ::= { ssidTable 1 } + + SsidEntry ::= SEQUENCE { + ssidIndex Integer32, + ssidName DisplayString, + ssidBroadcast INTEGER, + ssidBand INTEGER, + ssidQOS Integer32, + ssidVlan Integer32, + ssidDhcpPool DisplayString, + ssidEncryption INTEGER, + ssidDefaultSecurity INTEGER, + ssidWepDefaultKeyID Integer32, + ssidWepKey1Size INTEGER, + ssidWepKey1String DisplayString, + ssidWepKey2Size INTEGER, + ssidWepKey2String DisplayString, + ssidWepKey3Size INTEGER, + ssidWepKey3String DisplayString, + ssidWepKey4Size INTEGER, + ssidWepKey4String DisplayString, + ssidWpaEAP INTEGER, + ssidWpaPSK INTEGER, + ssidWpaPassphrase DisplayString, + ssidRadiusEnable INTEGER, + ssidRadiusPriServerIPAddress IpAddress, + ssidRadiusPriServerPort Integer32, + ssidRadiusPriServerSecret DisplayString, + ssidRadiusSecServerIPAddress IpAddress, + ssidRadiusSecServerPort Integer32, + ssidRadiusSecServerSecret DisplayString, + ssidRadiusTimeout Integer32, + ssidRadiusAcctEnable INTEGER, + ssidRadiusAcctPriServerIPAddress IpAddress, + ssidRadiusAcctPriServerPort Integer32, + ssidRadiusAcctPriServerSecret DisplayString, + ssidRadiusAcctSecServerIPAddress IpAddress, + ssidRadiusAcctSecServerPort Integer32, + ssidRadiusAcctSecServerSecret DisplayString, + ssidRadiusAcctInterval Integer32, + ssidAuthentication INTEGER, + ssidRowStatus RowStatus, + ssidRoamingLayer INTEGER, + ssidRadiusPriServerHostname DisplayString, + ssidRadiusSecServerHostname DisplayString, + ssidRadiusAcctPriServerHostname DisplayString, + ssidRadiusAcctSecServerHostname DisplayString, + ssidWepKey1StringForm INTEGER, + ssidWepKey2StringForm INTEGER, + ssidWepKey3StringForm INTEGER, + ssidWepKey4StringForm INTEGER, + ssidWpaPassphraseForm INTEGER, + ssidRadiusPriServerSecretForm INTEGER, + ssidRadiusSecServerSecretForm INTEGER, + ssidRadiusAcctPriServerSecretForm INTEGER, + ssidRadiusAcctSecServerSecretForm INTEGER, + ssidFilterList DisplayString, + ssidWpaTKIP INTEGER, + ssidWpaAES INTEGER, + ssidActiveIAPs Integer32, + ssidAclEnable INTEGER, + ssidFallback INTEGER, + ssidTunnel DisplayString, + ssidMdmAuth INTEGER, + ssidDhcpOption INTEGER + } + + ssidIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID table index" + ::= { ssidEntry 1 } + + ssidName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID name" + ::= { ssidEntry 2 } + + ssidBroadcast OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable SSID broadcast" + ::= { ssidEntry 3 } + + ssidBand OBJECT-TYPE + SYNTAX INTEGER { both(1), dot11a(2), dot11bg(3) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID 802.11 band" + ::= { ssidEntry 4 } + + ssidQOS OBJECT-TYPE + SYNTAX Integer32(0..3) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID QoS level" + ::= { ssidEntry 5 } + + ssidVlan OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID vlan ID" + ::= { ssidEntry 6 } + + ssidDhcpPool OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID DHCP pool" + ::= { ssidEntry 7 } + + ssidEncryption OBJECT-TYPE + SYNTAX INTEGER { none(0), wep(1), wpa(2), wpa2(3), wpa-both(4) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID encryption type" + ::= { ssidEntry 8 } + + ssidDefaultSecurity OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Use default security settings" + ::= { ssidEntry 9 } + + ssidWepDefaultKeyID OBJECT-TYPE + SYNTAX Integer32(1..4) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Default encryption key id for WEP" + ::= { ssidEntry 10 } + + ssidWepKey1Size OBJECT-TYPE + SYNTAX INTEGER{ wep40(1), wep128(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key 1 size - 40 or 128 bits" + ::= { ssidEntry 11 } + + ssidWepKey1String OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..26)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP encryption key 1" + ::= { ssidEntry 12 } + + ssidWepKey2Size OBJECT-TYPE + SYNTAX INTEGER{ wep40(1), wep128(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key 2 size - 40 or 128 bits" + ::= { ssidEntry 13 } + + ssidWepKey2String OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..26)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP encryption key 2" + ::= { ssidEntry 14 } + + ssidWepKey3Size OBJECT-TYPE + SYNTAX INTEGER{ wep40(1), wep128(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key 3 size - 40 or 128 bits" + ::= { ssidEntry 15 } + + ssidWepKey3String OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..26)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP encryption key 3" + ::= { ssidEntry 16 } + + ssidWepKey4Size OBJECT-TYPE + SYNTAX INTEGER{ wep40(1), wep128(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WEP key 4 size - 40 or 128 bits" + ::= { ssidEntry 17 } + + ssidWepKey4String OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..26)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP encryption key 4" + ::= { ssidEntry 18 } + + ssidWpaEAP OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "EAP enable or disable" + ::= { ssidEntry 19 } + + ssidWpaPSK OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "PSK enable or disable" + ::= { ssidEntry 20 } + + ssidWpaPassphrase OBJECT-TYPE + SYNTAX DisplayString(SIZE(0|8..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "PSK ASCII passphrase or Hex key" + ::= { ssidEntry 21 } + + ssidRadiusEnable OBJECT-TYPE + SYNTAX INTEGER { external(1), internal(2), active-directory(3) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius server enabled" + ::= { ssidEntry 22 } + + ssidRadiusPriServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius server IP address" + ::= { ssidEntry 23 } + + ssidRadiusPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius server port" + ::= { ssidEntry 24 } + + ssidRadiusPriServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius server secret" + ::= { ssidEntry 25 } + + ssidRadiusSecServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius server IP address" + ::= { ssidEntry 26 } + + ssidRadiusSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius server port" + ::= { ssidEntry 27 } + + ssidRadiusSecServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius server secret" + ::= { ssidEntry 28 } + + ssidRadiusTimeout OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Timeout until the primary server is retired _ given up on" + ::= { ssidEntry 29 } + + ssidRadiusAcctEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable Radius Accounting" + ::= { ssidEntry 30 } + + ssidRadiusAcctPriServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius Accounting server IP address" + ::= { ssidEntry 31 } + + ssidRadiusAcctPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius Accounting server port" + ::= { ssidEntry 32 } + + ssidRadiusAcctPriServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius Accounting server secret" + ::= { ssidEntry 33 } + + ssidRadiusAcctSecServerIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius Accounting server IP address" + ::= { ssidEntry 34 } + + ssidRadiusAcctSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius Accounting server port" + ::= { ssidEntry 35 } + + ssidRadiusAcctSecServerSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius Accounting server secret" + ::= { ssidEntry 36} + + ssidRadiusAcctInterval OBJECT-TYPE + SYNTAX Integer32(60..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Interim accounting update interval" + ::= { ssidEntry 37 } + + ssidAuthentication OBJECT-TYPE + SYNTAX INTEGER { open(0), radius-mac(1), dot1x(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID authentication type" + ::= { ssidEntry 38 } + + ssidRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the SSID row entry" + ::= { ssidEntry 39 } + + ssidRoamingLayer OBJECT-TYPE + SYNTAX INTEGER { layer-2-only(0), layer-2-and-3(1), none(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Fast roaming layer allowed for this SSID" + ::= { ssidEntry 40 } + + ssidRadiusPriServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius server hostname" + ::= { ssidEntry 41 } + + ssidRadiusSecServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius server hostname" + ::= { ssidEntry 42 } + + ssidRadiusAcctPriServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius Accounting server hostname" + ::= { ssidEntry 43 } + + ssidRadiusAcctSecServerHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius Accounting server hostname" + ::= { ssidEntry 44 } + + ssidWepKey1StringForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP key 1 string form" + ::= { ssidEntry 45 } + + ssidWepKey2StringForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP key 2 string form" + ::= { ssidEntry 46 } + + ssidWepKey3StringForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP key 3 string form" + ::= { ssidEntry 47 } + + ssidWepKey4StringForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WEP key 4 string form" + ::= { ssidEntry 48 } + + ssidWpaPassphraseForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "PSK passphrase form" + ::= { ssidEntry 49 } + + ssidRadiusPriServerSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius server secret form" + ::= { ssidEntry 50 } + + ssidRadiusSecServerSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius server secret form" + ::= { ssidEntry 51 } + + ssidRadiusAcctPriServerSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Primary Radius Accounting server secret form" + ::= { ssidEntry 52 } + + ssidRadiusAcctSecServerSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Secondary Radius Accounting server secret form" + ::= { ssidEntry 53 } + + ssidFilterList OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID filter list" + ::= { ssidEntry 54 } + + ssidWpaTKIP OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "TKIP enable or disable" + ::= { ssidEntry 55 } + + ssidWpaAES OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "AES enable or disable" + ::= { ssidEntry 56 } + + ssidActiveIAPs OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Define active IAPs for this SSID" + ::= { ssidEntry 57 } + + ssidAclEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), allow(1) , deny(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID access control list enable/disable" + ::= { ssidEntry 58 } + + ssidFallback OBJECT-TYPE + SYNTAX INTEGER { none(0), disable-ssid(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Define network connectivity fallback mode for this SSID" + ::= { ssidEntry 59 } + + ssidTunnel OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Specify tunnel for bridging SSID data traffic" + ::= { ssidEntry 60 } + + ssidMdmAuth OBJECT-TYPE + SYNTAX INTEGER { none(0), airwatch(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "MDM authentication type used by this SSID" + ::= { ssidEntry 61 } + + ssidDhcpOption OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable insertion of relay agent information option in station DHCP requests" + ::= { ssidEntry 62 } + + ssidTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset SSID table (clear all entries and restore default)" + ::= { ssid 2 } + + ssidTableClear OBJECT-TYPE + SYNTAX INTEGER { clear(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Clear all entries in SSID table" + ::= { ssid 3 } + + ssidLimitsTable OBJECT-TYPE + SYNTAX SEQUENCE OF SsidLimitsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID limits table for the Array" + ::= { ssid 4 } + + ssidLimitsEntry OBJECT-TYPE + SYNTAX SsidLimitsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID limits table entry" + INDEX { ssidLimitsIndex } + ::= { ssidLimitsTable 1 } + + SsidLimitsEntry ::= SEQUENCE { + ssidLimitsIndex Integer32, + ssidLimitsSsidName DisplayString, + ssidLimitsEnable INTEGER, + ssidLimitsTrafficLimit Integer32, + ssidLimitsTrafficLimitSta Integer32, + ssidLimitsTimeOn Integer32, + ssidLimitsTimeOff Integer32, + ssidLimitsDaysOnMon INTEGER, + ssidLimitsDaysOnTue INTEGER, + ssidLimitsDaysOnWed INTEGER, + ssidLimitsDaysOnThu INTEGER, + ssidLimitsDaysOnFri INTEGER, + ssidLimitsDaysOnSat INTEGER, + ssidLimitsDaysOnSun INTEGER, + ssidLimitsActive INTEGER, + ssidLimitsStationLimit Integer32, + ssidLimitsTrafficLimitKbps Integer32, + ssidLimitsTrafficLimitKbpsSta Integer32 + } + + ssidLimitsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID limits table index" + ::= { ssidLimitsEntry 1 } + + ssidLimitsSsidName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SSID name" + ::= { ssidLimitsEntry 2 } + + ssidLimitsEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable SSID" + ::= { ssidLimitsEntry 3 } + + ssidLimitsTrafficLimit OBJECT-TYPE + SYNTAX Integer32(0..1000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Traffic limit for SSID (10 to 1000000 pps, 0 - unlimited)" + ::= { ssidLimitsEntry 4 } + + ssidLimitsTrafficLimitSta OBJECT-TYPE + SYNTAX Integer32(0..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Traffic limit per station for SSID (10 to 100000 pps, 0 - unlimited)" + ::= { ssidLimitsEntry 5 } + + ssidLimitsTimeOn OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set daily time SSID is active (in minutes, -1 - always)" + ::= { ssidLimitsEntry 6 } + + ssidLimitsTimeOff OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set daily time SSID is inactive (in minutes, -1 - never)" + ::= { ssidLimitsEntry 7 } + + ssidLimitsDaysOnMon OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Monday" + ::= { ssidLimitsEntry 8 } + + ssidLimitsDaysOnTue OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Tuesday" + ::= { ssidLimitsEntry 9 } + + ssidLimitsDaysOnWed OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Wednesday" + ::= { ssidLimitsEntry 10 } + + ssidLimitsDaysOnThu OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Thursday" + ::= { ssidLimitsEntry 11 } + + ssidLimitsDaysOnFri OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Friday" + ::= { ssidLimitsEntry 12 } + + ssidLimitsDaysOnSat OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Saturday" + ::= { ssidLimitsEntry 13 } + + ssidLimitsDaysOnSun OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SSID is on/off on Sunday" + ::= { ssidLimitsEntry 14 } + + ssidLimitsActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether SSID is currently active" + ::= { ssidLimitsEntry 15 } + + ssidLimitsStationLimit OBJECT-TYPE + SYNTAX Integer32(1..3840) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Station limit for SSID" + ::= { ssidLimitsEntry 16 } + + ssidLimitsTrafficLimitKbps OBJECT-TYPE + SYNTAX Integer32(0..4000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Traffic limit for SSID (10 to 4000000 kbps, 0 - unlimited)" + ::= { ssidLimitsEntry 17 } + + ssidLimitsTrafficLimitKbpsSta OBJECT-TYPE + SYNTAX Integer32(0..400000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Traffic limit per station for SSID (10 to 400000 kbps, 0 - unlimited)" + ::= { ssidLimitsEntry 18 } + + ssidWprTable OBJECT-TYPE + SYNTAX SEQUENCE OF SsidWprEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID Web Page Redirect (WPR) table for the Array" + ::= { ssid 5 } + + ssidWprEntry OBJECT-TYPE + SYNTAX SsidWprEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID WPR table entry" + INDEX { ssidWprIndex } + ::= { ssidWprTable 1 } + + SsidWprEntry ::= SEQUENCE { + ssidWprIndex Integer32, + ssidWprSsidName DisplayString, + ssidWprEnable INTEGER, + ssidWprServerType INTEGER, + ssidWprUrl DisplayString, + ssidWprSharedSecret DisplayString, + ssidWprScreenType INTEGER, + ssidWprScreenTimeout Integer32, + ssidWprLandingPage DisplayString, + ssidWprSharedSecretForm INTEGER, + ssidWprAuthType INTEGER, + ssidWprHttpsEnable INTEGER, + ssidWprBackground DisplayString, + ssidWprLogoImage DisplayString, + ssidWprHeaderText DisplayString, + ssidWprFooterText DisplayString, + ssidWprAuthTimeout Integer32 + } + + ssidWprIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID WPR table index" + ::= { ssidWprEntry 1 } + + ssidWprSsidName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SSID name" + ::= { ssidWprEntry 2 } + + ssidWprEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable WPR for SSID" + ::= { ssidWprEntry 3 } + + ssidWprServerType OBJECT-TYPE + SYNTAX INTEGER { external(0), internal(1), cloud(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Server type for WPR" + ::= { ssidWprEntry 6 } + + ssidWprUrl OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "URL for WPR" + ::= { ssidWprEntry 7 } + + ssidWprSharedSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Shared secret for WPR" + ::= { ssidWprEntry 8 } + + ssidWprScreenType OBJECT-TYPE + SYNTAX INTEGER { splash(0), login(1), none(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Screen type for WPR" + ::= { ssidWprEntry 9 } + + ssidWprScreenTimeout OBJECT-TYPE + SYNTAX Integer32(0..100) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Splash screen timeout (0 - no timeout)" + ::= { ssidWprEntry 10 } + + ssidWprLandingPage OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Landing page URL for WPR" + ::= { ssidWprEntry 11 } + + ssidWprSharedSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WPR shared secret form" + ::= { ssidWprEntry 12 } + + ssidWprAuthType OBJECT-TYPE + SYNTAX INTEGER { chap(0), pap(1), ms-chap(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WPR authentication protocol" + ::= { ssidWprEntry 13 } + + ssidWprHttpsEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable HTTPS login for WPR" + ::= { ssidWprEntry 14 } + + ssidWprBackground OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom background file for WPR" + ::= { ssidWprEntry 15 } + + ssidWprLogoImage OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom logo file for WPR" + ::= { ssidWprEntry 16 } + + ssidWprHeaderText OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom header text file for WPR" + ::= { ssidWprEntry 17 } + + ssidWprFooterText OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom footer text file for WPR" + ::= { ssidWprEntry 18 } + + ssidWprAuthTimeout OBJECT-TYPE + SYNTAX Integer32(0..10080) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WPR station authentication timeout in minutes (0 - no timeout)" + ::= { ssidWprEntry 19 } + + ssidHoneypotWhitelistTable OBJECT-TYPE + SYNTAX SEQUENCE OF SsidHoneypotWhitelistEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot whitelist" + ::= { ssid 6 } + + ssidHoneypotWhitelistEntry OBJECT-TYPE + SYNTAX SsidHoneypotWhitelistEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot whitelist table entry" + INDEX { ssidHoneypotWhitelistIndex } + ::= { ssidHoneypotWhitelistTable 1 } + + SsidHoneypotWhitelistEntry ::= SEQUENCE { + ssidHoneypotWhitelistIndex Integer32, + ssidHoneypotWhitelistSSID DisplayString, + ssidHoneypotWhitelistRowStatus RowStatus + } + + ssidHoneypotWhitelistIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot whitelist index" + ::= { ssidHoneypotWhitelistEntry 1 } + + ssidHoneypotWhitelistSSID OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID name" + ::= { ssidHoneypotWhitelistEntry 2 } + + ssidHoneypotWhitelistRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the SSID honeypot whitelist row entry" + ::= { ssidHoneypotWhitelistEntry 3 } + + ssidHoneypotWhitelistTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset SSID honeypot whitelist (clear all entries)" + ::= { ssid 7 } + + ssidHoneypotBroadcastTable OBJECT-TYPE + SYNTAX SEQUENCE OF SsidHoneypotBroadcastEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot broadcast" + ::= { ssid 8 } + + ssidHoneypotBroadcastEntry OBJECT-TYPE + SYNTAX SsidHoneypotBroadcastEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot broadcast table entry" + INDEX { ssidHoneypotBroadcastIndex } + ::= { ssidHoneypotBroadcastTable 1 } + + SsidHoneypotBroadcastEntry ::= SEQUENCE { + ssidHoneypotBroadcastIndex Integer32, + ssidHoneypotBroadcastSSID DisplayString, + ssidHoneypotBroadcastRowStatus RowStatus + } + + ssidHoneypotBroadcastIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "SSID honeypot broadcast index" + ::= { ssidHoneypotBroadcastEntry 1 } + + ssidHoneypotBroadcastSSID OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID name" + ::= { ssidHoneypotBroadcastEntry 2 } + + ssidHoneypotBroadcastRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the SSID honeypot broadcast row entry" + ::= { ssidHoneypotBroadcastEntry 3 } + + ssidHoneypotBroadcastTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset SSID honeypot broadcast (clear all entries)" + ::= { ssid 9 } + +-- +-- STATIONS +-- + + stationAssociationTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAssociationEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of stations associated with array" + ::= { stations 1 } + + stationAssociationEntry OBJECT-TYPE + SYNTAX StationAssociationEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for associated station" + INDEX { stationAssociationIndex } + ::= { stationAssociationTable 1 } + + StationAssociationEntry ::= SEQUENCE { + stationAssociationIndex Integer32, + stationAssociationMACAddress DisplayString, + stationAssociationManufacturer DisplayString, + stationAssociationIPAddress DisplayString, + stationAssociationNetbiosName DisplayString, + stationAssociationIAP DisplayString, + stationAssociationSSID DisplayString, + stationAssociationVLAN Integer32, + stationAssociationRSSI Integer32, + stationAssociationTime DisplayString, + stationAssociationTxRate Integer32, + stationAssociationRxRate Integer32, + stationAssociationRSSIa1 Integer32, + stationAssociationRSSIa2 Integer32, + stationAssociationRSSIa3 Integer32, + stationAssociationRSSIa4 Integer32, + stationAssociationRSSIa5 Integer32, + stationAssociationRSSIa6 Integer32, + stationAssociationRSSIa7 Integer32, + stationAssociationRSSIa8 Integer32, + stationAssociationRSSIa9 Integer32, + stationAssociationRSSIa10 Integer32, + stationAssociationRSSIa11 Integer32, + stationAssociationRSSIa12 Integer32, + stationAssociationRSSIabg1 Integer32, + stationAssociationRSSIabg2 Integer32, + stationAssociationRSSIabg3 Integer32, + stationAssociationRSSIabg4 Integer32, + stationAssociationEncType INTEGER, + stationAssociationCipher INTEGER, + stationAssociationKeyMgmt INTEGER, + stationAssociationBand INTEGER, + stationAssociationChannel Integer32, + stationAssociationMediaType INTEGER, + stationAssociationUserName DisplayString, + stationAssociationTimeRSSIa1 Counter32, + stationAssociationTimeRSSIa2 Counter32, + stationAssociationTimeRSSIa3 Counter32, + stationAssociationTimeRSSIa4 Counter32, + stationAssociationTimeRSSIa5 Counter32, + stationAssociationTimeRSSIa6 Counter32, + stationAssociationTimeRSSIa7 Counter32, + stationAssociationTimeRSSIa8 Counter32, + stationAssociationTimeRSSIa9 Counter32, + stationAssociationTimeRSSIa10 Counter32, + stationAssociationTimeRSSIa11 Counter32, + stationAssociationTimeRSSIa12 Counter32, + stationAssociationTimeRSSIabg1 Counter32, + stationAssociationTimeRSSIabg2 Counter32, + stationAssociationTimeRSSIabg3 Counter32, + stationAssociationTimeRSSIabg4 Counter32, + stationAssociationHostname DisplayString, + stationAssociationDeviceType DisplayString, + stationAssociationDeviceClass DisplayString, + stationAssociationUserAgent DisplayString, + stationAssociationDeviceSource INTEGER, + stationAssociationDeviceSourceIndex Integer32 + } + + stationAssociationIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station association index" + ::= { stationAssociationEntry 1 } + + stationAssociationMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationAssociationEntry 2 } + + stationAssociationManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationAssociationEntry 3 } + + stationAssociationIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IP Address of the station" + ::= { stationAssociationEntry 4 } + + stationAssociationNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Netbios name of the station" + ::= { stationAssociationEntry 5 } + + stationAssociationIAP OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP station associated with" + ::= { stationAssociationEntry 6 } + + stationAssociationSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SSID station associated with" + ::= { stationAssociationEntry 7 } + + stationAssociationVLAN OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN of the station" + ::= { stationAssociationEntry 8 } + + stationAssociationRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI (last packet received)" + ::= { stationAssociationEntry 9 } + + stationAssociationTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time (in D:H:M) station is associated" + ::= { stationAssociationEntry 10 } + + stationAssociationTxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx rate of the station" + ::= { stationAssociationEntry 11 } + + stationAssociationRxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx rate of the station" + ::= { stationAssociationEntry 12 } + + stationAssociationRSSIa1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a1" + ::= { stationAssociationEntry 13 } + + stationAssociationRSSIa2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a2" + ::= { stationAssociationEntry 14 } + + stationAssociationRSSIa3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a3" + ::= { stationAssociationEntry 15 } + + stationAssociationRSSIa4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a4" + ::= { stationAssociationEntry 16 } + + stationAssociationRSSIa5 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a5" + ::= { stationAssociationEntry 17 } + + stationAssociationRSSIa6 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a6" + ::= { stationAssociationEntry 18 } + + stationAssociationRSSIa7 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a7" + ::= { stationAssociationEntry 19 } + + stationAssociationRSSIa8 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a8" + ::= { stationAssociationEntry 20 } + + stationAssociationRSSIa9 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a9" + ::= { stationAssociationEntry 21 } + + stationAssociationRSSIa10 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a10" + ::= { stationAssociationEntry 22 } + + stationAssociationRSSIa11 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a11" + ::= { stationAssociationEntry 23 } + + stationAssociationRSSIa12 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a12" + ::= { stationAssociationEntry 24 } + + stationAssociationRSSIabg1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg1" + ::= { stationAssociationEntry 25 } + + stationAssociationRSSIabg2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg2" + ::= { stationAssociationEntry 26 } + + stationAssociationRSSIabg3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg3" + ::= { stationAssociationEntry 27 } + + stationAssociationRSSIabg4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg4" + ::= { stationAssociationEntry 28 } + + stationAssociationEncType OBJECT-TYPE + SYNTAX INTEGER { none(0), wep(1), wpa(2), wpa2(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station encryption type" + ::= { stationAssociationEntry 29 } + + stationAssociationCipher OBJECT-TYPE + SYNTAX INTEGER { none(0), rc4(1), tkip(2), aes(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Cipher suite used by station" + ::= { stationAssociationEntry 30 } + + stationAssociationKeyMgmt OBJECT-TYPE + SYNTAX INTEGER { none(0), eap(1), psk(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Key management algorithm used by station" + ::= { stationAssociationEntry 31 } + + stationAssociationBand OBJECT-TYPE + SYNTAX INTEGER { dot11a(0), dot11bg(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11 band station is on" + ::= { stationAssociationEntry 32 } + + stationAssociationChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel station is on" + ::= { stationAssociationEntry 33 } + + stationAssociationMediaType OBJECT-TYPE + SYNTAX INTEGER { dot11b(1), dot11bg(2), dot11abg(3), dot11a(4), + dot11ab(5), dot11ag(6), dot11g(7), dot11n(8), + dot11bn(9), dot11gn(10), dot11bgn(11), dot11an(12), + dot11abn(13), dot11agn(14), dot11abgn(15), + dot11anac(16), dot11abgnac(17) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station media type" + ::= { stationAssociationEntry 34 } + + stationAssociationUserName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station user name" + ::= { stationAssociationEntry 35 } + + stationAssociationTimeRSSIa1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a1 (milliseconds)" + ::= { stationAssociationEntry 36 } + + stationAssociationTimeRSSIa2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a2 (milliseconds)" + ::= { stationAssociationEntry 37 } + + stationAssociationTimeRSSIa3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a3 (milliseconds)" + ::= { stationAssociationEntry 38 } + + stationAssociationTimeRSSIa4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a4 (milliseconds)" + ::= { stationAssociationEntry 39 } + + stationAssociationTimeRSSIa5 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a5 (milliseconds)" + ::= { stationAssociationEntry 40 } + + stationAssociationTimeRSSIa6 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a6 (milliseconds)" + ::= { stationAssociationEntry 41 } + + stationAssociationTimeRSSIa7 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a7 (milliseconds)" + ::= { stationAssociationEntry 42 } + + stationAssociationTimeRSSIa8 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a8 (milliseconds)" + ::= { stationAssociationEntry 43 } + + stationAssociationTimeRSSIa9 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a9 (milliseconds)" + ::= { stationAssociationEntry 44 } + + stationAssociationTimeRSSIa10 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a10 (milliseconds)" + ::= { stationAssociationEntry 45 } + + stationAssociationTimeRSSIa11 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a11 (milliseconds)" + ::= { stationAssociationEntry 46 } + + stationAssociationTimeRSSIa12 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a12 (milliseconds)" + ::= { stationAssociationEntry 47 } + + stationAssociationTimeRSSIabg1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg1 (milliseconds)" + ::= { stationAssociationEntry 48 } + + stationAssociationTimeRSSIabg2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg2 (milliseconds)" + ::= { stationAssociationEntry 49 } + + stationAssociationTimeRSSIabg3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg3 (milliseconds)" + ::= { stationAssociationEntry 50 } + + stationAssociationTimeRSSIabg4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg4 (milliseconds)" + ::= { stationAssociationEntry 51 } + + stationAssociationHostname OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station hostname" + ::= { stationAssociationEntry 52 } + + stationAssociationDeviceType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device type" + ::= { stationAssociationEntry 53 } + + stationAssociationDeviceClass OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device class" + ::= { stationAssociationEntry 54 } + + stationAssociationUserAgent OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "User-agent string" + ::= { stationAssociationEntry 55 } + + stationAssociationDeviceSource OBJECT-TYPE + SYNTAX INTEGER { none(0), manufacturer(1), netbios-name(2), + dhcp-hostname(3), user-agent-string(4), + internal-rules(5), external-rules(6), cache(7) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device source" + ::= { stationAssociationEntry 56 } + + stationAssociationDeviceSourceIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device source index" + ::= { stationAssociationEntry 57 } + + stationUnassociatedTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationUnassociatedEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of unassociated stations" + ::= { stations 2 } + + stationUnassociatedEntry OBJECT-TYPE + SYNTAX StationUnassociatedEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for unassociated station" + INDEX { stationUnassociatedIndex } + ::= { stationUnassociatedTable 1 } + + StationUnassociatedEntry ::= SEQUENCE { + stationUnassociatedIndex Integer32, + stationUnassociatedMACAddress DisplayString, + stationUnassociatedManufacturer DisplayString, + stationUnassociatedNetbiosName DisplayString, + stationUnassociatedMediaType INTEGER, + stationUnassociatedTxRate Integer32, + stationUnassociatedRxRate Integer32, + stationUnassociatedRSSI Integer32, + stationUnassociatedTime Counter32, + stationUnassociatedRSSIa1 Integer32, + stationUnassociatedRSSIa2 Integer32, + stationUnassociatedRSSIa3 Integer32, + stationUnassociatedRSSIa4 Integer32, + stationUnassociatedRSSIa5 Integer32, + stationUnassociatedRSSIa6 Integer32, + stationUnassociatedRSSIa7 Integer32, + stationUnassociatedRSSIa8 Integer32, + stationUnassociatedRSSIa9 Integer32, + stationUnassociatedRSSIa10 Integer32, + stationUnassociatedRSSIa11 Integer32, + stationUnassociatedRSSIa12 Integer32, + stationUnassociatedRSSIabg1 Integer32, + stationUnassociatedRSSIabg2 Integer32, + stationUnassociatedRSSIabg3 Integer32, + stationUnassociatedRSSIabg4 Integer32, + stationUnassociatedTimeRSSIa1 Counter32, + stationUnassociatedTimeRSSIa2 Counter32, + stationUnassociatedTimeRSSIa3 Counter32, + stationUnassociatedTimeRSSIa4 Counter32, + stationUnassociatedTimeRSSIa5 Counter32, + stationUnassociatedTimeRSSIa6 Counter32, + stationUnassociatedTimeRSSIa7 Counter32, + stationUnassociatedTimeRSSIa8 Counter32, + stationUnassociatedTimeRSSIa9 Counter32, + stationUnassociatedTimeRSSIa10 Counter32, + stationUnassociatedTimeRSSIa11 Counter32, + stationUnassociatedTimeRSSIa12 Counter32, + stationUnassociatedTimeRSSIabg1 Counter32, + stationUnassociatedTimeRSSIabg2 Counter32, + stationUnassociatedTimeRSSIabg3 Counter32, + stationUnassociatedTimeRSSIabg4 Counter32 + } + + stationUnassociatedIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station index" + ::= { stationUnassociatedEntry 1 } + + stationUnassociatedMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationUnassociatedEntry 2 } + + stationUnassociatedManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationUnassociatedEntry 3 } + + stationUnassociatedNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Netbios name of the station" + ::= { stationUnassociatedEntry 4 } + + stationUnassociatedMediaType OBJECT-TYPE + SYNTAX INTEGER { dot11b(1), dot11bg(2), dot11abg(3), dot11a(4), + dot11ab(5), dot11ag(6), dot11g(7), dot11n(8), + dot11bn(9), dot11gn(10), dot11bgn(11), dot11an(12), + dot11abn(13), dot11agn(14), dot11abgn(15), + dot11anac(16), dot11abgnac(17) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station media type" + ::= { stationUnassociatedEntry 5 } + + stationUnassociatedTxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx rate of the station" + ::= { stationUnassociatedEntry 6 } + + stationUnassociatedRxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx rate of the station" + ::= { stationUnassociatedEntry 7 } + + stationUnassociatedRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI (last packet received)" + ::= { stationUnassociatedEntry 8 } + + stationUnassociatedTime OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time (in seconds) since Rx" + ::= { stationUnassociatedEntry 9 } + + stationUnassociatedRSSIa1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a1" + ::= { stationUnassociatedEntry 10 } + + stationUnassociatedRSSIa2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a2" + ::= { stationUnassociatedEntry 11 } + + stationUnassociatedRSSIa3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a3" + ::= { stationUnassociatedEntry 12 } + + stationUnassociatedRSSIa4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a4" + ::= { stationUnassociatedEntry 13 } + + stationUnassociatedRSSIa5 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a5" + ::= { stationUnassociatedEntry 14 } + + stationUnassociatedRSSIa6 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a6" + ::= { stationUnassociatedEntry 15 } + + stationUnassociatedRSSIa7 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a7" + ::= { stationUnassociatedEntry 16 } + + stationUnassociatedRSSIa8 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a8" + ::= { stationUnassociatedEntry 17 } + + stationUnassociatedRSSIa9 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a9" + ::= { stationUnassociatedEntry 18 } + + stationUnassociatedRSSIa10 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a10" + ::= { stationUnassociatedEntry 19 } + + stationUnassociatedRSSIa11 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a11" + ::= { stationUnassociatedEntry 20 } + + stationUnassociatedRSSIa12 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a12" + ::= { stationUnassociatedEntry 21 } + + stationUnassociatedRSSIabg1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg1" + ::= { stationUnassociatedEntry 22 } + + stationUnassociatedRSSIabg2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg2" + ::= { stationUnassociatedEntry 23 } + + stationUnassociatedRSSIabg3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg3" + ::= { stationUnassociatedEntry 24 } + + stationUnassociatedRSSIabg4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg4" + ::= { stationUnassociatedEntry 25 } + + stationUnassociatedTimeRSSIa1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a1 (milliseconds)" + ::= { stationUnassociatedEntry 26 } + + stationUnassociatedTimeRSSIa2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a2 (milliseconds)" + ::= { stationUnassociatedEntry 27 } + + stationUnassociatedTimeRSSIa3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a3 (milliseconds)" + ::= { stationUnassociatedEntry 28 } + + stationUnassociatedTimeRSSIa4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a4 (milliseconds)" + ::= { stationUnassociatedEntry 29 } + + stationUnassociatedTimeRSSIa5 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a5 (milliseconds)" + ::= { stationUnassociatedEntry 30 } + + stationUnassociatedTimeRSSIa6 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a6 (milliseconds)" + ::= { stationUnassociatedEntry 31 } + + stationUnassociatedTimeRSSIa7 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a7 (milliseconds)" + ::= { stationUnassociatedEntry 32 } + + stationUnassociatedTimeRSSIa8 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a8 (milliseconds)" + ::= { stationUnassociatedEntry 33 } + + stationUnassociatedTimeRSSIa9 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a9 (milliseconds)" + ::= { stationUnassociatedEntry 34 } + + stationUnassociatedTimeRSSIa10 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a10 (milliseconds)" + ::= { stationUnassociatedEntry 35 } + + stationUnassociatedTimeRSSIa11 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a11 (milliseconds)" + ::= { stationUnassociatedEntry 36 } + + stationUnassociatedTimeRSSIa12 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP a12 (milliseconds)" + ::= { stationUnassociatedEntry 37 } + + stationUnassociatedTimeRSSIabg1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP abg1 (milliseconds)" + ::= { stationUnassociatedEntry 38 } + + stationUnassociatedTimeRSSIabg2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP abg2 (milliseconds)" + ::= { stationUnassociatedEntry 39 } + + stationUnassociatedTimeRSSIabg3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP abg3 (milliseconds)" + ::= { stationUnassociatedEntry 40 } + + stationUnassociatedTimeRSSIabg4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on last Probe Request on IAP abg4 (milliseconds)" + ::= { stationUnassociatedEntry 41 } + + stationDeauthMacAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(12..17)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Mac address of the station to deauthenticate" + ::= { stations 3 } + + stationAssocTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAssocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of stations (indexed by station MAC address) associated with array" + ::= { stations 4 } + + stationAssocEntry OBJECT-TYPE + SYNTAX StationAssocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for associated station" + INDEX { stationAssocMACAddress } + ::= { stationAssocTable 1 } + + StationAssocEntry ::= SEQUENCE { + stationAssocMACAddress DisplayString, + stationAssocManufacturer DisplayString, + stationAssocIPAddress DisplayString, + stationAssocNetbiosName DisplayString, + stationAssocIAP DisplayString, + stationAssocSSID DisplayString, + stationAssocVLAN Integer32, + stationAssocRSSI Integer32, + stationAssocTime DisplayString, + stationAssocTxRate Integer32, + stationAssocRxRate Integer32, + stationAssocRSSIa1 Integer32, + stationAssocRSSIa2 Integer32, + stationAssocRSSIa3 Integer32, + stationAssocRSSIa4 Integer32, + stationAssocRSSIa5 Integer32, + stationAssocRSSIa6 Integer32, + stationAssocRSSIa7 Integer32, + stationAssocRSSIa8 Integer32, + stationAssocRSSIa9 Integer32, + stationAssocRSSIa10 Integer32, + stationAssocRSSIa11 Integer32, + stationAssocRSSIa12 Integer32, + stationAssocRSSIabg1 Integer32, + stationAssocRSSIabg2 Integer32, + stationAssocRSSIabg3 Integer32, + stationAssocRSSIabg4 Integer32, + stationAssocEncType INTEGER, + stationAssocCipher INTEGER, + stationAssocKeyMgmt INTEGER, + stationAssocBand INTEGER, + stationAssocChannel Integer32, + stationAssocMediaType INTEGER, + stationAssocUserName DisplayString, + stationAssocTimeRSSIa1 Counter32, + stationAssocTimeRSSIa2 Counter32, + stationAssocTimeRSSIa3 Counter32, + stationAssocTimeRSSIa4 Counter32, + stationAssocTimeRSSIa5 Counter32, + stationAssocTimeRSSIa6 Counter32, + stationAssocTimeRSSIa7 Counter32, + stationAssocTimeRSSIa8 Counter32, + stationAssocTimeRSSIa9 Counter32, + stationAssocTimeRSSIa10 Counter32, + stationAssocTimeRSSIa11 Counter32, + stationAssocTimeRSSIa12 Counter32, + stationAssocTimeRSSIabg1 Counter32, + stationAssocTimeRSSIabg2 Counter32, + stationAssocTimeRSSIabg3 Counter32, + stationAssocTimeRSSIabg4 Counter32, + stationAssocHostname DisplayString, + stationAssocDeviceType DisplayString, + stationAssocDeviceClass DisplayString, + stationAssocUserAgent DisplayString, + stationAssocDeviceSource INTEGER, + stationAssocDeviceSourceIndex Integer32 + } + + stationAssocMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationAssocEntry 1 } + + stationAssocManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationAssocEntry 2 } + + stationAssocIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IP Address of the station" + ::= { stationAssocEntry 3 } + + stationAssocNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Netbios name of the station" + ::= { stationAssocEntry 4 } + + stationAssocIAP OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP station associated with" + ::= { stationAssocEntry 5 } + + stationAssocSSID OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SSID station associated with" + ::= { stationAssocEntry 6 } + + stationAssocVLAN OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN of the station" + ::= { stationAssocEntry 7 } + + stationAssocRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI (last packet received)" + ::= { stationAssocEntry 8 } + + stationAssocTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time (in D:H:M) station is associated" + ::= { stationAssocEntry 9 } + + stationAssocTxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx rate of the station" + ::= { stationAssocEntry 10 } + + stationAssocRxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx rate of the station" + ::= { stationAssocEntry 11 } + + stationAssocRSSIa1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a1" + ::= { stationAssocEntry 12 } + + stationAssocRSSIa2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a2" + ::= { stationAssocEntry 13 } + + stationAssocRSSIa3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a3" + ::= { stationAssocEntry 14 } + + stationAssocRSSIa4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a4" + ::= { stationAssocEntry 15 } + + stationAssocRSSIa5 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a5" + ::= { stationAssocEntry 16 } + + stationAssocRSSIa6 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a6" + ::= { stationAssocEntry 17 } + + stationAssocRSSIa7 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a7" + ::= { stationAssocEntry 18 } + + stationAssocRSSIa8 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a8" + ::= { stationAssocEntry 19 } + + stationAssocRSSIa9 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a9" + ::= { stationAssocEntry 20 } + + stationAssocRSSIa10 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a10" + ::= { stationAssocEntry 21 } + + stationAssocRSSIa11 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a11" + ::= { stationAssocEntry 22 } + + stationAssocRSSIa12 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a12" + ::= { stationAssocEntry 23 } + + stationAssocRSSIabg1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg1" + ::= { stationAssocEntry 24 } + + stationAssocRSSIabg2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg2" + ::= { stationAssocEntry 25 } + + stationAssocRSSIabg3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg3" + ::= { stationAssocEntry 26 } + + stationAssocRSSIabg4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg4" + ::= { stationAssocEntry 27 } + + stationAssocEncType OBJECT-TYPE + SYNTAX INTEGER { none(0), wep(1), wpa(2), wpa2(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station encryption type" + ::= { stationAssocEntry 28 } + + stationAssocCipher OBJECT-TYPE + SYNTAX INTEGER { none(0), rc4(1), tkip(2), aes(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Cipher suite used by station" + ::= { stationAssocEntry 29 } + + stationAssocKeyMgmt OBJECT-TYPE + SYNTAX INTEGER { none(0), eap(1), psk(2) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Key management algorithm used by station" + ::= { stationAssocEntry 30 } + + stationAssocBand OBJECT-TYPE + SYNTAX INTEGER { dot11a(0), dot11bg(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11 band station is on" + ::= { stationAssocEntry 31 } + + stationAssocChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel station is on" + ::= { stationAssocEntry 32 } + + stationAssocMediaType OBJECT-TYPE + SYNTAX INTEGER { dot11b(1), dot11bg(2), dot11abg(3), dot11a(4), + dot11ab(5), dot11ag(6), dot11g(7), dot11n(8), + dot11bn(9), dot11gn(10), dot11bgn(11), dot11an(12), + dot11abn(13), dot11agn(14), dot11abgn(15), + dot11anac(16), dot11abgnac(17) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station media type" + ::= { stationAssocEntry 33 } + + stationAssocUserName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station user name" + ::= { stationAssocEntry 34 } + + stationAssocTimeRSSIa1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a1 (milliseconds)" + ::= { stationAssocEntry 35 } + + stationAssocTimeRSSIa2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a2 (milliseconds)" + ::= { stationAssocEntry 36 } + + stationAssocTimeRSSIa3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a3 (milliseconds)" + ::= { stationAssocEntry 37 } + + stationAssocTimeRSSIa4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a4 (milliseconds)" + ::= { stationAssocEntry 38 } + + stationAssocTimeRSSIa5 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a5 (milliseconds)" + ::= { stationAssocEntry 39 } + + stationAssocTimeRSSIa6 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a6 (milliseconds)" + ::= { stationAssocEntry 40 } + + stationAssocTimeRSSIa7 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a7 (milliseconds)" + ::= { stationAssocEntry 41 } + + stationAssocTimeRSSIa8 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a8 (milliseconds)" + ::= { stationAssocEntry 42 } + + stationAssocTimeRSSIa9 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a9 (milliseconds)" + ::= { stationAssocEntry 43 } + + stationAssocTimeRSSIa10 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a10 (milliseconds)" + ::= { stationAssocEntry 44 } + + stationAssocTimeRSSIa11 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a11 (milliseconds)" + ::= { stationAssocEntry 45 } + + stationAssocTimeRSSIa12 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a12 (milliseconds)" + ::= { stationAssocEntry 46 } + + stationAssocTimeRSSIabg1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg1 (milliseconds)" + ::= { stationAssocEntry 47 } + + stationAssocTimeRSSIabg2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg2 (milliseconds)" + ::= { stationAssocEntry 48 } + + stationAssocTimeRSSIabg3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg3 (milliseconds)" + ::= { stationAssocEntry 49 } + + stationAssocTimeRSSIabg4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg4 (milliseconds)" + ::= { stationAssocEntry 50 } + + stationAssocHostname OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station hostname" + ::= { stationAssocEntry 51 } + + stationAssocDeviceType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device type" + ::= { stationAssocEntry 52 } + + stationAssocDeviceClass OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device class" + ::= { stationAssocEntry 53 } + + stationAssocUserAgent OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "User-agent string" + ::= { stationAssocEntry 54 } + + stationAssocDeviceSource OBJECT-TYPE + SYNTAX INTEGER { none(0), manufacturer(1), netbios-name(2), + dhcp-hostname(3), user-agent-string(4), + internal-rules(5), external-rules(6), cache(7) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device source" + ::= { stationAssocEntry 55 } + + stationAssocDeviceSourceIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device source index" + ::= { stationAssocEntry 56 } + + stationUnassocTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationUnassocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of unassociated stations (indexed by station MAC address)" + ::= { stations 5 } + + stationUnassocEntry OBJECT-TYPE + SYNTAX StationUnassocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for unassociated station" + INDEX { stationUnassocMACAddress } + ::= { stationUnassocTable 1 } + + StationUnassocEntry ::= SEQUENCE { + stationUnassocMACAddress DisplayString, + stationUnassocManufacturer DisplayString, + stationUnassocNetbiosName DisplayString, + stationUnassocMediaType INTEGER, + stationUnassocTxRate Integer32, + stationUnassocRxRate Integer32, + stationUnassocRSSI Integer32, + stationUnassocTime Counter32, + stationUnassocRSSIa1 Integer32, + stationUnassocRSSIa2 Integer32, + stationUnassocRSSIa3 Integer32, + stationUnassocRSSIa4 Integer32, + stationUnassocRSSIa5 Integer32, + stationUnassocRSSIa6 Integer32, + stationUnassocRSSIa7 Integer32, + stationUnassocRSSIa8 Integer32, + stationUnassocRSSIa9 Integer32, + stationUnassocRSSIa10 Integer32, + stationUnassocRSSIa11 Integer32, + stationUnassocRSSIa12 Integer32, + stationUnassocRSSIabg1 Integer32, + stationUnassocRSSIabg2 Integer32, + stationUnassocRSSIabg3 Integer32, + stationUnassocRSSIabg4 Integer32, + stationUnassocTimeRSSIa1 Counter32, + stationUnassocTimeRSSIa2 Counter32, + stationUnassocTimeRSSIa3 Counter32, + stationUnassocTimeRSSIa4 Counter32, + stationUnassocTimeRSSIa5 Counter32, + stationUnassocTimeRSSIa6 Counter32, + stationUnassocTimeRSSIa7 Counter32, + stationUnassocTimeRSSIa8 Counter32, + stationUnassocTimeRSSIa9 Counter32, + stationUnassocTimeRSSIa10 Counter32, + stationUnassocTimeRSSIa11 Counter32, + stationUnassocTimeRSSIa12 Counter32, + stationUnassocTimeRSSIabg1 Counter32, + stationUnassocTimeRSSIabg2 Counter32, + stationUnassocTimeRSSIabg3 Counter32, + stationUnassocTimeRSSIabg4 Counter32 + } + + stationUnassocMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationUnassocEntry 1 } + + stationUnassocManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationUnassocEntry 2 } + + stationUnassocNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Netbios name of the station" + ::= { stationUnassocEntry 3 } + + stationUnassocMediaType OBJECT-TYPE + SYNTAX INTEGER { dot11b(1), dot11bg(2), dot11abg(3), dot11a(4), + dot11ab(5), dot11ag(6), dot11g(7), dot11n(8), + dot11bn(9), dot11gn(10), dot11bgn(11), dot11an(12), + dot11abn(13), dot11agn(14), dot11abgn(15), + dot11anac(16), dot11abgnac(17) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station media type" + ::= { stationUnassocEntry 4 } + + stationUnassocTxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx rate of the station" + ::= { stationUnassocEntry 5 } + + stationUnassocRxRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx rate of the station" + ::= { stationUnassocEntry 6 } + + stationUnassocRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI (last packet received)" + ::= { stationUnassocEntry 7 } + + stationUnassocTime OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time (in seconds) since Rx" + ::= { stationUnassocEntry 8 } + + stationUnassocRSSIa1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a1" + ::= { stationUnassocEntry 9 } + + stationUnassocRSSIa2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a2" + ::= { stationUnassocEntry 10 } + + stationUnassocRSSIa3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a3" + ::= { stationUnassocEntry 11 } + + stationUnassocRSSIa4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a4" + ::= { stationUnassocEntry 12 } + + stationUnassocRSSIa5 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a5" + ::= { stationUnassocEntry 13 } + + stationUnassocRSSIa6 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a6" + ::= { stationUnassocEntry 14 } + + stationUnassocRSSIa7 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a7" + ::= { stationUnassocEntry 15 } + + stationUnassocRSSIa8 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a8" + ::= { stationUnassocEntry 16 } + + stationUnassocRSSIa9 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a9" + ::= { stationUnassocEntry 17 } + + stationUnassocRSSIa10 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a10" + ::= { stationUnassocEntry 18 } + + stationUnassocRSSIa11 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a11" + ::= { stationUnassocEntry 19 } + + stationUnassocRSSIa12 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP a12" + ::= { stationUnassocEntry 20 } + + stationUnassocRSSIabg1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg1" + ::= { stationUnassocEntry 21 } + + stationUnassocRSSIabg2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg2" + ::= { stationUnassocEntry 22 } + + stationUnassocRSSIabg3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg3" + ::= { stationUnassocEntry 23 } + + stationUnassocRSSIabg4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's RSSI for last Probe Request on IAP abg4" + ::= { stationUnassocEntry 24 } + + stationUnassocTimeRSSIa1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a1 (milliseconds)" + ::= { stationUnassocEntry 25 } + + stationUnassocTimeRSSIa2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a2 (milliseconds)" + ::= { stationUnassocEntry 26 } + + stationUnassocTimeRSSIa3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a3 (milliseconds)" + ::= { stationUnassocEntry 27 } + + stationUnassocTimeRSSIa4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a4 (milliseconds)" + ::= { stationUnassocEntry 28 } + + stationUnassocTimeRSSIa5 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a5 (milliseconds)" + ::= { stationUnassocEntry 29 } + + stationUnassocTimeRSSIa6 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a6 (milliseconds)" + ::= { stationUnassocEntry 30 } + + stationUnassocTimeRSSIa7 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a7 (milliseconds)" + ::= { stationUnassocEntry 31 } + + stationUnassocTimeRSSIa8 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a8 (milliseconds)" + ::= { stationUnassocEntry 32 } + + stationUnassocTimeRSSIa9 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a9 (milliseconds)" + ::= { stationUnassocEntry 33 } + + stationUnassocTimeRSSIa10 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a10 (milliseconds)" + ::= { stationUnassocEntry 34 } + + stationUnassocTimeRSSIa11 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a11 (milliseconds)" + ::= { stationUnassocEntry 35 } + + stationUnassocTimeRSSIa12 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP a12 (milliseconds)" + ::= { stationUnassocEntry 36 } + + stationUnassocTimeRSSIabg1 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg1 (milliseconds)" + ::= { stationUnassocEntry 37 } + + stationUnassocTimeRSSIabg2 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg2 (milliseconds)" + ::= { stationUnassocEntry 38 } + + stationUnassocTimeRSSIabg3 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg3 (milliseconds)" + ::= { stationUnassocEntry 39 } + + stationUnassocTimeRSSIabg4 OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station's elapsed time since last Probe Request on IAP abg4 (milliseconds)" + ::= { stationUnassocEntry 40 } + + stationAssurance OBJECT IDENTIFIER ::= { stations 6 } + +-- +-- STATION ASSURANCE +-- + + stationAssuranceEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable station assurance" + ::= { stationAssurance 1 } + + stationAssurancePeriod OBJECT-TYPE + SYNTAX Integer32(60..9999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Station assurance check period (in seconds)" + ::= { stationAssurance 2 } + + stationAssuranceAssocTime OBJECT-TYPE + SYNTAX Integer32(1..999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum average associated time (in seconds)" + ::= { stationAssurance 3 } + + stationAssuranceAuthFailures OBJECT-TYPE + SYNTAX Integer32(1..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of authentication failures" + ::= { stationAssurance 4 } + + stationAssuranceErrorRate OBJECT-TYPE + SYNTAX Integer32(1..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum packet error rate (as a percentage)" + ::= { stationAssurance 5 } + + stationAssuranceRetryRate OBJECT-TYPE + SYNTAX Integer32(1..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum packet retry rate (as a percentage)" + ::= { stationAssurance 6 } + + stationAssuranceDataRate OBJECT-TYPE + SYNTAX Integer32(1..99) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum packet data rate (in Mbps)" + ::= { stationAssurance 7 } + + stationAssuranceRSSI OBJECT-TYPE + SYNTAX Integer32(-90..-50) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum received signal strength (in dB)" + ::= { stationAssurance 8 } + + stationAssuranceSNR OBJECT-TYPE + SYNTAX Integer32(1..25) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Minimum signal to noise ratio (in dB)" + ::= { stationAssurance 9 } + + stationAssuranceDistance OBJECT-TYPE + SYNTAX Integer32(1..9999) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum distance from array (in feet)" + ::= { stationAssurance 10 } + + stationAssuranceTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAssuranceEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station assurance table" + ::= { stationAssurance 11 } + + stationAssuranceEntry OBJECT-TYPE + SYNTAX StationAssuranceEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station assurance table entry" + INDEX { staAssuranceIndex } + ::= { stationAssuranceTable 1 } + + StationAssuranceEntry ::= SEQUENCE { + staAssuranceIndex Integer32, + staAssuranceMACAddress DisplayString, + staAssuranceIPAddress DisplayString, + staAssuranceNetbiosName DisplayString, + staAssuranceManufacturer DisplayString, + staAssuranceTime DisplayString, + staAssuranceTimestamp Counter32, + staAssuranceAssocTime Integer32, + staAssuranceAuthFailures Integer32, + staAssuranceErrorRate Integer32, + staAssuranceRetryRate Integer32, + staAssuranceDataRate Integer32, + staAssuranceRSSI Integer32, + staAssuranceSNR Integer32, + staAssuranceDistance Integer32, + staAssuranceDeviceType DisplayString, + staAssuranceDeviceClass DisplayString, + staAssuranceActiveAlarmTimestamp Counter32, + staAssuranceActiveAlarmType INTEGER, + staAssuranceAssocTimeTimestamp Counter32, + staAssuranceAuthFailuresTimestamp Counter32, + staAssuranceErrorRateTimestamp Counter32, + staAssuranceRetryRateTimestamp Counter32, + staAssuranceDataRateTimestamp Counter32, + staAssuranceRSSITimestamp Counter32, + staAssuranceSNRTimestamp Counter32, + staAssuranceDistanceTimestamp Counter32, + staAssuranceAssocTimeActive INTEGER, + staAssuranceAuthFailuresActive INTEGER, + staAssuranceErrorRateActive INTEGER, + staAssuranceRetryRateActive INTEGER, + staAssuranceDataRateActive INTEGER, + staAssuranceRSSIActive INTEGER, + staAssuranceSNRActive INTEGER, + staAssuranceDistanceActive INTEGER, + staAssuranceAlarmType INTEGER + } + + staAssuranceIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station assurance index" + ::= { stationAssuranceEntry 1 } + + staAssuranceMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station MAC address" + ::= { stationAssuranceEntry 2 } + + staAssuranceIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station IP Address" + ::= { stationAssuranceEntry 3 } + + staAssuranceNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station netbios name" + ::= { stationAssuranceEntry 4 } + + staAssuranceManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationAssuranceEntry 5 } + + staAssuranceTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm time" + ::= { stationAssuranceEntry 6 } + + staAssuranceTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm time (in seconds)" + ::= { stationAssuranceEntry 7 } + + staAssuranceAssocTime OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Associated time" + ::= { stationAssuranceEntry 8 } + + staAssuranceAuthFailures OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of authentication failures" + ::= { stationAssuranceEntry 9 } + + staAssuranceErrorRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet error rate" + ::= { stationAssuranceEntry 10 } + + staAssuranceRetryRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet retry rate" + ::= { stationAssuranceEntry 11 } + + staAssuranceDataRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet data rate" + ::= { stationAssuranceEntry 12 } + + staAssuranceRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Received signal strength" + ::= { stationAssuranceEntry 13 } + + staAssuranceSNR OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Signal to noise ratio" + ::= { stationAssuranceEntry 14 } + + staAssuranceDistance OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Distance from array" + ::= { stationAssuranceEntry 15 } + + staAssuranceDeviceType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device type" + ::= { stationAssuranceEntry 16 } + + staAssuranceDeviceClass OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device class" + ::= { stationAssuranceEntry 17 } + + staAssuranceActiveAlarmTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last active alarm time (in seconds)" + ::= { stationAssuranceEntry 18 } + + staAssuranceActiveAlarmType OBJECT-TYPE + SYNTAX INTEGER { none(0), assoc-time(1), auth-fails(2), + error-rate(3), retry-rate(4), data-rate(5), + rssi(6), snr(7), distance(8) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last active alarm type" + ::= { stationAssuranceEntry 19 } + + staAssuranceAssocTimeTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last associated time alarm time (in seconds)" + ::= { stationAssuranceEntry 20 } + + staAssuranceAuthFailuresTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last authentication failures alarm time (in seconds)" + ::= { stationAssuranceEntry 21 } + + staAssuranceErrorRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet error rate alarm time (in seconds)" + ::= { stationAssuranceEntry 22 } + + staAssuranceRetryRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet retry rate alarm time (in seconds)" + ::= { stationAssuranceEntry 23 } + + staAssuranceDataRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet data rate alarm time (in seconds)" + ::= { stationAssuranceEntry 24 } + + staAssuranceRSSITimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last RSSI alarm time (in seconds)" + ::= { stationAssuranceEntry 25 } + + staAssuranceSNRTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last SNR alarm time (in seconds)" + ::= { stationAssuranceEntry 26 } + + staAssuranceDistanceTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last distance alarm time (in seconds)" + ::= { stationAssuranceEntry 27 } + + staAssuranceAssocTimeActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether associated time alarm is currently active" + ::= { stationAssuranceEntry 28 } + + staAssuranceAuthFailuresActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether authentication failures alarm is currently active" + ::= { stationAssuranceEntry 29 } + + staAssuranceErrorRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether error rate alarm is currently active" + ::= { stationAssuranceEntry 30 } + + staAssuranceRetryRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether retry rate alarm is currently active" + ::= { stationAssuranceEntry 31 } + + staAssuranceDataRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether data rate alarm is currently active" + ::= { stationAssuranceEntry 32 } + + staAssuranceRSSIActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether RSSI alarm is currently active" + ::= { stationAssuranceEntry 33 } + + staAssuranceSNRActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether SNR alarm is currently active" + ::= { stationAssuranceEntry 34 } + + staAssuranceDistanceActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether distance alarm is currently active" + ::= { stationAssuranceEntry 35 } + + staAssuranceAlarmType OBJECT-TYPE + SYNTAX INTEGER { none(0), assoc-time(1), auth-fails(2), + error-rate(3), retry-rate(4), data-rate(5), + rssi(6), snr(7), distance(8) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm type" + ::= { stationAssuranceEntry 36 } + + stationAssurTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAssurEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station assurance table (indexed by station MAC address)" + ::= { stationAssurance 12 } + + stationAssurEntry OBJECT-TYPE + SYNTAX StationAssurEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station assurance table entry" + INDEX { staAssurMACAddress } + ::= { stationAssurTable 1 } + + StationAssurEntry ::= SEQUENCE { + staAssurMACAddress DisplayString, + staAssurIPAddress DisplayString, + staAssurNetbiosName DisplayString, + staAssurManufacturer DisplayString, + staAssurTime DisplayString, + staAssurTimestamp Counter32, + staAssurAssocTime Integer32, + staAssurAuthFailures Integer32, + staAssurErrorRate Integer32, + staAssurRetryRate Integer32, + staAssurDataRate Integer32, + staAssurRSSI Integer32, + staAssurSNR Integer32, + staAssurDistance Integer32, + staAssurDeviceType DisplayString, + staAssurDeviceClass DisplayString, + staAssurActiveAlarmTimestamp Counter32, + staAssurActiveAlarmType INTEGER, + staAssurAssocTimeTimestamp Counter32, + staAssurAuthFailuresTimestamp Counter32, + staAssurErrorRateTimestamp Counter32, + staAssurRetryRateTimestamp Counter32, + staAssurDataRateTimestamp Counter32, + staAssurRSSITimestamp Counter32, + staAssurSNRTimestamp Counter32, + staAssurDistanceTimestamp Counter32, + staAssurAssocTimeActive INTEGER, + staAssurAuthFailuresActive INTEGER, + staAssurErrorRateActive INTEGER, + staAssurRetryRateActive INTEGER, + staAssurDataRateActive INTEGER, + staAssurRSSIActive INTEGER, + staAssurSNRActive INTEGER, + staAssurDistanceActive INTEGER, + staAssurAlarmType INTEGER + } + + staAssurMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station MAC address" + ::= { stationAssurEntry 1 } + + staAssurIPAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station IP Address" + ::= { stationAssurEntry 2 } + + staAssurNetbiosName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station netbios name" + ::= { stationAssurEntry 3 } + + staAssurManufacturer OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Manufacturer of the station's network card" + ::= { stationAssurEntry 4 } + + staAssurTime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm time" + ::= { stationAssurEntry 5 } + + staAssurTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm time (in seconds)" + ::= { stationAssurEntry 6 } + + staAssurAssocTime OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Associated time" + ::= { stationAssurEntry 7 } + + staAssurAuthFailures OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of authentication failures" + ::= { stationAssurEntry 8 } + + staAssurErrorRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet error rate" + ::= { stationAssurEntry 9 } + + staAssurRetryRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet retry rate" + ::= { stationAssurEntry 10 } + + staAssurDataRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packet data rate" + ::= { stationAssurEntry 11 } + + staAssurRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Received signal strength" + ::= { stationAssurEntry 12 } + + staAssurSNR OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Signal to noise ratio" + ::= { stationAssurEntry 13 } + + staAssurDistance OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Distance from array" + ::= { stationAssurEntry 14 } + + staAssurDeviceType OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device type" + ::= { stationAssurEntry 15 } + + staAssurDeviceClass OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Station device class" + ::= { stationAssurEntry 16 } + + staAssurActiveAlarmTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last active alarm time (in seconds)" + ::= { stationAssurEntry 17 } + + staAssurActiveAlarmType OBJECT-TYPE + SYNTAX INTEGER { none(0), assoc-time(1), auth-fails(2), + error-rate(3), retry-rate(4), data-rate(5), + rssi(6), snr(7), distance(8) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last active alarm type" + ::= { stationAssurEntry 18 } + + staAssurAssocTimeTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last associated time alarm time (in seconds)" + ::= { stationAssurEntry 19 } + + staAssurAuthFailuresTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last authentication failures alarm time (in seconds)" + ::= { stationAssurEntry 20 } + + staAssurErrorRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet error rate alarm time (in seconds)" + ::= { stationAssurEntry 21 } + + staAssurRetryRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet retry rate alarm time (in seconds)" + ::= { stationAssurEntry 22 } + + staAssurDataRateTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last packet data rate alarm time (in seconds)" + ::= { stationAssurEntry 23 } + + staAssurRSSITimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last RSSI alarm time (in seconds)" + ::= { stationAssurEntry 24 } + + staAssurSNRTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last SNR alarm time (in seconds)" + ::= { stationAssurEntry 25 } + + staAssurDistanceTimestamp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last distance alarm time (in seconds)" + ::= { stationAssurEntry 26 } + + staAssurAssocTimeActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether associated time alarm is currently active" + ::= { stationAssurEntry 27 } + + staAssurAuthFailuresActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether authentication failures alarm is currently active" + ::= { stationAssurEntry 28 } + + staAssurErrorRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether error rate alarm is currently active" + ::= { stationAssurEntry 29 } + + staAssurRetryRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether retry rate alarm is currently active" + ::= { stationAssurEntry 30 } + + staAssurDataRateActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether data rate alarm is currently active" + ::= { stationAssurEntry 31 } + + staAssurRSSIActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether RSSI alarm is currently active" + ::= { stationAssurEntry 32 } + + staAssurSNRActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether SNR alarm is currently active" + ::= { stationAssurEntry 33 } + + staAssurDistanceActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether distance alarm is currently active" + ::= { stationAssurEntry 34 } + + staAssurAlarmType OBJECT-TYPE + SYNTAX INTEGER { none(0), assoc-time(1), auth-fails(2), + error-rate(3), retry-rate(4), data-rate(5), + rssi(6), snr(7), distance(8) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Last alarm type" + ::= { stationAssurEntry 35 } + + stationAssuranceTableClear OBJECT-TYPE + SYNTAX INTEGER { history(0), all (1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Clear station assurance table information" + ::= { stationAssurance 13 } + + stationAssuranceTablePeriod OBJECT-TYPE + SYNTAX Counter32(0..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify period for station assurance table entries (in seconds, 0 - all table entries)" + ::= { stationAssurance 14 } + + stationUnassociatedTablePeriod OBJECT-TYPE + SYNTAX Counter32(0..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify period for unassociated station table entries (in seconds, 0 - all table entries)" + ::= { stations 7 } + +-- +-- STATISTICS +-- + + ethStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF EthStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of ethernet statistics" + ::= { statistics 1 } + + ethStatsEntry OBJECT-TYPE + SYNTAX EthStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for ethernet statistics" + INDEX { ethStatsIndex } + ::= { ethStatsTable 1 } + + EthStatsEntry ::= SEQUENCE { + ethStatsIndex Integer32, + ethStatsIfaceName DisplayString, + ethStatsIfaceStatus INTEGER, + ethStatsIfaceLink INTEGER, + ethStatsIfaceDuplex INTEGER, + ethStatsIfaceSpeed Integer32, + ethStatsRxBytes Counter64, + ethStatsRxPackets Counter64, + ethStatsRxCompressed Counter64, + ethStatsRxMulticast Counter64, + ethStatsRxDropped Counter64, + ethStatsRxFifoErrors Counter64, + ethStatsRxFrameErrors Counter64, + ethStatsRxTotalErrors Counter64, + ethStatsTxBytes Counter64, + ethStatsTxPackets Counter64, + ethStatsTxCompressed Counter64, + ethStatsTxCarrierErrors Counter64, + ethStatsTxDropped Counter64, + ethStatsTxFifoErrors Counter64, + ethStatsTxCollisions Counter64, + ethStatsTxTotalErrors Counter64, + ethStatsTimePeriod Counter32 + } + + ethStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Ethernet statistics index" + ::= { ethStatsEntry 1 } + + ethStatsIfaceName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface name" + ::= { ethStatsEntry 2 } + + ethStatsIfaceStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface status" + ::= { ethStatsEntry 3 } + + ethStatsIfaceLink OBJECT-TYPE + SYNTAX INTEGER { down(0), up(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface link status" + ::= { ethStatsEntry 4 } + + ethStatsIfaceDuplex OBJECT-TYPE + SYNTAX INTEGER { half(0), full(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface duplex" + ::= { ethStatsEntry 5 } + + ethStatsIfaceSpeed OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface speed" + ::= { ethStatsEntry 6 } + + ethStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { ethStatsEntry 7 } + + ethStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { ethStatsEntry 8 } + + ethStatsRxCompressed OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Compressed packets received" + ::= { ethStatsEntry 9 } + + ethStatsRxMulticast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Multicast packets received" + ::= { ethStatsEntry 10 } + + ethStatsRxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx dropped packets" + ::= { ethStatsEntry 11 } + + ethStatsRxFifoErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx fifo errors" + ::= { ethStatsEntry 12 } + + ethStatsRxFrameErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx frame errors" + ::= { ethStatsEntry 13 } + + ethStatsRxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx total errors" + ::= { ethStatsEntry 14 } + + ethStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { ethStatsEntry 15 } + + ethStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { ethStatsEntry 16 } + + ethStatsTxCompressed OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Compressed packets transmitted" + ::= { ethStatsEntry 17 } + + ethStatsTxCarrierErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx carrier errors" + ::= { ethStatsEntry 18 } + + ethStatsTxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx dropped packets" + ::= { ethStatsEntry 19 } + + ethStatsTxFifoErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx fifo errors" + ::= { ethStatsEntry 20 } + + ethStatsTxCollisions OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx collisions" + ::= { ethStatsEntry 21 } + + ethStatsTxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx total errors" + ::= { ethStatsEntry 22 } + + ethStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which stats were collected" + ::= { ethStatsEntry 23 } + + iapStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF IapStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of IAP statistics" + ::= { statistics 2 } + + iapStatsEntry OBJECT-TYPE + SYNTAX IapStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for IAP statistics" + INDEX { iapStatsIndex } + ::= { iapStatsTable 1 } + + IapStatsEntry ::= SEQUENCE { + iapStatsIndex Integer32, + iapStatsIfaceName DisplayString, + iapStatsRxBytes Counter64, + iapStatsRxPackets Counter64, + iapStatsRxUnicast Counter64, + iapStatsRxMulticast Counter64, + iapStatsRxBroadcast Counter64, + iapStatsRxManagement Counter64, + iapStatsRxBeacons Counter64, + iapStatsRxRTS Counter64, + iapStatsRxCTS Counter64, + iapStatsRxFragments Counter64, + iapStatsRxTotalErrors Counter64, + iapStatsRxTotalRetries Counter64, + iapStatsRxDropped Counter64, + iapStatsRxUnassociated Counter64, + iapStatsRxCRCErrors Counter64, + iapStatsRxFragErrors Counter64, + iapStatsRxEncErrors Counter64, + iapStatsRxOverruns Counter64, + iapStatsRxDuplicates Counter64, + iapStatsRxRate1Bytes Counter64, + iapStatsRxRate1Packets Counter64, + iapStatsRxRate1Errors Counter64, + iapStatsRxRate1Retries Counter64, + iapStatsRxRate2Bytes Counter64, + iapStatsRxRate2Packets Counter64, + iapStatsRxRate2Errors Counter64, + iapStatsRxRate2Retries Counter64, + iapStatsRxRate5Bytes Counter64, + iapStatsRxRate5Packets Counter64, + iapStatsRxRate5Errors Counter64, + iapStatsRxRate5Retries Counter64, + iapStatsRxRate11Bytes Counter64, + iapStatsRxRate11Packets Counter64, + iapStatsRxRate11Errors Counter64, + iapStatsRxRate11Retries Counter64, + iapStatsRxRate6Bytes Counter64, + iapStatsRxRate6Packets Counter64, + iapStatsRxRate6Errors Counter64, + iapStatsRxRate6Retries Counter64, + iapStatsRxRate9Bytes Counter64, + iapStatsRxRate9Packets Counter64, + iapStatsRxRate9Errors Counter64, + iapStatsRxRate9Retries Counter64, + iapStatsRxRate12Bytes Counter64, + iapStatsRxRate12Packets Counter64, + iapStatsRxRate12Errors Counter64, + iapStatsRxRate12Retries Counter64, + iapStatsRxRate18Bytes Counter64, + iapStatsRxRate18Packets Counter64, + iapStatsRxRate18Errors Counter64, + iapStatsRxRate18Retries Counter64, + iapStatsRxRate24Bytes Counter64, + iapStatsRxRate24Packets Counter64, + iapStatsRxRate24Errors Counter64, + iapStatsRxRate24Retries Counter64, + iapStatsRxRate36Bytes Counter64, + iapStatsRxRate36Packets Counter64, + iapStatsRxRate36Errors Counter64, + iapStatsRxRate36Retries Counter64, + iapStatsRxRate48Bytes Counter64, + iapStatsRxRate48Packets Counter64, + iapStatsRxRate48Errors Counter64, + iapStatsRxRate48Retries Counter64, + iapStatsRxRate54Bytes Counter64, + iapStatsRxRate54Packets Counter64, + iapStatsRxRate54Errors Counter64, + iapStatsRxRate54Retries Counter64, + iapStatsTxBytes Counter64, + iapStatsTxPackets Counter64, + iapStatsTxUnicast Counter64, + iapStatsTxMulticast Counter64, + iapStatsTxBroadcast Counter64, + iapStatsTxManagement Counter64, + iapStatsTxBeacons Counter64, + iapStatsTxRTS Counter64, + iapStatsTxCTS Counter64, + iapStatsTxFragments Counter64, + iapStatsTxTotalErrors Counter64, + iapStatsTxTotalRetries Counter64, + iapStatsTxDropped Counter64, + iapStatsTxUnassociated Counter64, + iapStatsTxACKFailures Counter64, + iapStatsTxRTSFailures Counter64, + iapStatsTxRTSRetries Counter64, + iapStatsTxSingleRetries Counter64, + iapStatsTxMultipleRetries Counter64, + iapStatsTxRate1Bytes Counter64, + iapStatsTxRate1Packets Counter64, + iapStatsTxRate1Errors Counter64, + iapStatsTxRate1Retries Counter64, + iapStatsTxRate2Bytes Counter64, + iapStatsTxRate2Packets Counter64, + iapStatsTxRate2Errors Counter64, + iapStatsTxRate2Retries Counter64, + iapStatsTxRate5Bytes Counter64, + iapStatsTxRate5Packets Counter64, + iapStatsTxRate5Errors Counter64, + iapStatsTxRate5Retries Counter64, + iapStatsTxRate11Bytes Counter64, + iapStatsTxRate11Packets Counter64, + iapStatsTxRate11Errors Counter64, + iapStatsTxRate11Retries Counter64, + iapStatsTxRate6Bytes Counter64, + iapStatsTxRate6Packets Counter64, + iapStatsTxRate6Errors Counter64, + iapStatsTxRate6Retries Counter64, + iapStatsTxRate9Bytes Counter64, + iapStatsTxRate9Packets Counter64, + iapStatsTxRate9Errors Counter64, + iapStatsTxRate9Retries Counter64, + iapStatsTxRate12Bytes Counter64, + iapStatsTxRate12Packets Counter64, + iapStatsTxRate12Errors Counter64, + iapStatsTxRate12Retries Counter64, + iapStatsTxRate18Bytes Counter64, + iapStatsTxRate18Packets Counter64, + iapStatsTxRate18Errors Counter64, + iapStatsTxRate18Retries Counter64, + iapStatsTxRate24Bytes Counter64, + iapStatsTxRate24Packets Counter64, + iapStatsTxRate24Errors Counter64, + iapStatsTxRate24Retries Counter64, + iapStatsTxRate36Bytes Counter64, + iapStatsTxRate36Packets Counter64, + iapStatsTxRate36Errors Counter64, + iapStatsTxRate36Retries Counter64, + iapStatsTxRate48Bytes Counter64, + iapStatsTxRate48Packets Counter64, + iapStatsTxRate48Errors Counter64, + iapStatsTxRate48Retries Counter64, + iapStatsTxRate54Bytes Counter64, + iapStatsTxRate54Packets Counter64, + iapStatsTxRate54Errors Counter64, + iapStatsTxRate54Retries Counter64, + iapStatsTxUtilization Counter64, + iapStatsNoiseTotal Counter64, + iapStatsNoiseDenominator Counter64, + iapStatsTimePeriod Counter32 + } + + iapStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "IAP statistics index" + ::= { iapStatsEntry 1 } + + iapStatsIfaceName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface name" + ::= { iapStatsEntry 2 } + + iapStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { iapStatsEntry 3 } + + iapStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { iapStatsEntry 4 } + + iapStatsRxUnicast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Unicast packets received" + ::= { iapStatsEntry 5 } + + iapStatsRxMulticast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Multicast packets received" + ::= { iapStatsEntry 6 } + + iapStatsRxBroadcast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Broadcast packets received" + ::= { iapStatsEntry 7 } + + iapStatsRxManagement OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Management packets received" + ::= { iapStatsEntry 8 } + + iapStatsRxBeacons OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Beacons received" + ::= { iapStatsEntry 9 } + + iapStatsRxRTS OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "RTS packets received" + ::= { iapStatsEntry 10 } + + iapStatsRxCTS OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "CTS packets received" + ::= { iapStatsEntry 11 } + + iapStatsRxFragments OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Fragments received" + ::= { iapStatsEntry 12 } + + iapStatsRxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx total errors" + ::= { iapStatsEntry 13 } + + iapStatsRxTotalRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx total retries" + ::= { iapStatsEntry 14 } + + iapStatsRxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx dropped packets" + ::= { iapStatsEntry 15 } + + iapStatsRxUnassociated OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx packets from unassociated stations" + ::= { iapStatsEntry 16 } + + iapStatsRxCRCErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx CRC errors" + ::= { iapStatsEntry 17 } + + iapStatsRxFragErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx fragment errors" + ::= { iapStatsEntry 18 } + + iapStatsRxEncErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx encryption errors" + ::= { iapStatsEntry 19 } + + iapStatsRxOverruns OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx overruns" + ::= { iapStatsEntry 20 } + + iapStatsRxDuplicates OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx duplicates" + ::= { iapStatsEntry 21 } + + iapStatsRxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 1Mbps" + ::= { iapStatsEntry 22 } + + iapStatsRxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 1Mbps" + ::= { iapStatsEntry 23 } + + iapStatsRxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 1Mbps" + ::= { iapStatsEntry 24 } + + iapStatsRxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 1Mbps" + ::= { iapStatsEntry 25 } + + iapStatsRxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 2Mbps" + ::= { iapStatsEntry 26 } + + iapStatsRxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 2Mbps" + ::= { iapStatsEntry 27 } + + iapStatsRxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 2Mbps" + ::= { iapStatsEntry 28 } + + iapStatsRxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 2Mbps" + ::= { iapStatsEntry 29 } + + iapStatsRxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 5.5Mbps" + ::= { iapStatsEntry 30 } + + iapStatsRxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 5.5Mbps" + ::= { iapStatsEntry 31 } + + iapStatsRxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 5.5Mbps" + ::= { iapStatsEntry 32 } + + iapStatsRxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 5.5Mbps" + ::= { iapStatsEntry 33 } + + iapStatsRxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 11Mbps" + ::= { iapStatsEntry 34 } + + iapStatsRxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 11Mbps" + ::= { iapStatsEntry 35 } + + iapStatsRxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 11Mbps" + ::= { iapStatsEntry 36 } + + iapStatsRxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 11Mbps" + ::= { iapStatsEntry 37 } + + iapStatsRxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 6Mbps" + ::= { iapStatsEntry 38 } + + iapStatsRxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 6Mbps" + ::= { iapStatsEntry 39 } + + iapStatsRxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 6Mbps" + ::= { iapStatsEntry 40 } + + iapStatsRxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 6Mbps" + ::= { iapStatsEntry 41 } + + iapStatsRxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 9Mbps" + ::= { iapStatsEntry 42 } + + iapStatsRxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 9Mbps" + ::= { iapStatsEntry 43 } + + iapStatsRxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 9Mbps" + ::= { iapStatsEntry 44 } + + iapStatsRxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 9Mbps" + ::= { iapStatsEntry 45 } + + iapStatsRxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 12Mbps" + ::= { iapStatsEntry 46 } + + iapStatsRxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 12Mbps" + ::= { iapStatsEntry 47 } + + iapStatsRxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 12Mbps" + ::= { iapStatsEntry 48 } + + iapStatsRxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 12Mbps" + ::= { iapStatsEntry 49 } + + iapStatsRxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 18Mbps" + ::= { iapStatsEntry 50 } + + iapStatsRxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 18Mbps" + ::= { iapStatsEntry 51 } + + iapStatsRxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 18Mbps" + ::= { iapStatsEntry 52 } + + iapStatsRxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 18Mbps" + ::= { iapStatsEntry 53 } + + iapStatsRxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 24Mbps" + ::= { iapStatsEntry 54 } + + iapStatsRxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 24Mbps" + ::= { iapStatsEntry 55 } + + iapStatsRxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 24Mbps" + ::= { iapStatsEntry 56 } + + iapStatsRxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 24Mbps" + ::= { iapStatsEntry 57 } + + iapStatsRxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 36Mbps" + ::= { iapStatsEntry 58 } + + iapStatsRxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 36Mbps" + ::= { iapStatsEntry 59 } + + iapStatsRxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 36Mbps" + ::= { iapStatsEntry 60 } + + iapStatsRxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 36Mbps" + ::= { iapStatsEntry 61 } + + iapStatsRxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 48Mbps" + ::= { iapStatsEntry 62 } + + iapStatsRxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 48Mbps" + ::= { iapStatsEntry 63 } + + iapStatsRxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 48Mbps" + ::= { iapStatsEntry 64 } + + iapStatsRxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 48Mbps" + ::= { iapStatsEntry 65 } + + iapStatsRxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 54Mbps" + ::= { iapStatsEntry 66 } + + iapStatsRxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 54Mbps" + ::= { iapStatsEntry 67 } + + iapStatsRxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 54Mbps" + ::= { iapStatsEntry 68 } + + iapStatsRxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 54Mbps" + ::= { iapStatsEntry 69 } + + iapStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { iapStatsEntry 70 } + + iapStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { iapStatsEntry 71 } + + iapStatsTxUnicast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Unicast packets transmitted" + ::= { iapStatsEntry 72 } + + iapStatsTxMulticast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Multicast packets transmitted" + ::= { iapStatsEntry 73 } + + iapStatsTxBroadcast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Broadcast packets transmitted" + ::= { iapStatsEntry 74 } + + iapStatsTxManagement OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Management packets transmitted" + ::= { iapStatsEntry 75 } + + iapStatsTxBeacons OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Beacons transmitted" + ::= { iapStatsEntry 76 } + + iapStatsTxRTS OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "RTS packets transmitted" + ::= { iapStatsEntry 77 } + + iapStatsTxCTS OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "CTS packets transmitted" + ::= { iapStatsEntry 78 } + + iapStatsTxFragments OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Fragments transmitted" + ::= { iapStatsEntry 79 } + + iapStatsTxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx total errors" + ::= { iapStatsEntry 80 } + + iapStatsTxTotalRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx total retries" + ::= { iapStatsEntry 81 } + + iapStatsTxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx dropped packets" + ::= { iapStatsEntry 82 } + + iapStatsTxUnassociated OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx packets to unassociated stations" + ::= { iapStatsEntry 83 } + + iapStatsTxACKFailures OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx ACK failures" + ::= { iapStatsEntry 84 } + + iapStatsTxRTSFailures OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx RTS failures" + ::= { iapStatsEntry 85 } + + iapStatsTxRTSRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx RTS retries" + ::= { iapStatsEntry 86 } + + iapStatsTxSingleRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx single retries" + ::= { iapStatsEntry 87 } + + iapStatsTxMultipleRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx multiple retries" + ::= { iapStatsEntry 88 } + + iapStatsTxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 1Mbps" + ::= { iapStatsEntry 89 } + + iapStatsTxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 1Mbps" + ::= { iapStatsEntry 90 } + + iapStatsTxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 1Mbps" + ::= { iapStatsEntry 91 } + + iapStatsTxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 1Mbps" + ::= { iapStatsEntry 92 } + + iapStatsTxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 2Mbps" + ::= { iapStatsEntry 93 } + + iapStatsTxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 2Mbps" + ::= { iapStatsEntry 94 } + + iapStatsTxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 2Mbps" + ::= { iapStatsEntry 95 } + + iapStatsTxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 2Mbps" + ::= { iapStatsEntry 96 } + + iapStatsTxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 5.5Mbps" + ::= { iapStatsEntry 97 } + + iapStatsTxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 5.5Mbps" + ::= { iapStatsEntry 98 } + + iapStatsTxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 5.5Mbps" + ::= { iapStatsEntry 99 } + + iapStatsTxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 5.5Mbps" + ::= { iapStatsEntry 100 } + + iapStatsTxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 11Mbps" + ::= { iapStatsEntry 101 } + + iapStatsTxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 11Mbps" + ::= { iapStatsEntry 102 } + + iapStatsTxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 11Mbps" + ::= { iapStatsEntry 103 } + + iapStatsTxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 11Mbps" + ::= { iapStatsEntry 104 } + + iapStatsTxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 6Mbps" + ::= { iapStatsEntry 105 } + + iapStatsTxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 6Mbps" + ::= { iapStatsEntry 106 } + + iapStatsTxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 6Mbps" + ::= { iapStatsEntry 107 } + + iapStatsTxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 6Mbps" + ::= { iapStatsEntry 108 } + + iapStatsTxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 9Mbps" + ::= { iapStatsEntry 109 } + + iapStatsTxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 9Mbps" + ::= { iapStatsEntry 110 } + + iapStatsTxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 9Mbps" + ::= { iapStatsEntry 111 } + + iapStatsTxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 9Mbps" + ::= { iapStatsEntry 112 } + + iapStatsTxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 12Mbps" + ::= { iapStatsEntry 113 } + + iapStatsTxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 12Mbps" + ::= { iapStatsEntry 114 } + + iapStatsTxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 12Mbps" + ::= { iapStatsEntry 115 } + + iapStatsTxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 12Mbps" + ::= { iapStatsEntry 116 } + + iapStatsTxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 18Mbps" + ::= { iapStatsEntry 117 } + + iapStatsTxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 18Mbps" + ::= { iapStatsEntry 118 } + + iapStatsTxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 18Mbps" + ::= { iapStatsEntry 119 } + + iapStatsTxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 18Mbps" + ::= { iapStatsEntry 120 } + + iapStatsTxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 24Mbps" + ::= { iapStatsEntry 121 } + + iapStatsTxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 24Mbps" + ::= { iapStatsEntry 122 } + + iapStatsTxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 24Mbps" + ::= { iapStatsEntry 123 } + + iapStatsTxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 24Mbps" + ::= { iapStatsEntry 124 } + + iapStatsTxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 36Mbps" + ::= { iapStatsEntry 125 } + + iapStatsTxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 36Mbps" + ::= { iapStatsEntry 126 } + + iapStatsTxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 36Mbps" + ::= { iapStatsEntry 127 } + + iapStatsTxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 36Mbps" + ::= { iapStatsEntry 128 } + + iapStatsTxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 48Mbps" + ::= { iapStatsEntry 129 } + + iapStatsTxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 48Mbps" + ::= { iapStatsEntry 130 } + + iapStatsTxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 48Mbps" + ::= { iapStatsEntry 131 } + + iapStatsTxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 48Mbps" + ::= { iapStatsEntry 132 } + + iapStatsTxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 54Mbps" + ::= { iapStatsEntry 133 } + + iapStatsTxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 54Mbps" + ::= { iapStatsEntry 134 } + + iapStatsTxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 54Mbps" + ::= { iapStatsEntry 135 } + + iapStatsTxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 54Mbps" + ::= { iapStatsEntry 136 } + + iapStatsTxUtilization OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total mS during which IAP has been transmitting" + ::= { iapStatsEntry 137 } + + iapStatsNoiseTotal OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total silence*bytes for all packets received by IAP" + ::= { iapStatsEntry 138 } + + iapStatsNoiseDenominator OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total bytes in all packets received by IAP" + ::= { iapStatsEntry 139 } + + iapStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which stats were collected" + ::= { iapStatsEntry 140 } + + stationStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of station statistics" + ::= { statistics 3 } + + stationStatsEntry OBJECT-TYPE + SYNTAX StationStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for station statistics" + INDEX { stationStatsIndex } + ::= { stationStatsTable 1 } + + StationStatsEntry ::= SEQUENCE { + stationStatsIndex Integer32, + stationStatsMACAddress DisplayString, + stationStatsRxBytes Counter64, + stationStatsRxPackets Counter64, + stationStatsRxErrors Counter64, + stationStatsRxRetries Counter64, + stationStatsRxRate1Bytes Counter64, + stationStatsRxRate1Packets Counter64, + stationStatsRxRate1Errors Counter64, + stationStatsRxRate1Retries Counter64, + stationStatsRxRate2Bytes Counter64, + stationStatsRxRate2Packets Counter64, + stationStatsRxRate2Errors Counter64, + stationStatsRxRate2Retries Counter64, + stationStatsRxRate5Bytes Counter64, + stationStatsRxRate5Packets Counter64, + stationStatsRxRate5Errors Counter64, + stationStatsRxRate5Retries Counter64, + stationStatsRxRate11Bytes Counter64, + stationStatsRxRate11Packets Counter64, + stationStatsRxRate11Errors Counter64, + stationStatsRxRate11Retries Counter64, + stationStatsRxRate6Bytes Counter64, + stationStatsRxRate6Packets Counter64, + stationStatsRxRate6Errors Counter64, + stationStatsRxRate6Retries Counter64, + stationStatsRxRate9Bytes Counter64, + stationStatsRxRate9Packets Counter64, + stationStatsRxRate9Errors Counter64, + stationStatsRxRate9Retries Counter64, + stationStatsRxRate12Bytes Counter64, + stationStatsRxRate12Packets Counter64, + stationStatsRxRate12Errors Counter64, + stationStatsRxRate12Retries Counter64, + stationStatsRxRate18Bytes Counter64, + stationStatsRxRate18Packets Counter64, + stationStatsRxRate18Errors Counter64, + stationStatsRxRate18Retries Counter64, + stationStatsRxRate24Bytes Counter64, + stationStatsRxRate24Packets Counter64, + stationStatsRxRate24Errors Counter64, + stationStatsRxRate24Retries Counter64, + stationStatsRxRate36Bytes Counter64, + stationStatsRxRate36Packets Counter64, + stationStatsRxRate36Errors Counter64, + stationStatsRxRate36Retries Counter64, + stationStatsRxRate48Bytes Counter64, + stationStatsRxRate48Packets Counter64, + stationStatsRxRate48Errors Counter64, + stationStatsRxRate48Retries Counter64, + stationStatsRxRate54Bytes Counter64, + stationStatsRxRate54Packets Counter64, + stationStatsRxRate54Errors Counter64, + stationStatsRxRate54Retries Counter64, + stationStatsTxBytes Counter64, + stationStatsTxPackets Counter64, + stationStatsTxErrors Counter64, + stationStatsTxRetries Counter64, + stationStatsTxRate1Bytes Counter64, + stationStatsTxRate1Packets Counter64, + stationStatsTxRate1Errors Counter64, + stationStatsTxRate1Retries Counter64, + stationStatsTxRate2Bytes Counter64, + stationStatsTxRate2Packets Counter64, + stationStatsTxRate2Errors Counter64, + stationStatsTxRate2Retries Counter64, + stationStatsTxRate5Bytes Counter64, + stationStatsTxRate5Packets Counter64, + stationStatsTxRate5Errors Counter64, + stationStatsTxRate5Retries Counter64, + stationStatsTxRate11Bytes Counter64, + stationStatsTxRate11Packets Counter64, + stationStatsTxRate11Errors Counter64, + stationStatsTxRate11Retries Counter64, + stationStatsTxRate6Bytes Counter64, + stationStatsTxRate6Packets Counter64, + stationStatsTxRate6Errors Counter64, + stationStatsTxRate6Retries Counter64, + stationStatsTxRate9Bytes Counter64, + stationStatsTxRate9Packets Counter64, + stationStatsTxRate9Errors Counter64, + stationStatsTxRate9Retries Counter64, + stationStatsTxRate12Bytes Counter64, + stationStatsTxRate12Packets Counter64, + stationStatsTxRate12Errors Counter64, + stationStatsTxRate12Retries Counter64, + stationStatsTxRate18Bytes Counter64, + stationStatsTxRate18Packets Counter64, + stationStatsTxRate18Errors Counter64, + stationStatsTxRate18Retries Counter64, + stationStatsTxRate24Bytes Counter64, + stationStatsTxRate24Packets Counter64, + stationStatsTxRate24Errors Counter64, + stationStatsTxRate24Retries Counter64, + stationStatsTxRate36Bytes Counter64, + stationStatsTxRate36Packets Counter64, + stationStatsTxRate36Errors Counter64, + stationStatsTxRate36Retries Counter64, + stationStatsTxRate48Bytes Counter64, + stationStatsTxRate48Packets Counter64, + stationStatsTxRate48Errors Counter64, + stationStatsTxRate48Retries Counter64, + stationStatsTxRate54Bytes Counter64, + stationStatsTxRate54Packets Counter64, + stationStatsTxRate54Errors Counter64, + stationStatsTxRate54Retries Counter64, + stationStatsTimePeriod Counter32 + } + + stationStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station statistics index" + ::= { stationStatsEntry 1 } + + stationStatsMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationStatsEntry 2 } + + stationStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { stationStatsEntry 3 } + + stationStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { stationStatsEntry 4 } + + stationStatsRxErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors" + ::= { stationStatsEntry 5 } + + stationStatsRxRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries" + ::= { stationStatsEntry 6 } + + stationStatsRxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 1Mbps" + ::= { stationStatsEntry 7 } + + stationStatsRxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 1Mbps" + ::= { stationStatsEntry 8 } + + stationStatsRxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 1Mbps" + ::= { stationStatsEntry 9 } + + stationStatsRxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 1Mbps" + ::= { stationStatsEntry 10 } + + stationStatsRxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 2Mbps" + ::= { stationStatsEntry 11 } + + stationStatsRxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 2Mbps" + ::= { stationStatsEntry 12 } + + stationStatsRxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 2Mbps" + ::= { stationStatsEntry 13 } + + stationStatsRxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 2Mbps" + ::= { stationStatsEntry 14 } + + stationStatsRxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 5.5Mbps" + ::= { stationStatsEntry 15 } + + stationStatsRxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 5.5Mbps" + ::= { stationStatsEntry 16 } + + stationStatsRxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 5.5Mbps" + ::= { stationStatsEntry 17 } + + stationStatsRxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 5.5Mbps" + ::= { stationStatsEntry 18 } + + stationStatsRxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 11Mbps" + ::= { stationStatsEntry 19 } + + stationStatsRxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 11Mbps" + ::= { stationStatsEntry 20 } + + stationStatsRxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 11Mbps" + ::= { stationStatsEntry 21 } + + stationStatsRxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 11Mbps" + ::= { stationStatsEntry 22 } + + stationStatsRxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 6Mbps" + ::= { stationStatsEntry 23 } + + stationStatsRxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 6Mbps" + ::= { stationStatsEntry 24 } + + stationStatsRxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 6Mbps" + ::= { stationStatsEntry 25 } + + stationStatsRxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 6Mbps" + ::= { stationStatsEntry 26 } + + stationStatsRxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 9Mbps" + ::= { stationStatsEntry 27 } + + stationStatsRxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 9Mbps" + ::= { stationStatsEntry 28 } + + stationStatsRxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 9Mbps" + ::= { stationStatsEntry 29 } + + stationStatsRxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 9Mbps" + ::= { stationStatsEntry 30 } + + stationStatsRxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 12Mbps" + ::= { stationStatsEntry 31 } + + stationStatsRxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 12Mbps" + ::= { stationStatsEntry 32 } + + stationStatsRxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 12Mbps" + ::= { stationStatsEntry 33 } + + stationStatsRxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 12Mbps" + ::= { stationStatsEntry 34 } + + stationStatsRxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 18Mbps" + ::= { stationStatsEntry 35 } + + stationStatsRxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 18Mbps" + ::= { stationStatsEntry 36 } + + stationStatsRxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 18Mbps" + ::= { stationStatsEntry 37 } + + stationStatsRxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 18Mbps" + ::= { stationStatsEntry 38 } + + stationStatsRxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 24Mbps" + ::= { stationStatsEntry 39 } + + stationStatsRxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 24Mbps" + ::= { stationStatsEntry 40 } + + stationStatsRxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 24Mbps" + ::= { stationStatsEntry 41 } + + stationStatsRxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 24Mbps" + ::= { stationStatsEntry 42 } + + stationStatsRxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 36Mbps" + ::= { stationStatsEntry 43 } + + stationStatsRxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 36Mbps" + ::= { stationStatsEntry 44 } + + stationStatsRxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 36Mbps" + ::= { stationStatsEntry 45 } + + stationStatsRxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 36Mbps" + ::= { stationStatsEntry 46 } + + stationStatsRxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 48Mbps" + ::= { stationStatsEntry 47 } + + stationStatsRxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 48Mbps" + ::= { stationStatsEntry 48 } + + stationStatsRxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 48Mbps" + ::= { stationStatsEntry 49 } + + stationStatsRxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 48Mbps" + ::= { stationStatsEntry 50 } + + stationStatsRxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 54Mbps" + ::= { stationStatsEntry 51 } + + stationStatsRxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 54Mbps" + ::= { stationStatsEntry 52 } + + stationStatsRxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 54Mbps" + ::= { stationStatsEntry 53 } + + stationStatsRxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 54Mbps" + ::= { stationStatsEntry 54 } + + stationStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { stationStatsEntry 55 } + + stationStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { stationStatsEntry 56 } + + stationStatsTxErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors" + ::= { stationStatsEntry 57 } + + stationStatsTxRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries" + ::= { stationStatsEntry 58 } + + stationStatsTxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 1Mbps" + ::= { stationStatsEntry 59 } + + stationStatsTxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 1Mbps" + ::= { stationStatsEntry 60 } + + stationStatsTxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 1Mbps" + ::= { stationStatsEntry 61 } + + stationStatsTxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 1Mbps" + ::= { stationStatsEntry 62 } + + stationStatsTxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 2Mbps" + ::= { stationStatsEntry 63 } + + stationStatsTxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 2Mbps" + ::= { stationStatsEntry 64 } + + stationStatsTxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 2Mbps" + ::= { stationStatsEntry 65 } + + stationStatsTxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 2Mbps" + ::= { stationStatsEntry 66 } + + stationStatsTxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 5.5Mbps" + ::= { stationStatsEntry 67 } + + stationStatsTxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 5.5Mbps" + ::= { stationStatsEntry 68 } + + stationStatsTxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 5.5Mbps" + ::= { stationStatsEntry 69 } + + stationStatsTxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 5.5Mbps" + ::= { stationStatsEntry 70 } + + stationStatsTxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 11Mbps" + ::= { stationStatsEntry 71 } + + stationStatsTxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 11Mbps" + ::= { stationStatsEntry 72 } + + stationStatsTxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 11Mbps" + ::= { stationStatsEntry 73 } + + stationStatsTxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 11Mbps" + ::= { stationStatsEntry 74 } + + stationStatsTxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 6Mbps" + ::= { stationStatsEntry 75 } + + stationStatsTxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 6Mbps" + ::= { stationStatsEntry 76 } + + stationStatsTxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 6Mbps" + ::= { stationStatsEntry 77 } + + stationStatsTxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 6Mbps" + ::= { stationStatsEntry 78 } + + stationStatsTxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 9Mbps" + ::= { stationStatsEntry 79 } + + stationStatsTxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 9Mbps" + ::= { stationStatsEntry 80 } + + stationStatsTxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 9Mbps" + ::= { stationStatsEntry 81 } + + stationStatsTxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 9Mbps" + ::= { stationStatsEntry 82 } + + stationStatsTxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 12Mbps" + ::= { stationStatsEntry 83 } + + stationStatsTxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 12Mbps" + ::= { stationStatsEntry 84 } + + stationStatsTxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 12Mbps" + ::= { stationStatsEntry 85 } + + stationStatsTxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 12Mbps" + ::= { stationStatsEntry 86 } + + stationStatsTxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 18Mbps" + ::= { stationStatsEntry 87 } + + stationStatsTxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 18Mbps" + ::= { stationStatsEntry 88 } + + stationStatsTxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 18Mbps" + ::= { stationStatsEntry 89 } + + stationStatsTxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 18Mbps" + ::= { stationStatsEntry 90 } + + stationStatsTxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 24Mbps" + ::= { stationStatsEntry 91 } + + stationStatsTxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 24Mbps" + ::= { stationStatsEntry 92 } + + stationStatsTxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 24Mbps" + ::= { stationStatsEntry 93 } + + stationStatsTxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 24Mbps" + ::= { stationStatsEntry 94 } + + stationStatsTxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 36Mbps" + ::= { stationStatsEntry 95 } + + stationStatsTxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 36Mbps" + ::= { stationStatsEntry 96 } + + stationStatsTxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 36Mbps" + ::= { stationStatsEntry 97 } + + stationStatsTxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 36Mbps" + ::= { stationStatsEntry 98 } + + stationStatsTxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 48Mbps" + ::= { stationStatsEntry 99 } + + stationStatsTxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 48Mbps" + ::= { stationStatsEntry 100 } + + stationStatsTxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 48Mbps" + ::= { stationStatsEntry 101 } + + stationStatsTxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 48Mbps" + ::= { stationStatsEntry 102 } + + stationStatsTxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 54Mbps" + ::= { stationStatsEntry 103 } + + stationStatsTxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 54Mbps" + ::= { stationStatsEntry 104 } + + stationStatsTxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 54Mbps" + ::= { stationStatsEntry 105 } + + stationStatsTxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 54Mbps" + ::= { stationStatsEntry 106 } + + stationStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which stats were collected" + ::= { stationStatsEntry 107 } + + vlanStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of VLAN statistics" + ::= { statistics 4 } + + vlanStatsEntry OBJECT-TYPE + SYNTAX VlanStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for VLAN statistics" + INDEX { vlanStatsIndex } + ::= { vlanStatsTable 1 } + + VlanStatsEntry ::= SEQUENCE { + vlanStatsIndex Integer32, + vlanStatsName DisplayString, + vlanStatsNumber Integer32, + vlanStatsRxBytes Counter64, + vlanStatsRxPackets Counter64, + vlanStatsRxCompressed Counter64, + vlanStatsRxMulticast Counter64, + vlanStatsRxDropped Counter64, + vlanStatsRxFifoErrors Counter64, + vlanStatsRxFrameErrors Counter64, + vlanStatsRxTotalErrors Counter64, + vlanStatsTxBytes Counter64, + vlanStatsTxPackets Counter64, + vlanStatsTxCompressed Counter64, + vlanStatsTxCarrierErrors Counter64, + vlanStatsTxDropped Counter64, + vlanStatsTxFifoErrors Counter64, + vlanStatsTxCollisions Counter64, + vlanStatsTxTotalErrors Counter64, + vlanStatsTimePeriod Counter32 + } + + vlanStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN statistics index" + ::= { vlanStatsEntry 1 } + + vlanStatsName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN name" + ::= { vlanStatsEntry 2 } + + vlanStatsNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN number" + ::= { vlanStatsEntry 3 } + + vlanStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { vlanStatsEntry 4 } + + vlanStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { vlanStatsEntry 5 } + + vlanStatsRxCompressed OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Compressed packets received" + ::= { vlanStatsEntry 6 } + + vlanStatsRxMulticast OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Multicast packets received" + ::= { vlanStatsEntry 7 } + + vlanStatsRxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx dropped packets" + ::= { vlanStatsEntry 8 } + + vlanStatsRxFifoErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx fifo errors" + ::= { vlanStatsEntry 9 } + + vlanStatsRxFrameErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx frame errors" + ::= { vlanStatsEntry 10 } + + vlanStatsRxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx total errors" + ::= { vlanStatsEntry 11 } + + vlanStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { vlanStatsEntry 12 } + + vlanStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { vlanStatsEntry 13 } + + vlanStatsTxCompressed OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Compressed packets transmitted" + ::= { vlanStatsEntry 14 } + + vlanStatsTxCarrierErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx carrier errors" + ::= { vlanStatsEntry 15 } + + vlanStatsTxDropped OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx dropped packets" + ::= { vlanStatsEntry 16 } + + vlanStatsTxFifoErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx fifo errors" + ::= { vlanStatsEntry 17 } + + vlanStatsTxCollisions OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx collisions" + ::= { vlanStatsEntry 18 } + + vlanStatsTxTotalErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx total errors" + ::= { vlanStatsEntry 19 } + + vlanStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which stats were collected" + ::= { vlanStatsEntry 20 } + + wdsStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF WdsStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of statistics for WDS links" + ::= { statistics 5 } + + wdsStatsEntry OBJECT-TYPE + SYNTAX WdsStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for WDS link statistics" + INDEX { wdsStatsIndex } + ::= { wdsStatsTable 1 } + + WdsStatsEntry ::= SEQUENCE { + wdsStatsIndex Integer32, + wdsStatsLinkName DisplayString, + wdsStatsRxBytes Counter64, + wdsStatsRxPackets Counter64, + wdsStatsRxErrors Counter64, + wdsStatsRxRetries Counter64, + wdsStatsRxRate1Bytes Counter64, + wdsStatsRxRate1Packets Counter64, + wdsStatsRxRate1Errors Counter64, + wdsStatsRxRate1Retries Counter64, + wdsStatsRxRate2Bytes Counter64, + wdsStatsRxRate2Packets Counter64, + wdsStatsRxRate2Errors Counter64, + wdsStatsRxRate2Retries Counter64, + wdsStatsRxRate5Bytes Counter64, + wdsStatsRxRate5Packets Counter64, + wdsStatsRxRate5Errors Counter64, + wdsStatsRxRate5Retries Counter64, + wdsStatsRxRate11Bytes Counter64, + wdsStatsRxRate11Packets Counter64, + wdsStatsRxRate11Errors Counter64, + wdsStatsRxRate11Retries Counter64, + wdsStatsRxRate6Bytes Counter64, + wdsStatsRxRate6Packets Counter64, + wdsStatsRxRate6Errors Counter64, + wdsStatsRxRate6Retries Counter64, + wdsStatsRxRate9Bytes Counter64, + wdsStatsRxRate9Packets Counter64, + wdsStatsRxRate9Errors Counter64, + wdsStatsRxRate9Retries Counter64, + wdsStatsRxRate12Bytes Counter64, + wdsStatsRxRate12Packets Counter64, + wdsStatsRxRate12Errors Counter64, + wdsStatsRxRate12Retries Counter64, + wdsStatsRxRate18Bytes Counter64, + wdsStatsRxRate18Packets Counter64, + wdsStatsRxRate18Errors Counter64, + wdsStatsRxRate18Retries Counter64, + wdsStatsRxRate24Bytes Counter64, + wdsStatsRxRate24Packets Counter64, + wdsStatsRxRate24Errors Counter64, + wdsStatsRxRate24Retries Counter64, + wdsStatsRxRate36Bytes Counter64, + wdsStatsRxRate36Packets Counter64, + wdsStatsRxRate36Errors Counter64, + wdsStatsRxRate36Retries Counter64, + wdsStatsRxRate48Bytes Counter64, + wdsStatsRxRate48Packets Counter64, + wdsStatsRxRate48Errors Counter64, + wdsStatsRxRate48Retries Counter64, + wdsStatsRxRate54Bytes Counter64, + wdsStatsRxRate54Packets Counter64, + wdsStatsRxRate54Errors Counter64, + wdsStatsRxRate54Retries Counter64, + wdsStatsTxBytes Counter64, + wdsStatsTxPackets Counter64, + wdsStatsTxErrors Counter64, + wdsStatsTxRetries Counter64, + wdsStatsTxRate1Bytes Counter64, + wdsStatsTxRate1Packets Counter64, + wdsStatsTxRate1Errors Counter64, + wdsStatsTxRate1Retries Counter64, + wdsStatsTxRate2Bytes Counter64, + wdsStatsTxRate2Packets Counter64, + wdsStatsTxRate2Errors Counter64, + wdsStatsTxRate2Retries Counter64, + wdsStatsTxRate5Bytes Counter64, + wdsStatsTxRate5Packets Counter64, + wdsStatsTxRate5Errors Counter64, + wdsStatsTxRate5Retries Counter64, + wdsStatsTxRate11Bytes Counter64, + wdsStatsTxRate11Packets Counter64, + wdsStatsTxRate11Errors Counter64, + wdsStatsTxRate11Retries Counter64, + wdsStatsTxRate6Bytes Counter64, + wdsStatsTxRate6Packets Counter64, + wdsStatsTxRate6Errors Counter64, + wdsStatsTxRate6Retries Counter64, + wdsStatsTxRate9Bytes Counter64, + wdsStatsTxRate9Packets Counter64, + wdsStatsTxRate9Errors Counter64, + wdsStatsTxRate9Retries Counter64, + wdsStatsTxRate12Bytes Counter64, + wdsStatsTxRate12Packets Counter64, + wdsStatsTxRate12Errors Counter64, + wdsStatsTxRate12Retries Counter64, + wdsStatsTxRate18Bytes Counter64, + wdsStatsTxRate18Packets Counter64, + wdsStatsTxRate18Errors Counter64, + wdsStatsTxRate18Retries Counter64, + wdsStatsTxRate24Bytes Counter64, + wdsStatsTxRate24Packets Counter64, + wdsStatsTxRate24Errors Counter64, + wdsStatsTxRate24Retries Counter64, + wdsStatsTxRate36Bytes Counter64, + wdsStatsTxRate36Packets Counter64, + wdsStatsTxRate36Errors Counter64, + wdsStatsTxRate36Retries Counter64, + wdsStatsTxRate48Bytes Counter64, + wdsStatsTxRate48Packets Counter64, + wdsStatsTxRate48Errors Counter64, + wdsStatsTxRate48Retries Counter64, + wdsStatsTxRate54Bytes Counter64, + wdsStatsTxRate54Packets Counter64, + wdsStatsTxRate54Errors Counter64, + wdsStatsTxRate54Retries Counter64 + } + + wdsStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WDS link statistics index" + ::= { wdsStatsEntry 1 } + + wdsStatsLinkName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Name of the WDS lnk" + ::= { wdsStatsEntry 2 } + + wdsStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { wdsStatsEntry 3 } + + wdsStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { wdsStatsEntry 4 } + + wdsStatsRxErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors" + ::= { wdsStatsEntry 5 } + + wdsStatsRxRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries" + ::= { wdsStatsEntry 6 } + + wdsStatsRxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 1Mbps" + ::= { wdsStatsEntry 7 } + + wdsStatsRxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 1Mbps" + ::= { wdsStatsEntry 8 } + + wdsStatsRxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 1Mbps" + ::= { wdsStatsEntry 9 } + + wdsStatsRxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 1Mbps" + ::= { wdsStatsEntry 10 } + + wdsStatsRxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 2Mbps" + ::= { wdsStatsEntry 11 } + + wdsStatsRxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 2Mbps" + ::= { wdsStatsEntry 12 } + + wdsStatsRxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 2Mbps" + ::= { wdsStatsEntry 13 } + + wdsStatsRxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 2Mbps" + ::= { wdsStatsEntry 14 } + + wdsStatsRxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 5.5Mbps" + ::= { wdsStatsEntry 15 } + + wdsStatsRxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 5.5Mbps" + ::= { wdsStatsEntry 16 } + + wdsStatsRxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 5.5Mbps" + ::= { wdsStatsEntry 17 } + + wdsStatsRxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 5.5Mbps" + ::= { wdsStatsEntry 18 } + + wdsStatsRxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 11Mbps" + ::= { wdsStatsEntry 19 } + + wdsStatsRxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 11Mbps" + ::= { wdsStatsEntry 20 } + + wdsStatsRxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 11Mbps" + ::= { wdsStatsEntry 21 } + + wdsStatsRxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 11Mbps" + ::= { wdsStatsEntry 22 } + + wdsStatsRxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 6Mbps" + ::= { wdsStatsEntry 23 } + + wdsStatsRxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 6Mbps" + ::= { wdsStatsEntry 24 } + + wdsStatsRxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 6Mbps" + ::= { wdsStatsEntry 25 } + + wdsStatsRxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 6Mbps" + ::= { wdsStatsEntry 26 } + + wdsStatsRxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 9Mbps" + ::= { wdsStatsEntry 27 } + + wdsStatsRxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 9Mbps" + ::= { wdsStatsEntry 28 } + + wdsStatsRxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 9Mbps" + ::= { wdsStatsEntry 29 } + + wdsStatsRxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 9Mbps" + ::= { wdsStatsEntry 30 } + + wdsStatsRxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 12Mbps" + ::= { wdsStatsEntry 31 } + + wdsStatsRxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 12Mbps" + ::= { wdsStatsEntry 32 } + + wdsStatsRxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 12Mbps" + ::= { wdsStatsEntry 33 } + + wdsStatsRxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 12Mbps" + ::= { wdsStatsEntry 34 } + + wdsStatsRxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 18Mbps" + ::= { wdsStatsEntry 35 } + + wdsStatsRxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 18Mbps" + ::= { wdsStatsEntry 36 } + + wdsStatsRxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 18Mbps" + ::= { wdsStatsEntry 37 } + + wdsStatsRxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 18Mbps" + ::= { wdsStatsEntry 38 } + + wdsStatsRxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 24Mbps" + ::= { wdsStatsEntry 39 } + + wdsStatsRxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 24Mbps" + ::= { wdsStatsEntry 40 } + + wdsStatsRxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 24Mbps" + ::= { wdsStatsEntry 41 } + + wdsStatsRxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 24Mbps" + ::= { wdsStatsEntry 42 } + + wdsStatsRxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 36Mbps" + ::= { wdsStatsEntry 43 } + + wdsStatsRxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 36Mbps" + ::= { wdsStatsEntry 44 } + + wdsStatsRxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 36Mbps" + ::= { wdsStatsEntry 45 } + + wdsStatsRxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 36Mbps" + ::= { wdsStatsEntry 46 } + + wdsStatsRxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 48Mbps" + ::= { wdsStatsEntry 47 } + + wdsStatsRxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 48Mbps" + ::= { wdsStatsEntry 48 } + + wdsStatsRxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 48Mbps" + ::= { wdsStatsEntry 49 } + + wdsStatsRxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 48Mbps" + ::= { wdsStatsEntry 50 } + + wdsStatsRxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received at rate 54Mbps" + ::= { wdsStatsEntry 51 } + + wdsStatsRxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received at rate 54Mbps" + ::= { wdsStatsEntry 52 } + + wdsStatsRxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx errors at rate 54Mbps" + ::= { wdsStatsEntry 53 } + + wdsStatsRxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rx retries at rate 54Mbps" + ::= { wdsStatsEntry 54 } + + wdsStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { wdsStatsEntry 55 } + + wdsStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { wdsStatsEntry 56 } + + wdsStatsTxErrors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors" + ::= { wdsStatsEntry 57 } + + wdsStatsTxRetries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries" + ::= { wdsStatsEntry 58 } + + wdsStatsTxRate1Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 1Mbps" + ::= { wdsStatsEntry 59 } + + wdsStatsTxRate1Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 1Mbps" + ::= { wdsStatsEntry 60 } + + wdsStatsTxRate1Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 1Mbps" + ::= { wdsStatsEntry 61 } + + wdsStatsTxRate1Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 1Mbps" + ::= { wdsStatsEntry 62 } + + wdsStatsTxRate2Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 2Mbps" + ::= { wdsStatsEntry 63 } + + wdsStatsTxRate2Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 2Mbps" + ::= { wdsStatsEntry 64 } + + wdsStatsTxRate2Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 2Mbps" + ::= { wdsStatsEntry 65 } + + wdsStatsTxRate2Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 2Mbps" + ::= { wdsStatsEntry 66 } + + wdsStatsTxRate5Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 5.5Mbps" + ::= { wdsStatsEntry 67 } + + wdsStatsTxRate5Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 5.5Mbps" + ::= { wdsStatsEntry 68 } + + wdsStatsTxRate5Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 5.5Mbps" + ::= { wdsStatsEntry 69 } + + wdsStatsTxRate5Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 5.5Mbps" + ::= { wdsStatsEntry 70 } + + wdsStatsTxRate11Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 11Mbps" + ::= { wdsStatsEntry 71 } + + wdsStatsTxRate11Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 11Mbps" + ::= { wdsStatsEntry 72 } + + wdsStatsTxRate11Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 11Mbps" + ::= { wdsStatsEntry 73 } + + wdsStatsTxRate11Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 11Mbps" + ::= { wdsStatsEntry 74 } + + wdsStatsTxRate6Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 6Mbps" + ::= { wdsStatsEntry 75 } + + wdsStatsTxRate6Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 6Mbps" + ::= { wdsStatsEntry 76 } + + wdsStatsTxRate6Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 6Mbps" + ::= { wdsStatsEntry 77 } + + wdsStatsTxRate6Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 6Mbps" + ::= { wdsStatsEntry 78 } + + wdsStatsTxRate9Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 9Mbps" + ::= { wdsStatsEntry 79 } + + wdsStatsTxRate9Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 9Mbps" + ::= { wdsStatsEntry 80 } + + wdsStatsTxRate9Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 9Mbps" + ::= { wdsStatsEntry 81 } + + wdsStatsTxRate9Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 9Mbps" + ::= { wdsStatsEntry 82 } + + wdsStatsTxRate12Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 12Mbps" + ::= { wdsStatsEntry 83 } + + wdsStatsTxRate12Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 12Mbps" + ::= { wdsStatsEntry 84 } + + wdsStatsTxRate12Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 12Mbps" + ::= { wdsStatsEntry 85 } + + wdsStatsTxRate12Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 12Mbps" + ::= { wdsStatsEntry 86 } + + wdsStatsTxRate18Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 18Mbps" + ::= { wdsStatsEntry 87 } + + wdsStatsTxRate18Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 18Mbps" + ::= { wdsStatsEntry 88 } + + wdsStatsTxRate18Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 18Mbps" + ::= { wdsStatsEntry 89 } + + wdsStatsTxRate18Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 18Mbps" + ::= { wdsStatsEntry 90 } + + wdsStatsTxRate24Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 24Mbps" + ::= { wdsStatsEntry 91 } + + wdsStatsTxRate24Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 24Mbps" + ::= { wdsStatsEntry 92 } + + wdsStatsTxRate24Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 24Mbps" + ::= { wdsStatsEntry 93 } + + wdsStatsTxRate24Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 24Mbps" + ::= { wdsStatsEntry 94 } + + wdsStatsTxRate36Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 36Mbps" + ::= { wdsStatsEntry 95 } + + wdsStatsTxRate36Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 36Mbps" + ::= { wdsStatsEntry 96 } + + wdsStatsTxRate36Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 36Mbps" + ::= { wdsStatsEntry 97 } + + wdsStatsTxRate36Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 36Mbps" + ::= { wdsStatsEntry 98 } + + wdsStatsTxRate48Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 48Mbps" + ::= { wdsStatsEntry 99 } + + wdsStatsTxRate48Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 48Mbps" + ::= { wdsStatsEntry 100 } + + wdsStatsTxRate48Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 48Mbps" + ::= { wdsStatsEntry 101 } + + wdsStatsTxRate48Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 48Mbps" + ::= { wdsStatsEntry 102 } + + wdsStatsTxRate54Bytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted at rate 54Mbps" + ::= { wdsStatsEntry 103 } + + wdsStatsTxRate54Packets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted at rate 54Mbps" + ::= { wdsStatsEntry 104 } + + wdsStatsTxRate54Errors OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx errors at rate 54Mbps" + ::= { wdsStatsEntry 105 } + + wdsStatsTxRate54Retries OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Tx retries at rate 54Mbps" + ::= { wdsStatsEntry 106 } + + spectrumAnalysisTable OBJECT-TYPE + SYNTAX SEQUENCE OF SpectrumAnalysisEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Spectrum analysis information table" + ::= { statistics 6 } + + spectrumAnalysisEntry OBJECT-TYPE + SYNTAX SpectrumAnalysisEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for spectrum analysis information" + INDEX { spectrumAnalysisIndex } + ::= { spectrumAnalysisTable 1 } + + SpectrumAnalysisEntry ::= SEQUENCE { + spectrumAnalysisIndex Integer32, + spectrumAnalysisChannel Integer32, + spectrumAnalysisPackets Integer32, + spectrumAnalysisBytes Integer32, + spectrumAnalysisErrorRate Integer32, + spectrumAnalysisAverageDataRate Integer32, + spectrumAnalysisAverageRSSI Integer32, + spectrumAnalysisSignalToNoiseRatio Integer32, + spectrumAnalysisNoiseFloor Integer32, + spectrumAnalysisDot11Busy Integer32, + spectrumAnalysisNoise Integer32 + } + + spectrumAnalysisIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Spectrum analysis information index" + ::= { spectrumAnalysisEntry 1 } + + spectrumAnalysisChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel number" + ::= { spectrumAnalysisEntry 2 } + + spectrumAnalysisPackets OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets per second" + ::= { spectrumAnalysisEntry 3 } + + spectrumAnalysisBytes OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes per second" + ::= { spectrumAnalysisEntry 4 } + + spectrumAnalysisErrorRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Error rate (in percent)" + ::= { spectrumAnalysisEntry 5 } + + spectrumAnalysisAverageDataRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Average data rate (in Mbps)" + ::= { spectrumAnalysisEntry 6 } + + spectrumAnalysisAverageRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Average RSSI" + ::= { spectrumAnalysisEntry 7 } + + spectrumAnalysisSignalToNoiseRatio OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Signal to noise ratio" + ::= { spectrumAnalysisEntry 8 } + + spectrumAnalysisNoiseFloor OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Noise floor" + ::= { spectrumAnalysisEntry 9 } + + spectrumAnalysisDot11Busy OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11 medium busy (in percent)" + ::= { spectrumAnalysisEntry 10 } + + spectrumAnalysisNoise OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Noise (in percent)" + ::= { spectrumAnalysisEntry 11 } + + realtimeMonitorTable OBJECT-TYPE + SYNTAX SEQUENCE OF RealtimeMonitorEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Real time IAP information table" + ::= { statistics 7 } + + realtimeMonitorEntry OBJECT-TYPE + SYNTAX RealtimeMonitorEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for real time IAP information" + INDEX { realtimeMonitorIndex } + ::= { realtimeMonitorTable 1 } + + RealtimeMonitorEntry ::= SEQUENCE { + realtimeMonitorIndex Integer32, + realtimeMonitorIfaceName DisplayString, + realtimeMonitorChannel Integer32, + realtimeMonitorPackets Integer32, + realtimeMonitorBytes Integer32, + realtimeMonitorErrorRate Integer32, + realtimeMonitorAverageDataRate Integer32, + realtimeMonitorAverageRSSI Integer32, + realtimeMonitorSignalToNoiseRatio Integer32, + realtimeMonitorNoiseFloor Integer32, + realtimeMonitorDot11Busy Integer32, + realtimeMonitorNoise Integer32 + } + + realtimeMonitorIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Real time IAP information index" + ::= { realtimeMonitorEntry 1 } + + realtimeMonitorIfaceName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface name" + ::= { realtimeMonitorEntry 2 } + + realtimeMonitorChannel OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Channel number" + ::= { realtimeMonitorEntry 3 } + + realtimeMonitorPackets OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets per second" + ::= { realtimeMonitorEntry 4 } + + realtimeMonitorBytes OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes per second" + ::= { realtimeMonitorEntry 5 } + + realtimeMonitorErrorRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Error rate (in percent)" + ::= { realtimeMonitorEntry 6 } + + realtimeMonitorAverageDataRate OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Average data rate (in Mbps)" + ::= { realtimeMonitorEntry 7 } + + realtimeMonitorAverageRSSI OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Average RSSI" + ::= { realtimeMonitorEntry 8 } + + realtimeMonitorSignalToNoiseRatio OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Signal to noise ratio" + ::= { realtimeMonitorEntry 9 } + + realtimeMonitorNoiseFloor OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Noise floor" + ::= { realtimeMonitorEntry 10 } + + realtimeMonitorDot11Busy OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "802.11 medium busy (in percent)" + ::= { realtimeMonitorEntry 11 } + + realtimeMonitorNoise OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Noise (in percent)" + ::= { realtimeMonitorEntry 12 } + + stationAppStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of station application statistics" + ::= { statistics 8 } + + stationAppStatsEntry OBJECT-TYPE + SYNTAX StationAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for station application statistics" + INDEX { stationAppStatsIndex } + ::= { stationAppStatsTable 1 } + + StationAppStatsEntry ::= SEQUENCE { + stationAppStatsIndex Integer32, + stationAppStatsMACAddress DisplayString, + stationAppStatsGuid DisplayString, + stationAppStatsTxPackets Counter64, + stationAppStatsRxPackets Counter64, + stationAppStatsTxBytes Counter64, + stationAppStatsRxBytes Counter64, + stationAppStatsTimePeriod Counter32 + } + + stationAppStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station application statistics index" + ::= { stationAppStatsEntry 1 } + + stationAppStatsMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationAppStatsEntry 2 } + + stationAppStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application" + ::= { stationAppStatsEntry 3 } + + stationAppStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { stationAppStatsEntry 4 } + + stationAppStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { stationAppStatsEntry 5 } + + stationAppStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { stationAppStatsEntry 6 } + + stationAppStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { stationAppStatsEntry 7 } + + stationAppStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which application stats were collected" + ::= { stationAppStatsEntry 8 } + + stationAppCatStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF StationAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of station application category statistics" + ::= { statistics 9 } + + stationAppCatStatsEntry OBJECT-TYPE + SYNTAX StationAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for station application category statistics" + INDEX { stationAppCatStatsIndex } + ::= { stationAppCatStatsTable 1 } + + StationAppCatStatsEntry ::= SEQUENCE { + stationAppCatStatsIndex Integer32, + stationAppCatStatsMACAddress DisplayString, + stationAppCatStatsGuid DisplayString, + stationAppCatStatsTxPackets Counter64, + stationAppCatStatsRxPackets Counter64, + stationAppCatStatsTxBytes Counter64, + stationAppCatStatsRxBytes Counter64, + stationAppCatStatsTimePeriod Counter32 + } + + stationAppCatStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Station application category statistics index" + ::= { stationAppCatStatsEntry 1 } + + stationAppCatStatsMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MAC address of the station" + ::= { stationAppCatStatsEntry 2 } + + stationAppCatStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application category" + ::= { stationAppCatStatsEntry 3 } + + stationAppCatStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { stationAppCatStatsEntry 4 } + + stationAppCatStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { stationAppCatStatsEntry 5 } + + stationAppCatStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { stationAppCatStatsEntry 6 } + + stationAppCatStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { stationAppCatStatsEntry 7 } + + stationAppCatStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which application category stats were collected" + ::= { stationAppCatStatsEntry 8 } + + vlanMgmtAppStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanMgmtAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of VLAN management application statistics" + ::= { statistics 10 } + + vlanMgmtAppStatsEntry OBJECT-TYPE + SYNTAX VlanMgmtAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for VLAN management application statistics" + INDEX { vlanMgmtAppStatsIndex } + ::= { vlanMgmtAppStatsTable 1 } + + VlanMgmtAppStatsEntry ::= SEQUENCE { + vlanMgmtAppStatsIndex Integer32, + vlanMgmtAppStatsVlan Integer32, + vlanMgmtAppStatsGuid DisplayString, + vlanMgmtAppStatsTxPackets Counter64, + vlanMgmtAppStatsRxPackets Counter64, + vlanMgmtAppStatsTxBytes Counter64, + vlanMgmtAppStatsRxBytes Counter64, + vlanMgmtAppStatsTimePeriod Counter32 + } + + vlanMgmtAppStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN management application statistics index" + ::= { vlanMgmtAppStatsEntry 1 } + + vlanMgmtAppStatsVlan OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN" + ::= { vlanMgmtAppStatsEntry 2 } + + vlanMgmtAppStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application" + ::= { vlanMgmtAppStatsEntry 3 } + + vlanMgmtAppStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { vlanMgmtAppStatsEntry 4 } + + vlanMgmtAppStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { vlanMgmtAppStatsEntry 5 } + + vlanMgmtAppStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { vlanMgmtAppStatsEntry 6 } + + vlanMgmtAppStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { vlanMgmtAppStatsEntry 7 } + + vlanMgmtAppStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which management application stats were collected" + ::= { vlanMgmtAppStatsEntry 8 } + + vlanMgmtAppCatStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanMgmtAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of VLAN management application category statistics" + ::= { statistics 11 } + + vlanMgmtAppCatStatsEntry OBJECT-TYPE + SYNTAX VlanMgmtAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for VLAN management application category statistics" + INDEX { vlanMgmtAppCatStatsIndex } + ::= { vlanMgmtAppCatStatsTable 1 } + + VlanMgmtAppCatStatsEntry ::= SEQUENCE { + vlanMgmtAppCatStatsIndex Integer32, + vlanMgmtAppCatStatsVlan Integer32, + vlanMgmtAppCatStatsGuid DisplayString, + vlanMgmtAppCatStatsTxPackets Counter64, + vlanMgmtAppCatStatsRxPackets Counter64, + vlanMgmtAppCatStatsTxBytes Counter64, + vlanMgmtAppCatStatsRxBytes Counter64, + vlanMgmtAppCatStatsTimePeriod Counter32 + } + + vlanMgmtAppCatStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN management application category statistics index" + ::= { vlanMgmtAppCatStatsEntry 1 } + + vlanMgmtAppCatStatsVlan OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN" + ::= { vlanMgmtAppCatStatsEntry 2 } + + vlanMgmtAppCatStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application category" + ::= { vlanMgmtAppCatStatsEntry 3 } + + vlanMgmtAppCatStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { vlanMgmtAppCatStatsEntry 4 } + + vlanMgmtAppCatStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { vlanMgmtAppCatStatsEntry 5 } + + vlanMgmtAppCatStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { vlanMgmtAppCatStatsEntry 6 } + + vlanMgmtAppCatStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { vlanMgmtAppCatStatsEntry 7 } + + vlanMgmtAppCatStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which management application category stats were collected" + ::= { vlanMgmtAppCatStatsEntry 8 } + + vlanStaAppStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanStaAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of VLAN station application statistics" + ::= { statistics 12 } + + vlanStaAppStatsEntry OBJECT-TYPE + SYNTAX VlanStaAppStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for VLAN station application statistics" + INDEX { vlanStaAppStatsIndex } + ::= { vlanStaAppStatsTable 1 } + + VlanStaAppStatsEntry ::= SEQUENCE { + vlanStaAppStatsIndex Integer32, + vlanStaAppStatsVlan Integer32, + vlanStaAppStatsGuid DisplayString, + vlanStaAppStatsTxPackets Counter64, + vlanStaAppStatsRxPackets Counter64, + vlanStaAppStatsTxBytes Counter64, + vlanStaAppStatsRxBytes Counter64, + vlanStaAppStatsTimePeriod Counter32 + } + + vlanStaAppStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN station application statistics index" + ::= { vlanStaAppStatsEntry 1 } + + vlanStaAppStatsVlan OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN" + ::= { vlanStaAppStatsEntry 2 } + + vlanStaAppStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application" + ::= { vlanStaAppStatsEntry 3 } + + vlanStaAppStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { vlanStaAppStatsEntry 4 } + + vlanStaAppStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { vlanStaAppStatsEntry 5 } + + vlanStaAppStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { vlanStaAppStatsEntry 6 } + + vlanStaAppStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { vlanStaAppStatsEntry 7 } + + vlanStaAppStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which station application stats were collected" + ::= { vlanStaAppStatsEntry 8 } + + vlanStaAppCatStatsTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanStaAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of VLAN station application category statistics" + ::= { statistics 13 } + + vlanStaAppCatStatsEntry OBJECT-TYPE + SYNTAX VlanStaAppCatStatsEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table entry for VLAN station application category statistics" + INDEX { vlanStaAppCatStatsIndex } + ::= { vlanStaAppCatStatsTable 1 } + + VlanStaAppCatStatsEntry ::= SEQUENCE { + vlanStaAppCatStatsIndex Integer32, + vlanStaAppCatStatsVlan Integer32, + vlanStaAppCatStatsGuid DisplayString, + vlanStaAppCatStatsTxPackets Counter64, + vlanStaAppCatStatsRxPackets Counter64, + vlanStaAppCatStatsTxBytes Counter64, + vlanStaAppCatStatsRxBytes Counter64, + vlanStaAppCatStatsTimePeriod Counter32 + } + + vlanStaAppCatStatsIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN station application category statistics index" + ::= { vlanStaAppCatStatsEntry 1 } + + vlanStaAppCatStatsVlan OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN" + ::= { vlanStaAppCatStatsEntry 2 } + + vlanStaAppCatStatsGuid OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Global Unique ID of the application category" + ::= { vlanStaAppCatStatsEntry 3 } + + vlanStaAppCatStatsTxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets transmitted" + ::= { vlanStaAppCatStatsEntry 4 } + + vlanStaAppCatStatsRxPackets OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Packets received" + ::= { vlanStaAppCatStatsEntry 5 } + + vlanStaAppCatStatsTxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes transmitted" + ::= { vlanStaAppCatStatsEntry 6 } + + vlanStaAppCatStatsRxBytes OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Bytes received" + ::= { vlanStaAppCatStatsEntry 7 } + + vlanStaAppCatStatsTimePeriod OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time period over which station application category stats were collected" + ::= { vlanStaAppCatStatsEntry 8 } + + stationAppStatsTablePeriod OBJECT-TYPE + SYNTAX Counter32(0..100000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify period for station application statistics table entries (in seconds, 0 - all table entries)" + ::= { statistics 14 } + + stationAppStatsTableClear OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Clear the application statistics table (zero all counts)" + ::= { statistics 15 } + +-- +-- SYSLOG +-- + + syslogEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable syslog feature" + ::= { syslog 1 } + + syslogLevel OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Local syslog level" + ::= { syslog 2 } + + syslogServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary syslog server IP address or host name" + ::= { syslog 3 } + + syslogConsole OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable displaying log messages on the console" + ::= { syslog 4 } + + syslogSize OBJECT-TYPE + SYNTAX Integer32(1..2000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Local log file size" + ::= { syslog 5 } + + syslogTable OBJECT-TYPE + SYNTAX SEQUENCE OF SyslogEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Event log table" + ::= { syslog 6 } + + syslogEntry OBJECT-TYPE + SYNTAX SyslogEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Syslog table entry" + INDEX { syslogIndex } + ::= { syslogTable 1 } + + SyslogEntry ::= SEQUENCE { + syslogIndex Integer32, + syslogTimestamp DisplayString, + syslogPriority DisplayString, + syslogMessage OCTET STRING + } + + syslogIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Syslog index" + ::= { syslogEntry 1 } + + syslogTimestamp OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Syslog timestamp" + ::= { syslogEntry 2 } + + syslogPriority OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Syslog priority" + ::= { syslogEntry 3 } + + syslogMessage OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..500)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Syslog message" + ::= { syslogEntry 4 } + + syslogSecServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary syslog server IP address or host name" + ::= { syslog 7 } + + syslogLevelConsole OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Console syslog level" + ::= { syslog 8 } + + syslogLevelPriServer OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary server syslog level" + ::= { syslog 9 } + + syslogLevelSecServer OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary server syslog level" + ::= { syslog 10 } + + syslogTerServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Tertiary syslog server IP address or host name" + ::= { syslog 11 } + + syslogLevelTerServer OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Tertiary server syslog level" + ::= { syslog 12 } + + syslogEmailServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email syslog SMTP server IP address or host name" + ::= { syslog 13 } + + syslogEmailLevel OBJECT-TYPE + SYNTAX Integer32(0..7) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email syslog level" + ::= { syslog 14 } + + syslogEmailFromAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog from address" + ::= { syslog 15 } + + syslogEmailToAddress OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog recipient addresses" + ::= { syslog 16 } + + syslogEmailUsername OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog SMTP server username" + ::= { syslog 17 } + + syslogEmailPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..64)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog SMTP server user password" + ::= { syslog 18 } + + syslogEmailPasswordEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog SMTP server user password (encrypted)" + ::= { syslog 19 } + + syslogEmailPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Email Syslog SMTP server port" + ::= { syslog 20 } + + syslogPriServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Primary syslog server port" + ::= { syslog 21 } + + syslogSecServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Secondary syslog server port" + ::= { syslog 22 } + + syslogTerServerPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Tertiary syslog server port" + ::= { syslog 23 } + + syslogStationFormat OBJECT-TYPE + SYNTAX INTEGER { standard(0), key-value(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Station information format in syslog messages" + ::= { syslog 24 } + + syslogTimeFormat OBJECT-TYPE + SYNTAX INTEGER { rfc3164(0), rfc3339(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time format in syslog messages" + ::= { syslog 25 } + + syslogStationUrlLog OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable station URL logging" + ::= { syslog 26 } + +-- +-- SYSTEM +-- + + systemHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(1.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Array hostname" + ::= { system 1 } + + systemLocation OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Array location" + ::= { system 2 } + + systemContactName OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Contact name" + ::= { system 3 } + + systemContactEmail OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Contact email address" + ::= { system 4 } + + systemContactPhone OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Contact telephone number" + ::= { system 5 } + + systemTelnetEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable telnet" + ::= { system 6 } + + systemTelnetTimeout OBJECT-TYPE + SYNTAX Integer32(30..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Telnet timeout" + ::= { system 7 } + + systemSshEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable ssh" + ::= { system 8 } + + systemSshTimeout OBJECT-TYPE + SYNTAX Integer32(30..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ssh timeout" + ::= { system 9 } + + systemHttpsEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable https" + ::= { system 10 } + + systemHttpsTimeout OBJECT-TYPE + SYNTAX Integer32(30..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Https timeout" + ::= { system 11 } + + systemReboot OBJECT-TYPE + SYNTAX INTEGER { reboot(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reboot array" + ::= { system 12 } + + systemReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset all settings to factory defaults and reboot" + ::= { system 13 } + + systemSaveCfg OBJECT-TYPE + SYNTAX INTEGER { save(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Save running configuration to flash" + ::= { system 14 } + + systemUptime OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Display time since last boot" + ::= { system 15 } + + systemArrayInfo OBJECT IDENTIFIER ::= { system 16 } + +-- +-- SYSTEM ARRAY INFO +-- + + hardwareConfig OBJECT IDENTIFIER ::= { systemArrayInfo 1 } + softwareConfig OBJECT IDENTIFIER ::= { systemArrayInfo 2 } + +-- +-- SYSTEM ARRAY INFO HARDWARE CONFIGURATION +-- + + componentTable OBJECT-TYPE + SYNTAX SEQUENCE OF ComponentEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Hardware component info table" + ::= { hardwareConfig 1 } + + componentEntry OBJECT-TYPE + SYNTAX ComponentEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Component table entry" + INDEX { componentIndex } + ::= { componentTable 1 } + + ComponentEntry ::= SEQUENCE { + componentIndex Integer32, + componentName DisplayString, + componentPart DisplayString, + componentSerial DisplayString, + componentDate DisplayString + } + + componentIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Component table index" + ::= { componentEntry 1 } + + componentName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Component name" + ::= { componentEntry 2 } + + componentPart OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Component part number" + ::= { componentEntry 3 } + + componentSerial OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Component serial number" + ::= { componentEntry 4 } + + componentDate OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Component date" + ::= { componentEntry 5 } + + fpgaTable OBJECT-TYPE + SYNTAX SEQUENCE OF FpgaEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "FPGA info table" + ::= { hardwareConfig 2 } + + fpgaEntry OBJECT-TYPE + SYNTAX FpgaEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "FPGA table entry" + INDEX { fpgaIndex } + ::= { fpgaTable 1 } + + FpgaEntry ::= SEQUENCE { + fpgaIndex Integer32, + fpgaName DisplayString, + fpgaBootVersion DisplayString, + fpgaSWVersion DisplayString + } + + fpgaIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "FPGA table index" + ::= { fpgaEntry 1 } + + fpgaName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "FPGA name" + ::= { fpgaEntry 2 } + + fpgaBootVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "FPGA boot version" + ::= { fpgaEntry 3 } + + fpgaSWVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "FPGA software version" + ::= { fpgaEntry 4 } + + interfaceMACAddressTable OBJECT-TYPE + SYNTAX SEQUENCE OF InterfaceMACAddressEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Interface MAC address table" + ::= { hardwareConfig 3 } + + interfaceMACAddressEntry OBJECT-TYPE + SYNTAX InterfaceMACAddressEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Interface MAC address table entry" + INDEX { interfaceMACAddressIndex } + ::= { interfaceMACAddressTable 1 } + + InterfaceMACAddressEntry ::= SEQUENCE { + interfaceMACAddressIndex Integer32, + interfaceName DisplayString, + interfaceMACAddress DisplayString + } + + interfaceMACAddressIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Interface MAC address table index" + ::= { interfaceMACAddressEntry 1 } + + interfaceName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface name" + ::= { interfaceMACAddressEntry 2 } + + interfaceMACAddress OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Interface MAC address" + ::= { interfaceMACAddressEntry 3 } + + arrayModel OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Array model" + ::= { hardwareConfig 4 } + +-- +-- SYSTEM ARRAY INFO SOFTWARE CONFIGURATION +-- + + bootLoaderVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Boot loader version" + ::= { softwareConfig 1 } + + iapDriverVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "IAP driver version" + ::= { softwareConfig 2 } + + softwareVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software version" + ::= { softwareConfig 3 } + + timeThisBoot OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time of this boot" + ::= { softwareConfig 4 } + + timeLastBoot OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Time of the last boot" + ::= { softwareConfig 5 } + + scdFirmwareVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "SCD firmware version" + ::= { softwareConfig 6 } + + systemMIBVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "MIB version" + ::= { system 17 } + + systemGroupName OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Array group name" + ::= { system 18 } + + systemStandbyEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable standby" + ::= { system 19 } + + systemStandbyTarget OBJECT-TYPE + SYNTAX DisplayString(SIZE(17..17)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Target array to monitor for failure" + ::= { system 20 } + + systemTempTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemTempEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "System temperature table" + ::= { system 21 } + + systemTempEntry OBJECT-TYPE + SYNTAX SystemTempEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "System temperature table entry" + INDEX { systemTempIndex } + ::= { systemTempTable 1 } + + SystemTempEntry ::= SEQUENCE { + systemTempIndex Integer32, + systemTempComponent DisplayString, + systemTempCelsius Integer32, + systemTempFahrenheit Integer32 + } + + systemTempIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "System temperature table index" + ::= { systemTempEntry 1 } + + systemTempComponent OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System component name" + ::= { systemTempEntry 2 } + + systemTempCelsius OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System component temperature (Celsius)" + ::= { systemTempEntry 3 } + + systemTempFahrenheit OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System component temperature (Fahrenheit)" + ::= { systemTempEntry 4 } + + systemFipsMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable FIPS mode" + ::= { system 22 } + + systemTelnetPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Telnet port" + ::= { system 23 } + + systemSshPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ssh port" + ::= { system 24 } + + systemHttpsPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Https port" + ::= { system 25 } + + systemLicenseKey OBJECT-TYPE + SYNTAX DisplayString(SIZE(23..23)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set array software license key" + ::= { system 26 } + + systemLicenseFeatures OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software license features" + ::= { system 27 } + + systemRemoteServer OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify TFTP server for remote software image" + ::= { system 28 } + + systemRemoteImage OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify a remote array software image" + ::= { system 29 } + + systemRemoteConfigFile OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Specify a remote array configuration file" + ::= { system 30 } + + systemHttpsCertificate OBJECT-TYPE + SYNTAX INTEGER { reset(0), self(1), xirrus(2), new(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set HTTPS certificate" + ::= { system 31 } + + systemPCIAuditMode OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable PCI (Payment Card Industry) audit mode" + ::= { system 32 } + + systemNetworkAssurance OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable network assurance" + ::= { system 33 } + + systemLicenseVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software license version" + ::= { system 34 } + + systemLicenseExpDate OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software license expiration date" + ::= { system 35 } + + licenseFeatureTable OBJECT-TYPE + SYNTAX SEQUENCE OF LicenseFeatureEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Software license feature list" + ::= { system 36} + + licenseFeatureEntry OBJECT-TYPE + SYNTAX LicenseFeatureEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Software license feature table entry" + INDEX { licenseFeatureIndex } + ::= { licenseFeatureTable 1 } + + LicenseFeatureEntry ::= SEQUENCE { + licenseFeatureIndex Integer32, + licenseFeatureName DisplayString, + licenseFeatureStatus INTEGER, + licenseFeatureDesc DisplayString + } + + licenseFeatureIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "License feature table index" + ::= { licenseFeatureEntry 1 } + + licenseFeatureName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "License feature name" + ::= { licenseFeatureEntry 2 } + + licenseFeatureStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "License feature status" + ::= { licenseFeatureEntry 3 } + + licenseFeatureDesc OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "License feature description" + ::= { licenseFeatureEntry 4 } + + systemRDKMode OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Rapid Deployment Kit mode" + ::= { system 37 } + + systemMaxAuthAttempts OBJECT-TYPE + SYNTAX Integer32(0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Maximum number of authentication (login) attempts (0 means unlimited)" + ::= { system 38 } + + systemLoginReauthPeriod OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Time between failed CLI login attempts" + ::= { system 39 } + + systemPreLoginBanner OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..1000)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set pre-login banner message" + ::= { system 40 } + + systemPostLoginBanner OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..1000)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set post-login banner message" + ::= { system 41 } + + systemResetReason OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Reason for last reboot" + ::= { system 42 } + + systemResetCode OBJECT-TYPE + SYNTAX INTEGER { reboot-req(0), power-on(1), power-brown-out(2), + scd-restart(3), gpc(4), unavailable(5) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Code for last reboot" + ::= { system 43 } + + systemNetworkAssurancePeriod OBJECT-TYPE + SYNTAX Integer32(60..900) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Set network assurance period (in seconds)" + ::= { system 44 } + + systemLicenseProductType OBJECT-TYPE + SYNTAX INTEGER { unknown(0), array2x3(1), array2x2(2), array3x3(3) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software license product type" + ::= { system 45 } + + systemLicenseMaxNumIAPs OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Software license maximum number of IAPs" + ::= { system 46 } + + systemCrashInfo OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..4096)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System crash information" + ::= { system 47 } + + systemCompassHeading OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System compass heading (in degrees, -1 - unknown)" + ::= { system 48 } + + systemXirconEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable-aos-only(1), + enable-boot-only(2), enable-aos-boot(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable xircon access" + ::= { system 49 } + + systemXirconTimeout OBJECT-TYPE + SYNTAX Integer32(30..100000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Xircon inactivity timeout" + ::= { system 50 } + + systemXirconPort OBJECT-TYPE + SYNTAX Integer32(1025..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Xircon port" + ::= { system 51 } + + systemStpEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable Spanning Tree Protocol" + ::= { system 52 } + + systemFanSpeed OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "System fan speed (RPM)" + ::= { system 53 } + + systemXmsControl OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Allow all user management or restrict to console and XMS only" + ::= { system 54 } + + systemActivation OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable/disable array activation" + ::= { system 55 } + + systemActivationInterval OBJECT-TYPE + SYNTAX Integer32(1..1000000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Array activation polling interval (minutes)" + ::= { system 56 } + +-- +-- TUNNEL +-- + + tunnelTable OBJECT-TYPE + SYNTAX SEQUENCE OF TunnelEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Tunnel table" + ::= { tunnel 1 } + + tunnelEntry OBJECT-TYPE + SYNTAX TunnelEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Tunnel table entry" + INDEX { tunnelIndex } + ::= { tunnelTable 1 } + + TunnelEntry ::= SEQUENCE { + tunnelIndex Integer32, + tunnelName DisplayString, + tunnelEnable INTEGER, + tunnelType INTEGER, + tunnelLocalEndpoint IpAddress, + tunnelPriRemoteEndpoint IpAddress, + tunnelSecRemoteEndpoint IpAddress, + tunnelMTU Integer32, + tunnelSsids Integer32, + tunnelDhcpOption INTEGER, + tunnelFailoverInterval Integer32, + tunnelFailoverNumFailures Integer32, + tunnelRowStatus RowStatus + } + + tunnelIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Tunnel table index" + ::= { tunnelEntry 1 } + + tunnelName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel name" + ::= { tunnelEntry 2 } + + tunnelEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable tunnel" + ::= { tunnelEntry 3 } + + tunnelType OBJECT-TYPE + SYNTAX INTEGER { none(0), gre(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel type" + ::= { tunnelEntry 4 } + + tunnelLocalEndpoint OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel local endpoint" + ::= { tunnelEntry 5 } + + tunnelPriRemoteEndpoint OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel primary remote endpoint" + ::= { tunnelEntry 6 } + + tunnelSecRemoteEndpoint OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel secondary remote endpoint" + ::= { tunnelEntry 7 } + + tunnelMTU OBJECT-TYPE + SYNTAX Integer32(68..1732) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Tunnel MTU" + ::= { tunnelEntry 8 } + + tunnelSsids OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Define SSIDs for which data traffic should be bridged via this tunnel" + ::= { tunnelEntry 9 } + + tunnelDhcpOption OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable insertion of relay agent information option in station DHCP requests" + ::= { tunnelEntry 10 } + + tunnelFailoverInterval OBJECT-TYPE + SYNTAX Integer32(5..3600) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Ping interval for remote endpoint failover mechanism" + ::= { tunnelEntry 11 } + + tunnelFailoverNumFailures OBJECT-TYPE + SYNTAX Integer32(3..1000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Number of ping failures for remote endpoint failover mechanism" + ::= { tunnelEntry 12 } + + tunnelRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the tunnel row entry" + ::= { tunnelEntry 13 } + + tunnelTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Delete all tunnels" + ::= { tunnel 2 } + +-- +-- VLAN +-- + + vlanTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset VLAN table (clear all entries)" + ::= { vlan 1 } + + vlanTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN table for the Array" + ::= { vlan 2 } + + vlanEntry OBJECT-TYPE + SYNTAX VlanEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN table entry" + INDEX { vlanIndex } + ::= { vlanTable 1 } + + VlanEntry ::= SEQUENCE { + vlanIndex Integer32, + vlanName DisplayString, + vlanNumber Integer32, + vlanMgmt INTEGER, + vlanDHCPBind INTEGER, + vlanIPAddress IpAddress, + vlanIPMask IpAddress, + vlanGateway IpAddress, + vlanRowStatus RowStatus, + vlanTunnelServer DisplayString, + vlanTunnelSecret DisplayString, + vlanTunnelPort Integer32, + vlanTunnelState INTEGER, + vlanTunnelSecretForm INTEGER, + vlanFastRoaming INTEGER + } + + vlanIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "VLAN table index" + ::= { vlanEntry 1 } + + vlanName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN name" + ::= { vlanEntry 2 } + + vlanNumber OBJECT-TYPE + SYNTAX Integer32(1..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN number" + ::= { vlanEntry 3 } + + vlanMgmt OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable management via VLAN" + ::= { vlanEntry 4 } + + vlanDHCPBind OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Use DHCP to get IP settings for VLAN" + ::= { vlanEntry 5 } + + vlanIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN IP address" + ::= { vlanEntry 6 } + + vlanIPMask OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN IP Mask" + ::= { vlanEntry 7 } + + vlanGateway OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN gateway IP address" + ::= { vlanEntry 8 } + + vlanRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the VLAN row entry" + ::= { vlanEntry 9 } + + vlanTunnelServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN tunnel server IP address or host name" + ::= { vlanEntry 10 } + + vlanTunnelSecret OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..128)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN tunnel server password" + ::= { vlanEntry 11 } + + vlanTunnelPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN tunnel server port number" + ::= { vlanEntry 12 } + + vlanTunnelState OBJECT-TYPE + SYNTAX INTEGER { not-connected(0), connected(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN tunnel state" + ::= { vlanEntry 13 } + + vlanTunnelSecretForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "VLAN tunnel server password form" + ::= { vlanEntry 14 } + + vlanFastRoaming OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable/disable fast roaming (at layer 3) for VLAN" + ::= { vlanEntry 15 } + + spanningTreeTable OBJECT-TYPE + SYNTAX SEQUENCE OF SpanningTreeEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Spanning tree state table" + ::= { vlan 3 } + + spanningTreeEntry OBJECT-TYPE + SYNTAX SpanningTreeEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Spanning tree table entry" + INDEX { spanningTreeIndex } + ::= { spanningTreeTable 1 } + + SpanningTreeEntry ::= SEQUENCE { + spanningTreeIndex Integer32, + spanningTreeVlanName DisplayString, + spanningTreeVlanNumber Integer32, + spanningTreeGigLinkState DisplayString, + spanningTreeWDSClientLink1State DisplayString, + spanningTreeWDSClientLink2State DisplayString, + spanningTreeWDSClientLink3State DisplayString, + spanningTreeWDSClientLink4State DisplayString, + spanningTreeWDSHostLink1State DisplayString, + spanningTreeWDSHostLink2State DisplayString, + spanningTreeWDSHostLink3State DisplayString, + spanningTreeWDSHostLink4State DisplayString + } + + spanningTreeIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Spanning tree table index" + ::= { spanningTreeEntry 1 } + + spanningTreeVlanName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN name" + ::= { spanningTreeEntry 2 } + + spanningTreeVlanNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "VLAN number" + ::= { spanningTreeEntry 3 } + + spanningTreeGigLinkState OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Gigabit link state" + ::= { spanningTreeEntry 4 } + + spanningTreeWDSClientLink1State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS client link 1 state" + ::= { spanningTreeEntry 5 } + + spanningTreeWDSClientLink2State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS client link 2 state" + ::= { spanningTreeEntry 6 } + + spanningTreeWDSClientLink3State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS client link 3 state" + ::= { spanningTreeEntry 7 } + + spanningTreeWDSClientLink4State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS client link 4 state" + ::= { spanningTreeEntry 8 } + + spanningTreeWDSHostLink1State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link 1 state" + ::= { spanningTreeEntry 9 } + + spanningTreeWDSHostLink2State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link 2 state" + ::= { spanningTreeEntry 10 } + + spanningTreeWDSHostLink3State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link 3 state" + ::= { spanningTreeEntry 11 } + + spanningTreeWDSHostLink4State OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "WDS host link 4 state" + ::= { spanningTreeEntry 12 } + + vlanDefaultNumber OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "VLAN number(1-4095) to assign as default, 0 - no VLAN as default" + ::= { vlan 4 } + + vlanNativeNumber OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "VLAN number(1-4095) to assign as native, 0 - no VLAN as native" + ::= { vlan 5 } + + vlanUndefinedTable OBJECT-TYPE + SYNTAX SEQUENCE OF VlanUndefinedEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of undefined VLANs detected" + ::= { vlan 6 } + + vlanUndefinedEntry OBJECT-TYPE + SYNTAX VlanUndefinedEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Undefined VLAN table entry" + INDEX { vlanUndefinedIndex } + ::= { vlanUndefinedTable 1 } + + VlanUndefinedEntry ::= SEQUENCE { + vlanUndefinedIndex Integer32, + vlanUndefinedNumber Integer32 + } + + vlanUndefinedIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Undefined VLAN table index" + ::= { vlanUndefinedEntry 1 } + + vlanUndefinedNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Undefined VLAN number" + ::= { vlanUndefinedEntry 2 } + + vlanUndefinedInfo OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Undefined VLANs detected" + ::= { vlan 7 } + + vlanUndefinedClear OBJECT-TYPE + SYNTAX INTEGER { clear(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Clear undefined VLAN information" + ::= { vlan 8 } + +-- +-- CLUSTER +-- + + clusterArrayTable OBJECT-TYPE + SYNTAX SEQUENCE OF ClusterArrayEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Table of cluster arrays" + ::= { cluster 1 } + + clusterArrayEntry OBJECT-TYPE + SYNTAX ClusterArrayEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Cluster array table entry" + INDEX { clusterArrayIndex } + ::= { clusterArrayTable 1 } + + ClusterArrayEntry ::= SEQUENCE { + clusterArrayIndex Integer32, + clusterArrayHostname DisplayString, + clusterArrayIPAddress IpAddress, + clusterArrayUsername DisplayString, + clusterArrayPassword DisplayString, + clusterArrayPasswordForm INTEGER, + clusterArrayCluster DisplayString, + clusterArrayRowStatus RowStatus + } + + clusterArrayIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Cluster array table index" + ::= { clusterArrayEntry 1 } + + clusterArrayHostname OBJECT-TYPE + SYNTAX DisplayString(SIZE(1.. 255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Hostname or IP address of the cluster array" + ::= { clusterArrayEntry 2 } + + clusterArrayIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "IP address of the cluster array" + ::= { clusterArrayEntry 3 } + + clusterArrayUsername OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Username for cluster array login" + ::= { clusterArrayEntry 4 } + + clusterArrayPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..100)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Password for cluster array login" + ::= { clusterArrayEntry 5 } + + clusterArrayPasswordForm OBJECT-TYPE + SYNTAX INTEGER { clear(0), encrypted(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Password form" + ::= { clusterArrayEntry 6 } + + clusterArrayCluster OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Name of the array parent cluster" + ::= { clusterArrayEntry 7 } + + clusterArrayRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the cluster array row entry" + ::= { clusterArrayEntry 8 } + + clusterArrayTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset cluster array table (clear all entries)" + ::= { cluster 2 } + +-- +-- EnvCtrl +-- + + envCtrlTemperature OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller temperature (Celsius)" + ::= { envCtrl 1 } + + envCtrlHumidity OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller humidity (percent)" + ::= { envCtrl 2 } + + envCtrlCoolRPM1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller cooling fan 1 RPM" + ::= { envCtrl 3 } + + envCtrlCoolRPM2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller cooling fan 2 RPM" + ::= { envCtrl 4 } + + envCtrlCoolRPM3 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller cooling fan 3 RPM" + ::= { envCtrl 5 } + + envCtrlCoolRPM4 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller cooling fan 4 RPM" + ::= { envCtrl 6 } + + envCtrlHeatRPM1 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller heating fan 1 RPM" + ::= { envCtrl 7 } + + envCtrlHeatRPM2 OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller heating fan 2 RPM" + ::= { envCtrl 8 } + + envCtrlArrayOn OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller installed" + ::= { envCtrl 9 } + + envCtrlCoolOn OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller cooling fan on" + ::= { envCtrl 10 } + + envCtrlHeatOn OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller heating fan on" + ::= { envCtrl 11 } + + envCtrlSoftwareVersion OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outdoor enclosure environmental controller software version" + ::= { envCtrl 12 } + +-- +-- LOCATION +-- + + locationReportingOn OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Location server reporting enable/disable" + ::= { location 1 } + + locationReportingUrl OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Location server URL" + ::= { location 2 } + + locationReportingKey OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..49)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Location server key" + ::= { location 3 } + + locationReportingPeriod OBJECT-TYPE + SYNTAX Integer32(15..50000) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Location server reporting period" + ::= { location 4 } + +-- +-- GROUP +-- + + groupTable OBJECT-TYPE + SYNTAX SEQUENCE OF GroupEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Group table for the array" + ::= { group 1 } + + groupEntry OBJECT-TYPE + SYNTAX GroupEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Group table entry" + INDEX { groupIndex } + ::= { groupTable 1 } + + GroupEntry ::= SEQUENCE { + groupIndex Integer32, + groupName DisplayString, + groupRadiusFilterID DisplayString, + groupEnable INTEGER, + groupVlan Integer32, + groupQOS Integer32, + groupDhcpPool DisplayString, + groupFilterList DisplayString, + groupRoamingLayer INTEGER, + groupStationLimit Integer32, + groupTrafficLimit Integer32, + groupTrafficLimitSta Integer32, + groupTimeOn Integer32, + groupTimeOff Integer32, + groupDaysOnMon INTEGER, + groupDaysOnTue INTEGER, + groupDaysOnWed INTEGER, + groupDaysOnThu INTEGER, + groupDaysOnFri INTEGER, + groupDaysOnSat INTEGER, + groupDaysOnSun INTEGER, + groupWprEnable INTEGER, + groupWprSplashEnable INTEGER, + groupWprSplashTimeout Integer32, + groupWprLandingPage DisplayString, + groupActive INTEGER, + groupRowStatus RowStatus, + groupWprBackground DisplayString, + groupWprLogoImage DisplayString, + groupWprHeaderText DisplayString, + groupWprFooterText DisplayString, + groupFallback INTEGER, + groupDeviceID DisplayString, + groupTrafficLimitKbps Integer32, + groupTrafficLimitKbpsSta Integer32 + } + + groupIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Group table index" + ::= { groupEntry 1 } + + groupName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group name" + ::= { groupEntry 2 } + + groupRadiusFilterID OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Radius Filter-ID (Attribute Type 11) mapped to this group" + ::= { groupEntry 3 } + + groupEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable group" + ::= { groupEntry 4 } + + groupVlan OBJECT-TYPE + SYNTAX Integer32(0..4095) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group VLAN ID" + ::= { groupEntry 5 } + + groupQOS OBJECT-TYPE + SYNTAX Integer32(0..3) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group QoS level" + ::= { groupEntry 6 } + + groupDhcpPool OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group DHCP pool" + ::= { groupEntry 7 } + + groupFilterList OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..20)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group filter list" + ::= { groupEntry 8 } + + groupRoamingLayer OBJECT-TYPE + SYNTAX INTEGER { layer-2-only(0), layer-2-and-3(1), none(2) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Fast roaming layer allowed for this group" + ::= { groupEntry 9 } + + groupStationLimit OBJECT-TYPE + SYNTAX Integer32(1..3840) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Station limit for group" + ::= { groupEntry 10 } + + groupTrafficLimit OBJECT-TYPE + SYNTAX Integer32(0..1000000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Traffic limit for group (10 to 1000000 pps, 0 - unlimited)" + ::= { groupEntry 11 } + + groupTrafficLimitSta OBJECT-TYPE + SYNTAX Integer32(0..100000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Traffic limit per station for group (10 to 100000 pps, 0 - unlimited)" + ::= { groupEntry 12 } + + groupTimeOn OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Set daily time group is active (in minutes, -1 - always)" + ::= { groupEntry 13 } + + groupTimeOff OBJECT-TYPE + SYNTAX Integer32(-1..1439) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Set daily time group is inactive (in minutes, -1 - never)" + ::= { groupEntry 14 } + + groupDaysOnMon OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Monday" + ::= { groupEntry 15 } + + groupDaysOnTue OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Tuesday" + ::= { groupEntry 16 } + + groupDaysOnWed OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Wednesday" + ::= { groupEntry 17 } + + groupDaysOnThu OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Thursday" + ::= { groupEntry 18 } + + groupDaysOnFri OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Friday" + ::= { groupEntry 19 } + + groupDaysOnSat OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Saturday" + ::= { groupEntry 20 } + + groupDaysOnSun OBJECT-TYPE + SYNTAX INTEGER { off(0), on(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Group is on/off on Sunday" + ::= { groupEntry 21 } + + groupWprEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable WPR for group" + ::= { groupEntry 22 } + + groupWprSplashEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Enable or disable splash screen for WPR" + ::= { groupEntry 23 } + + groupWprSplashTimeout OBJECT-TYPE + SYNTAX Integer32(0..100) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Splash screen timeout (0 - no timeout)" + ::= { groupEntry 24 } + + groupWprLandingPage OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Landing page URL for WPR" + ::= { groupEntry 25 } + + groupActive OBJECT-TYPE + SYNTAX INTEGER { inactive(0), active(1) } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Flag indicating whether group is currently active" + ::= { groupEntry 26 } + + groupRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the group row entry" + ::= { groupEntry 27 } + + groupWprBackground OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom background file for WPR" + ::= { groupEntry 28 } + + groupWprLogoImage OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom logo file for WPR" + ::= { groupEntry 29 } + + groupWprHeaderText OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom header text file for WPR" + ::= { groupEntry 30 } + + groupWprFooterText OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Custom footer text file for WPR" + ::= { groupEntry 31 } + + groupFallback OBJECT-TYPE + SYNTAX INTEGER { none(0), disable-group(1) } + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Define network connectivity fallback mode for this group" + ::= { groupEntry 32 } + + groupDeviceID OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Device ID mapped to this group" + ::= { groupEntry 33 } + + groupTrafficLimitKbps OBJECT-TYPE + SYNTAX Integer32(0..4000000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Traffic limit for group (10 to 4000000 kbps, 0 - unlimited)" + ::= { groupEntry 34 } + + groupTrafficLimitKbpsSta OBJECT-TYPE + SYNTAX Integer32(0..400000) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Traffic limit per station for group (10 to 400000 kbps, 0 - unlimited)" + ::= { groupEntry 35 } + + groupTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset group table (clear all entries)" + ::= { group 2 } + +-- +-- MDM +-- + + mdmAirWatchApiURL OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API URL" + ::= { mdm 1 } + + mdmAirWatchApiKey OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API key" + ::= { mdm 2 } + + mdmAirWatchApiUsername OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API username" + ::= { mdm 3 } + + mdmAirWatchApiPassword OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..50)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API password" + ::= { mdm 4 } + + mdmAirWatchApiPasswordEnc OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..100)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API password (encrypted)" + ::= { mdm 5 } + + mdmAirWatchApiTimeout OBJECT-TYPE + SYNTAX Integer32(1..20) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API timeout (in seconds)" + ::= { mdm 6 } + + mdmAirWatchApiPollPeriod OBJECT-TYPE + SYNTAX Integer32(1..3600) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API poll period (in seconds)" + ::= { mdm 7 } + + mdmAirWatchApiAccessError OBJECT-TYPE + SYNTAX INTEGER { block(0), allow(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch API access error action" + ::= { mdm 8 } + + mdmAirWatchRedirectURL OBJECT-TYPE + SYNTAX DisplayString(SIZE(0..255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "AirWatch station redirect URL" + ::= { mdm 9 } + +-- +-- NETFLOW +-- + + netflowEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), v5(1), v9(2), ipfix(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable NetFlow probe" + ::= { netflow 1 } + + netflowCollectorHost OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Netflow collector IP address or host name" + ::= { netflow 2 } + + netflowCollectorPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "NetFlow collector port" + ::= { netflow 3 } + +-- +-- WIFI_TAG +-- + + wifiTagEnable OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Enable or disable WiFi Tag" + ::= { wifiTag 1 } + + wifiTagUdpPort OBJECT-TYPE + SYNTAX Integer32(0..65535) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WiFi Tag UDP Port" + ::= { wifiTag 2 } + + wifiTagChannel1 OBJECT-TYPE + SYNTAX Integer32(0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WiFi Tag Channel 1" + ::= { wifiTag 3 } + + wifiTagChannel2 OBJECT-TYPE + SYNTAX Integer32(0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WiFi Tag Channel 2" + ::= { wifiTag 4 } + + wifiTagChannel3 OBJECT-TYPE + SYNTAX Integer32(0..255) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "WiFi Tag Channel 3" + ::= { wifiTag 5 } + + wifiTagEkahauServer OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ekahau server host name or IP address" + ::= { wifiTag 6 } + +-- +-- WPR +-- + + wprWhitelistSsidTable OBJECT-TYPE + SYNTAX SEQUENCE OF WprWhitelistSsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per SSID" + ::= { wpr 1 } + + wprWhitelistSsidEntry OBJECT-TYPE + SYNTAX WprWhitelistSsidEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per SSID table entry" + INDEX { wprWhitelistSsidIndex } + ::= { wprWhitelistSsidTable 1 } + + WprWhitelistSsidEntry ::= SEQUENCE { + wprWhitelistSsidIndex Integer32, + wprWhitelistSsidDomain DisplayString, + wprWhitelistSsidName DisplayString, + wprWhitelistSsidRowStatus RowStatus + } + + wprWhitelistSsidIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per SSID index" + ::= { wprWhitelistSsidEntry 1 } + + wprWhitelistSsidDomain OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WPR whitelist domain name" + ::= { wprWhitelistSsidEntry 2 } + + wprWhitelistSsidName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "SSID this WPR whitelist domain belongs to" + ::= { wprWhitelistSsidEntry 3 } + + wprWhitelistSsidRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the WPR whitelist row entry" + ::= { wprWhitelistSsidEntry 4 } + + wprWhitelistGroupTable OBJECT-TYPE + SYNTAX SEQUENCE OF WprWhitelistGroupEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per user group" + ::= { wpr 2 } + + wprWhitelistGroupEntry OBJECT-TYPE + SYNTAX WprWhitelistGroupEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per user group table entry" + INDEX { wprWhitelistGroupIndex } + ::= { wprWhitelistGroupTable 1 } + + WprWhitelistGroupEntry ::= SEQUENCE { + wprWhitelistGroupIndex Integer32, + wprWhitelistGroupDomain DisplayString, + wprWhitelistGroupName DisplayString, + wprWhitelistGroupRowStatus RowStatus + } + + wprWhitelistGroupIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "WPR whitelist per user group index" + ::= { wprWhitelistGroupEntry 1 } + + wprWhitelistGroupDomain OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..255)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "WPR whitelist domain name" + ::= { wprWhitelistGroupEntry 2 } + + wprWhitelistGroupName OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "User group this WPR whitelist domain belongs to" + ::= { wprWhitelistGroupEntry 3 } + + wprWhitelistGroupRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-create + STATUS current + DESCRIPTION + "Status of the WPR whitelist row entry" + ::= { wprWhitelistGroupEntry 4 } + + wprWhitelistSsidTableReset OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset WPR whitelist (clear all entries) for given SSID" + ::= { wpr 3 } + + wprWhitelistGroupTableReset OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..32)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset WPR whitelist (clear all entries) for given user group" + ::= { wpr 4 } + +-- +-- OAUTH - Open Authentication +-- + + oauthTokenTable OBJECT-TYPE + SYNTAX SEQUENCE OF OauthTokenEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "OAUTH Token table" + ::= { oauth 1 } + + oauthTokenEntry OBJECT-TYPE + SYNTAX OauthTokenEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "OAUTH token table entry" + INDEX { oauthTokenIndex } + ::= { oauthTokenTable 1 } + + OauthTokenEntry ::= SEQUENCE { + oauthTokenIndex Integer32, + oauthTokenId DisplayString, + oauthTokenClientId DisplayString, + oauthTokenGrantType DisplayString, + oauthTokenExpiration Counter32, + oauthTokenUserAgent DisplayString, + oauthTokenScope DisplayString, + oauthTokenCode DisplayString, + oauthTokenType DisplayString, + oauthTokenRowStatus RowStatus + } + + oauthTokenIndex OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "OAUTH Token index" + ::= { oauthTokenEntry 1 } + + + oauthTokenId OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Id" + ::= { oauthTokenEntry 2 } + + oauthTokenClientId OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Client ID" + ::= { oauthTokenEntry 3 } + + oauthTokenGrantType OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Grant Type" + ::= { oauthTokenEntry 4 } + + oauthTokenExpiration OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Expiration" + ::= { oauthTokenEntry 5 } + + oauthTokenUserAgent OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token User Agent" + ::= { oauthTokenEntry 6 } + + oauthTokenScope OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Scope" + ::= { oauthTokenEntry 7 } + + oauthTokenCode OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Code" + ::= { oauthTokenEntry 8 } + + oauthTokenType OBJECT-TYPE + SYNTAX DisplayString(SIZE(1..50)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "OAUTH Token Type" + ::= { oauthTokenEntry 9 } + + oauthTokenRowStatus OBJECT-TYPE + SYNTAX RowStatus + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Status of the OAUTH Token row entry" + ::= { oauthTokenEntry 10 } + + oauthTableReset OBJECT-TYPE + SYNTAX INTEGER { reset(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Reset OAUTH table (clear all entries)" + ::= { oauth 2 } + +-- +-- PROXY FORWARDING +-- + + proxyFwdProxyType OBJECT-TYPE + SYNTAX INTEGER { off(0), bluecoat(1), netboxblue(2) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable proxy forwarding" + ::= { proxyFwd 1 } + + proxyFwdBlueCoatUrl OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "URL of BlueCoat proxy server" + ::= { proxyFwd 2 } + + proxyFwdNetBoxBlueUrl OBJECT-TYPE + SYNTAX DisplayString(SIZE(0.. 255)) + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "URL of NetBoxBlue proxy server" + ::= { proxyFwd 3 } + + +-- +-- TRAPS +-- + + adminTraps OBJECT IDENTIFIER ::= { traps 1 } + stationTraps OBJECT IDENTIFIER ::= { traps 2 } + generalTraps OBJECT IDENTIFIER ::= { traps 3 } + envCtrlTraps OBJECT IDENTIFIER ::= { traps 4 } + iapTraps OBJECT IDENTIFIER ::= { traps 5 } + trapObjects OBJECT IDENTIFIER ::= { traps 100 } + +-- +-- TRAPS ADMIN +-- + + adminLogin NOTIFICATION-TYPE + OBJECTS { adminUsername } + STATUS current + DESCRIPTION + "Admin Logged into Array" + ::= { adminTraps 1 } + + adminLogout NOTIFICATION-TYPE + OBJECTS { adminUsername } + STATUS current + DESCRIPTION + "Admin Logged out from Array" + ::= { adminTraps 2 } + +-- +-- TRAPS STATION +-- + + stationACLFailure NOTIFICATION-TYPE + OBJECTS { stationAssociationMACAddress } + STATUS current + DESCRIPTION + "Station rejected by ACL" + ::= { stationTraps 1 } + + stationRadiusAuthFailure NOTIFICATION-TYPE + OBJECTS { stationAssociationMACAddress } + STATUS current + DESCRIPTION + "Station failed Radius server authentication" + ::= { stationTraps 2 } + +-- +-- TRAPS GENERAL +-- + resetArray NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Admin requested reset of the Array" + ::= { generalTraps 1 } + + rebootArray NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Administrator requested a reboot of Array" + ::= { generalTraps 2 } + + softwareUploadFailure NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Array software image upload failed" + ::= { generalTraps 3 } + + softwareUploadSuccess NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Array software image upload succeeded" + ::= { generalTraps 4 } + + softwareUpgradeFailure NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Array software upgrade failed" + ::= { generalTraps 5 } + + softwareUpgradeSuccess NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Array software upgrade succeeded" + ::= { generalTraps 6 } + + dhcpRenewFailure NOTIFICATION-TYPE + OBJECTS { ethStatsIfaceName } + STATUS current + DESCRIPTION + "Unable to get DHCP Address" + ::= { generalTraps 7 } + + cfgChange NOTIFICATION-TYPE + OBJECTS { cfgModuleOID } + STATUS current + DESCRIPTION + "Configuration change" + ::= { generalTraps 8 } + + keepAlive NOTIFICATION-TYPE + OBJECTS { systemHostname } + STATUS current + DESCRIPTION + "Keepalive notice" + ::= { generalTraps 9 } + + encDoorOpened NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Enclosure door opened" + ::= { generalTraps 10 } + + encDoorClosed NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Enclosure door closed" + ::= { generalTraps 11 } + + flashPartitionCorrupt NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Flash partition corrupt" + ::= { generalTraps 12 } + + licenseUpdate NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "License updated" + ::= { generalTraps 13 } + +-- +-- TRAPS ENVIRONMENTAL CONTROLLER +-- + + envCtrlTempOver NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Outdoor enclosure temperature too high" + ::= { envCtrlTraps 1 } + + envCtrlTempUnder NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Outdoor enclosure temperature too low" + ::= { envCtrlTraps 2 } + + envCtrlHumidOver NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Outdoor enclosure humidity too high" + ::= { envCtrlTraps 3 } + + envCtrlFanFail NOTIFICATION-TYPE + STATUS current + DESCRIPTION + "Outdoor enclosure fan failure" + ::= { envCtrlTraps 4 } + +-- +-- TRAPS IAP +-- + + iapBeaconProbeFailure NOTIFICATION-TYPE + OBJECTS { iapStatsIfaceName } + STATUS current + DESCRIPTION + "No received beacons (or probe responses) from IAP, alert only" + ::= { iapTraps 1 } + + iapBeaconProbeFailurePhyReset NOTIFICATION-TYPE + OBJECTS { iapStatsIfaceName } + STATUS current + DESCRIPTION + "No received beacons (or probe responses) from IAP, resetting interface PHY" + ::= { iapTraps 2 } + + iapBeaconProbeFailureMacReset NOTIFICATION-TYPE + OBJECTS { iapStatsIfaceName } + STATUS current + DESCRIPTION + "No received beacons (or probe responses) from IAP, resetting interface MAC" + ::= { iapTraps 3 } + + iapBeaconProbeFailureArrayReboot NOTIFICATION-TYPE + OBJECTS { iapStatsIfaceName } + STATUS current + DESCRIPTION + "No received beacons (or probe responses) from IAP, scheduling array reboot" + ::= { iapTraps 4 } + +-- +-- TRAP OBJECTS +-- + + cfgModuleOID OBJECT-TYPE + SYNTAX OBJECT IDENTIFIER + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Configuration module OID" + ::= { trapObjects 1 } + +-- +-- PROXY CLIENT for MANAGEMENT TRAFFIC (PROXY MGMT) +-- + proxyMgmtEnabled OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable all proxy client services for management traffic" + ::= { proxyMgmt 1 } + + proxyMgmtCustom OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable custom tsocks configuration for proxy client" + ::= { proxyMgmt 2 } + + proxyMgmtHttpEnabled OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable HTTP proxy client" + ::= { proxyMgmt 3 } + + proxyMgmtHttpIpAddr OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ip Address used with HTTP proxy client" + ::= { proxyMgmt 4 } + + proxyMgmtHttpPort OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Port used with HTTP proxy client" + ::= { proxyMgmt 5 } + + proxyMgmtHttpUsername OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Username used with HTTP proxy client" + ::= { proxyMgmt 6 } + + proxyMgmtHttpPassword OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Password used with HTTP proxy client" + ::= { proxyMgmt 7 } + + proxyMgmtHttpType OBJECT-TYPE + SYNTAX INTEGER { http(0) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "HTTP proxy client Type" + ::= { proxyMgmt 8 } + + proxyMgmtHttpsEnabled OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable HTTPS proxy client" + ::= { proxyMgmt 9 } + + proxyMgmtHttpsIpAddr OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ip Address used with HTTPS proxy client" + ::= { proxyMgmt 10 } + + proxyMgmtHttpsPort OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Port used with HTTPS proxy client" + ::= { proxyMgmt 11 } + + proxyMgmtHttpsUsername OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Username used with HTTPS proxy client" + ::= { proxyMgmt 12 } + + proxyMgmtHttpsPassword OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Password used with HTTPS proxy client" + ::= { proxyMgmt 13 } + + proxyMgmtHttpsType OBJECT-TYPE + SYNTAX INTEGER { https(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "HTTPS proxy client Type" + ::= { proxyMgmt 14 } + + proxyMgmtSocksEnabled OBJECT-TYPE + SYNTAX INTEGER { disable(0), enable(1) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Disable or enable SOCKS proxy client" + ::= { proxyMgmt 15 } + + proxyMgmtSocksIpAddr OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Ip Address used with SOCKS proxy client" + ::= { proxyMgmt 16 } + + proxyMgmtSocksPort OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Port used with SOCKS proxy client" + ::= { proxyMgmt 17 } + + proxyMgmtSocksUsername OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Username used with SOCKS proxy client" + ::= { proxyMgmt 18 } + + proxyMgmtSocksPassword OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Password used with SOCKS proxy client" + ::= { proxyMgmt 19 } + + proxyMgmtSocksType OBJECT-TYPE + SYNTAX INTEGER { socks4(2), socks5(3) } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "SOCKS proxy client Type" + ::= { proxyMgmt 20 } + + + proxyMgmtSubnet01 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 01" + ::= { proxyMgmt 21 } + + proxyMgmtMask01 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 01" + ::= { proxyMgmt 22 } + + proxyMgmtSubnet02 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 02" + ::= { proxyMgmt 23 } + + proxyMgmtMask02 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 02" + ::= { proxyMgmt 24 } + + + proxyMgmtSubnet03 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 03" + ::= { proxyMgmt 25 } + + proxyMgmtMask03 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 03" + ::= { proxyMgmt 26 } + + proxyMgmtSubnet04 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 04" + ::= { proxyMgmt 27 } + + proxyMgmtMask04 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 04" + ::= { proxyMgmt 28 } + + proxyMgmtSubnet05 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 05" + ::= { proxyMgmt 29 } + + proxyMgmtMask05 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 05" + ::= { proxyMgmt 30 } + + proxyMgmtSubnet06 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 06" + ::= { proxyMgmt 31 } + + proxyMgmtMask06 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 06" + ::= { proxyMgmt 32 } + + proxyMgmtSubnet07 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 07" + ::= { proxyMgmt 33 } + + proxyMgmtMask07 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 07" + ::= { proxyMgmt 34 } + + proxyMgmtSubnet08 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 08" + ::= { proxyMgmt 35 } + + proxyMgmtMask08 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 08" + ::= { proxyMgmt 36 } + + proxyMgmtSubnet09 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 09" + ::= { proxyMgmt 37 } + + proxyMgmtMask09 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 09" + ::= { proxyMgmt 38 } + + proxyMgmtSubnet10 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network 10" + ::= { proxyMgmt 39 } + + proxyMgmtMask10 OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "Socks Proxy Client Whitelist Local Network Mask 10" + ::= { proxyMgmt 40 } + + +END From 97750c01fe0475839fee3d9b80b2d7517a22484e Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Mon, 23 May 2016 21:34:45 +0100 Subject: [PATCH 023/133] Removed debugging line. --- includes/polling/wifi.inc.php | 1 - 1 file changed, 1 deletion(-) diff --git a/includes/polling/wifi.inc.php b/includes/polling/wifi.inc.php index 5255856468..530bbb5521 100644 --- a/includes/polling/wifi.inc.php +++ b/includes/polling/wifi.inc.php @@ -88,7 +88,6 @@ if ($device['type'] == 'network' || $device['type'] == 'firewall' || $device['ty $wificlients2++; } } - echo "Xirrus - $wificlients1 / $wificlients2\n"; } if (isset($wificlients1) && $wificlients1 != '') { From 7d8c2201910c97daaef71f98a8bb526aea3afc41 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Tue, 24 May 2016 17:21:09 +0100 Subject: [PATCH 024/133] alert rules that had /%somevars were not being exploded correctly. Added in a space after the / so this works as expected --- includes/alerts.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/alerts.inc.php b/includes/alerts.inc.php index 6af9c1181d..04f76d0197 100644 --- a/includes/alerts.inc.php +++ b/includes/alerts.inc.php @@ -37,7 +37,7 @@ function GenSQL($rule) { return false; } //Pretty-print rule to dissect easier - $pretty = array('*' => '*', '(' => ' ( ', ')' => ' ) ', '/' => '/', '&&' => ' && ', '||' => ' || ', 'DATE_SUB ( NOW ( )' => 'DATE_SUB( NOW()'); + $pretty = array('*' => '*', '(' => ' ( ', ')' => ' ) ', '/' => '/ ', '&&' => ' && ', '||' => ' || ', 'DATE_SUB ( NOW ( )' => 'DATE_SUB( NOW()'); $rule = str_replace(array_keys($pretty),$pretty,$rule); $tmp = explode(" ",$rule); $tables = array(); From 45b331b1008d99ca2683b5ed27436f77d41c0287 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Tue, 24 May 2016 17:40:18 +0100 Subject: [PATCH 025/133] Update documentation, and fix rule in database --- doc/Extensions/Alerting.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index 1183a5a37a..43a6c6be19 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -564,6 +564,12 @@ All macros that are not unary should return Boolean. You can only apply _Equal_ or _Not-Equal_ Operations on Boolean-macros where `True` is represented by `"1"` and `False` by `"0"`. +Note, if using a /, spaces must be inserted around it. + +Example +```php +((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100 +``` ## Device (Boolean) @@ -627,7 +633,7 @@ Entity: `%macros.port_usage_perc` Description: Return port-usage in percent. -Source: `((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100` +Source: `((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100` ## Time From d809276e2b422a91c45f45b46d31421be9698e02 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Tue, 24 May 2016 17:42:14 +0100 Subject: [PATCH 026/133] Remove bad fix, and add SQL --- includes/alerts.inc.php | 2 +- sql-schema/115.sql | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 sql-schema/115.sql diff --git a/includes/alerts.inc.php b/includes/alerts.inc.php index 04f76d0197..6af9c1181d 100644 --- a/includes/alerts.inc.php +++ b/includes/alerts.inc.php @@ -37,7 +37,7 @@ function GenSQL($rule) { return false; } //Pretty-print rule to dissect easier - $pretty = array('*' => '*', '(' => ' ( ', ')' => ' ) ', '/' => '/ ', '&&' => ' && ', '||' => ' || ', 'DATE_SUB ( NOW ( )' => 'DATE_SUB( NOW()'); + $pretty = array('*' => '*', '(' => ' ( ', ')' => ' ) ', '/' => '/', '&&' => ' && ', '||' => ' || ', 'DATE_SUB ( NOW ( )' => 'DATE_SUB( NOW()'); $rule = str_replace(array_keys($pretty),$pretty,$rule); $tmp = explode(" ",$rule); $tables = array(); diff --git a/sql-schema/115.sql b/sql-schema/115.sql new file mode 100644 index 0000000000..ff5557c754 --- /dev/null +++ b/sql-schema/115.sql @@ -0,0 +1 @@ +UPDATE `config` SET `config_value` = '((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100' WHERE `config_name` = 'alert.macros.rule.port_usage_perc'; From cf394368650cd1e7340ffd68f20c408dd728998c Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Tue, 24 May 2016 13:52:04 -0400 Subject: [PATCH 027/133] fix indentation per request --- includes/discovery/entity-physical.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/discovery/entity-physical.inc.php b/includes/discovery/entity-physical.inc.php index f82418c200..91c61b8de3 100644 --- a/includes/discovery/entity-physical.inc.php +++ b/includes/discovery/entity-physical.inc.php @@ -11,7 +11,7 @@ if ($config['enable_inventory']) { $entity_array = snmpwalk_cache_oid($device, 'jnxBoxAnatomy', $entity_array, 'JUNIPER-MIB'); } elseif ($device['os'] == 'timos') { - $entity_array = array(); + $entity_array = array(); echo 'tmnxHwObjs'; $entity_array = snmpwalk_cache_multi_oid($device, 'tmnxHwObjs', $entity_array, 'TIMETRA-CHASSIS-MIB', '+'.$config['mib_dir'].'/aos:'.$config['mib_dir']); } @@ -44,7 +44,7 @@ if ($config['enable_inventory']) { $entPhysicalAssetID = $entry['entPhysicalAssetID']; // fix for issue 1865, $entPhysicalIndex, as it contains a quad dotted number on newer Junipers // using str_replace to remove all dots should fix this even if it changes in future - $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); + $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); } elseif ($device['os'] == 'timos') { $entPhysicalDescr = $entry['tmnxCardTypeDescription']; @@ -62,7 +62,7 @@ if ($config['enable_inventory']) { $entPhysicalIsFRU = $entry['tmnxHwIsFRU']; $entPhysicalAlias = $entry['tmnxHwAlias']; $entPhysicalAssetID = $entry['tmnxHwAssetID']; - $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); + $entPhysicalIndex = str_replace('.','',$entPhysicalIndex); } else { $entPhysicalDescr = $entry['entPhysicalDescr']; From 4f75f6aa8351d9860502deea1f764b2ef4277d97 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Tue, 24 May 2016 20:24:20 +0100 Subject: [PATCH 028/133] Updated SQL to correct bad macro --- sql-schema/115.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql-schema/115.sql b/sql-schema/115.sql index ff5557c754..c4ef10ab83 100644 --- a/sql-schema/115.sql +++ b/sql-schema/115.sql @@ -1 +1,2 @@ -UPDATE `config` SET `config_value` = '((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100' WHERE `config_name` = 'alert.macros.rule.port_usage_perc'; +UPDATE `config` SET `config_value` = '((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100' WHERE `config_value` = '((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100'; +UPDATE `config` SET `config_default` = '((%ports.ifInOctets_rate*8) / %ports.ifSpeed)*100' WHERE `config_default` = '((%ports.ifInOctets_rate*8)/%ports.ifSpeed)*100'; From 191fe25c2357a81b31d800b690e196a322c7c3b2 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Tue, 24 May 2016 20:42:33 +0100 Subject: [PATCH 029/133] Removed ?> from OS discovery as requested. Added Xirrus specific RSSI graph. --- .../graphs/device/xirrus_rssi.inc.php | 39 +++++++++++++++++++ includes/polling/os/xirrus.inc.php | 4 ++ includes/polling/wireless/xirrus.inc.php | 18 +++++++++ 3 files changed, 61 insertions(+) create mode 100644 html/includes/graphs/device/xirrus_rssi.inc.php create mode 100644 includes/polling/os/xirrus.inc.php create mode 100644 includes/polling/wireless/xirrus.inc.php diff --git a/html/includes/graphs/device/xirrus_rssi.inc.php b/html/includes/graphs/device/xirrus_rssi.inc.php new file mode 100644 index 0000000000..3675b5d1d6 --- /dev/null +++ b/html/includes/graphs/device/xirrus_rssi.inc.php @@ -0,0 +1,39 @@ + 'FF0000', + 2 => '0000FF', + 3 => '00FF00', + 4 => 'FF00FF', + 5 => '000000', + 6 => 'FFFF00', + 7 => 'C0C0C0', + 8 => '800000', + 9 => '808000', + 10 => '008000', + 11 => '00FFFF', + 12 => '008080', + 13 => '000080', + 14 => '800080', + 15 => 'FF69B4', + 16 => '006400' +); + +$rrd_options .= ' -E '; +$rrd_options .= " COMMENT:'Signal RSSI Cur Min Max\\n'"; +$radioId=1; +foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_rssi-*.rrd') as $rrd) { + $color=$pallette[$radioId]; + + $descr = "iap$radioId "; + + $rrd_options .= " DEF:rssi$radioId=$rrd:rssi:AVERAGE"; + $rrd_options .= " LINE2:rssi$radioId#".$color.":'".$descr."'"; + $rrd_options .= " GPRINT:rssi$radioId:LAST:'%5.0lf'"; + $rrd_options .= " GPRINT:rssi$radioId:MIN:'%5.0lf'"; + $rrd_options .= " GPRINT:rssi$radioId:MAX:'%5.0lf'\\l"; + + $radioId++; +}//end foreach diff --git a/includes/polling/os/xirrus.inc.php b/includes/polling/os/xirrus.inc.php new file mode 100644 index 0000000000..458b0e2670 --- /dev/null +++ b/includes/polling/os/xirrus.inc.php @@ -0,0 +1,4 @@ + $radio) { + + $radioName = $radio['realtimeMonitorIfaceName']; + $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_rssi-$idx.rrd"; + if (!is_file($rrd_filename)) { + rrdtool_create($rrd_filename, " --step 300 DS:rssi:GAUGE:600:-150:0".$config['rrd_rra']); + } + rrdtool_update($rrd_filename, array('rssi'=>$rssi[$idx]['realtimeMonitorAverageRSSI'])); + +} +// cleanup +unset($rrd_filename); unset($radios); unset($rssi); unset($radioName); +$graphs['xirrus_rssi'] = TRUE; +?> From 39f8371ea29c6e1502fec2461311b554a5be9bac Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Tue, 24 May 2016 20:44:58 +0100 Subject: [PATCH 030/133] Removed ?> --- includes/definitions.inc.php | 7 +++++++ includes/discovery/os/xirrus.inc.php | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 79be553dfc..ce8b730aaa 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1680,6 +1680,9 @@ $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; $config['os'][$os]['over'][1]['graph'] = 'device_wifi_clients'; $config['os'][$os]['over'][1]['text'] = 'Wifi Clients'; +$config['os'][$os]['over'][2]['graph'] = 'device_xirrus_rssi'; +$config['os'][$os]['over'][2]['text'] = 'Signal RSSI'; + @@ -2156,6 +2159,10 @@ $config['graph_types']['device']['cisco_wwan_mnc']['section'] = 'wireless'; $config['graph_types']['device']['cisco_wwan_mnc']['order'] = '1'; $config['graph_types']['device']['cisco_wwan_mnc']['descr'] = 'MNC'; +$config['graph_types']['device']['xirrus_rssi']['section'] = 'wireless'; +$config['graph_types']['device']['xirrus_rssi']['order'] = '0'; +$config['graph_types']['device']['xirrus_rssi']['descr'] = 'Signal Rssi'; + // Device Types $i = 0; diff --git a/includes/discovery/os/xirrus.inc.php b/includes/discovery/os/xirrus.inc.php index a4723a0f4c..9540aa22fa 100644 --- a/includes/discovery/os/xirrus.inc.php +++ b/includes/discovery/os/xirrus.inc.php @@ -6,4 +6,3 @@ if(!$os) { } } -?> From 010e4fc10887d3e313289068cca28125c23880b4 Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Tue, 24 May 2016 16:09:37 -0400 Subject: [PATCH 031/133] add OS detection support for the Alcatel-Lucent (Nokia) SAR 7705 per issue #3549 --- includes/discovery/os/alcatel-lucent.inc.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/includes/discovery/os/alcatel-lucent.inc.php b/includes/discovery/os/alcatel-lucent.inc.php index 9d74e3dd2b..ad4314cb1c 100644 --- a/includes/discovery/os/alcatel-lucent.inc.php +++ b/includes/discovery/os/alcatel-lucent.inc.php @@ -34,4 +34,8 @@ if (!$os) { if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.1.9.1') !== false) { $os = 'timos'; } + // TiMOS-B-6.0.R2 both/hops ALCATEL-LUCENT SAR 7705 + if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.6.1.1.2.1') !== false) { + $os = 'timos'; + } }//end if From 3f0ff2bb8cd1e6e6aa912e9396fa86c960e420d2 Mon Sep 17 00:00:00 2001 From: Chris Freas Date: Tue, 24 May 2016 16:48:38 -0400 Subject: [PATCH 032/133] add a few more OIDs for the 7705 SAR since there are different hardware versions of the box. --- includes/discovery/os/alcatel-lucent.inc.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/includes/discovery/os/alcatel-lucent.inc.php b/includes/discovery/os/alcatel-lucent.inc.php index ad4314cb1c..599b9c7900 100644 --- a/includes/discovery/os/alcatel-lucent.inc.php +++ b/includes/discovery/os/alcatel-lucent.inc.php @@ -38,4 +38,16 @@ if (!$os) { if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.6.1.1.2.1') !== false) { $os = 'timos'; } + // TiMOS-B-6.1.R7 both/hops ALCATEL-LUCENT SAR 7705 + if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.6.1.1.2.2') !== false) { + $os = 'timos'; + } + // TiMOS-B-7.0.R5 both/hops ALCATEL SAR 7705 + if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.6.1.1.2.5') !== false) { + $os = 'timos'; + } + // TiMOS-B-6.0.R2 both/hops ALCATEL-LUCENT SAR 7705 + if (strpos($sysObjectId, '.1.3.6.1.4.1.6527.6.1.1.2.6') !== false) { + $os = 'timos'; + } }//end if From db5d074a52a7b44b03a928586dcae105085254e5 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Wed, 25 May 2016 09:52:28 +0100 Subject: [PATCH 033/133] Enable discovery of CDP neighbour by IP address --- includes/discovery/discovery-protocols.inc.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/includes/discovery/discovery-protocols.inc.php b/includes/discovery/discovery-protocols.inc.php index 5563da898f..d1aafd3550 100644 --- a/includes/discovery/discovery-protocols.inc.php +++ b/includes/discovery/discovery-protocols.inc.php @@ -55,7 +55,21 @@ if ($config['autodiscovery']['xdp'] === true) { $remote_device_id = dbFetchCell('SELECT `device_id` FROM `devices` WHERE `sysName` = ? OR `hostname` = ?', array($cdp['cdpCacheDeviceId'], $cdp['cdpCacheDeviceId'])); if (!$remote_device_id) { - $remote_device_id = discover_new_device($cdp['cdpCacheDeviceId'], $device, 'CDP', $interface); + if(!$config['discovery_by_ip']) { + $remote_device_id = discover_new_device($cdp['cdpCacheDeviceId'], $device, 'CDP', $interface); + } + else { + $ip_arr = explode(" ", $array['cdpCacheAddress']); + + $a = hexdec($ip_arr[0]); + $b = hexdec($ip_arr[1]); + $c = hexdec($ip_arr[2]); + $d = hexdec($ip_arr[3]); + + $cdp_ip = "$a.$b.$c.$d"; + + $remote_device_id = discover_new_device($cdp_ip, $device, 'CDP', $interface); + } } if ($remote_device_id) { From 3674143f43540a2865dc217bc8acb566cdfe66c3 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Wed, 25 May 2016 13:24:32 +0100 Subject: [PATCH 034/133] Fix documentation issue for checkout out other peoples commits --- doc/Support/FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Support/FAQ.md b/doc/Support/FAQ.md index 6d1c0664e9..602ac697b3 100644 --- a/doc/Support/FAQ.md +++ b/doc/Support/FAQ.md @@ -164,7 +164,7 @@ If you see `nothing to commit, working directory clean` then let's go for it :) Let's say that you want to test a users (f0o) new development branch (issue-1337) then you can do the following: ```bash -git remote add f0o https://github.com/librenms/librenms.git +git remote add f0o https://github.com/f0o/librenms.git git remote update f0o git checkout issue-1337 ``` From ae234321383c19c3205e65710da7546abb762a29 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Wed, 25 May 2016 19:56:10 +0100 Subject: [PATCH 035/133] Removed ?> from includes/polling/wireless/xirrus.inc.php. Also added graphs for average data rates and noise floor and a custom graph for clients connected per radio that should work on larger models. --- .../graphs/device/xirrus_dataRates.inc.php | 44 +++++++++++++++++++ .../graphs/device/xirrus_noiseFloor.inc.php | 44 +++++++++++++++++++ .../graphs/device/xirrus_rssi.inc.php | 7 ++- .../graphs/device/xirrus_stations.inc.php | 44 +++++++++++++++++++ includes/definitions.inc.php | 13 +++++- includes/polling/wifi.inc.php | 12 ----- includes/polling/wireless/xirrus.inc.php | 40 +++++++++++++++-- 7 files changed, 186 insertions(+), 18 deletions(-) create mode 100644 html/includes/graphs/device/xirrus_dataRates.inc.php create mode 100644 html/includes/graphs/device/xirrus_noiseFloor.inc.php create mode 100644 html/includes/graphs/device/xirrus_stations.inc.php diff --git a/html/includes/graphs/device/xirrus_dataRates.inc.php b/html/includes/graphs/device/xirrus_dataRates.inc.php new file mode 100644 index 0000000000..0f81d52f97 --- /dev/null +++ b/html/includes/graphs/device/xirrus_dataRates.inc.php @@ -0,0 +1,44 @@ + 'FF0000', + 2 => '0000FF', + 3 => '00FF00', + 4 => 'FF00FF', + 5 => '000000', + 6 => 'FFFF00', + 7 => 'C0C0C0', + 8 => '800000', + 9 => '808000', + 10 => '008000', + 11 => '00FFFF', + 12 => '008080', + 13 => '000080', + 14 => '800080', + 15 => 'FF69B4', + 16 => '006400' +); + +$rrd_options .= ' -l 0 -E '; +$rrd_options .= " COMMENT:'Average Data Rate Cur Min Max\\n'"; +$radioId=1; +foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_stats-*.rrd') as $rrd) { + // get radio name + preg_match("/xirrus_stats-iap([0-9]{1,2}).rrd/", $rrd, $out); + list(,$radioId)=$out; + + // build graph + $color=$pallette[$radioId]; + + $descr = "iap$radioId "; + + $rrd_options .= " DEF:rate$radioId=$rrd:dataRate:AVERAGE"; + $rrd_options .= " LINE2:rate$radioId#".$color.":'".$descr."'"; + $rrd_options .= " GPRINT:rate$radioId:LAST:'%5.0lf'"; + $rrd_options .= " GPRINT:rate$radioId:MIN:'%5.0lf'"; + $rrd_options .= " GPRINT:rate$radioId:MAX:'%5.0lf'\\l"; + + $radioId++; +}//end foreach diff --git a/html/includes/graphs/device/xirrus_noiseFloor.inc.php b/html/includes/graphs/device/xirrus_noiseFloor.inc.php new file mode 100644 index 0000000000..5f8afaa817 --- /dev/null +++ b/html/includes/graphs/device/xirrus_noiseFloor.inc.php @@ -0,0 +1,44 @@ + 'FF0000', + 2 => '0000FF', + 3 => '00FF00', + 4 => 'FF00FF', + 5 => '000000', + 6 => 'FFFF00', + 7 => 'C0C0C0', + 8 => '800000', + 9 => '808000', + 10 => '008000', + 11 => '00FFFF', + 12 => '008080', + 13 => '000080', + 14 => '800080', + 15 => 'FF69B4', + 16 => '006400' +); + +$rrd_options .= ' -E '; +$rrd_options .= " COMMENT:'Noisefloor Cur Min Max\\n'"; +$radioId=1; +foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_stats-*.rrd') as $rrd) { + // get radio name + preg_match("/xirrus_stats-iap([0-9]{1,2}).rrd/", $rrd, $out); + list(,$radioId)=$out; + + // build graph + $color=$pallette[$radioId]; + + $descr = "iap$radioId "; + + $rrd_options .= " DEF:noise$radioId=$rrd:noiseFloor:AVERAGE"; + $rrd_options .= " LINE2:noise$radioId#".$color.":'".$descr."'"; + $rrd_options .= " GPRINT:noise$radioId:LAST:'%5.0lf'"; + $rrd_options .= " GPRINT:noise$radioId:MIN:'%5.0lf'"; + $rrd_options .= " GPRINT:noise$radioId:MAX:'%5.0lf'\\l"; + + $radioId++; +}//end foreach diff --git a/html/includes/graphs/device/xirrus_rssi.inc.php b/html/includes/graphs/device/xirrus_rssi.inc.php index 3675b5d1d6..97e58e5a2b 100644 --- a/html/includes/graphs/device/xirrus_rssi.inc.php +++ b/html/includes/graphs/device/xirrus_rssi.inc.php @@ -24,7 +24,12 @@ $pallette = array( $rrd_options .= ' -E '; $rrd_options .= " COMMENT:'Signal RSSI Cur Min Max\\n'"; $radioId=1; -foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_rssi-*.rrd') as $rrd) { +foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_stats-*.rrd') as $rrd) { + // get radio name + preg_match("/xirrus_stats-iap([0-9]{1,2}).rrd/", $rrd, $out); + list(,$radioId)=$out; + + // build graph $color=$pallette[$radioId]; $descr = "iap$radioId "; diff --git a/html/includes/graphs/device/xirrus_stations.inc.php b/html/includes/graphs/device/xirrus_stations.inc.php new file mode 100644 index 0000000000..ae7fb4a1d4 --- /dev/null +++ b/html/includes/graphs/device/xirrus_stations.inc.php @@ -0,0 +1,44 @@ + '001080', + 2 => '043D85', + 3 => '096C8A', + 4 => '0F8F84', + 5 => '159461', + 6 => '1B9A3E', + 7 => '279F22', + 8 => '56A429', + 9 => '83A930', + 10 => 'AEAE38', + 11 => 'B48E40', + 12 => 'B97049', + 13 => 'BE5552', + 14 => 'C35B79', + 15 => 'C864A1', + 16 => 'CE6FC7' +); + +$rrd_options .= ' -l 0 -E '; +$rrd_options .= " COMMENT:'Associated Stations Cur Min Max\\n'"; +$radioId=1; +foreach(glob($config['rrd_dir'].'/'.$device['hostname'].'/xirrus_users-*.rrd') as $rrd) { + // get radio name + preg_match("/xirrus_users-iap([0-9]{1,2}).rrd/", $rrd, $out); + list(,$radioId)=$out; + + // build graph + $color=$pallette[$radioId]; + + $descr = "iap$radioId "; + + $rrd_options .= " DEF:stations$radioId=$rrd:stations:AVERAGE"; + $rrd_options .= " AREA:stations$radioId#".$color.":'".$descr."':STACK"; + $rrd_options .= " GPRINT:stations$radioId:LAST:'%5.0lf'"; + $rrd_options .= " GPRINT:stations$radioId:MIN:'%5.0lf'"; + $rrd_options .= " GPRINT:stations$radioId:MAX:'%5.0lf'\\l"; + + $radioId++; +}//end foreach diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index ce8b730aaa..2c6ebe10f1 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1678,7 +1678,7 @@ $config['os'][$os]['type'] = 'wireless'; $config['os'][$os]['icon'] = 'xirrus'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; -$config['os'][$os]['over'][1]['graph'] = 'device_wifi_clients'; +$config['os'][$os]['over'][1]['graph'] = 'device_xirrus_stations'; $config['os'][$os]['over'][1]['text'] = 'Wifi Clients'; $config['os'][$os]['over'][2]['graph'] = 'device_xirrus_rssi'; $config['os'][$os]['over'][2]['text'] = 'Signal RSSI'; @@ -2162,6 +2162,17 @@ $config['graph_types']['device']['cisco_wwan_mnc']['descr'] = 'MNC'; $config['graph_types']['device']['xirrus_rssi']['section'] = 'wireless'; $config['graph_types']['device']['xirrus_rssi']['order'] = '0'; $config['graph_types']['device']['xirrus_rssi']['descr'] = 'Signal Rssi'; +$config['graph_types']['device']['xirrus_dataRates']['section'] = 'wireless'; +$config['graph_types']['device']['xirrus_dataRates']['order'] = '0'; +$config['graph_types']['device']['xirrus_dataRates']['descr'] = 'Average DataRates'; +$config['graph_types']['device']['xirrus_noiseFloor']['section'] = 'wireless'; +$config['graph_types']['device']['xirrus_noiseFloor']['order'] = '0'; +$config['graph_types']['device']['xirrus_noiseFloor']['descr'] = 'Noise Floor'; +$config['graph_types']['device']['xirrus_stations']['section'] = 'wireless'; +$config['graph_types']['device']['xirrus_stations']['order'] = '0'; +$config['graph_types']['device']['xirrus_stations']['descr'] = 'Associated Stations'; + + // Device Types diff --git a/includes/polling/wifi.inc.php b/includes/polling/wifi.inc.php index 530bbb5521..685fac9641 100644 --- a/includes/polling/wifi.inc.php +++ b/includes/polling/wifi.inc.php @@ -78,18 +78,6 @@ if ($device['type'] == 'network' || $device['type'] == 'firewall' || $device['ty echo (($wificlients1 + 0).' clients on wireless connector, '); } - if ($device['os'] == 'xirrus') { - $wificlients1=0; $wificlients2=0; - $assoc = snmpwalk_cache_oid($device, 'XIRRUS-MIB::stationAssociationIAP', array(), 'XIRRUS-MIB'); - foreach($assoc as $station) { - if ($station['stationAssociationIAP']=='iap1') { - $wificlients1++; - } else { - $wificlients2++; - } - } - } - if (isset($wificlients1) && $wificlients1 != '') { $tags = array( 'rrd_def' => 'DS:wificlients:GAUGE:600:-273:1000', diff --git a/includes/polling/wireless/xirrus.inc.php b/includes/polling/wireless/xirrus.inc.php index e7cd1f0886..e91b61854b 100644 --- a/includes/polling/wireless/xirrus.inc.php +++ b/includes/polling/wireless/xirrus.inc.php @@ -2,17 +2,49 @@ $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus-rssi.rrd"; $radios = snmpwalk_cache_oid($device, 'XIRRUS-MIB::realtimeMonitorIfaceName', array(), 'XIRRUS-MIB'); $rssi = snmpwalk_cache_oid($device, 'XIRRUS-MIB::realtimeMonitorAverageRSSI', array(), 'XIRRUS-MIB'); +$dataRate = snmpwalk_cache_oid($device, 'XIRRUS-MIB::realtimeMonitorAverageDataRate', array(), 'XIRRUS-MIB'); +$noiseFloor = snmpwalk_cache_oid($device, 'XIRRUS-MIB::realtimeMonitorNoiseFloor', array(), 'XIRRUS-MIB'); +$associations=array(); + foreach($radios as $idx => $radio) { $radioName = $radio['realtimeMonitorIfaceName']; - $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_rssi-$idx.rrd"; + $associations[$radioName]=0; + $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_stats-$radioName.rrd"; if (!is_file($rrd_filename)) { - rrdtool_create($rrd_filename, " --step 300 DS:rssi:GAUGE:600:-150:0".$config['rrd_rra']); + rrdtool_create($rrd_filename, " --step 300 DS:rssi:GAUGE:600:-150:0 DS:dataRate:GAUGE:600:0:1400 DS:noiseFloor:GAUGE:600:-150:0".$config['rrd_rra']); } - rrdtool_update($rrd_filename, array('rssi'=>$rssi[$idx]['realtimeMonitorAverageRSSI'])); + rrdtool_update($rrd_filename, array( + 'rssi'=>$rssi[$idx]['realtimeMonitorAverageRSSI'], + 'dataRate'=>$dataRate[$idx]['realtimeMonitorAverageDataRate'], + 'noiseFloor'=>$noiseFloor[$idx]['realtimeMonitorNoiseFloor'] + )); } // cleanup unset($rrd_filename); unset($radios); unset($rssi); unset($radioName); + +// station associations +// custom RRDs and graph as each AP may have 16 radios +$assoc = snmpwalk_cache_oid($device, 'XIRRUS-MIB::stationAssociationIAP', array(), 'XIRRUS-MIB'); +foreach($assoc as $s) { + $radio = array_pop($s); + $associations[$radio]++; +} +unset($radio); unset($assoc); +// write to rrds +print_r($associations); +foreach($associations as $radio => $count) { + $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_users-$radio.rrd"; + if (!is_file($rrd_filename)) { + rrdtool_create($rrd_filename, " --step 300 DS:stations:GAUGE:600:0:3200".$config['rrd_rra']); + } + rrdtool_update($rrd_filename, array('stations'=>$count)); +} +// cleanup +unset($assocations); unset($rrd_filename); + $graphs['xirrus_rssi'] = TRUE; -?> +$graphs['xirrus_dataRates'] = TRUE; +$graphs['xirrus_noiseFloor'] = TRUE; +$graphs['xirrus_stations'] = TRUE; From 18eab48d7ee790839296d373756451586423031d Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Wed, 25 May 2016 20:13:56 +0100 Subject: [PATCH 036/133] Correct array name --- includes/discovery/discovery-protocols.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/discovery/discovery-protocols.inc.php b/includes/discovery/discovery-protocols.inc.php index d1aafd3550..f34d6a7871 100644 --- a/includes/discovery/discovery-protocols.inc.php +++ b/includes/discovery/discovery-protocols.inc.php @@ -59,7 +59,7 @@ if ($config['autodiscovery']['xdp'] === true) { $remote_device_id = discover_new_device($cdp['cdpCacheDeviceId'], $device, 'CDP', $interface); } else { - $ip_arr = explode(" ", $array['cdpCacheAddress']); + $ip_arr = explode(" ", $cdp['cdpCacheAddress']); $a = hexdec($ip_arr[0]); $b = hexdec($ip_arr[1]); From 07455a6e0affec9ce53efae6dac027b9531b5b95 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 26 May 2016 09:44:41 -0500 Subject: [PATCH 037/133] Scrollable widgets Remove several javascript:return false; --- html/css/styles.css | 9 ++++++++- html/includes/common/availability-map.inc.php | 2 +- html/pages/front/tiles.php | 11 ++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/html/css/styles.css b/html/css/styles.css index f480f47733..5f9aaa5587 100644 --- a/html/css/styles.css +++ b/html/css/styles.css @@ -1863,4 +1863,11 @@ label { padding: 5px; border-radius: 4px; box-shadow: 0 5px 15px rgba(0,0,0,.5); -} \ No newline at end of file +} + +.edit-widget, .close-widget { cursor: pointer; } +.widget_body { + overflow-y: auto; + width: 100%; + height: calc(100% - 35px); +} diff --git a/html/includes/common/availability-map.inc.php b/html/includes/common/availability-map.inc.php index fbc82cb926..00656eb43c 100644 --- a/html/includes/common/availability-map.inc.php +++ b/html/includes/common/availability-map.inc.php @@ -15,7 +15,7 @@ if (defined('show_settings')) { $current_mode = isset($widget_settings['mode']) ? $widget_settings['mode'] : 0; $current_width = isset($widget_settings['tile_width']) ? $widget_settings['tile_width'] : 10; $common_output[] = ' -
+
diff --git a/html/pages/front/tiles.php b/html/pages/front/tiles.php index 1b0207bd9d..470f262da7 100644 --- a/html/pages/front/tiles.php +++ b/html/pages/front/tiles.php @@ -169,7 +169,7 @@ foreach (array('Private','Shared (Read)','Shared') as $k=>$v) { @@ -316,7 +316,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg }); }); - $('a[name="place_widget"]').on('click', function(event, state) { + $('.place_widget').on('click', function(event, state) { var widget_id = $(this).data('widget_id'); $.ajax({ type: 'POST', @@ -458,11 +458,11 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg '
'+data.title+ ''+ ''+ - '  '+ - '  '+ + '  '+ + '  '+ ''+ '
'+ - '
'+data.widget+'
'+ + '
'+data.widget+'
'+ '\var timeout'+data.user_widget_id+' = grab_data('+data.user_widget_id+','+data.refresh+',\''+data.widget+'\');\<\/script\>'+ ''; if (data.hasOwnProperty('col') && data.hasOwnProperty('row')) { @@ -506,6 +506,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg } }); } + return false; } function widget_reload(id,data_type) { From 31d4a29359bfd52f92ee2152fb88515527ff4b1f Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Thu, 26 May 2016 18:03:05 +0100 Subject: [PATCH 038/133] Changed OS name to "Xirrus ArrayOS" and internal OS name to 'xirrus_os'. --- includes/definitions.inc.php | 4 ++-- includes/discovery/os/xirrus.inc.php | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 2c6ebe10f1..0f4d1316c0 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1672,8 +1672,8 @@ $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; // Xirrus AP -$os = 'xirrus'; -$config['os'][$os]['text'] = 'Xirrus'; +$os = 'xirrus_aos'; +$config['os'][$os]['text'] = 'Xirrus ArrayOS'; $config['os'][$os]['type'] = 'wireless'; $config['os'][$os]['icon'] = 'xirrus'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; diff --git a/includes/discovery/os/xirrus.inc.php b/includes/discovery/os/xirrus.inc.php index 9540aa22fa..a33e76d3b6 100644 --- a/includes/discovery/os/xirrus.inc.php +++ b/includes/discovery/os/xirrus.inc.php @@ -2,7 +2,9 @@ if(!$os) { if (strstr($sysDescr, 'Xirrus')) { - $os = 'xirrus'; + if (strstr($sysDescr, 'ArrayOS')) { + $os = 'xirrus_aos'; + } } } From e5a21b04c06b49ff65cac2d254a7d35264c73992 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Thu, 26 May 2016 18:05:36 +0100 Subject: [PATCH 039/133] Fixed formatting. --- includes/discovery/os/xirrus.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/discovery/os/xirrus.inc.php b/includes/discovery/os/xirrus.inc.php index a33e76d3b6..2cf1da1e52 100644 --- a/includes/discovery/os/xirrus.inc.php +++ b/includes/discovery/os/xirrus.inc.php @@ -2,9 +2,9 @@ if(!$os) { if (strstr($sysDescr, 'Xirrus')) { - if (strstr($sysDescr, 'ArrayOS')) { - $os = 'xirrus_aos'; - } + if (strstr($sysDescr, 'ArrayOS')) { + $os = 'xirrus_aos'; + } } } From bd842f6e099f1ce3d32a8c0c6e47194778af7560 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Thu, 26 May 2016 20:35:25 +0100 Subject: [PATCH 040/133] Renamed includes/polling/os/xirrus.inc.php per change in OS name. Derp. --- includes/polling/os/{xirrus.inc.php => xirrus_aos.inc.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename includes/polling/os/{xirrus.inc.php => xirrus_aos.inc.php} (100%) diff --git a/includes/polling/os/xirrus.inc.php b/includes/polling/os/xirrus_aos.inc.php similarity index 100% rename from includes/polling/os/xirrus.inc.php rename to includes/polling/os/xirrus_aos.inc.php From 524bf05b6d270b7eb8502f91d9ad3884f4c33ab2 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Thu, 26 May 2016 20:42:08 +0100 Subject: [PATCH 041/133] Added config flag ($config['xirrus_disable_stations']) to disable station polling. --- includes/polling/wireless/xirrus.inc.php | 41 ++++++++++++++---------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/includes/polling/wireless/xirrus.inc.php b/includes/polling/wireless/xirrus.inc.php index e91b61854b..ca7ccf9b47 100644 --- a/includes/polling/wireless/xirrus.inc.php +++ b/includes/polling/wireless/xirrus.inc.php @@ -24,25 +24,32 @@ foreach($radios as $idx => $radio) { // cleanup unset($rrd_filename); unset($radios); unset($rssi); unset($radioName); -// station associations -// custom RRDs and graph as each AP may have 16 radios -$assoc = snmpwalk_cache_oid($device, 'XIRRUS-MIB::stationAssociationIAP', array(), 'XIRRUS-MIB'); -foreach($assoc as $s) { - $radio = array_pop($s); - $associations[$radio]++; -} -unset($radio); unset($assoc); -// write to rrds -print_r($associations); -foreach($associations as $radio => $count) { - $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_users-$radio.rrd"; - if (!is_file($rrd_filename)) { - rrdtool_create($rrd_filename, " --step 300 DS:stations:GAUGE:600:0:3200".$config['rrd_rra']); +// if this config flag is true, don't poll for stations +// this in case of large APs which may have many stations +// to prevent causing long polling times +if ($config['xirrus_disable_stations']!=true) { + // station associations + // custom RRDs and graph as each AP may have 16 radios + $assoc = snmpwalk_cache_oid($device, 'XIRRUS-MIB::stationAssociationIAP', array(), 'XIRRUS-MIB'); + foreach($assoc as $s) { + $radio = array_pop($s); + $associations[$radio]++; } - rrdtool_update($rrd_filename, array('stations'=>$count)); + unset($radio); unset($assoc); + // write to rrds + foreach($associations as $radio => $count) { + $rrd_filename = $config['rrd_dir'] . "/" . $device['hostname'] . "/xirrus_users-$radio.rrd"; + if (!is_file($rrd_filename)) { + rrdtool_create($rrd_filename, " --step 300 DS:stations:GAUGE:600:0:3200".$config['rrd_rra']); + } + rrdtool_update($rrd_filename, array('stations'=>$count)); + } + // cleanup + unset($assocations); unset($rrd_filename); + $graphs['xirrus_stations'] = TRUE; +} else { + $graphs['xirrus_stations'] = FALSE; } -// cleanup -unset($assocations); unset($rrd_filename); $graphs['xirrus_rssi'] = TRUE; $graphs['xirrus_dataRates'] = TRUE; From a5d0b0a3065c813c94c0cde2aca894c363c219ff Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Thu, 26 May 2016 20:43:56 +0100 Subject: [PATCH 042/133] Changed syntax of if statement for readability --- includes/discovery/discovery-protocols.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/discovery/discovery-protocols.inc.php b/includes/discovery/discovery-protocols.inc.php index f34d6a7871..331fe577f9 100644 --- a/includes/discovery/discovery-protocols.inc.php +++ b/includes/discovery/discovery-protocols.inc.php @@ -55,7 +55,7 @@ if ($config['autodiscovery']['xdp'] === true) { $remote_device_id = dbFetchCell('SELECT `device_id` FROM `devices` WHERE `sysName` = ? OR `hostname` = ?', array($cdp['cdpCacheDeviceId'], $cdp['cdpCacheDeviceId'])); if (!$remote_device_id) { - if(!$config['discovery_by_ip']) { + if($config['discovery_by_ip'] !== true) { $remote_device_id = discover_new_device($cdp['cdpCacheDeviceId'], $device, 'CDP', $interface); } else { From 582ad082aad20218961222998478c75e002a618e Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 26 May 2016 21:03:24 +0000 Subject: [PATCH 043/133] dbUpdate will return 0 if no data is changed --- html/includes/forms/widget-settings.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/includes/forms/widget-settings.inc.php b/html/includes/forms/widget-settings.inc.php index 10ed3ad570..f8a51f0a27 100644 --- a/html/includes/forms/widget-settings.inc.php +++ b/html/includes/forms/widget-settings.inc.php @@ -37,7 +37,7 @@ else { $widget_settings = array(); } if (dbFetchCell('select 1 from users_widgets inner join dashboards on users_widgets.dashboard_id = dashboards.dashboard_id where user_widget_id = ? && (users_widgets.user_id = ? || dashboards.access = 2)',array($widget_id,$_SESSION['user_id'])) == 1) { - if (dbUpdate(array('settings'=>json_encode($widget_settings)),'users_widgets','user_widget_id=?',array($widget_id))) { + if (dbUpdate(array('settings'=>json_encode($widget_settings)),'users_widgets','user_widget_id=?',array($widget_id)) >= 0) { $status = 'ok'; $message = 'Updated'; } From d5e26a3438eb328be64bf100c8c96654709e2edc Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Fri, 27 May 2016 16:11:06 +0200 Subject: [PATCH 044/133] Add procedure management --- html/includes/forms/open-proc.inc.php | 26 ++++++++++++++++++++++++++ html/procs/noproc.pdf | Bin 0 -> 88932 bytes sql-schema/116.sql | 2 ++ 3 files changed, 28 insertions(+) create mode 100644 html/includes/forms/open-proc.inc.php create mode 100644 html/procs/noproc.pdf create mode 100644 sql-schema/116.sql diff --git a/html/includes/forms/open-proc.inc.php b/html/includes/forms/open-proc.inc.php new file mode 100644 index 0000000000..aed1f5cf41 --- /dev/null +++ b/html/includes/forms/open-proc.inc.php @@ -0,0 +1,26 @@ + + * + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +# header('Content-type: text/plain'); + +$alert_id = $_POST['alert_id']; +if (!is_numeric($alert_id)) { + echo 'ERROR: No alert selected'; + exit; +} +else { + $proc = dbFetchCell('SELECT proc FROM alerts,alert_rules WHERE alert_rules.id = alerts.rule_id AND alerts.id = ?', array($alert_id)); + if (! file_exists ("procs/$proc")) { echo header("HTTP/1.0 404 Not Found"); } + else { echo $proc; } + exit; +} diff --git a/html/procs/noproc.pdf b/html/procs/noproc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..75897e1153551a4f9125947c26ac34965a537653 GIT binary patch literal 88932 zcmcG#b9|&vw=WuJ;)(5vZQD*dwkEc1YhrU^+qP|MVq;>R%>4Fy&wKVh`<{FLxKCGi zty;BERnK>=>Q6t_B=W+dGz_#XaL^0i{w+VM}tK)~|H7B4TIyuFQ~qLHH}-RI=#l#E;* z=_IT^XD9eiCG<}v@y98hjL~;9eL)*n%}-T&0u~MyS|&yUc4h`z4n}Q)&!Jj7emZp^ zVE$v7PR!oM$@X9C_P0T&NT+14Z|z|FXK;pYbV7=B!bZ+!hDHD}!B6W-`UVc4BLA%5 zKND~up#S%|{xSToxr&-uIvUy2iCXGA8VMU2+I%;nlQyz8aWo}hW?}lHWw++93vLuR2~IayPwqJ0@fDv-bsWq<7wmcr_p z48$)LlW+57Urf|<5 zbZy0@$dzEUZfBFex|v4zT4Gv6sNZbRnQJd4WYj*9F_$-oF~?o~$zzH-+^c;*N_46j zHnq}CP6+fB#aeP}a9YG(bHgB`wZw{!L0wSeObbP%O3oD%`dfzBv*zVu)ofrOl*_4LFGHT4pVFS6|}*t&_*HG62hYOFFa zWbG{1QE+5!B||G%35q*pn6$y7JO-`kVM+_Gl?$`R{Ug6hpqi!&FnL~LPwi=gmV{ud z?%EHSy>fv?=!G1SO(+N95{oZu>3eor>=LV;Bnk#w*p#-kJea5F7p8X$C!NfD)O0(r zm%xcB5XZjZ`9>a&b;NleKMaD^5F7F5Tk?j?--VyYJnFj&d$YT`DE9i&a%o27#Hr%) zb2Oiedu_;@E{A4jf6le^&3jGZO=c#k3HLC+9lej4Jt4Gj4MqQrlYiaOe}&8+1pf;T zf1~pcxaky~3>^Q2s?ukO{pHH)TN!-^6w!3)4)ElZQ}69jl^ftF*6jfHnB7!pr;dXF#HqS zY%KJj;qwno!}!?{(zg{iGBYv#r%S-u90T4eFLz| zL+g(XMMonml~0wwGJ=0YorZ;;iQta|0tQBA`afHcB- zYq|nXj;1#DH%3`u2N(5p~W|o%vPF6+)TI3>XpKVbIEsD>yDfAhupKDD1{sANd zWCmmiWDjHmBw^z>w(Vlp=0{|^$MDe$|Kq0#@H`+uJ@!@p;yzo3&dFjsW6qLU?H zqx*{(0%qn<;=fB-j2x{0Ys!iO^n~})f9-&I?|bcGHeaC)tu7y>%@wCQ6X5RWTtizE zHh_M9;4-8_TMYOb=NA8_nv<1DGCo+sqz$_IQb|2Y+Fncwv_y=l2rv(H{l2yw1}noc&S6 z;T3lnYjH`>{cvH#FR?A!k~VROObgA9)~b%zFs=UPnTM7}x!s7S6v0Zy#BA8p2 ztNw4Z!r%D&i$6^QM#ev}_jj|R{{zc^fBiu;Jpm&NBLNfpzoh=X|G&~K%zth(JpnWO zpKYCiBRv5-3kv}&Gb;fr>z{r1bAx1N`rM2-KIQ+j??1htb~ygnVP@m_ z3^*17=1*&X>rXBd{b!r)bC3SyGcx@n{ikN*_(%2=<$wF=37D8U2$(n+2$+~y{)6+0 z|36k)n6wH0=eLW$QTnf-{O@u2IRkd)|JX+v2pHHI*_r+mFwZ=oJe3w!-Z@+r$Kz5Z zjB91$Qt7`F6B5FFD^D$_)*oSw0rCqBlmYK04fmbjAfQD>*Q#-f9{UayCWT6);Zm`% zTH3HIqcLEvtuga$%i+R9PR;yn#ry5;ljHt%*?lPL{V{(WeqLYiD7h&ur@F#{hTxM8A*^;Ds{7vHT2#|zWkjzfbju- zvAS4O+EHfIS4$IVL{#-6GL(w_x`U0-F{pOSb;ReUzI3Ck>&Y-Ss3x0IQ=Gqle%hwS z2($gJn%m*pw!tQ&e`N2OQ2W%CO3q&*z1Rb$?# z-qzHb#;^?-oPEgXblf<3$bR`{gV8300J)b{Q<%r&9K8=dNV__uc5|T+a9)-~y4iM*GkAg7m*OS4ly-*=(Q!r;StOOWH>;#>nuy^X>nws zmR0vFb>N3YcAYR2^6?BpV>|g{P}6qhbH@&kiR3KU&e-A8MwB%d%FeO9gH0I}f8%+1GQXnU(~-P+ zI&ZmDlyTi`oO=K2=;YnhnfW;NI@aiFskoML&eor2OU5*={o!-x{d^GrGQTlZ=>4nt zy&LD_geQ2;_E|Ol0ceE{?t}3dzNTiY zAnPh|{`K&z*Jr3>X6nMG7MpA30{Qa6#gO97ddjl+9mO-d2)#Z)p4$f=q71pV#7V#qs5w2*5IpdFS8=29l^&9Qe8v$1H;!Hp7hfACg+V}aX zn5~+Pr2yS`uA%G93y!4oN8N^xw28jMxkjHk+fPL-**-J&e_8q8H9n*yiU?ERZ>H{s z1t{>Dc(_1>AZ~>)f1X)_VUO6W^Oor?SaPQKr7asY#yQnQSt4_#pJU=EdDQ0x6(<)h zrVkp|Ld;v3m{dCn-92s}HlKsHS`I?!VtOiKhbN~@ZP!6^)%%2D*!3^T|6YOi;Sxojo!eN)N8E7=lk?m?}hIYf!EZ853K zGg*y9p2OP$u+L*bsc%>GRFzHeraG$Wbx3rnds68grupCxX$>rm$1-FUrKi6330>Su z4hInzCr#An(*_Mn&_pSkJO}lv0cf)zXcO>Oceh29N@$WYcfqROac8@=YTAz04kj(t zEiLVR87T_|t8&0Om1Q|>`h4dr)j-M$ypPRA&&AkthNXn&j|!&gmCkC8atpCMYi%c& zhXH+6S#~aY)XB})HZW;7Gj=w4W!y=qoVwNEpV(K`gd3PwEKc8Er^h@ppKOfk7=TM!&E6IanyzXL_TUx55n@;pzjM7`2PHP0+mX-B4 zzb8miiHa9I_ZfN$0t4Cmnu~#A?kmR+twK%9RFCCosKWiP>+!qD~ z(Aerq<+zzexJm+>u)ok-Cl_uiSOv9Y0yI_7nAi%^-zLIUmx!{^VBfK{Kv3i5xBGtq z>UP6aq;J?9=;9Y_(JO-G$?gIoX*=xG$Y;X}6X)8^Xv`8ijl^}Vq=SD~KLvJX(8ETB zUECssh&BxP*1j!BmC0gkOJriz1Dkhv-Lj+Zz?=`7>Z3(Fq*2cn7#{W(=3p;;%QEoi z8$WrS@GJ030$P->u2dhFdDQUgY>4t(eSVranOjtmn3Le3q$|)$Dfp>ooFG}=lZI2} zS#IuKnub3r%T?goN`3E=4%!g4k$daANO)@qsXsdyd3??#X&7F^Vqx0~ZoUfYUDQ?B z)?s7&5_hqwSKU_DYBc~hBc|tW;*wM27N?49A#|&9X>3=9p)zKXPAPi0dscD;cO`Y= z5%3x}_%wmQb#2|8U&4`VTTok(Tj26-G!6fr2~DXYyc#-h_)$dk_q=bUdc~y|`|z@J zgHjdNyr&qxN$CW&Rff}Viti4R=^*J@mI4c;NO*u==w^%|tA;K`?kpM_s@64){sRL$ z*M!G?eY}+3UP(PkI@QR=YLe=DB1<@>FCMAY$*~*cXQb4yctbllcBD>C;I^{*0xV2) zMFqvk+RrZ#km+f2IyZP$5`6&8FXJ}wV*A@?Z243C9VH-E^m1@Em!{~y^nM!8EGF=F z5$RVRjtbIG%Gp)#$l zZQ|a>n*W_~Ekq6DZNb%o9xZJ4=_LW?UWDWd^Xs9MT^7n#yg?hvp=6Crcm=>Rb{B_& zRm!dr#YCb;BAlsUnS20(Vo|C_C7hOGQM^VYTp5r-IB*QeARUmTP!X@u3O52!C*~@K z!&4-Q&(MmbqeK*_eG@4|fhkZU81SUf$Tv+g$U<=__#!d$O(YKm4lpmJKsJCwVJyWU z6`l&1mt+tMKL$w082hzYsU;S>PrB!f5<3ox@}ykxa6t;_d<~* z$Mup22|#zCa8jU9G^0o(d&-9cQ#=Yg(JKX?&{$mG9SNv`h;8isIA)lRkpsK)CHC$KX z`Ui@Q)O8X{SHdnjpq*l1s=!q!e5v3u6{SkzT9HC0aTk?BCux_2LMLGtoFXfEmxCfJ zahD9hO*}9Mz=_)(0&tTI!~<{=cA+Tnl6S=b+@u3}0B)jzKEQ7YJO1#H{AIcUUW$83 z#MoTb@M;tU$!lMf2PwO36du4j)xhTm&44ywoninNuueOGQ1Ix7(j-wM7Oq*)EE1kx z&@2&-UC=BLz5&pp8*l<>Q4O#F&f<2>DLUx}lmS{41E>Hk+5uS#+IWKyluseb0TO@~ z^?(RKi#!O{qxt{7JaSTef9*5+|Ftal8U0i0`;7jZLiGUcSIiN|IS`V<5qAQdDb{i+ z0wD8kRJ_p2wTe~3Hl^Bc{F*6LpL%pAF3E9JE-p!8iae7lj9p?0y1$5ALHuh~ToSxE z!W3@CytFp_2sU?)cw`}GE>s1nf@J1*C~k*P?(zWSIz86W>Cl1>yFF zoRd%&(&F&qxMKg&(Gu;L;>cAQ!Zc~-Fmu^&Y5WsI$cadaU!#bzq%u*FQ5EQdgu#Uk zi|agdxy{+q$dk!KOi>hA70?t&oiYUyWW9cTgZ>(oQ#lv`a)IvJOc-G`DzM`a2P$DAFl^u($z_ zxLiJQo*;*8ztV1iFsM1|rd&%^SSJyusF5z^c3;6gMiJ~4%xwM#17Hlin*#Kqg29l@z*4|=wUhp?pdYW zV!x>|eFT5Q&ddpignCP}WaqBO3qyuw<!+9M#IldX!? zvmvQMgbVMY`MQVo3L_x#@H_I&cnR|eKZx$y>fCx1C%1)Njn&_=*5 z&HM#U?gXM7*^#BWH`)woE>jpQk`;l5oOV^-fkjv=Q5O6()`=y{f|iIQ#LTg95n@HY zGgWBP+;Eb@ZGmv6QeA*4lmeFm_KZQU2=lQD){0;*IP>w-yc5jEA3(yn&~A_mcQ7Ne zAhCR15L*|J*Y2mepeNf!8}o4P_u@5G>F2>>jxU}6L})W2`qgnlx+rsEBn#pLtGrXc z7eg`SE-$(grkxF>vao?U|Guz5E@Li5EJpj*)Av!C@MaBucmgnifFau2$rgUwF?W23Ty7)948yiJIFhRZxQC0Um?%6JfV&tk0%cx z=h;Ql!ID79;T4n5Hk(h)cE3g}0JNdxekY<+KvFR1UxAhkWk>hhC7v9}VJAX}O(*|^ zF;;W2UwkBdt|<{$Y?Qf1Nnuc=g0L|Wa%`+QR&ilgBqvc&D00nqj$xRbUiZw-sf*)t zXYe~TJA^0H+Lqo6)fM;^#}(#THi(bF3fZs^>?`Ku7k22EkZwrw7vvisupdB|pgy5G z7cXAFp|>u5w?MjpHv`V;AD6n@x~pP*AYWOp(5|Gm(eLNHY*t}B`5?RW`T8DOdHNoh zwpos{R~+T1t;*fL^>@xbM0y2Xn!VU>5!SykJbOU9 zB7K3!>%W8Aw%ZnKZ0H=aJoSuTU3|f-vAW`c{S6GM=ksMby4H()4Mr2}2)wsDV6n~% zL5=O@qRIMt!(`*+w8r{&17;m`9c~?b9co=4_q+}FRcIU1)B)Qy`p$8yV!DZc3w9mM zi}<+}*y~(Wcd5@A*OtZ>t{SEp>ydX=JLtW#e*9irKlNAJdhL4CoPEe8)$r>E3AQw zL5mONFf~q2r;SxGRdaH%Rb1_|`lrnWHdou5PMh;swzgxOZFR<0rZUB4CNidXwaP!| z=(`gO#)PQclR}abor9C^9fLU~lLJ?!)&wJ@G=(DEHH2WK4nxp>k0UfBu!bD`d|#g} zlrJu#m{-%lH$N&tn4rkSO@n(WpIx0E&sv?1oHhG-%rhsbC}knIkisqHO!^Y~R+DpG=;ptE%p z@q6NS^_fR0|yYr0nN)_Z~%K#}GxY+q^+4T z{6zSvs=ulMjYDeq8tdWFqkjRG;U}I3ng@02#?fP?he?5&2VwF(?q=4blm}G;Rpuv= z2TlML$bn4(k%k}zM)rg1cFjQ{2Ob1A^fSo$LJkJ)%fQbY0~rZn?}wv@5(D=gIF%nF z20juDr27j2+!ZJ<0jfA~957uB*f$U;e(tZ3u0U*GVfuk+yP?>9O}pWjfvEI=bAg!j zKq7sCr;`zOOF>b5K_i{)mmh(q5j^2M!Er!4!QLTWQ6E7baUNkGQ66EgpspCMOty)) z$*%~nfUn55qq`Bey|xj$Fa5TFyTH9c+aYlvyy4nmUZGtfU9nwZ9!aiXwq>>tyRo}Z zyQh4Ye6vCRW*tyEU^);wpefKP;3*J3;4I)Q2zX#Vh%AsSFnAC-plDD&5Ij&ka6Di< zh-Y8WZlP{(J^X6)P@oQe4A-x&K+X8g2uHvd;1|Fb5Emd9U>88vkltTjftul#LD!+z zLDoMr$@-UdpfiX{$V$*k@Je83U{%m9$V!k(uu33WNN12_U@l+lZNN6tw!t>hw&0?A zXQttY!|zmi&>b145u@qfAP zn5uc;xaS?(JY0Uk@yIs3bU5?+@rU^_cX;LFX8t6Hu-(N?Lao!Ea*Q?zQOSGkvFmik z+?ZuGG$mq5)|ST8vuP}~{3PGDg6B-u780})f5vft@bOM{JT%w660AI4$kiQ5omA6f z7$63D0rm_#L#9?KN~?0oXN~Cy@9h|Vp66EvnF;DOh+(X-wwk!4_m=R0fYN44|lDbwU+664!lEWEUdP{T*q_E8<{I2bAq+bVHvGaxy>3tqbXmj zK9LP>X?VCh;u)P;L^<-EBU`(hwqLO=MZ1^wZE?Los5JdtFL{SUce3&^#QjjBh3eV? z^@Vq_kJcHkElE4t$&R?~80FNd^bNuprVZ6XG(j75tfCaDAiBn6+4~;IBZepcxfWE1 zI9j}mTG4A69N)4Bc8X8Gf3HhMXmd5VC8EX2f{6#_{#Mr1uJAxi;ns6LU+0J;RHrd( zH;jq_a(2i>xW!`r3BM`pDAA@)(r4Y#-^5zUK`_(&P3&32naO$Esu{Wp`VQ0-&{X;? z{6Zt-^iceSU%R$~>x$-5BFU(J5!e~A5!K;EcdGxebJ)zQfXLT!)t27ZFA(FAx1%{iRm%w9 zND{%}BUvuyTM8epXI@67xeyPM?z+}K?7ctQ#0&=y@%Nv)+%GpCGP2vxu(EZ3Z=PPF zM($KHCqui`8!)y+`60TEE{{jriHHO#Ce#dI`XSDQn^WPbGK#1wrIa46&oYW2x>b6d zpFXv6yonlV=2%+C60(f!G-AU^+6#^!NgPiOf*;4<0HitN6-?;UYb7Z~=d%=ec4^|N z29T4H3|WWr``rLqh3`#pGehqNq3@*tpF!0&$H6d|G0~ICrWDkUndRiP7_|1*HYk6Rhs-H@p}&OSY2)Tn8(OZu(@l| zS$gmpj9#iUhqx@$_!*iU(0j4nE`KO7G8GvP4{VOYAZ90cPo*H zPZgIXm&3hF4&vPz@l09Fc!^vZ_~O{H42#O#mE>?)51}SWrN0K;Bnh^W5UB5)=N)v9 zGk!G8LE?o@P5wB<#CCQ<8Qf2Z#%inPw8-HraeR*){y7?K7gje{l%?}=Qxi6ki0S#Z zw-2W%>gJjHe9P$7B9m^i&muz;RTF8YR&n*3Y8Vfx0g8P1`@>xD_S+V}nY{$)uim9r znky$-t~xdf#aoHOgLvr)veYy=MwaaF_Y{?SN=oH?i&MF30DLyc^EIZ&9@uwth^b+E z(r`YtwNoa6jzL0%hDz-a@CYg!4LLtpfKkg0I{NE!AS0+T zsAy%;4PFRF)!QG5aiPKZ0&5=?;MAmB1cn5#eHI3-8dDO2Q(_4FM@L7MLU3t*sR>lU zsG7lZT{JH`w#3%Fh2%Gu@Kj5bR57*9A;rB~JACLA_Xi?c*RAjn5i(3zsTikjyyt@z zf2*7LPM>0FY$W-i2sqt}EB#0@NYJ>&w+a5>F2CScf6aJ={N*I=Kscv0%#6-B5%fuV zfMvhY1VAEmBcquFaB52{TE`Fahn_Y*I{kVVplG>PN!BF~*^<4kp=ZTJJ+kTj7ciV_g^n@`XNH6QhliRsNJw$aOC)B7GP8qe`B5wq*cNeWUM0jZ zmaGwKK4>-X)COEc?YedpzcU=9Y;^WN)~nSq z%IDX)1J<*Ynv^k9Mr#(4kY8&GwJxDQQevSLJmdXzzsuYheXF#0HMAPSKe?%LPNgQz z-2Be4>s0G8?0r}q+n7&%xpeF3Qusr%UUZ<)wZ5Z$V%s2oCCGyb7ryC0IuRFZP5E7o zeXfFIu7ZiX>KEF(zAlE%Rc2n_6_K{tCT-+*u~`I? z@UAU=SlWqcTD)guag6>VO=qXFBE9~o22AL4s=jtIV|KYMPY!E+FL;sGvq&`?$f#x>AoFN ztZK@-(&45cUQdZas6f@R(yQsYEs>w4StaNeFzJ8uOc}s<d}{Y8-XbThh=*9lH#-Oj$btdED`d^e|IjG_>E5bdc&-AElEYRhc8?Nh*<4*S~?0yo_}O zpA9ziW>r*3a{K4eA|~(c)pJI3Mu!{P9c5w*ffrG$c4$?im>yy_w9n-6a9KfNJK-j# zTU*fRGT9ikDUGn6qXg=gJ>8EU4vp5~~qj!9C}GCTi!os=9Ih3ZyMvfmU3 zIcumN%v8>3RLBTu4l3gj5x1jacXl?@*C$_i4FY-h<=mJ^yA0C{Or97!c}@TUjUp8{ zFz#F_b-haf)lOr3{|RH} zRmBd5#>%6gA3oNSA?TwAA3+&(q z%LLc-3o$)o3G5=8AiLFBjG`y0J!PM$(_cO??mQg3iLt-LqHuOTaO~0!zC<7XrbyC5 zxm6pCl9|IE{B74Kgvr#-GMV~|&;zcnA0B1M@b&R0+lgIv!|0Mw;o)U~*0V5`E(WQp zR>pEvD_b~crR7Abj$(Y691vbRQB;JKFvK(tsI!a*44~OUOXQF?mdjxoMJJDhc8Wxtn(5^ z<803JF)-&WBJ<}<4*%H-`Afb3IgeZ?i5Fl^F z^p_s);8Z9H-))RMxTG~v3$L8>5Kr$#_qTa~h*gD5Aa*@^$GQpyWkZ66m$Ig1M}j-y zZAHga>c}_Yg16_FjjhYgjDhmHDew0O4U4L`l%4!;H=DKG0xtaJjJ8U5g~%LzY6wN+ zf#;h}&A4+JR3q$C`@8QP&dWF!to?;kb;}R0%@6n4mpasg1^pNm3`yhpd*yqFS?jKA zh3oa}N}G~HW=zBTgih$A{6HlSyGL@Lm|7zMdZJmUKVijZe*Na?x)8n}N!!fWRtsWTWK`ARUJPex_T))aK^n6N zy1ihpfapG(r6{kZyskK|F=ARPNdQvD!Vx_l;wG$d(*tp5qX*;T(a8A_t3`?)`1$L< zl?dg)qf&U(j0tYX7`&{=UUEi;OK%mHGJ_$dr(}?FX`p`{W&;C08}^3iAh~A-KU_J5 z=Orz|=+@ropr{<%5zsS!9ciAF+%%nL~ zn`N`hC%>Y0gTtSTxLa0}J_)!-nxE(Ep{aeD;!mI1mWh55aTt~l=&>9-)i5lMZcJU? zci5hWn_mW`mkT{CpR7p^zf;@_)Q5-Sj4`Z{h8Q0Y+d9#!n3x}a5IC~`mP zyXeb4-})&!!>p7QS@6;5peA3N?U-33`8V?nrOAM;IW#%-d=gz$_&;*&eW4q&a>by8iL_4R=aZ(rl5PX{r7W8@m>cw1Xw9{l#Qv&t>`T zjH(!^LWJ$7;=Q=kJ0;_&%JuZVa-8YFT^X7R4}P<-uzW!zU2`^2PuS=N+$%d@LZ zcS~Lvm@8VN-byu`VjA}Nm8|5FFv0sOQi)<@bor`*(9HhMzika+0#!h>-B8Vxul-d;N}nARn3-3}8`a&t)G_Zpx>s8}l{Q#+fB!5UUYZW>5fGZ0_D@-9Ux;;vVe5J2Y2w zleNL}h9B6GnDQd69II<0@K~h3S<-~!#C}YcqpAX$p%+)C7At#EJsMt7QBD-;g*c{% z?p-6qsiT(_gT)(FQW*lwMw z4-?-Z!HbaC{({)FeS<2l@&}5pKOvF9L~N^u8mHM=a6v;N)vc7p&8g5J99QdAUMQmx znKdm;mLQU55ueg4Wxz)*;#Z1jUsE?btP)-l1TZT6&!-twx0M9&e4HzzBKtH=iBE#R z1PvuZf25Jw-)&V=Y-nkdA5@iTCN|os%FNDxk)TOu5Ul*+CzBwnr!Fw`P+=2FrIyCh z#W@5mRK$BEz#jlJ&Ep(jF3^i&!l)<}j*wa+Q#&s=A7(IJG);U}J!j*2%rQ{$wa8%U zVCkU0Z~;t2&eMCiiu?x&`MHHHZLIF0mY`s}&BPLWvY9^!FbndQ;Ns1tf8cQHvf+JT zsbz*y&x&z|emACjM$a!;_`_=U^q#tmfXwteoJi^hB$#?NZ0BxL89u!is63J)?5Wgg zEVg2bq*uW$rF7_1ZzBic#fR`=Xu%<4nV!?r$*E2e zpM`mx9G&K3eJ8jJNbg<`FfQ{nYY&l-7Y(*snoRQm700>hv{gbA^_fM&TBeNl5HIBK zLe9b7wM^2qiXwI- zZJ;kV)08{rv(SvG5o52>XxqFeT3?g6Mha~SH&80a%QrjP?Hwd=-c6SxnktYK!vSPe z0iE)9h|92J{&%o@O2%S~2z(1|yDF+dEFMpU3XTSJBEe zGjOX=p`W#xUj*kh(h0#^%2_&p_HQk14Q|yu$tqP0!G+LKf(JehRhMiWUBnCt{B8R+ zyMb(k%>Ora3_JQhe+>1~$d~XBs7~>&z3Dhm+>T6d2FPekdELZ!3ZA^Cw?g3;$hy9D zOXqa;r|nBz`x8~{yPuXCKZ*JFyQ{)Hr_h|Y*;uMRIv~BrPhpziD`?i6bLl0^h#=it zl(8ipO40jGR&h_4R+#FrAD9a(Xs3ScsU_{#V-XfK7ZMC*;iekdX!&IFAY-dK`gi6T z63@n!+YzDD4QK))=9t23;{f(lY)aJji+jg3vALTlBx!~sw3Mu)X&NapE#y*?BPGpQ zM?@S~WQ9_9m&G_6kJ7A+MF&)jQ>u=!RYyd+*9K4F$_L2A^J3UHd@|ZRQ&(ocPoAoa z-Vw>TelCTs&?q_2R^cW`V=C3zI2YQ4<@#$16-J;JSZe;3O!nI3jStFrhJ#4P#gB2I zjyMj8Q=Tz{LTuNNFSAZbCc*-janE$2F-&mbDhklm&q#U@ieD{E2dl_o9gOkb5}L$W zM%NE+Tgw8wO{0xhlP9gok+xsXmRLefCDP{K?!rwJ(}*KV{3b$a+a)|i3iX=uKF*I> zE)gEpYj9=b+>@poU!pj)*v%-!<8;M8Xku%G$XKF|fLFLUKCg(LERFm5?+^6@5z#3o zi^X**GDcd#&2OUU<+SDNb^a0J{;?K_g14Gm&kd;OFPbR{+ehs;ZhbOib8HnR?g0$K zyb*eEY_K=#ew$vv75>0=V3D~AmT+}ac2F%vYqp|{lQFiUNR#6In76jZAd`R{OSELV z!HBWzT~956O*X8srO?scwDoh1uQ}ubaJdp;q%Lh)&7X%7G&F>6WBVd0YXr^^Z4i}n zH;@`MwAA8t6nWD^ZpAh5Fo$wk%$+=Rbn)sy4DwFFiB{Os^+H*3t4iHznkbUJ>9RBl zqUD86dZsnC?fL7f)~4cMzaB6)Qv~j(vb6S7%Ax8D+*M2RJgF{z%}h*5KrS=! z8Kjr132r{?&zE*hdrj8>FKapqM1h&=9H1w|=m7~Aue}FYUyhwN$KN;9JhJ>KFW zpleoq4UU4}tfwp7nGrs;a?Ku0+i7SUT(dm<9h&_Id(RC!jwbZOKn;5dsftC#%wh?a zd}i%Y1qdZxq&-SL= z7-$$6NCf2#$8}~?6!Qa_>x^&IXUZ4FFzixCbB$~wBNLSrs->ZWx_L<0` zJohZ#j0hRQb=1;c)fT&KV;qu2v3AuUhSg>jtD0fOfhmp3MrDLVM1)Mlq8C@ma1#Ct zXVHGiZuJ5_T^LprIby{I`XkjvFq$Lzv)CR?Qcd1o1d1Oxl{eg(a|SbdBf}YOad~yD z+)^pX8uVif=hYr$xyl>TaKuM!u_!qBEleJ&tD5>YcOj$jctoU3V==RI{HUHxBpBQ0 z0|jIHYsyJI7SnqSX^@-+ws5F=1)te<;Nn(T~97Dv2}e z>KHVtjh`{haJz9TOG?W~#Ol30$T(v=$ZufJ>v;}R+M$|WHGuD6!O{wt^b3nHHktLC zMvx5Vhb@YJ6C3&__QmxEdu|t+X_?EPvj2k^BQ1lEM;1kZ6C0HCUf@o5TE_IEZETZ4Qz)Hlaqr@~56m|b9t}}oQCZr!QbX{?YVzar@=Ac+}J_ss< z7(++OXr3j3n%G=FZhW9bT{dIi+M9MTFlM8Hqg%T&cetYE--g>{MWfsWUIw0+#&l)E zyjYwvoX}tFredvQp4;YTC#3EyThr(9X1_IvG(pE){WU-$#wUnHJx_!ht%AHDK$6cmJoI zD&lrKmFERjr-Q9n@E9_c716unLbY%qF1?hBT zR!e;e)~X*B_ymqyn2$>)B@RYLdJ(t*@MQ} zsXm{#2P9+@WN72NB9P>?c5`fN5|RQl`MLN-e8U?8p9GbIZ3pG1qKEK|2}Xe61>==< z$ns62`WdVX>;mqbBRTwpcopE+lrh6S+oP15DhWx0hwK}a}DH1 z{41=xiwIq>5qJwl4XmB%N_(7Njt|nC{)*!2x;xu1`%8P2%-0XH?L5DTZUl&TXwQsb zIUsc4wQOGm5V^n%AFxl+F28v0u$V(Sc9@$CU|I-oaBkYGEk7~{9Z-0zZ$2_ywm6S^ zpC=CT{I)>x#jv)?V$e*0CkeOHLEe^u@7m$Cz%t;A4;8n=rYk|YVo)Cm^ql!myZYd# zWtp#Jl>(Zky{&$}tqQ(01l^Y<4?fI3>R@e2{c@Rk)MoZZkJ=LX1xe@$^$2yeL6GAP zd07;phr#y6T6*LHRb zRK5=Mv9KG28~V;i^1ase^DssJfkN>UuIE?tcc5l*H=KODz%)Jx-Y+-YU!FeD@j|%q zfzb(#ac*7_U5WP93D)eo`FjK8KiKsMb^^q~J#ntPdxtZzK+@`w0ym{Ez z@6x%<%_zX@7tajcKs2-41Lq?nWsePtFGM| zZ43u`f9WUOnTMoWw7t^4wM_USc&Vb(T;Bcs$a9!ndWoK=5zS4U%dRxIbSx6R0c|dfibd)++ z8ZM>Os^X{3$88SYUeFZlUO@By?~1USHss8&bHG2XzXv3I{*ORhFzV~lk4B-i zWZs6J4mkTukPH8ev7cIGduD#k@WV3#w;Vfj;7%>3o7S#3f?8}c@nbGPAW*!r!%M&{ zu-%IIfu7Sz!dnZ=AUm?dR0`uA@~a|S;488g#|q|m0zYUAWa5PUdGDuL*N(XGC3MYA zb(;ht<2xg!g**sn+T!oy>Zu;`Pysil6WYv$@ry@bm?PIcDy=zLvXl%>{EJ%&fHQgMleSbVP1U$#WA9-){ZPW$rOJW z!!!@;EXS%|0k?6wR=})+|McgURAOybHHzD7bFp;cpm6q$@!YxYY~`!;O`|`AM+vMp zA-2PeBU?j^AAOtsT$VFc63NnnC!pAVBl6NNJycBAuvct{rES(#Aa`TLbGh|NTZZncqWa{d8DpZD zXLRqr&d83Axm!nle#8%-+4M$vo^K{(xGcH_KYbRPQ?QW1QQ$B^YY&?gv|AKD5DLJ9 zZqdapI5l{9HnXgF&D^4gHh$SXbGo-$&CX8Bmek~VwM|j6G`g*Ex2s79Af%+a`IZsc$~zlr z$yd(fG(5OBtnjL2O0Ol>Rx>(vN&Uy;PLBcPA2022W@Ww6}P*teIv!K#hp@$ zySo%9v}kd6E$$3Xad+3k6dl}Qa4qic?hNko(*NGyKKsbK-hIwl-&)tY=E`r9m6;?@ zlIKn))2t&WGIro3mV&*1aD3_9kTY1tVvee(jGLA1Mtd#`T|n>$?Tzns`7>79AO2)|}@ z_nIRX>q!=D590;o_QDHbo6z7gbrj3fIbb>K#3JgAxQ%bFM1oynnRxSr3JRoc!b2LJ z!IQA<3j%e$b=NC$1=PQOoa;{#iSUe(e2*FI5Rg;TN}hCN--rIhp4Z|MQ=2Yc ze=X7n=3i*8yI+}MDB#v|sQn5O5EN`Z7Rm-U|NL2AK01TLVCH`W*9z?_5ANGv5&AZE zusAb$d_kx26_AdV)|R@pxHO6Kfgr}c#d?ef>O+4V7RT7m{=wx^k!4k;NrnXIKcr=*d?@TWyl|=+xW=@|O!-<-)`KmgickYXCEXhkj9&*T zC7RP-jh5+PpyKon%mp7!i9F(sQkWZmj8E8}eI z5IJY3m`z(X{%|)xVL8kk#_3i%G6(vd=7{Y@>K|b(0e7q#gLRXvsZm1R2_Cxq)f8QIqb`P>OK~z9Ce6uiIb2-ck zHx$IJ{eimO1MWtjaV-+MxyW}G9xw<6k!lB{pROPR_@T-%PFK(Y5cuX`D2S2o&DZt^ z%r!xDfILjAYyPImizUA9x!lH^_Hz5ZbSK44lHsml_kIn{JzMg|Gb(<^--80Se-Oddaiq1%3L= z-Tpwe_C&JwgnFvmfo=t*jO5FWahe2M_4;s`H?LpEmU)c?z8UCyL*D+tvnGfP(1U9> zgMtM6-mtfOgf0)8&p+VDdPRi7HM>ooIY5HfarV(Gpk}@#`c@Ghxxkgk9gOMt-XOI< zd{`4i0*u0}L_J}x`&M9_l0r3OK&?oUJ7JHJ!ZsH` zL2RKR)VFW^=QVqW%FGn!WM!BZ`x&5`>7i^%)>=qUZL*`(z+9;11gH5>D|GFLP|b4f zV2o2CL_jt|vn|ZZ4Ky?FwzAPXN!S&qb}bly8q`XpuPguBG8*7@J`mUyGiV5F`-3p~ zj=)+A6oC4yI^tb4JCd&}`IYLdDFom@|7w?NAM8Gz0oiD_Fj1K{m{a(H!9xYY*Fmb9XEx9FA{BJmfu7iQ%ycW z2cwfr6j%I=_4BKF*>$GX*X2GTyCH*bLI@GbDpNwg5dD7jR(m?nr%euy6PL%QL6Ngc z@jDFJ1l?D2(iRa+Ce?c??dpimXAl(z*4lzTQ<@~rQuzWJww(819F;aa_f|4mB@lN3gUXF3LS? z18JSGRa^Q5^!p!uelCye!H|Wvm+M7apghi?4drYV@&b#sld&-%g$wnkJ~j;94>1^S zS~|RfUgBRrkY5+cv_2ySqmU1=6sb?v$M0WQUqaHUij?VAp}+90ZE~bg$Zb@uwyA+c zHJ!iAy8Q09_XzcVjLGrQ%!CTORvNF@3$Ju3p7oY%&v@?J`^c%EYAz-KFQ-+c^lD-TTGI)7Qkp*Qq&7qYckFW1ov3$3OMkpj4!m4VA7< z=Cfm}c?yTU#-LGYQX#WQB99o?M|M2-rjlucQiBq=5`u`6F`WsWiA<3$ks4e>oGJ}- zxRPm=&dxzH7skMSh5$GjV*mj0zATRlCJ05nmU!Zvoah}+Kj_+T&55vt0vW9yQ?3#- zEkA8p#)RtX|h+X91>0(Ap9YDr4RlV8Bh`JMmjF4i|@1WlzO2j(}UPdE>?vcH)V`Sik&HP zICdr*35`WN-=zAG`cO`ZmGd?w-`_dkprK_#yGwB_bwLfB#((hGDtO z`a7)v^?SI(u^209F>Lz%h?W@YmT~(pc&4(sRozgIFlPt6C3wa?SdxH8x43~s)%d~# z#k7HTmDadlWef!-(xA|<+^G;k>3IYzrMHK9!O|dFq8VZ4vmCUYoX$n+$oizi~vfokC{ggDj3~ zuYX4V7z2sx?w$#oVI|{9L$(hc1a(*|CDrU`Ev#V22Zm@q^}4 zv-;eRw?jiiHO+*Ry;ZFzUt zG%z|q<~ILTAxc4C3%a89T3SWV&csQgS+ob@(QeO%3y6sWJY%J>{} zKa0$5Y+9#EwB6&pQ9_&zA#*}BmA0l>eNhDXR^K8c$+6=SF|k~b+!<0vvL1fg84`~7 z3n|A6T-gHGt#R%vYHmj3_}Xd=RI%*|%Y6h2kCprLO0mO%6IAn*Q8GC`bbOhb zBAoPYJABS9pl9ml=;Jtq`-o`VG9QMB14{|j1BLSewhO-#6^5_Cloc2>(D!Ie4C?D0 zB4%^gVqACsCQh#X(H<4WToLhh`n}Zi$3}5dqFQ$^6M6-s4}Dcw9w;cW4q>^UgHvTg ztVvFtazk9?7l#X*C-)B}u44SkEw!nj@v#xdCb7`iej;uoQJ52do&fL${m9Hl`V3vk ziQZ?CFf&&nAsRT#J@b`CcEIg7Z&FC^J{AgNidb#euOJ2*RW}&dfD#(?p8BR1n@hy) zXr*V4ZAn_6*z;stn+qqP8jVlpIX8_@`nh95oBSR1RtnBjs$EHrK$HW~_8`rw$X!%f zI@qT7fu_y>+*ZMxd3&|sQDGn(HB-Wiq;K}OTg*okwlUuTH}O`Jmo~gUUs6<`o6N^6 z=5sIVyC56HU$fHI}%yWxHr2B8!*I^;Uy+YxENNYMU!< z3F_P;8HT(^@BQFpb|k@M_Hfev=#2kl_9S(Iu-WjJ(a`i~ZRL-b<^iJ}FF4Fj6?5^($HFjQFBtspIw6f}DrhyYiUb0!9 z(zxCmTB;9JOybkX(<4&oQbY+4PUrL)Tj@V9B|^3)Aidfl!=cVS-on?cqU@H@UJhJw zuP$`mESfFqxs_5O4bzwhFN-Uxv5 zf+KIVx(=$bn%(!jYSc{6Z}je{KSRx-O`hh#^CY~HY}Y%ZV1Rw+^VZXwJv1%Kn6A3K zHS$2+G>BeG=-%7 zTy$x2Jz3$cx>(7SKN4uVxE;}RU&;atM!P*9ebxW5L(U#Lqwc1~+U?RelTFwiCWM7M6S z_F;V4?0V~{Xr;B3`?tBAE+%NeM-P4(=~RnbSjMW7TxiU>sR=`)7qCq$}r3D^4d zTDZzb=@L=soxuC?H2N(Pe?mAiJf%Znc`2EFp4xGr6(3RyibkPe4#}gtsa}vZ%;Or7 z0jV>tFwu!x`E^m)Zr0D4j~?UqKVLq2lNkO~d7-Y1{v=}*0cDcS zeA=(n{%=XUo~DF6A+sJWS&llp+KyiQ>@VA?yU$N258hcwvi6Wctq9r-T4Gvl6&@ke z^n=f2W(N(WeO5+r#7Yfqr|wCqloe&WKOW-rBwi~;$Ku??_qDAksDFPMCGDxb zUG?^?GJN5V9;H(OcveNdrj3DTTj4Npq|e2fhI5!lg1q3fO54WDwoVl-ppN{Rz1i6p4TAzDPuE?0e(Y-zid})DpRMY1 zoYp*=dryICfs*#F9C;1ZbVoV&7>CR!(MM6u?ssGS;o$iF>?1?uXi51DA-B8GNfiE+ z4X~u-H7}8_umxUCvE8o5)7+ksd8Ht?MYOvQgJi z%Of&>l#k?+lM7Ysm+lg&V&$We;;H@(b~;nhek1{5`k+f9`HaZRA%%O2`Ota39Y!Nd zn370O^rYr%+&VG`#X07t#W@0HrCaqLhf83!-2msEr}c&1JUR+RmP%#IQ?<0SsD50y zz8k-9-e&AtW9A^Mo-uS=r-kpOaOPSg)gtw=!1JTeb(M0aI=LfCfhgD@k0qGny4`Hh1NTdre{~ApHz$$uE0Dbtz~U z2+VDJ54n;=96zCaCuOI|QMq- zrJrE@y8qrBJQ3U(H=(!5t&VxD+k`!A{)s**2hBEzghV~cM;siz@R5P^%0->+V3~%K z?z#!@$>8gJ;a)@4vLJ-)Sl8v}E=t!%Rk$6iw{KAn_y~C{KZ47oh87H8L+innrhe`5 zh}1RSeJ+@bwC%A`Vt#Y3nGs30p{O0Xp8`#oxEh+hPX0*6SNupj+Oj7m49^l`Fjlca zoDqJ(!kNax7e*CDN+e6ObHd-V+Cbl|*>$yU?x?Z&-jc|8k*VtV%e+gA760eDOvc5i zL~F?gchz;*?YM$K{0a|RO1c*yS#&T)bs0j=ZW?YdMl zwVu>*p=`nz{7pTBM_{B+3`m~)db#&G9(>Jx-O}ql24KdA)R1rdT3?9?8pFXA2gUa4?}f}1U632c zcCnl{EqaWU_dVP~k!?^oB9SwNep5UO)9IfynXB(w*h{^(hBxlkIGp+fFGdLDh zKNf|~&?h{Gb)IJ#(*X_{4;L!={AcAk<`h*7(mALH~Z!6&;K^e7^TmE|pJ$0U(o!{6rc<3l5m4vNY%+%#CxPD-hnw0$A z?cYoTdoU#Z?UBbGD=JDG={lA z^NAK*Ak*rJcGC5~P2rbPbYpZ(~G>nc*DqUvO{|Rf#fO=~Fm}zaYisP_FnZ|HlsXgaR1L2`o zvOAO`R?=SwY2At z1~$VUK%yf8s>J&OyBMy|XuDdO+2+5rGM-vuqu3PVV}_4B4YAb70*>mJ< zIcbN4pTcVU{n-~rWozzpGp1sx;CWj%pYm_^rs^#bJ@GBD-OcWy^e5l8(JhP@dxhz2 z;M3pCxP_oPvo5NPksgc~(XQo^$L%r#LAY`QSqjeUdI6}W23 z{D{ud8WnGk-1<&s0sL=@VtRC4P(-#>y*)mS&Fo#um81vm#4UFg$1PVPTzBtQ;9d6$ z-3nayc+Zg`tfBC{MOY8N#YFEFC-xJw$4Bpb$Ac-kK6r~9)%(#Cr*BQ2IC%4nGsCx^ z=UrR7|1G6=VDPEsBYay=S4yDdDGh1YCICi$gZ2?!ev?2Te0388fR1)cVY*m4eD*xzD(XBDjzTgk*jW4f*UTcVBHG`k*m z-YXEuQunFc9eI{Kx+OiPfy!shJp4em1RxAhA(ZadYbmFKmFow9zE__;1T4CQvr+ce zHL!ucTc?t<*N7;^C-6?~FPqZ;`#e|+o;vw)9yXI@Rox4o9v%TOC)O zmv6oWqp(ajes92?HQ+Pld#*Snb9~y&Y1u%6WOx5Gny;{MLh9youO4I5BnEP0Kq6Lj z(Vq$f_$a4nbL5bmr3#fqGcgYm8i0R8GH0v)bJ#`|1igliRzDb7(X|XLJ!XzspcjGg z{Q8nd0hyI3E{u2Tt+qgj-i8_gv8~tk zR7)U21Mnug6IuP7C#yXkfZWzK34nLE4%O8l0_=9^#?a_s<3mllbA>)a)DS&Upk^o zRY7ImI;Z~V`fc*?<-Kk>1Y_9*Lp>hw?Z~vvMUKHFn#XL!WJlX{#H7h-zS_Wf9&(o9 zh(_bo_~P)CP3*C9*S1!^(gtht<1zd|wTlbzUakxTz}gxrB+zLcRD0FaUo4lE zOjnv1G|bU14iDcnR@vO#k0|1LSi9<&y6V*7wpJ(HjVSK$OV9J6l80x^1$7;qM~d3s z_0GLXH`K;wT1D0}5~%B_Q!u%6N%1|dlun>q#Q__*9v#kkXWay=)GZw}Bg^4Sx z#ER2O&is&%KCsI-Udz+)TiaeWx-_bD0!uiWM=b-rw zsgELb#B6)AT7h2Z9tO6MV{E$XtNTqkPv2RDjrX4K^f3E6ZqsI|+i#Y_u$EmFQ?&kU zHMW84Vbwzyp0i$c(hsd#>kl?Pi7BS&vm1Oeu1}0YT2FZ3>y|7C_X+GR9BH>vuLm)i z>sbNurorc#me&h(;|l76P2IXhAG(42yiF4q`BApGd10B$$eixdeZ2ptV@D0`f$=sYoOT<$p^pf&ikz2CrVOy}dLb*i)!wrI!inGDJZ zq9f2W#8hEc9x$JJ>p^*ss8?TjhagHJ-@LVdo`5#io`wl z&TLpXormYwtKU}bYIP2D%X_)L?$)JW76ubh=;V?12W;0kJc)J#5)<*(M71NN?Rag_ zH7ZSdl5n(Ct^UUW6oo<$it3xSgQ40K&j=_FPBa`nKmAz|Ay!TuCKTk>lT9r5_F;3w zTfkldKxNOw)X8Xo{`#ZdR-f=E`$}P^>%N}nhPmAkuc&{R+_uVk>Hz4BVyHcGo!}zP zNY`=5GRke3wVZc{v#)t4Wj15)3;LA(&yl4jo^NK}U2NuG;L%de3Q}uQziORNMF+(x z2@PoK6!TU`Pv@oaKSX%;Wz&O$jAvu!Yg2X7|6xRC2RurBseB_-_W4ol&KX6UG9>>K zgl!HKA%a_=8I$fBHW$KsAv*j}clbdNgR`~3H)mMzJh zPzwT1-OtWv(ITdn4_QPACAHkBe1+5b;gm?y!=X;Gvg9jR$Cr3g$SteyIw zAR{(TDy9EmKrXsu6tNF-p|@rqT1C5!!~vy<tcV-LH^nbKkMLg06nKq)ZYbj5i=yX3muM-%-lZS@4yrU)e)^~t^=NE5*eP!+?x43`pwXP(2X_0rQ5U-_OotciDqrOm z8GoznXHgsrK0u6O&%7%Mt8rff;)RF_h z4f~rJC?};1%+hyygwl8MhZ1e|9Op3G%db-(N0rGhy>(Cs6pBT|V$Q_W> zEvxW(!_;*Z*B$c)_c^of)O+K{sdwU&^{b}q=FqV!1T89HN1TUW>o2Q4f6j(ZyUGMFfWS0=(^>{^ekQc`h(0~l>p%@)Ky!iim zW~6PO5qxo`?dd=N0cA!b)J3-*xr+wY1*)r<@r>fJEn#0%vSEdvMDlnfjyv%r3hKau$A zVro=LSpG@izZ>-ApRT6lmB^tgUrPQn8rqZ~!AdOmN;&KjS0+fYw!hUM-OIOA|r zn{4-oZ2-wk;}Ojq_r(b8Vp2b+py$@dLYeg73ok!DRcWa`llYs7Y> z-BBFMlVfsrD2kWP)IQi!q)z5*oa+A<5OCCywl7b+l90QBr8^Ls3Dxd>-;d6leCPx8 zZ?3*guu~*IPoSI~r-l`{C6|f+yMf^62$VB?A-hN>^a1KOGhaT~aZ{*JY_u z+2Hh8=hBR<9D3NdT|Gk|UIV~Q))kC@^#=)$d>wThNk{rz&jjZ_O}MAbbk&gNU$K-1 ze;1TFG|3C=jE@T5h;ZHDf(d6a8Ipj3?h-W;3OiHPVQ%k0a_k@#Oy-G`uxp z=v9xX#5ZE?HH_%N4`;>wkD!cht5aF~2R->}_v_nHT;t)@FWT&E$1{d`yO&c-FUl0x zCu(!Rd(+|t#o|(#+EV53>7bec^K)tvlj3OrVcAv7BYd{A^j`A(Q`rb;*c)^a1HR6; zi|Q21Uf{eMJn^1iW(Gf)xV9agyu3_V-<#;Q9UUfnJyn(KU0)5hde6_kyf~>T-`2$y zOj%}o+7g7tQS_Z_y9@Ir*2&gbZ|E_snoPu zi6F|Y1KwYdowaFlnXFAOTXwR}wZzg%-&+u$rE20DuMI7e{Z~<(Qj0^en%vbukuL8v zeS!P7a(TugN2|Is4S=+&AWV%a%SH*E;Ue zG=cDrKTxnJ>J+}ul;DP-xdcWRX*jfz?MbD1hke&g_bnf$?QQ#WuI~KUCwnY$iMvGlB>3qpFh*Jq6{J{8E|-aio8O8d_~8n6 zG&vw@3L}U5m-m)i+ODMmMrLs^4!bkIvWZ3hg)49VP2S1Hv-jf!es!lu5p~21gE!es z-fN$o*z)w*ZPZYT(ZPx}Nk8?*dhgVocg01=7QkPN-nD*wP?=Ni?q~(QiVpJPFInk7 zL+R|a@VK|QC~oCNRaqsSQCamzIJMggk0Mg2&6Ia5W&&C;t9TUML#wDM)kYQ%7B)rw zv4}KY3v@-tm^l9g;$K_uaaMtbNnsjvrnGa?9WKaBz%@4HIwd;-xJ8;diC0kP^~bLj zE0X^Ivf?76}J zsJ@OhDP$0-@DSNB5Mnt!AztfLXd58!aFkaurxWPz)}l@!IPP+yyD@TiqHS&S-4Vnl z>R3sNjyQbcNju~^%YSmu>}s_Wl_*qRt=`tEf@cZv<69nl@ajZ%ZLv;r1X`QSG;L%$ zn#_PwsEu$N9?&$Vt?=eI8aYdnNI)ii7O9n*rX>jk^d>!08kKUYCGj|i#^SmXTPCko zl7Qrv8k39!;;m0}JZwZC&s3Yr)Q@uTEkS3qKGXgDDQqb*A;iT~4o1yuyvLG7P1ap*8{K`*Mj8ffI1(-%% zZvBi6m9O>6K06Hu>LcP6*^}PgPBCnB zZ1mTFJV`@B!y1ptPRpwFd`Ag)p7>fI3#g`Z=_rb;YUFJmI*v&)Zt=ZR4Cv=lQ z_{&0QK?{*1F+(!UhnR+ko@M3}@5<}&T0I|vF+KRpBAU zpK7RkueYlu3fTvtHY7hdHoQ2Vya=3qkR&=&1TeDB7T?n8qF@aA-C#)*+a_sQ8(3_V zo{HxFb!Alla|7@Az8g+cMB{=Z;qqRn>F=Z<@!mt%cZ1Ekqh9JnOwyM|?T4RAP@LT- zKV*VscWsn93icIjKd!i*zy&W&BZ_TU^Yyo!bIs*2z`Uyv0tEhsuuPd=NbE)S+r!xHp zY=luR9Nf~GeDxc$#~|-$4L@sYXB}iE{Hd*3(Cw!sdM94jRX?+v5I$CybHA7XSy)%6 zPhpr*oFu@@xIx(@gX^5zG+UKijY>YcmvU5G2cYEhq*KhqAf@9g-T6?w<%M(Zh;!b` zkV-CX`a6!Gh+sr7I(rTG5xf4g)-Rhrl9c^>4`MLhjhl}!Da(le%FDoo*m~}i?J0|C zV7g*-0DYdWTtSI!2p$k_^Bjy0b- z%Rz2B!-of2_Cz+WCuMed1KBxBvJ*vA`^xc7KM0zpe;pu1US#h)#juibJu^VaI)DHM zZQSWS%;W=1ADXfuX1v)8HD^B?9APDsm*9b{Qj2Vr+KbXg4V(vVoW(pkJWwx{%55&4 zcJV=!s)kwdFEf>)W4av`oXJwD69r0Xl~2GUAMxvKnup!r&z-h(#59|$5hF9@SuF9Z z8kI>OvudS=XRw}+<}Lv9d^cf^j$)vbd5i5dpxKpXqp23G$FNJ}v}N6^o;e4H^rj1D zQtpV{$F-|%CT&&sxj{qCT5UF57q#v#)mh6W*+ZNU1y_E5G<@z=Eznr8Tj|dD)l0HK zka?)iZ@A8nvC?l?HNC~6dKS4(+)F4&$YXjJ>)-Mj7s>gxgg&2osAy_Wg(w3hRg zYVEuwr4a`+KtS z+##tsgOb^-zlYPoI#FATa#pp!l+(d7vRRX|T(uw6IFoD2%Q=h8ttBUD5U6FiZJtP0 zz12r}S2=)w{@HCTB>8Ae7sV(4(gM_F*l3qv)2hv_$3%wv?aI2CDfi$5?-_Nb2b{_7 z{?s5Xe{|KwRxj9LlVllCWYet7txG2(3Y8>Zdx(av8|M=SC_P$>{)QG zbkQl1#nUPbXPoL-aH^>PBhaf{mWy;;EoL(poC^Y*CPkOO=bT(7l}(k=*G4<#1vV*w zZKm>x7`I0RGEEvssxqW6csS%;HFCfuW1m#_a0i{kxB0ppG7TC>Dl(M9d1^zH!kq$f z_}U%h81MDEGm)IIRTkQ8r%THYl({_+K}TSe@Is0(`~C(PbRdnNA36;z6(TZX0MyB5 z7>y|QTjg#bgKd zQ?c!|7sLbNwYs`U?ZmFsc=RZ0dSL0|P0BA6O_JRgHEPtiTe*2LcgA~kP3+>4vP^1P zA3T5jI>Z8QiP0D`Nye)hM48_XJUSP(*Z>w9$*W-~Uu}GFNmVmj9*r6>mNcmXwi;*c zR$E%6&Q1?ma$Tei+k~=|Qw|;S?KqJ*Hbs#rbTJhgFzvA8UCcvs4)uAedZK{@;#IQx z=|+v2cB%&~)welI&Sg~Hs6dUlKBZmqhw8(%w-zL=bRBAxB?p?1DxFegJ+J*NYN8k8 z&1_6nN5%DUY5J7=+2b4tN2P*Kzl7=E7JQd2`i5K%ODKtqIc+TndOUgBHZx=)h3L{ zE3L5Jxstt`1z`wd>_Ea1^WOEo_}eomZvkJjmiv3CXZ}#M^hyJME~~zv zhvXW1y#}23YcL-bEA$4NlImhVz=&w*c&TNwr60cGh~fj}U`N)>(kO5fFBl zz%G0YmR{J1GpOn`fB41lSFJ2OxW;xFBsr#RXS98e8W8}dYmUqb8!aKc0>Gtt@GQ!y z`=`gr5W3tir3*pReW#w#xMW?15cUis02s;^Pk)=0K_Dm@<JUXj~{XxgAoZ^;C0q>`z?Rl zOdHo*RB3TGf#H{R#7sd{)ha-KZ8ohp$Ln$5i~BjIjgu{6MVQKa;!L(|k~5C?o4PI! z*!*o-{cU@IQZVzaid2|iN7NJ~zDa-zo4;_7cYeDFdA{64^xq}k;9YtBJ>?1_zCFt` zl4!SOG&SbDJYErDnMd}(gx>>tSW<=?u-y1EF`|`C=v=`(kkw+8Swgq}H~l7XWIF`` zoCAgYW1O{0NqE$UKPo}jn@6)YsaoRDKP@QvG~ zFr95mhQJ~p)k8?UKOx6Z+v@)9XN90#8Zm{09IAnUKu*Zy1+9BYPM^}Hs)rLHA;We+iFREa1t%s;H8bA3DLxr;P9UAu|kTZBiQV8J+*CkLZZyXu{CrPH(>@n zsx70|D}(>^;s|FvKjj)>`dM$-5L1`F*RlstiZ73|S!8(hoU_heWGJ8*AsKci!MZ}z zOVk4Z;@e_xMj8qzL{NvFiL&a_^rG|ta@1=~GCoIChOpwY_9FM<8%Eqkux7LF0F_%* zl1BmO3W@KOO#&*ha~N81QbyI!38aOj*gAR62_%I!X$(<6N04W;Zm|bF-oE4>(e;Iu zeNc)}D-ZKn7Xo}K#jc(fjYW5S54$58I)EMg6I*T~U$up1M1*9jOJn8xeN>Ljyk3kJa`(7DOihK?4?T=zcp&Z8)_q&KQ`sK+AQ$22vYe zqID{K7%>C^v8}@sn>z`Umh^)I`jveITGI|yWv8omZ_DTU@9e7re zz`m7)tlthk>nU9omp2Yv=2UqVT9MH$&LV4y5z(lkcquFp`)^w0%o8yMDPI+*!pE;e zrd9Z+N`zKWMX>?b6BF(|(=L_#qvbL8Qlyfwbk)6~zO zSdwOM>@!BsNTM_jC|)}!vTGVhjAMPSp*t1@=FsB8{Aki2H1{-(U$P`$&8ejP2br-b?9Sc%^&@Y@?<5!P7@M*$dx6=C?kMiEL4w>Iz0*hp?ElN zOT=jSqi3al?hw~w*)UtHYl?fOlvuKzW+5Vo)uP2&cz05tPXLwO09^n{9{ORpQxaFG z>NGYmdQSeZl$*C~qakY(w;co5yW-S8kZjJ9X#U@{S~1&NIY5q#v!vDU{MgZ|Rj%_M zbzJ7Q{SC@v%-WNS|IPCK+sjr%Ov0}Bu^*ZI&*(BavqlKz%_9HE@SlWP4d}E=?B$a; z$}FfHnN;8XzQH;!E`ToI9)F7ch?Es%wx$6<=L$tPWKSrZAKJ4rb>d=g3LzLal&DS_ zXE5amCm6qTDx5=f=@WRw3m;HeBDEk1AQOroTdCKU}&2-7`h>7!V2 zg|%nE8;<;*oBIE4h8xq>UJI~C(1p3q4xfTB|H&IHu;z0L&)M~X5x5>)TMVo7SVT_k3M6N%8?)F zWAFGr`QYbQ&3&()|09AKw=F6>pR5yx{t{#SvVTf@+gydum?Zp~F~4Wmbp$ zQGCxxe^pfIo54Wj1+{ab!)THO1C?;9XYty;)jw^tCWvbccj1#qyQ*;AedTm?>GQ}K zT$3pG9{MI=2GD@V#*>Y5F_ra3_PA2AIQU2*CP(qut-ZB!o}25T*K~F6h$!95NEm~; z9R~0Yzx)Za88v(jM;%rAJ(h0ZtUfJ+|Mn^08kq-WGqi1|R)rJ?(yuP!-@c737^l`y ztMH_7*RH-#B>FxGbF0utsQPA5{IGKb?ITbw@D=R7nSVn>uygqBy--~66|BCI&{nAW zMyJ~2zwBY=-ky3>DxDY>B)pAmR$Fn6u9+aCN`u>MW77A7^FH-%SqXxAv$?8I_Aw1k z0m=Yd1Rw6L1a!cE5vk5=-=EitAc=p2d6yvahVt#F{~QBocz^t*Pmc{Sf z^w|WUl=SHY5HX5E#iwZhohGq!zax)x1e&Lba=iY<&pt`M+k15D@s2&aBErg+$QH#2=d#{)d0;3(>kQt`ga@C-7Mux)0STH<6)eS z&Uv}?vvdDHL(I~GzbTAjs!B2k^}{!G1s-@N<#u}>XzFRq4-XdqtlWEse-=lJf4=M3 zC3@P*r%8TucLZ6;&wY~rKj5+Jhp$BFZNXY=ssP!*-{RzK3L!GsAF%!x(IV8!BD8c0 zQ>%!wPEpz_FKJGSF;@1URO-cS#rS83Z4lq%XI%MSgP{=P{5hJg&yq*Cd?$7|=v6({ z^X53yeO=;Ji_BGNS^2rfbsffaU;pM)8z@_12ZD{Cy=aATBDe93+jOQb+@|*La&a`6 zM3dqj$gZB`Q%5B84{=|j`VnUb`voS&V;Jy04#M?2e5%s^uVRAJ8%mN-UnRdyy!*e! zZuMMkihpWDCEsX`N3hw(js_|Mi=g|fJ{{kdHK27&B4PWj;@ zPUERee3PHen)YPyGWT=;8FCgYPw}8le}k>HgFpC5I)`Pvqw$xJjCbCqy3t)_i#_dr zd*Pk(LH}E%3@F0vR7QGN9Kb>#(Bt~0Q5o5QE|4YF6DHNu4T`3`LEAB8E;=kA*B)oyM8W3sRAiya7ZY zs^T~JPt|0QYIp?%#zMYMngDEU(U<`WneBJ^=ZH#f0Yw6x%A^JfU2p!OcpeK(N!g9U zySFm_`xYN83}1!(D!LDW?lYgh27JRLzqq>PW}{3cTJyiHe|=r#-6^(GmiTSVROCTY z{eNhC>!3)wW_@r5cXu6NaEHNdaCdiy!5Q2e1|M{AcXxMpm%-g#8f#p(-}l>l@5WmE z{@9Jk?DL$bPM(VDs;J77QI)ClHJ4k2CK~NGMbIvsGNPsGKjKh`v-ukWUK!P)kYuWf z36qoKC#P$Gtp2tNZp%D0ldCWpojJ$9M4mXVEs{$ciWJdwYb0SV_OR4ov;gh}k3bP!Qh3l1s zIq6D}U4tVq(tVUIcn9ibcUaKQ7)=Dqtl<9@jxs9_ zYbzXUD?01{fYG8w_Yx4XwQs1-R_^~ARMUi8z!q^0R?;W?UxPQOJw=E+Dv1}QP^O;u z+*8B-osOhSRF1C{azWBp{=ai(L}(h&5E%Efrv(sO-cju8=QTdsI}9Mz$E4B7;h}M5 zjBMe-nOj9FkUoTkR{5DY1)nNGdr?M^X?g>LbDS$DLVWhvM_|P4ABO0#jc^1 zef~dzS075((13r6MdQvNtm3h%wd=0uZBSTP1JJq`hQh}iuXo+vyjWGTY3$=E<`0SYwq{T-B+GWu*FJHV2zXRho4T~S_`k39z)Y)*;OZE@!ITQ}d<=F=Gz12T!*TQAC zY4`@)8P49II2|eIFz33qtrJJgJ|pXFeJ6QCbmyNSt{&`Ot7Trah@G4!^WMrqrHofp z!vu|roZ8HcuFaF)5!0y(ePQ}rJ~9%X7k*y8nWQTo%dnA*-l3?-S0Y)sE??Oy>H9tD z{`wA&0^v{T93fkyZHY7`1t0l1o_f&P!D)(HJIg%P4kRYSl_>b}?EmH4ub~++J9K&D zSUR-iUQ_Ep527r8>K)ogOn&6)p86}I4u4dxQvO=)1FJT=nXh=;|7|KUgOw)i{Nr=@ z%zt?)pLs>7kCF6q=v@LYXCS@$fNFm@iTqHTdn*5R)FwhDx0OARNJ6Q%r9BYdp_t3S z=>|RE4MN1P5Ew!zt-CiB?Pg#_*pM_y&lJmR-Xjs}$0S+kl^3-IY-}Of(aobaCJ4%t zi%liXIr#DTUp2dU!BN~QiRB6BkT_3@*U!TpX(LDLjB$~D2x3t9;BQioIalb z0Ws=-YT-Hiah4IXdy22{eNYU0l53FP5!x4EC`d(WVDI|`9gT#7z!8O9DZ8tMQhBgr zS$(3aJ8?*)3wACc-*!aQjSTv(dDP9ALgc3Ki=Q~F@nc3k%LtYGIAteb2u7TK8@?6x3Ua$`AE~dN5E=PF9bvz&biMKv+#y9Wx z!M#a}`p`G0H@*K{enr3#+^AH1PYtJ@FcV4fLLcCp2=+Y7A-ppX*5bclQ}tt|z?{3M zzuDJs+1BMR#ooi#DVV-6Ek$S!*fy&D$9+{Q@0*`CK0RUqIj21H$i1Db2(`~o zGlA-5|Nn<)zKF^9*lw3f%GQfC95xAQ95Ryxg(#B+V7Z(q{#TYXOY^V0V_r|Hqy6T~ z7h=rVLm8UXE-{EllLyUej!JftRQeeULv&@3aSKBtRQf$ZswvO3a&K5g7EYz9de&6Q zX`_Yzfdz&0!m_2RNhr~Wjq-{(*B`xaZTfqRj8Zvu>@5|*K} zi^dI(c*sN&A8p5mxNm290R6k_hoY@&9MClR&&$Vz!)#fa5fKs{ZKqnHZ=$ zmk_b(GMhddBz8Y1l^8xWA*OnmPkS4PfBM6bX+l+!kg|-FurcWCF9bO$2m?1j>u3+oDIc-XmMKcK{1t zKe}Z#(`n*9t{+ZJ6aj9-2Y0+dJ|2*quP%i`D|Kn*n(>Uyv5XYgKpLh8zo@wK3!ZlJ z_f!-5RkvXnU^5&_#I4oO&z9|CY!q_)ohXqDFN@88=p+>|18Y8HOxO(<1$0@cCzbBlU?80xd{lCWS;YEXfIrzyYa%t%&isXL>f( zu!P?L)=JMojtAoxl=MpK8cX*R8St6kn@NVCqxVmI)%3c`RQ4-@yS?Z{w&2aLc(~vTKq8^z{fi? z{oTSj?O054xZ{0KfW!JxKc4tT;j$~@-rcz)bnlynR@G{ZM08$^&EA=1^_6onR?&kj zO@l(7IR+!)O+qQ8ko@o>6>f%h;5=yg%V&a+4B$|M9t}Fo-3T zS|ioo_A|vI+6S~exrV*DiQ5 z!_{~!2^L2_1zHlaD&-Ydx3)|XK!d}2$5xC1>Piz&F^*_8b7k8)l*4n&hrS=C&`Aqy zhdK;r{Vg`N6{vgm<1L+GJC+@srUK*-;YHW#&53+n`_ZE7vq^j?;39XIkI0qjCbv6} zV{4VCHSHmMsDnU+K|rz*)?1VXWy}tD(wppeyJ# z^Y{e5#Ix2~cDMqFvWN~xji1o+(-bCzM);FzexuX|?&edXkPb?kpT2l7ZX&##)>Nas zoDxU?eT#hji;1>rc@<9rqvSnhI26OLv4H7^Z~Qxwz=yDZhy5Ra6f(e>^2v4$T2L(_ zu>KPu{*C2jD-v^rUhm`K!Oc1znjDH*zu7xSczs7*F-Kf6N2paSx=+v;%jzo`a(o@n zvClZ2mR}MsJNRYs_={wxA2>)16O5iYHTLkphDAR0R|RX^nR z%F%Gy9P*ijgBF*UPZd9EQYpo?BE_Qd!)b_yG;(EJ&067s|06Y;IbC+*AA&UrMvutV z>J%LyUZZ~PEWO59ct>?%KA1z|yZT=z zYR2lQtrut@xB^QIz1ypSW>#)DZ-)h)Ege;6b+TYYf zQ4e+qQSJ0Cd_x<*`C>SiXVz|2&&6%IM>h0Z+x^=W$Jx)drk}kQueCMwkTP@TwQYGu z=Gtx=AhO(6rId0XOCTnkmA)0KL|^UKFW+S)iziND+SKGr4FyfpSx8_u_PL92XGlq`1SMud=N^__E>ua7qriwfHi$JoPxZ*GrSX0 zJ`_54A9~z+n3Y~sNH3gkt43`4%JNc1QXzjmgWlvtF(1XbysGg?khQy^AM~~f=bBFsblvOBzFfq2Aa5|cpfq;2$y!UQZ7{uG zn_J@9Z1L!(0J`tKF?DQ3*=%@r!vY`7d?J6fT8%o#x2z)Qly@$p_4C0--A^3wM7BcO z@%}Bs1iFVXHJr$#+c%sDr)QaQI%NI&+1-Q_zP#gE0mFw;OW{x4+v3pfxXF0gOJFNC z5aQ28FETW|+0;8Nqz&{`92$O`BgRJ7ILjODZl_vqWO{#TckQ(Y(i6Ou+XS{h!=H8Q zl6I`=H#{m)8>ECg?A<;(RHk~^|G2BJO7~C$ zQYsFQg%!AC{#?ae2pMCqMaWxqF!yB;xx-gfI}=kQGyq0 zmiU50#ui0g=1N|M%!XlFd_D5yQNTrVV%Kok5ygud^KGc?-J=lJ;Kbf#+e>oQHBa91 zxX)8_)iqz=eHE0Wuc#ppk*FJ+Mz8JFeO52u@cn`+&!s(=&M#17IeOIwv{%tT?V2SigSo!0U;`^tVB~UAL;ufTVW4S7m-`do1QK zj@{3-+CF0|N3XgxUD)1(vVA*S2+Crvbt*(V;Xvz)1~-%DMPWX}eH+n++&r;%?RND9 z>-+{j@m5X^LVCRm61$F)8I{J--2_hkajfFTrN<==-Jx!`)w5Td>dx}Y*{NBQOif?t3nEM^Z1#zbw^HLoM;jQI9*H5K-QE<@) z#CxHtFP-a4=1SXW_ct!8;i4|ww#t_o(>yPUKHf~1QPC|)zoD}({k)2&uK2t%_`vhV zr&8)Z(YKM*48Zf9J_+(*a8;N`%AhE5toH`tBCJEjpfqu`{9r*xtY`$QQV%7O%SPF= zoTyZNMA<1rgI3i%4JRITEYy|kXoRPY_GqlNjS_d9vdyq6{>(+!?~Bk3$DFil?TGwRqlU^3;#~D`$(9+nNZ9g7aCe2al)KYL|P50KHCkk4;kJ`4-F3$ zKbuetFBdX%xe*pV%j}ip-l6(5O)qvoK>G>{3@^1~~iKU^%``UH2GY+NTk%G{A} z8E+ZC`2$O;dbN=dKPpUOb_T{?!92AAcx3n$83+H=LE?2Prbeyg_D zoC~HF&h>>=6N?tGw3AbZ!GAfK*_h*wQj$}aMo|tY58+mpI>vp}3~UAM1!;lbvN^L8 zO(&rbA)a8JbD!dfEW1p)$blTmDdYRThceEEavWQ1TX9y0Ylmx2b*+mNNvJ8LX}Sk; zx9qpFJkzgZ>tv+t-K-BI)Dyl%6ozd57FtYfs3}4tniCWjVoa=xDIlj(N(TKdQ*90E z)}d2lpwXAglrax&#&H1E0&(>1QoY0KW4BlS%ywC{VS@*ioa?3EF@I%Hl5%CA%KOR?5+FpV-(y*5>!XBq?jzyDielsA z9H8t@Y@~vv`{3s4?m8_8vM_>_jsC^I`^yYXNf??!5Nj|@TTDzGt+$w*{0q%CRNbG%Ij+H`k)O6yNwl^AU)(i zkGYcMhJ00i*Rss{i2JBxAIZK{bccCie@mT;f42w3un%k<0i8phVc!C$YS8?r@kyLS zqS?v!gZrjNVi6LZBtrj+SWP7;Nt8sgbEq+?O?mS8NVi0=Gp;kPPkIXYh(5v`MO{tq z=w@*BHwQa7Z=!6Wcg>{|U!q^`bYNZ*UtV+&USeMEO&~uYKe!(TlcG*L9)=1b0S;}E znBl7(-GVfOxp-gtL&;C3YNZB89Gmsb#LVLOzOnJ$1n>#o*qJrI#NDWsy%d(^uC~!H zV4qq%~(1bg;Zk% z)^%wN_48^RqMT~=^SX6~Y59kvZl}JWuJfG3@~0ag(4S{HgPbmvh<)=@SWsYx45RwE zxh5!Hhq1l1(Ym-p`a&7j+`(0gIMH{Z*5B;oJCq0tQpWc&NeCgheN$l(B^4BSl|VHf zHYrq@am!z9!jwF`B^YXd_5$C90X$@QX#8~4FoC~{_Yr&NdZl;-JUHBS(5yDA1vH%d=LC zR+uX~It4xBmQ`|5ygCQaMxWGr;Rtr0^m3mTREuQ=!`Ve=ZdCw+^$Gb_vzfbjUdlHk zrb&-FAWl~T-%>@^UcTHv+zwQTAXCaS4sUFGl5NC1!}TGsKdEDFd-!g0S^&}^PG4oJ zXZh}yXpD)wE{ghAwSp!kOY=<%9cI?-{H+G`f?Go)PvI~)RLx|X10zC zkA;r;uGSE%KClI}V}`ecmvxVIo((n-bM=;3U)CrZ7!5B?pD{b(1&%S_C|3ivdi6Rx zTAlv-sgD$Xc`OzCNkl*pu@X?%J$0Gh>MhP-!QAy^ulJG-BDs3=5L+0oj#X{n9P6H0 zJfDBMahTI(8FDi-{8`U72GHDBP}OQTJ@FfJc5%lAgtJ6{qz&we*(Kl!G&^qOv1fZ;dijL#9V%#1)|>^=*Q-L{&-mE&frT`ny%v5)**ZT1o` z`A9z2D~ib>y`XhNJ`J)2mxD~P8O^$0ln|=DHAfs#CC;vURGXd~!!-qTNBJqlb}Ixt znQG#8nvu>}ZCw)}y{=cef9_qpN@44K{xTf1KWBay`V9FNm^vF1|M8>hDn0?`6(~nM z2^T(CIk3*cEQE8k&l5+_PsFaspDDS4mW3ao8&m%9c5S(E{@f}l6#7b*qd1Khm;T6g z$502#*gO1iW_Ib#YNL2BU4ELrD{gr=9EiTzd)U$2=^e?Gz>PH)VKn&(Jabp>D<7@| zi1uC&Uq#^i%;TOQf{@!x89+fkPp}Y!1~b*Cz&q5|JZRTK$scecqE;!MmLV27M^gnn zMxnRIkY(fL2-B zcNrU#T}eZ{^_eSX9Xj%R8(+D?yW$+in@?<>x?cUe{s@g@-(}9L%#rWS&6r zz4DtNab<|&QtBdJcJv~Cb~GnpcC;UdAh8`-iP^v!sQ6GIes!4DRKWF@&@?zw(Q=S5 zdrF2yFf;L3{<=tKbf~yq1}}T63?kdU*_En;$IkW6ZmY5C&R57*|AJmjwPO6%71Fr;NU#_)v{a*kXV|Y}=Ywn$ zb)W>W63U}tdCkcm+`#S=Txk^lr7Co8|&s{6U8)3X< zSZm!B%4>qg11tYz>v+!8iq6EKXE-1C1baedZZ`Yt19kZO9f`!o%dxugrMmH5*);kG z^xJoIonJBEnRO8~-Y6~rC+UuuwFYn;q)brWpLhy@eIM2xcmUK#AOSwmT8 zz~uIO+Spqo)Wed?W%Z~CqWmc5u~1>o5`vbk8ienXD4vjD;R@N^9@gbB{_(J;GIl$? zm$Ulap*@^ogrI)niwo8BolISZ`V_c+9`h7c+?0hSta!#&MyJ})%F%hT$C1Bt!WcN! z--G7ireT&hfa>90?(!{l{e^w@Wx5EfI%+9|+(5UQk;i~95*BwaSHOhVgBZ=Z%U#fO z6M7SR-y7E?Lv4WjB&Y+|xFN`+L2Lp64%)ynGL<_rmAiZCh=2-EZJ>$fq>zU=8biEU3ZH zrm^hcB59@az(f-oO#kInD?H}A|tp?MXL*uP;(b(d zW0qi|Kw2|=IWlOu6T~&<^=u5Jx>#g0Z5g^chPsSjBQbwA5{#5WYy;U6U=p+yN38=_ zztdXhuSx|xi@%9bE>JbXTXL0y6M{FDFskXil{Haxh+ceu-kNuis#m=bOB1k0?eks` zl+k=y@GIcSK_QN%wwD;HOOa&1MK^kcR<-Jj(e)3LXZT_H!7>3kf-N&y<~@?R!5f zTnseIYGfb=4L9UY>K)2?d(bA#w^y{Ck57L%k}Ifu)gwR*``xk%42sn|Enz+O+hI9GWlvJI7Dq*Tzqw`IZUfJ}cdjV?@T0 z^sM`WZ28-(1p5@{bd%eZiM>?#&1%(d1&&<=I40%R-r zhIho$mT2aJ$lg{6xzYCLrs}pTuyeDW|%6CVlQ^gm4J$k!oXmQ**D2Jq%@@j+@xAPEl& zG>4jL%X3-F`Fea15zsRyi&(TXd{Zol+B4q&M||g~l!N1p1(DozF!+DYK?NtXbi{hu zycHCAGzIc$1^Nos0I7qJPZN#i=|@X&E#~P5OOnS*l862|?&1!CO_F`KWzD!+=EPcN zfe>HGfS;VE88?hu!u*&`lL%PZokg79sZFQy=UC*>Bh)qJD0!lsLTQ0Qu|hm@&I}l5u#F zD*j)j;RvCmQDmSCV~30+Wn%Ho$h&Nj_{Q>~0*R#~iQyxO!y}2Md!mn&4}**#oaEt) zzPzdBNMPiLd{K5U*7me}9AD9%&#K}knf~~wJ(={1STU8fLAYt3;6<$lVK<*6TLec4 z08yVFkIs2l{BUmtoAE#5eP^@pcspr8d)ue&3{B!{}>VU3=eUH4KuE;R~L~M4)jXRu?5@a7HN1@+g;xtb|d-S4CX+M;7l2^*D7N%pMz` zD_b|M4tv^~Aw6C)d4N^9gL?ZsT*X!IeYx^d@YwHUv`27=nx2x*l9tLNUERBNQme-I z=(mQujJsP;3moI1&?Ydio@DCLyJ~$WdEp*tT8aQA6Mcv#h+h$30C2hspLDt?r_rZ# zpFw)8&8M`_C~ra92TKCZCh1=;iPEwp-UcU->V5) z(?}DTJw3z9kc|Je0{SaSZi#1S_)%c#jj?*UA8hrdp zjXjclE$Yr8J#@T0uC8+b<$TT%_8F(WDt>#t)d_(Arap@k7-%>gtuZ{LSg`<@_F(!k z$8|yo^7i6{7d$QYhOBHC#}CNLN8SAq)}@ z@4!t9T$yVK~`b7sP4a;3CD7Z+vUcugLk8$vX|xu z(4+W9+XMwb_c--Kovqoo&s!T#+?SWCfVR3E%MHaN9P`laEkf3_%nfh+IHl4B=p zJzn=&P4w|D2p8PMdvDAgq(9j@(K{^lzgeD7MxVR>ad;H$=c1nQv1GWg8LWP&-c&dw z4)ZZ5daxgXzqzvR)TaII)i;Zsnc>~LgZVVv(UdOX9?Rg@nep*;^X6~5$K~Ume%(1o zYu>XPI&bk~<9ns-|EE%4*5 z3CoV2KqTwD!eF~yC3taA5$*N*^2=83$cgq21iN`LhmCsSiA-c`xAFM+Mt;d>U@2P0 z0Us-%-z$65m0(;)wif#UVvDCV52)}vtL^QKT1n(*M^M(yUw*j)do=YM>WyM*6S=6C`%E`eA8^06 zGo31V_i4UjnO{m%-M&sy5;4hxcD$4JItY7tId5#^gh6*0kxIAPrJ5)8ECy}ye`h@f z4vS4(Bz((MYWKKI-07eWI#?&K*%ht?9#;@HU~lzop;emyE*SxH9P-SFGXv{6zC9Z| zl&2q$yPQwLyrmlSD$1syztA5RG_rm)!l>`1*25I@UY|WZC$%@+)fS z5g_VGqlq#GXG zd~v%z^nJD|T=@15Dfm?ZFb?6}bL|Nz-S`-C{~I{)&|t`b6LFHGMVIuKOn2ooaTDhG zS6*wZL#g^cqT0R;8_ha;Z4&y4rwTgU+WK<_dL#8#ZjD4)aPxIBUbd-ySyPAhe&L=& zL;AKVBhgxItHK4G5@*5bkegIXKk_u)HB;HE-u|16!=k+Xuk;_T?yBqG&T#S{EH)0R z9G7%Dqc+nQmX15M-y%2DL9w&m^(35L4vVIjf)8P!mRXPb5P~Q!n+7nT!UKamFev(m zX#)d676OMwpZseJU+VU;;Rk3;!#z zB(L_Z%|5T}RgVdGAu2DOdz_{%e8?$&oi2?)oNIOr+(V4aOFuTl+8C&mn3d-@+Kjt^;<D*UH}yF9;x%hCW;emfP_3)j=e zAQl)ITzNlr4vb6q%FD5z+U#QIcTp9+C_XBNrM{y9!cq=UZ$l%NBA?Sd`b(e z2@E{n)8Aot1wKRpwT}~qr_7l2ucU9;gLHtxZs`h8^P~3wXZ{!!3Z6RW&zU7MSt7PF z+uagnbIfi+bE_pJGIhujjylh=_7>6o0nb_xT>4Lp?Kj_N8Hq=L85TDq)e5LlO`UCx6I6nw!3 z-~Jhh2nG%RF!W%M@y{Ry@aWbNuvv0hqjl!oU`Yj!CVnDEak;X#a}_(C&D5lX`DE)P zn06ls=iX{%R~Q`Rc^IM`EaZM5H0L<#ZGrp=n-RK8yXo{CU$gibw7Y#hs0yK-5EdgZ zof1kcGq`?XqEQ|BNcZTWhFzbd$Po}nwrz~5(j$5cAW6Fg^st2C4~OBS4s;N;^6tgM zt)KtKs4hAyrQG<0WCx9O0e|R-Dp*;HyP-&V{MkoFh13g<;{mp>2*Mbc79{=B}l}s4%4JjmBX!8@nprMF$_@dg2?yb$$9mz0YaXQvn*LF^koYDQ@(JA9G8OD5gz}Od!{!5TcoGHVTGrH3}wg zRfF4Va9e60>X|3R;ZEX4LXB8I==j?`%S~cdd+LWJ5+&a>&mOo!TW_jZVaDiGdBWj@ z%Vv?w1dVe^l`>}GvxPx!k%a-7`62c)6jy*wYq&l60&6|u!r=K0n+>hW;a7x-jG%<{jmd;# z`=8B97#2m9X02=M7bQPKUkEAN`8G1u#wOHDerC7FsBFAl`dJ^6IHKm*!EOZpm?nEb z>kHlJha>$NqvZVH{@|YABZnZ9)Z|jq>QX3+W5FH6qAisTfgfl5I~g6HOqZ^dMjeJN z$AV2^hz!|6_||a4ob9G)1Y;zfZZ1|(-$E&lfstL=312%T62jVZ8KDkBri6x`+?P@t z{)B$qTFOvgqgdqz$rEPRW`tmWB(08WaFpGgG2sLC33b1c(I&rvw+`j+e4^{0=Bx_I zv5A(F@?6`nM~OOC70y5MN+PN&ae6B&gZ}K-bz1qyzWF4W*aH z8{T=R&JOqkm*i$;SpsP(^eUgDh z#fz#p-N%zjo|fMBC!!x#QRPvH?qA5Fq3%xbwB>rLIAt}x#1#*U&bnASV`b2<o9R%|OurvEg8V8f1Iz-4Q;xwE3j_9f^KZ}${i!8Y zJ90JK|2L9g&y8u0HwA?_C1y!56~w}g$-$8k{x?#Cap6YysWKLE0-n`KK??E^3h_`( zJA_ABl!e*@!q2^%j{_3W7P0$A^1dMji4)vmq#OntAu<;F_Rm=beCmUI3kZYF7xC^X ziSHV_B(luM9VG{hJj#as`Qzs7xFoO-PQQm5GE5Lu0MusG!qasEr( zBDy1V9^2nGO3Y)rVGsOWmF@c5&=$KmKfLM1<~hxR8D!XzBH4O+__c)gRRhsD%ZL#| z`{2rzh-`h}ZXIaI625Ea4k%%m#EFj1e@noS$@R*`$is}-S14MjENel7X*nJ=_624g#n_Rr0csru=l@Nj`$E=~5gprQX~=x69#!IY#`}`V zd^{hWg7`xDD15|Q5DW1RLsN$PRi%Rr;ikXiy`mal2^D<)5KR+Bj}Q|R`+H*B4^gVD z*4|t59U}y~?-z8RL1|TioNHp+@3GRVGJ49g@`VL84gLJ8+}~yCrxMunji)+w3$CXU zK@KWhWWMeT#8&niTojXbr<_3!n(j)JuElMbR+lOQu|>tF;q?zC25K-9H-ZCO)t8d| zkCe8C3%E_$USTrj@2AFe)i5OiQcq!CP_!R~B;rwl^YLN$c_Ddbj!N@vB2oUtrCGvh z%GTdj`6Z%+d8SJN6#N=d;?F;=iTb9?!4X3b4iZc15_mOrc{R+^HsdNa$6SWqHv@Y!JdlYoU}&4xGYD)w7baoiQ~SJAG;X{Wzd8qEYZ zqMsU!sE7|HS0Y!g_P7s+f8Htj?55ynk59A+uBSXBwSo!D8Q2vly~!z4O*v z1YT=*51YS{B!j&BDz^6O{9?wR1wNlWwETDH`d_5T|1alEa`xb2^p<6|2yFESc{7>4 zWkpwP&4q)!|Mt#PY)=MYvq&oD!)UZ6qM+ENcu}x`qUTduA1N2j7lqIrT0Ah%sLrTZ z&b=$WjlFe!d(vNi{o#V5AQhYJ8O;9vD19bfz!lj+hWGTt8lFioS|=d58~UXQ#M#(n zp?mvtvF2)OqHo#)XEQ|GL$~H?)r=jn+4+17NTd2nqw(ucHBPy4)GuXu4Oc!)x zZ11AV!t_nJ`XmlY(zwZ^$!!~=$9|iNsN!qzml^3ceP2E%QLois6JIVNRW}0V%eW0h zf1x5d@5Z@(Z<}~IV+VFGPu0j$Y}S0}xQW+%0G8Ez-fdW4s_n9kvjZIE+o^1c+esDz zsb|o3B-|)?=L8Yozcb#$o-WJppw8FnE;A~1UBg<}Qaj>%LnPP#?+xk<$~gdQFyJAk z_^ZWh>BJ*@$~BjhMc_5p=RL#klNrHNn)7L%fONeyIVKyn!FnoHHXAlq6U7_>Z-`2* z>{7@V$fzAu2C7j(|D$&}((iSs+qI}@!{=M3_t~fRj$Hl+AG`J}m5yOs!6%%o zHCE<_l;mPIW(Qa%ly1#M2#Vy1!T6Mj=7`#>=Q_c^mZJ;>TzVbE^;a}U_bHa%6P45E z_8VEPt{Bc|x2d|xX7>8OTV3g#&%RkqTRDXhK`1;W_#oK+tvMQ+NJ$@4cEZ|4Hns1G zY)vF$9uAZwsLG(E4y5NYugd7vYfbe5`-~()#0)%v+BcLFG3let`?@3MT246i`?5W8 zTf&>}y@~88^js!Y>vDb!xH&<=PGo-xt1<@vv2dcW7@bU^Z2l9`6PL~=YY!$Pw4K;3 zMj2Bno6VEfzgH#D|6IJ{pS$1Ym?MY-sfCe!o6`WX8hY&8 zZH~Tj=+2!Hoe|3Ivl!0WvJ6@31H3iAwb;tR z6?w61T{O^TEwNdX|1(Zo{GZKn&ZYm%p_QUOunT4~|J@b=9>taX@5I*?1A<^7N<)YH_MiZ?=C5?K{@IeMcte`Gw1U z@l*Aez3x9IW^xSXXtfKP^v)bmll+MfwrBA5EwEP)j)}tf}g!hh97O2IH{26gqzhr_{ z{;(mFC{Wznu`Op?Ap?r&ta%{c<)Gf>e3vVfOqVULjLFaY#kTuhf;cv1gF2JpyqS-B zyj#B=*5Vl+AUu-kFPpZ~`Cyw=p&BYq_BV$(1a}Jf@SSJw@ELmtdH38SJpAI&aS5*w zPae^6q11|~g0h*Vti#bK_ZH-Q;lveZBga0jka`&rpXYZHEkM;DlW|4y=0oAnAh;rr zL{$y+O*uW4cw{+PU_8}eaouZ9u#72$;ZJHuyUe`|IhxT0Nkm?&)0M$41csdyKljVB zzDt|mD_Yk8REXb4jRyGPnG1QnY1J24IFL@F04kyaNAD&!V+uGX7o^`iKo!oy)f^d)7%itHF=3fI&VU?oy;-||lg?-{G z+p618ElEYp;zUj2_%Y(=%PiD{0_y9_cxZQ^vY22gp!WZC3nkpKeAbndXzuijdb7v=)JqG&H`Y|TrmaWnzumqlSq__!!eCRR;`A~}DiD6YoqXVsuT{`c-XSzQ>SL&LHilVg zWyw6(qmi5+eu(SXek~(s%KHe9Eke)vjQ0u2AC_A&28#6=}RU;7`>!63i;zCLBe|@&n zhST-WbbMzu63PG&{6Y=R{Z#U))*tG-Q%Mzb)Vw64jz8-+MaJ`!jL=hyIIj}%Pc5Ge zzO(R$bj`f^@a)v0K!kkK>_3w1Kf3Lw`NifD&FI1Z@Cj967=z#zYMW&Hvk?IctQHgl zUtrKsrJlFLva>m{W3T_juo<4fP9wy~ zrxW`vel$z@;D~iGhg^#8)3K_>tUoZ^d>mvS$ z?f%|*qbKf@&q^E;zpXSRNv)aNUaAQB0HPoZcL$ z#dA$>t1++De3V+xC9T_(_ClxEQefy%z*%*v&El`hY$M57=+jKa#p+)qlf7lOZ*(;l-OgchkV7Ysdyu=g5I^ro?FGX z6)&^UcnGT^J`PnZaNwP>=v;m9*)oA{9{JF!RA<9Bi^A6k9;{Yl3J@NUOF!Z?4>@jx=*vpqqz+q^9)+K)P>C51_5-tOrO zvD$CmlNgh-V~+45a5TwBlYCsqGH_zY8gNR-CUAPkw#4A8dIo_HA>V60mUvTE#~yHQ z$02Y*2bAFQo*{KVE0>(6Vi)EzS5(hc^(8h+l1!DZ7|f<1$;SiNxRQYDU8%rLt_)zU zD;wD8%9A8~RnMr2brtrEsjsNlrGQCrl}G{gH8w`Nh}oB>zRt!=116WN9N6osk_K=| z&v>Xj%s1I2>9YDZn<@>Pg09+A?sGN3+JW+(i7?+~Go%sIpsSg%?leE-G67$8aloT4 z5qQky1|E0$fhSzOJ@-uaT>T!c`aYX2-7r0HUFvy2TDui4nRZvqqwdY&zjrc9eK^T4jVr}=Hyec(OU zL*PT#4DhjQUYeriuE)Spt`%ttU)!^$e$19jkJKw{l{8DoxYnQJc-NLRt6pbor3LjC z+aN8`Nv<8j`=|L-*HdXpy~8$3t8_*uI_2z6g|w>PXLZs>%QDwTco2Av<%g^Prxi#QCZWFkW+XgP-_M{_xm1j{C%lbVs zO#<8NQEJP%L*Odz7`WCd2X3%Nd6b%Dw%-%2Z6>U<#(0)BY3wCWoYrKGC!9n$)f1;l zvt~e^vt|Q});wUhwGfv>{WY!MS^_1#)^g9LCX>D5N!0dRtAH}m4Z>rnriwHaE-x9TuM$y%s9%th=?Pl~3Ly$yZ4ZZ!elBz)V-!OY?NjUhXBn4!A#Ali^rW{ctTWyiO(Xl* zQ_!li&U*@Q-W#uJv_gqS!>*8Vg?RlW-x_P(0#2~*04H1bfzzx{firmooWm<%?D*P4 zje%YF6l)lE%Tv~x&#Ru}B0knrrs3HgPo>7m?t5xlOSwVJe8MSL@X4MUjl@3n)VEgi zX~1=a8~IFN4WHvp!aj*Nwbj7qgMR|Pfj6U-;fuPqT6w+{*vVIfEVwrt+d*$$tHf7J z$*lptPD;j>$XnQYk#EFSiPr#wt?`z$4)6vkzx6WDfPI1W;w^6-=6PuY%dNMnb%b|H zN3Az_3HTNt2+5eY7C&EaL+c&>q9Dyuk}jG*=-N?N@kdgrF3u+NUeP7m zl-_IV23xdLtxK`Rd9SN8Y>D2R>TFwzl&nj)rF*7zS+*?iZC$P{*LyeQZ|Dka1>XC* zVq0<7JoYHO4|Qd>GVhG8(pHI|g01Gnvg>MW^@N*%>!EM+x+a^}`&g&78NDkyqmA{h z>sXuM-O>p*mv=|!vU$DxA)mHIW($HB7xJTsm!k99`oMQ3exojE8wBpN4S^SjW#eg! z)&{H_w2k_ZZpb#~Q|PYR#(gT?D6XlN+a|j9bz`=BzSxlGrWv+9=$hA!+ooZS6CYJK zVVmpPYDu&$c0JYIvn|8jjkYzIhX=Mz;Az{ol%|`r?ST(AW;=xbEZUBNmj$`EUvnTt zLHlb$j4wgADa3o{@eKHqb=yKxNVa`xx;-Hk+Bp<5q@Bj1t!u3h1mg>^g8-kL_c%CFSlx5t7ucG?sC(IHK! ze`rtk$LVM6Y5qk0ytUk)qJM19^rwe>0IkWM1Ga!z8T|^@+aVjRU$^J`v-Df`B7d%a z2U}bHzP%Kz9%wCpfp*?r;V;lX->pfyL{c==!rHc>>BJ#*bUN# zL1kyKO}F#Xks;RZ^u!qw>=N8}#U8-+%MLowkZd1-@-+KpPh4w`efY#u7&7f6{xU<3 z{RZ?6dV$>JC8@_uQU|d?}Rk1XVFk{DO`z~=gE4Atyye?7KS{w716 z{gGd5XtdAzjRuWzTuG>oc1Rkr9r~p2=+|8&4z$|H**niJ(M@$b{dH(~$q?qN&HB5=Qz)%h)kHmtImG@7d;W=!l{ELK# z2rnCE#bU7CV8Q)sh6S+d0N4Y3}qShd*XsV8&3O?WRnGfzaV zr@*i)8a-u(1CjOA7>-0i+GvxBF8?8|>#PVy(WcJoKsC*E)&Yy1jnV+^?$k&I+TUrA z6m)MV6O4g6Je=+CbOz(;OPvy&z0w&7CehbAF9uWT>zxA-4PEQJEM25;b`A$K)R#I( zB#FM=c_Wxj-|f5=%%ksj-U$|h#hjEz=!czC-M#co=c8Z=J>NMSEDuEo>Y2_3X_9{2 zxfHCTS6sJ)we))DYOsOc>fC@hZmaXjsUN=6xf^Vz_d5?D|FrX{`!<8zvY?JpxRpT@ zqjE~apywJ z1-3reZyI$M1pDa>cX99%lkYAIUSW#dl|hp!3)fWlyK5vTQ|hh{UJJ!p?NjcilXx~1 zV=@&auBx{W9=X>-5$lEIGn{6cc5lLr&APXN7ck=()7ubYX34!5iYqTbOABUMR}!$Y zD^*%DM|WieoAGnGP)E2?-QSfR+%d;>P)yfWEI#PYZYvX~yYt#A#kuanwircXmZS~@^Zx?IJ z?sCFaTEDpFiEC>TH@j=wwBmMmgC<|x^Q^TQ#l!CAHdZ|D))6*gJ=x8LV=Lfpu}yHu zyWOEUtIg$z>h`yJ9WmX#Z9zwTcYj--BdPmR+n^&Ac*v2_eFf{x?rVgvw_SB)ci#lg z^T^sp9fjSu+r}Iv-M2$FrET0%-hH=i!cowes}<`BDAG>pUTDQnww_&vpK+m2r8PRK%G?q1hOU=1Pf==Zxq zo|`_#ajAQ&ZO?I~dq;yD*Sh!H4jtFKpSB%4Zu*bgvK+U&Q;l-R-R^8-l;eH?8Dks| z0}5ljVcB}-Fjd_msK$@}8u@%TPmN<3-ImU9w zejwji<#-w>GS)g#pw!slR0JxF%}!OI+Ng8J0-Kx(f!Hu}&SYuBC_2*ubw;-{v)ga< zJ97e!#$IQBKx6E876lB(OU}{&W4z+52=K;h&gy^@Ki`04ysmKu0>+!py1+$ak`r{k z@wQVF7zjN(<6WmAaM^g@$$0yX51o8q*f`^K0?#|8z=-iNTzbQ};=JgO(^NPi!ZNNq zF9UBmhXc2aJI;~79pk?92JllyVPLWyIdAz^+ZE0`lA>MZoD590$2zA1kJ=NQk0ho& z**P1SZBKJ91QyyeolAkG_8fNJSJa;GT_2s~-8 zb{=`>+v_@HfnANlm?0gsH+Cok2b!XeXirMJrXwzJ)NbfV?2)xI9VtD^cHZdjQEKWs zz&f`(JF20|kHNIWUJz1fszx{GY zeNS%ta7R;50rp;cim{i{Q-*&<>8T8@IPwcdU-*}bXIIDl@NWg=mw}#|_K^;4cLuia zJ@q&S?`gu)*rN^oIz;rtVfzhn2-+u}So^IGqi3-#y@T~EhJU>wzpJ$0VYwb-+g^vz z!-k^%_Q?)ckAR=Gw-(9J>(nmwzYwB+NgW^=^_2P*l2gByQAi;>CsUx8WFM2M(8pvk zvRBY~*=w?R^s+2b_Hp!zELHXvdR3Mo`!sq@_8r-G(CZNu5no0L=gQB02_>H6&)HDY zxgVeVF-nexgx-u!iGCNQMAt+&q3URLbPxJk^n1}iLjLIK=xy}p(L2!x=rQ!>-yk{p z>j%;3W%Lqy1=XRCp?ai6UqL$bP1J<`9qLB`G=SbmLG;(?XJ`ifoQgvKol;Tf(XXkO zsn;lq!rwS4@q3fh>r^AvMkP`0RFKM~dZ|lP1vNx{hx#h@7t~LwuSI-6;`@{+7vy%z zA@|DtRENA*{!Pj)e^34%<&}S1{-=~r{$2T>Q33fa`8f3r`GoujRG<7u@*hzH^8Y6P zOX@xHJ?16(g8Y5z+wxWU8uh30P5Iwb!}4Fqe?eW7|5E;s)PKNl(NUx4UOo3J^`FkY zf9{yNp*W{VqZSpPQhbWqSA1HLP5n~wc|{@hEBu8A^=ri!6=gEHqFnK=OriLSqDdC5 zXi?~7NeY94m!&A|3Q6`E#WxiFvd=396vMLLSA17-T~>*|oRHNjZYh2u`y<7iVoqjN z%qx~;ykbSMBI{JFDb{3e#osBO$hz?RSTdjD9~AqtpyEJrEbEO#k>_RaMaD+HCi`yW z>ydBC{wy**^7mxpkza^pWK)s0$U)h5?pNjzPV^DwK@BHZC0xLkY-2>5R7GkTI53eED%%4#P46s`?=Vd>W{R~Bu_fB7y{X+H&SRMGy(%1+pf;#=H!RI0rD4u*dmJksi z5s&^wL_$OYN+fTJemo*0A_Kiaz6wi@D2gaTDdZclPehbNd;z7BuVT{3I~$*b{;Q~1 zGIN*_{Sdk7hx80RPd}zt=yiIF-l6yDrwpR^83m(aVwnVjWG0Qtq<5GcCZ8!{N|_3# znyF(N84Y7#7=~w@jKl<(i_8FXnHgqA2yQU9m^;iQGsQe&W|;+M>1;CBGpo!7^Mu(w zO$W@8S!PzANzvvwbD}u~O4FZ7P3Cl{n`O>57cfUB$y{tMGgkuRRAbgMyJjQQWzAZ% zV0M|k=AgL`+DtbOnup9+&7&}W>Ln(uHSjmFY`_pI%{SC@Qe+wxK{T$L~(BDDIMtkTVpznw1f1}T#V@PjPGAa_~QBk1# z3d#H9{~B~(3@Re;j~7$P)F;p%P;XIhp)Zo}JMpR13N@h#Ek9egpk6^-Zb|eT^ER2GG~Z*PYFv zN$(;xHAzjPR%(j+G15_wsJ}!8>aVE3LPqK*)GTTz@=Jpj$UuxTQ<;e@V#*zi4KVD=i{9vOm_g2fGNNu zz-$-`VJrbw(Z4lKnx;&TOtYp1(~@b`v|)N;+BF>jAJH;e2`QS6qZ8>AI-Sm9v_2_1@zrs8JZ1Vjsq?d`5#}Fxhg-H3UM9Slcl)px#Jf28-0+I4WBIO?^ zQl3PlJef%On?%Y}h?J)iDSwMdc^Z-OPZB9lCsO_?BITb(vyd{0tp7_Q>sdtBvx%&K zmdJVzk@e3JS$~_z`tO0P%TPX%@6QwY{#Vo+R5Hjtmh2)T*}qRDyO?|*@drejONcao zfk<;Hk>)RgGAl#R+p^i^fMvK@b~9pjC;2+v6cbN?|!S(`!basdT^VnA8AtP)TI zs0TFRGWjc}JZnC^@Vi0kEb)t`LTiz!#9B(PJ_}rCDz{e98-OSLGKQ(jT21f%Zs0nm zT5FxD!P-b4d;t7!Q?pe=A6Yewj9)Y9tOiE;yFuzi^P47$xZ#%0fI}`%cd*VVWuVo zoX2Bh>OTM(>ow~L(_|gNM}q6t8;thDf$N!WT5p+dTkkN&XJNW)ojhsxEKK*UQw;k7 zOb@M(J_@*I@rr52I%}G@F8oG3wk~0CI`JBYX~nwwk+5#vFl||%ynr3+E(T|^^_%vs z2Ok9-Ctf!_wH{&6h?fy4cqIlWiZ}7m!rI4Z4X>qDd^8=)$2||uE#9UR_{0wb=NIpi zHj?=if;2vz&g8S6K@Ok$0`mESXHdi!e`J*MWpo8!`2wo>8oG|Je*ukr(=)*1{s>?M zTNG{JjWolvzY%bbaoJ)RuPvU`<9XpD!O6R5iTAz$++GmSXG@|3eDI@y8MLL+7x}(Z z4Df@ez~_emS8W+2KWfWn#%y`?WqyeC_c<`*wnCC0=C6Jjmf#e!d8*@+O%<}bGvO5&-RJvl3vg$u=ctBkPhH3 zh1M@wS6BE%VmCnExod#y;{6kO=5E3f?t{-Wdp0+7X!A42wqCQ`){pIrIm&hkm*cUS zV{BK<@wRJNznYV5*Rh^7r`m3sGiS=(a+{W+e34SZ3d6q zTyC4kb78KsJ;u5dw@FZITQN7-*3HefEwj$HV>a3L&7AG2SribSUt)vsT*4fh-C!rf z_RQ=D`xBmLb1$^hFDP&u5`}Hs!%-4xPrnfW%@@WK$Vy~gwV45~tQ8QUvjkKsNiwiq7?Kz_*B zp0ly!UI6o5tAv4V?1^1Hf%(350OQm~Vw)MZjc0A;Gd418Cr@C02zC&jF|mDM56v^y zNem*l*v{P#;Z$b<%=1DfIX)J0%qv1ZDF^*wUKfhYTSBRMN2oCG3)Q3?uVHLU@VbR{ zgx8b#sZhrvp%LpMRv~D}x;R+}VZBIX3);bYj#Ytf3a=6Jyg+Z^>rZsx3v27Sb#PoC1 zPjuv2od|VFJGc%$2XnyI*{ZnP;zRDPID>(G8~nV9UvpoaCuN|s*adqu_fUL%;=gb+ z;tCrOridN`zk{0>*NIO7I*q+0JYgka^28_L9*bKU1_qq%i)pW70j zvQxqlx8p$EzC*!1b*QY!5o=XA609mmGV#g6`jT9WeY3FNM0}nT9|gA+ZUdjQ#yZll zzQp}H_3cjlu>B8oFu{or6ZSoDTi747CO9&&zhg~yce=*zhS<}I)SlS(;WGv z4Ev2I2>Xf8;CWv#?E5`~@Vq|n*PR0UVkdasuRHP4euHmj%?#l~eKYKPo%O%4&voK= zo$;}7U&*z&PIyjUSX;3E*hb;<3+qZF44?Q|tU(xI8Q})jMJM%GUbuzjnso|yh&-L> z0bB>KIgmecyeK?k2ZULYzbq`U!@?5A+4aVb2&-5}us4JaBA<7J-52~A06Qrh5P&>l zkadXl)+4)&9B1vylQoFf1iNI9V^{5or|S>vpbdKp(KS!(>FlmOi#@RCV%u{9JYF1Q zk@W{-W{>Oz7MZ=6v<>>hqO_Nhafa(#qV1KIID3sH(Oz#!u{U8|WJ$McEm?M>CD+bc z3hV;5f5Zl2{RBRNrP%JWl-a#lA6qKzK@zioEwt3w`z-bLK}(Z;2+x;AYrkqS+DCDm zU=i%&c%CdS`vk6U@!IcMg7ycNKKnHG0kQr+(an}Y`Tdi(-srS&X-=iAk1C zG1amyW?1&bY&^e~Lotu&F+Bcbu@E0Qxmbebfr}E$xfrpEix+FTB(dRCe!vIE{s)&T zHgg%Gj>{HJq&%#1xjd2M3Pq7TKUgPRiRk9aML$<1_MXb>NgQxuqae@Kiv73_*C1ZP zWk`mo=wS2!LjV7NQ2rnKACzsh_rd=I=nfF0Pt>RA)Ad>UTz!GQxK6Gw(^u+ifa~>5 zx`R;Cr(o!{dZX?rl=Q4#(7W_reNf-0AJh-&uj)tjWBT#Be*J|0Ufq5D1O2pqP9Ggk zg9MBEWqn*Yt?4)Q+xk8Iq5jw)H$)j?4Dp5}L#iRekZs5_6dFnl<$Bpkf*MtZT0?`O zS+5KwgU(QBUe4wlzOSgRuG?K*UEO`>`IM5++t3?%8+sFOL%+h?&;s6u-pt$3 zuktqZ7T$*5%G=P}cpKW9x1qQ5Hna_IL)-E;w4JQE9aaZxr<6N+8(PHM&`!J!y^FV@ zU969+KUiP0PD<&)lAC#5;OY0%uYTs&W z81F>C$ve?+@lJGvJI(!pRl+X~mb$Cl)mB{A^%g7X9(Vs>rDgqAi!XiFc&qG6tj1)- zv3;?Fu_LkLu_`HNW9P;3fq27slX$auOG+|6GCn3gK3*neYJ6IJW_))1<@kblMSLmc zmUx?Z$9R``cSrsg$jfTb&3$rAiG!B|b6fBZ>(g?`2 z-jMQTBA_V|aD&YMCW%{pAKqN%{C$Zqo%I`;^%lGXze#5Pgw>KcF7P#$Ilh_MEo5H5 z%8cIP8{sRlZe>PqlNlXtwf2pZ8EwN`?zX<^GK=k)#rDi%2i|Gl;rpd;mDSPm<#x&K zUS~eqxYx(p)GzS~@kz0cu`abG-YVAJE4}KM_%pG7v8XBW>9N7F!SUxsQm@44#OK9^ zNhy(%)DmCF=g8QY+7hpfjsJX!FT=w4SeaL*ni5|bn--fEUn@BC^CiA9Haqt6<+4C^ zy;9+orS(f@X=X)iMQlxNNuG{v@XD6@C9@{BqxM;u4Y55^7Ko%?Npy}?#|}u*=N;0L zZXFNG=TTZv5>=nK9@~=cgM}@%o{gO_C9@@VI(9l!Az1zSlG!2SyKuQgtoln<_WqPD~j#|z@EY6~-dEZ(kOIVJQ-yol0O$~jM7lW+xlTpm$0 zR+eZG@BR6bXdEw2G>s38Kd2?qB0k)dL}7fCNJ`_SiPrJbI(9CXM2Fakc=~b~6(3t$ zjQ3-QWJV;u6Wxg2eu;Y%eKf`rVf92}kj6)1sBjN6+IER}B1@05jMZ4uNZG?I?Z_O+ z93mQy;{6kN`cz`HteuYHzb>)viE*)t#6`sjhP8^s1SIL;qihP>rb&*v!EpcABj){kpR;+t6kZhQ2l5Cc2nY@Ly zJlK?En`B2_ugNaS?oxUs`^jn@X;y49njFm2OWyz_r z*~w|%`qLFyk(`+vDX|tL-twh(cDy*=HTiNpKe-@Tkz5)do?IdGE3=iDkzAA9klZ4k zYZvb=eVQHLncR`wBiaX~9Euku*ARg^O6E%Sq)5c5my$9YU zsZsGBTBL4lswg!wPLdWX(GN)rJGS%t0WQGly3o<{4WIVkkUS?+PY_4R1ifm9a#g^pk)TwM< ztXXVL>GssXY<{*t*R{lqcq`i~+b&y_tjKoF_K*nG%uy}bOubW)S(8~~G-5N;yRyB- zmgYMm7)_I9B!b1(o@{Y!c6MNFY4*X`mbfi?YotG?v%`g3ks6*YjcrJDOBJQNWz*SF z*|B6nFOy{_WXP9mn61n% zOE=9*Mo$elnTy<&n>mqPo1GpXp53TDNo|yQ(%2cE+Lqd>@ncG2hV*+&YOm&`)CV%h zhvNffc8*D0wUd0%E_F(Ly)gAjyhrL>swNgqyJ^Wgv7_n6>87RIOSh+6$P6x&xH%mg zpDs+dPIpLmPIpV+8!t^BQoqMm#Ji^Zq{Fe(=|SnC$)o9qW%W#x1e1-AlII_i{qb1( zURl9G$yudRGdevkJu#l2o{}z4&q%)zD~so*=cebU7sd9Z7pIq}SH*+r^4WJb>Er3D^jYcS4zZmZJ1v^$Ggc-Lo0e%P*`|rCrKrSBGilRK zVx?=QrNr;4%q_8{>DH-JsZ)s=sl%~D$vv4inU0xT#1D3+OQw6KS8_+DUnZIvoEerW z$s{xV;>GegGFhD&lNm4CW$78IotdebY4Nd{nVH#{mop2}Gcpy4IH#%h|98XuUv$Gv zTci0_LsR{~$&^%BzDH~;uVkT=N-4{vtdz30WbH61B^ygNjyN#lK*=^KJ4<#V+biV* zDJnZG<(L#{H?(SKRmmwSpOokw)(%F41LPTvxzSkMXl(8>4rgAMyNsV(On@_Q4!4+G zZZX$zbGeqAOGD1QLC(C_aprBzo#lFND_^pFjpL0+F($ruSkl?@m4xN9n|uy(ukW|0 zq|XOdC;RH9vwH-|B(4C zo+C6*_$r~ZpQqwV`8@x(sd%N(TCr<+6cB3oSz>JUsDG1s)a>t|mO{5&h1y)ju2RQ( z)a8p&RQ%q*yHKycLj4Ry_ZjLR{em=DXxLS##86b`t$*^1QB>x(|45ITj=F_wBRaKQID4X9kfDd%~fcF(3Y#vj(W7` zi&610`8-g<`nW1dUGXWQPdvS&Uyx1+oxTbk@NCw|XZ07OkSm`Tu28Xkg)Zwf_CA{m zwUD~pE6=J+p+fKZ!M{zR)cGe_!^|&^o?-__KYwoKx!N zfZ8?etu5U%YGZytvwAUIZR$gDp{&qolOuG02~9L|9aCtEP`SykB|2Y{Cqpj?%{6;K zXug-<&zpD;iBD?tb4d2I&~h{0&??UlVpH>_+Jw}u%x6gQVn}=!l0Jmg?s3n*odzq^0P`&;2@_zY0*(Y0;e0DEvQ*vbwth3); z&RIg?Uf!qdTj8j;#w34)Wlsvr9u$`SC!F-;vW9j4VBPjH>nSYzOn8jRMd9(@y71OP zZC=#aQahUG$WOIvq}=2!ZGSlj)?Zuo)>UnOxxBW@z5Y-2=6u?f_UOxc3(MXVo^ARa zmOUw~d(a^-C+Qeu4+<~!+WoB@R6mbjO{cccSINhh>vFHqU(I!YE1wp8mOhs!>*mU$ zIytgVK18>`)9Gq_pgDSg#Ls{>hV*Qs^Q~u^0UbS=#7d;M@S4ZG^UDA^8-=UAJSKBG zKx1pF$!8Juz52^L6Ab9*XM1^0<4^YJ0b*}}*o#Pi2T0ru5PJh8&IYJWiLn7? zUjD4jmrK2~S?#%L%#}QfEzbshoNDqV{i>gb>*e6fXPDYNtm9N$S|>3zU}l~6)4cI? zG5+GrC1V>f+mm&#L;bEo_0NJOS0T@@_0M&esjLpwKiAcs(f%iAvlS(uJ%4Q|xpMBR zd&Vm9+ODbNllp5*)?au>$>-Kpcu&dYGgesF^&yjsF6XPGCa%LLym+dWt4_5SfBGqT zCE~5Sh^(mdHny#!out$S9$)o^2UNWP&$NPd_4ey2vv^(}kWdAs0pF z2+18TvQVhf?0-t+NjVclmIfRqm7NNg&WBOWJ#rq4$~i15=c=fjr=oG=-)Pp$V>15eXzz2JiHE41g`#o>ipm}lopB|8 zG%+sDtTiZs#jw&g~|2uTUSM zu(6Xn$UHB1sL;bgaZjEV8Z9)=*v*|NG)1UfXok=WLUV=Y3oQ~_?0qh;^I5CEN@%_J zIp1ryzE1rnq3uGug!Ty?6gqO{Q~i^BT&U{r_^kECS>wmQmzaaPG|-URXTA=5y2tC$ zdGo)Wul=lTUu*Z8fKWqkzD0gblPjOsG!trR{XEn!6b%gy4GWcolF-P|n9%r8S!il# zT4-iycIf5Mf>1?hX=p`gO=v@COK3-EkCX$UL!qOg6QR?g>d=L-9nK90!+GI+s36>m zf47rT6z(e2BiuV&93B{cFf=nfJX8@b4X4ASpt0cz;Ys0V!qdaghv$Ung%^e^!^`B~ zE5mEU8^hbeJHva!AA}EwkA+W#KM9`;*F@Y%gGl2@(@2X*VWf4WL!@)0TjbtIpGa8i zMLsApH1cpH9?3>VN5(}aMy5dJkr|N}u1a$w^COEwBO{BwvRum5_*GKYM>a*a3%|=N z`yvOSBT|k_sfwJ9oR3=30MszrMD~Q{SN+8W%lpNJTz+w(0l&D=kY8K~@{0?N`Nf4M z{Nh3$zqrtpUtG9>-&$xMEC}9d-5Bf?>}|CV#)4_9XK-Zj+t&TTvB4*;P_Qicl=VPx zYVc|68^Kw@x2z$-b;0%4q~NyTNoxwfzOd;3LM=nLh_sE!TZTG@ zx)dJ?br1EDHOZwx{hDku=tG)o8Q=Qf|^)|Jf=GP6>X`Y86}?Tx+!sz8!qqx;=O*c*<(?|Jb^( z=9})<1&2v=_-d|&ZvcNM{GITf+p*TMIs?GsqL zj-K=c{pfT-Cn?wwz9W2*+YNaZz6%zRgPo`?qV{Xl7Ua&HmUKqWZoMu}}fOgxbF7UqZhP{4sDN_$K-%-G36zu>aqL zKc{hP2mEgfU!!tgseilR5mzF?&Q~4lq<^yDpA~(_Jc*!Fgq?h_1#J`HEbs>R619&A z|E{8a5PmJV3w+TXu5%PP39bYy!E&%lF{hb4tFxIwG@lOWZ>W^Q_XHbxSP7Pc+V%!C zH&MF`$pIu~NamY)S6*->SP7PcRiNtkM{^>rEQ9_ZYgE9$NY59+uK^c%l1i`~tO9$> zST^{}iK4V3Pu~xoq3tXWSAvybIj9z9;f?21$C(2@N1xAthp}^5`|LaE-ywJwJn4T0 z91V^Di3I;Cv2X+Pbq>wL;0X^W69XGHHjva{p#}>zSg0W?j!=69$q`SoM$lm_H~Tjc zGdsZ1;0SQHB9U;|#F+9DX=-gZ{7E^}Yac{nck@ujVsF(bwOb%*fuseiyMIZkX>5GO@M?+#k6@-Nr6?oxWC zwONzT1DZM8D$3g2%bMEDI?~l~EBq{KfA5X)ar%>_?a$Ev8Ga_i_>Zf96eU+Hn)zxU zkp0mfhkhgYP3V_-*`ty?P_DZJYcPrYMeus?R-UpSyp+>VXESFp&(+%db(Ur2Dxc?} z+Purl$@7G7MojKTQUHDsxKZbqeETZ#{1AD2g=SIz9%6ErYWiCfd$}r+xziZV(|qpR zVOFu+m1Rd@UiPSmB@e72#@4VZ4Q^(=tN}N(gJ`bK*S6x%w`nz*6*QSR)Tew$d*$@k zTBpCsDz2PWd^fSid(moD;8XI0>UY)NN+he~n67k*@b`3Qq31|3)~pE zP5HnNS-Asrmto}|q;{=`W`!z0IM9~bQ%FwHfAw&ez;4ZT^!63q4Sm06Pt2#c7m>e# z&u@Y+U@S-Uq+}0t)&5R5D0o~?k9KoKnXk!Y6`i%YjB%c>HRn$D!P^y`0#_vVudw_Q znrE>5AMpPH-xvEk)boOBxtKnWQnZ%Ap8y~7H?Z_vq4w`#rrKa(r`dn?93|(3N63B} z;nO(1oN%*@LgVeL)Xt^nyLr|+tmW%S-QTD;{P@KEl=&T}`@7RrtvT;0@7@F7hw)Z1 ziciTEpRyA3=_lFVUaLKHIy3fbyxwY03gO$ia(4A?Wz@fPgMyoO4Ok&`;tKM6Rh1TGYuoH#<4r6}>KlfscSz3Jr9t1P$F*#-FD5mJCRrqT( zD%gV_!&)i*9E_cSf3{`-FB)}pZ_%Igfm;;)XTbNsb;t|BV$BKW%&D4oN3ffJKl_OC zeatBoJG;TH*x8Dmt=Rc3`bqSYDzQf+>5e37POZvY)!Gxm_rP_?3*lA2kvZA&lywF< zNA<@}e{E|IfgfUcwIjF=c_DZck`}}d=M8Lrh_$m|1-JxU?CK8K7n^;t*%zCAvDp`! zeeqIXwd}M}O{WbW*ocLV@NdGusiP3D&ZGZ|zcAxfUivlcvKqc$?PI|kW zIQbBq>D^QIGdo*|$^FdQemp~b>M9ctw9=XK-yrxhcOo0jmT2yVpUTs_n|Na`URR0Z zFjEfl{^)-QehOBATR6#A1dj0(m0Z$!k@;2rn1{?Y{3;VUDv?MiW(JFyak)oZQ=Q+) zy)x>*Rxu#=){F1zO1${4UuM~PiIdWH^@)48?mKQmdFKuAUyxVmdCYy4tcbpxjrCmg z721Y47d?vRJ9^)Aw`!JlxIa2W^uFviruG-K`l({hjmVo~;R3iA{SxA&Oy|ORQ+?|k zg6|7T_`$zaJwYO8-jA-eN1#?$j4EEz$ zJvkM;$`05^J?4DK4pL5T+{CW2Mb9VBd`_e@*n<{uKAec;X-+j&*jW$m1>XbT$Iel3 zC-?+=)BEhRs}%k3z?Xrm$*$GxLEqQ&o73$E7Z`VZ@f0=$oPmUH7?z#cb8_3eMt`?X}b5qS7h`mA~BZoO*<8nNoD zSl#Ot#gjY8Gk4Gv#huh%%em-UJ^4sJyvSO3g^Z!KWnj6NJ+#$+^2XbG?-rf8$mi03 z@>Sp|;aAe<``sG_|5ec~!2in_>2H~xap*kcX{w|p_n=?t7~Sjjj_mMO*)g}a1KirS zk(0lRA6hW)?YWozm}qI{ms}LcrPZgL5Pq)raevm8n}s`r96O4(qi8!FzCxd6e~l-W zGB2-k>yI;{?{mZ5%ZhN3{7`S@Zd>~KP4rLmM0(|)3O`Zr=FUIC8=c3n&;|UKo|oj@ zsH<|ddxP!^^zb9%+}x(`BNF;D_B))lGOl52ComSApywM=;)zU>EOf zsk>@(TJ6xAyZsxzxjWy-Kh1f6c$gkO0v0nn&oYl8oi&MGL3;_37W8v2x0qRAPs4LV znZ;V0#Z70H-m0WlZX*8MI8kpv^LyZ%{-?=@$_K%aK`ex@5W+%VG^@DlwN;7R7Ri1j zb6uHnA8qYhz-PEGe}nt-H@Jn}&He7jdRLN25Pdt1=KDOcDd*4jSZl9s-QMt%4I-JW z)&$ofF9dI5XBW@-cQd-IE4M=DWo+J!eKWcq;CJ=zDg9>@*ldfN3%D4LiwDnYArXaClh}S_rbdvmx+z8%yMt$y?AE^ID_zm-1c;luB$Tr|(o+jFc?{!)MGb<1ZtmwpAmME{lz z7F~J`{&uij|4Q!Fz78%xe*(P0X5cL3rtMPrrC3`G{tn6S;18f9a{GZx`bM-p_%t{U z>N)s4Y7c|wk?<6I5R#AK zjs5OCy&8O<+P{G7u;!rC9~^@GLyy-!R3KS`q%Zs>TD5^c25to31W%$FhCc@%fUg0Y zfk$fE=*f`&pl|(IC64h-3ou_LK1S_(2z(d$LHM=cE_96d9;mrbEOa(=p}gG_oCnS~ zvjATNTHuS|q8dG&ZZQ5=iSOs&8ESux*<&1Nh}4%4e+@VmXS+{d_b zrR@aTPE?77e|%4&SyU5c6m#kMTzWf~zA4T^at1t!p!)*+iyo?G6mReM+?{1pB|WsZ2N>Ml-FtL~1YKaK?El zw`5uGVNU#6TQcO!m-sKPVR3DyM_7DOBRKOV%et8F;nlFQ*~d|TYabi_JW$KIwkI`+ zI6UXNueb1|E-L3!e23?qGg`-N(H;FR`AiH5`AX2|{Srfi&Adz_tBb2Y8d2*b^h2IN zaL*9T_SjJB5jcEAWCeh}EpyFO&ierX^Y=ZK3&O@VhM=(T1O5c`RU?J~WoF}5H+4P7 zaWKi+(>F%@+m~hrA;deKsk^jKU(Q(G+`fnR9nJ@K5|)9Yu50!_>5i)L(m>DNsM&9b zAwk`TDYqAzj|%xW2#@KuL;=t zk-%fBH?j}$f%@7DM(%G507MHU{B)*-IsLO7Gv5~Fn8NO6*bH1_p$Kch2e|%O;Eev< z0pi|@833hrB4@zx@=YING=NI83CjPcAM}gXv%WzZj1St&`L=%kE&uTTGKASRPMjdm z5EF+tTqADZ*L0uuPUntJg3pzA@Jq+fFD#GTmd+`k{(TwX=#9*;sPxKR{BLpC9wF}H zQXTJzcQKoppXmY7-H+C}C5gSMW3^@y2w-nyKo}tA$GDa;@YeR|lw$~ruPFZa6}yx( z;XL?t6&3zVh+ukiX5?^)n4CA`)ed5RE|T)pev|{ zamVxShJ+G43%-YKm}bWuHbn`%HHAs=MZ*~tkAq{HLv@{|MlU|Zj_ zSi0;~ho7`kc@0pkD$-YMa-&J|ocTG;Ip*zA4kULHu!difd$29J>lu6)t@n-kY<#Wa zx@obk8fwke`G9hw{w6-MQ~|B4IyAQZM*Jk}rdE3G zHY=~QAdysDh$N0BvaWeI*dVVRaxr}%dUEdZ+(JM(BFQaJA5FeUpK@A!MapMy$hm&o zpGp6j{wXpl--_|$TzPJNq3j=k z54xgS^I2_Gx`71Ry9zDjY7ram&TgQ;1(}|<&TTD51@b?Ch1d_ZF4l&A;oaqtqw-z# zLJgJjAzUEls<^}j%VB&VCIXb2^lrkXb&Bp8hx`24Hv-dFFq5I z9o@vS;uZjeVB7Jwa0@fno$UWw)v^JyDQq8qzv-I?;h#~^sY{!CLK@zroHxoXMmJ4zBFV5G)=HHLd7eB z6K83Q`NMj|Y={nLr%7*@+PmlT5KiHJ-8|GT4kC_F(^JkqWdEw@i9q9cKV;QQ@UvJ^$ z)KcvxjOiYA<7akgy1}2?MrLTY#&^s9jUd7ubuxTVgoBwb^K;6V_pjM&uWR4W zWB;CGeoyo1OpZqLm1=G4r)*z0Eb!fEn`-h~DsIDBPh8hQ=O|C?zZE}hWSV{$)kLxg zYt{a<`UO)}huUkS<^5wL4afUO3DyCmPf9tA&xCHy*uP*c;^GYZ=u8Of?;sn7d0-w+ zlfcb2?g7>fp+l5dX=;BTk#yQmPGL)tIa?8~-~&sCzE(-Rlow%au~X!}teqXYJ?c3^ zVPtSlaPwbvwIX5Lca=0-Ft0SP=mAsSeW5gZ@UPBu=>dvhdCWa^30N)Gi(=}q+r z5VaxQHGXTCDS{6QAk2Dr=t2ZY%z=NWS~f*`9!MBMpe6{xX2gpKL5<(&YC;!kpp^96 zoRkIpwr#pW{DoJ7EekE@UPPPsGabyF0koe*<3$miHV7U2i&zRjOuMbi$ozphunNHhXN*Ue8n4M?oI zpgqcl2*q%D`V+{{+P^+xDYz^A{|mJ`p~Ic(oU5Id_vTr%!9*Z zVH*e33AAHA#kaTY&f2b7{oqZ(QU1RP_a0nsk$`mLYoZ|0a<(wA>x}SCRyy11=`7;0 zMQL$lLM1k6gt^wvI8Eo#Wn^l0wF&I3kwKWjrN$k-NRR19aG|+p(nbTRb*daAvaDJ zMyC!$tD$%Pf6a|7c8<;D*o+xkrh$G+vzMQ7?L^836^^nO)hwxQR7p=4TZ( zL7g1tgG3vIPDoB8FLKfSctki*R027HAr0b*qw3cWRq1vK0MC8pRnk=b8OV?o|8F2RL#H@w`m z`P3qJ5hC8|=I8JqR(O{32%TbrcRTvdQz|xA~hv`T_L%0l$Uj@Rc$n z+z6U_;kZYy+fQXQ9nymC1so_)$T3}&D*JF#S`fZMx0<@hrn7$@Nlk8j2;zK-ut^nG zitt8sL;8s~=dTLy>-2$5J9+%vz)##2ax9N z1?xCB_+`F!7mH(mtd%-8Q_kwM)^F#WjBlI^r`_kj{+-fx z$Evmqs2E0bsPW5(FU(nM@_vTe&7G%qC>H6?V)ekt=1<^35Hm{EPBdc(%uW!pwdlk$;djUkzeL%X39j;( z`<*h6;|*VAmu5C&hCV+CnV-{CIx?~_WqAzI7uNR5Yf(gX(ju9(C0?U7*Gk%s#25o6 z0QbH%H)3`Z9pnsAavj)6T+a zgvR!y7U<-~0QTSsJJJUE&fiBomp5Z56VvMLu_UST2UVfQP#FwR)o8dp7dDS@9+O5r zfLtB$r17%KdYLl#+Z5TGZmAp$2`cR9mRS|o%7AwEs5!ap({<^dgG6Rcjge356U~$+`C8c1~X%D?Js>wescH# zk(8s+@+#x5@W7%#(3}(E)arg;P@h*%%&il|yC-|DZT4-(22q+J$8@;*zd^2ckU5WXJFEwy8}Y74i^*ZCyv(3jeLxvO@R-%?*gF_ag96obNL#uEnrviV-8kF}*#}1O zhSw+m_LuzJtZd!)leuxz;_yjK%SMzT|Dt`4OsIzF5PWu?yWh&k4g}EKQrAIi09_lY zxin?6Qv3++m)EK_rcRS_H2WQN<^IH8pEqV~7aj+*q`fEDWQPeLpB)wWbWG#;n{nj4 zMp|aTTzisFzAKD=f5J#3J;&{$<0|OD->10hINwwF;Q1jZ9R7zIM^txp9fxqO`AAf1zjK`G5tKTsm%q^TDPm~j0(72J_Df8U} zdJMfRwg(EltuN~Md(yEhPV)=6?&ZC7bkBGe^VFt7Uyk&g|I1ofI+RQ{RM-$U@FTG* z2yI*9ND$vri{W+UJxR83<~Z5PXD-6PO6@?-X0sUO4-`A7+wH%n*y!G1ODyDjytqL_ zl(tD;%IP8TJqG>WKYNh@Y8RKOa^BGhdzPa}DC2tlrCZoni_cV{-x^tb!0Q&dEQjy@ z-EH}onV3w*v*MS4uqmxbt4i#dDw|bJ?Z)5NMT1M84i#kC(%om`;9cIRpbc}30*j~; zsd85J)$JEguRv}AvD(F~r9k~c&2r?}{0oXRPAj$WGY-GA@%N<`nf=!nOEjJFK=&}g za$jfVEh7T;0_t*30h#Gj2{g5&%()+UqJ*@GUMc{*NM6*Gyr{%Tmv|LKE9sIG+Z$(< z;uSHlsDizYtvj{AN)`D^F-2u~tD-l(%-oVd_7q-at}}_+1)5%H?eUVJlq}g3ti4l~ zN(t8r)aK$AlSQ!y0>r}BayHj8iZk=5i2?JT(2dby%h{ja8MAYb5Hpwwpb`HEOJ)Hb_?qXES);yU&^mA4_LoNApusJ@ZQ z&fb61R!}yGHpmxn7hu1kp03v#<@v0CIbb-DIbb=EI>0)F+O@?tgSBC{p|=UudtckF zDDPPANbI=o5E^8PY|8qy>lI%9AP?jTd~q>U?EF;rk5sP3QZW}}!wg-*}nn#c3bxSw6W?*X|2tgJJ0bIRy zTfl4F!T{lyP#w+p;OHi;6j%SKhN}jvhPL_XgJj{hultsJ;!ld{m2+Im|3w+KJ6!PP z-qbu=*NmNt@oqnr^2_gAuIu)M_S9~GJPTrPR_DKszSka(5C~*vSaH>2(hUAMumUG zV_$^}v(;dqO0mzP6{1u1d+_z7SM?NTzVD`3_w}R}G~Uk2sqg8?ssA`R!o6RoF@9Sw zWIK#DOR7z#1+uCNE_yUv&i$Hj-bolw5^AvML z%4s~zX{M=*U}q2hsm!7UAz=vyR?QpAQg_r-F4fiYEuMAtxj@l;43o;+!TYNnsRr;~ zP1#)LMtZBvS$dV$w`{oa^c}MJe93N)w^ehWw;8YxC7@wkz@nx^xa_M}As0`oR~C2f zk~)(o+;Js1p4@Xl3%F}y_8dun@9uq^2SS}(C!btjQz9zgVaVcb0SY+_!n5WFYfg5r zDL0iHASn5i2V|T+<|n5PkH#;hi7J{i<*n5{n!7f1&gqwB;Z6i=7BbOH$OO^34Hx`} zT|fH0)Ph|(;U`5Qv=Judf^WVU!t0KzDG^O0tML&>zv>9a^$lenIPu3N7dmawvVI${ zak#~fG;CgQ#u~e?>*3jdv(0aQAkT?kImT}vYkO*B4mI9iuxA_}wOhh555do?=?A6f zTk@xI6`t}(f=V&Fkgvt)n?cu7LU*e#KXit}Z%CWMkoN~I7>Q>`7kNJg{qt7td3=y< zQAlk$K;m5yW$em&OZhI!noFj-zp)oH>XNFF|C+WoZq_@wL3cvX+q*aL)q8YCZ-olj zfEv8(e|ENRWeFI8>fh?%o|pr7s|)XA7Q^%$!`fp?JQMZhKPy)UvigM(n~_})xkMqv ziaetB=xBl}1L#N^%0(*^BGe?*P!rWLRfok>=n7;bpw(#AWyPz)m&C}j=&B~7F6b17 zBMIpAhoiIUL?|P4D}yRYjMOOAWezmd)i4vK)Ya7`^dH;2bPrUQ)m?A%D+{b5-YerO z$>GXZDw}C6K1=Foig_#J3hU0Qd85g`SvOQsmFdfqg@3&yy2+xdwkum{3SP?v3yZzf zyXj;r0C_)YKZ67?fqEH5w&MIi#jh)tC4=6!|N$${`CY zb;_}#MwiH%rTPEEsv0iL{NACe>1%!&6kLprP!6#1uF-=B4KFlAO{ot0V? z*i``}%ktYcU0M~CO@rtU(xX@?JKTW9=|-QCgxixSde+f_K3Tz0w`xLZ_z1C zQzCq9e$70qEU}_pRs~jEm-p!Wm!=Bw+)KUtg=Yn956fNXaVF$Y!EXZj=-4i7x72S` zcVDtuRXw%HFS%Ws=Be{FrTZ#eF6p;aY}6P_vNdat#vCvE5wc}g4W9jK?&I70Q%QdY z*Q~O-#9>uqSC0P>)KOx$`;Xqof0%}-rzNC?F{|0AhP@NwTzKkr@;K%>-!ldNo8=*O-A*a=?Pq&q5!ZZ`%eG9o{_ePX9T91VS|V^Temf=?U`W2)qcxer2c-kN?j)vjY zF%1CurcbO5h~uuYHWAuqPS1@YS(q?096ke=#&`ha$G)+;Hylpi_of7pYx>0M zK5{rsua3C_$hmxC|J`voZLW^h_DEhm48V<5^zJQYG{7dD=Vg3YTw6z5B$$zYHsNi=N3K4AKeV}3~Z z-wpk^r3(FDC@v8SFp?32(2M)wmjbTQSpA(gvd&8lxQ0kog8CYr5oU8#M&c>a*1)Nk zM{m-oP!^5pgiFrNItO~BzcdDjQZ}oRHnCi8EUIM+zc1>~@OXEv{&UB?1}A-I>fnUs zVS~|B=XKMCzka%^;e?TdHnLU=W?eC66B)y(6XPtL_QbbQ=csFP!5F`s&+^RST)B$Q zQ-h-lk5(^Dm}i*3UYG$bFN(vcMvHnS8qug|jlvHtYdB44v5kij-FaAdYtQGt)9kkX zS?k=pe$G$L+OD~0+tG11e&yKeTPfz$-6-Q(p8=bG2-&FQS-Bdm>dPi>{*|9av9(8- z;g_OGltjm)V(8OMNBAF?b2Ea{M^=oFvYO9v?)=96o|)g>y%u`q=G7vrjh*+D4^)T+ z1rJz=MZ4^xwdbvt7@wUdo$O)Ti&Z`Zv1PFAiQ8o|?Ao<273{I4iwK!AjVBP7V1mUw z?CD4IK03n0mi{*^jD?C8EWWaN^T!)}J~DDA^skvc1tkwPPneS@-Z~2OC(t@FLRPc& znJaTTI#TDB5VlKx2h36ks^7z5rgZW z$#pb)L-nrxNnk&bb$jgTydBhfP~&0!3GScRx@+snx1H<0L+DApo#DQ#_aeui=)S-8 zGT8;~A3D3|{UX?tN4x|5LhARIcvtF$#V>xGIdG`? ztnL>JIOckm_lpJ|_1^KlbL9?P-+A+=mfgBs22CwKiE0gCfsslmiAR)47~jTNkm*Ee z>`BZ^x}euakQ$YH$RVKb51FvY`%npD1EMI6DxNiLFgJ(XZX4G~{ZRRand<*spn4Ar z)&mGopod8vwFpq9hFPi_)Q8`J8rEgalN+{|^-nr))!zbE=lQNb`zx^L z#jX>)wmJ1PI>*)bE0E`fuHzjxdiDS5tX7||AfA`HPIlOSSZ&q&HL6s1t_XauY#SFY z69_4*#?S6xwZ&FanoVrArB+fOO?=md1!?go%1p>#nrs;I66FsX?|9bLIFn~5j~YU4 zX#b3_+(Et++K_KfxVDRKPCDeRyE{( zKBU)9f;r_APyiEx53{~$VRXQx!2<^#(YO@*N##329-SWg(J|10);F#*9sNN3r6-$$ zdXmodfSP;;~1Wr z+sPHI@}|bXGo3_&Fk(< z*@ke>x(<7ep4_?B~y z6x_|**tWEua2*HcJp_=ZtHEQz0w2aW*wD!AF#xG4>a;`!h2A6C2!MSH@T1So#))ocw=`(Z&O}3 zxDS6XqwoLo=IYAYX1s0zRk@G8P0QV0d4amrn5X5Cl_Nquq(iC`2;o9ZXmFxncu2Vp zLPbe2C(xo0Oc5nQiC`qc8$uhxokE<#oI;I6+r>OZJ;h!`k;Cr7;X>fT;6mZTqe7y> zO2bM+OT*1V%)-n<1!1OKj3f1Q;hhV60{<+zN4{s#8QA7{odbju0_gT7Wj7)gA;T~UdWgE_@&E&Mt zAoGVe&bJRv?k;sR&TJl^TKMOX(NJS9vGf*fgUQdM8hrcYSF|goJuC8ZiTo*d_QaH& zyS8&zzxYm(eL?r45s0fJArp|rnH1dFhq%H-nfnjQK_F548v;-u|CSn*Fv56+8oT*V zuC#Q*Oh;{9KAJAv64kb(a2eQJ6gk)4JTc#<-;OKWkWYa|sm+#hATGm{GL#>p8j{S?;yg;gsNw0h_|zNdIwHs&_Mvrn_*v+pCe(0-=7eCg;7_VwaVGh!C= zjX)e-{mOx{HaY>sW_=~Iu*tTh6PlX8WX1_oIjta+N@m-X8W%^#?XIou zGD{ABeo+v88nb6t@9+3a_PrHNep%1o#9Nf@?@3A({f3DOr;5K{ zDlRi9S=~!tp(p+$3h*W4*UnTQXGe{k46*UK-jtoWVlIh;=>Vmb7i z%NG;DL~Hwa?|0k*bY*r`@o0-o>W1hfc0dZ2>8Up=wbh)g_nX zgO7gF64+wjsQX0th7?_|dV!I~m%luG_fzucwxK7)HPlFbP#|oeOtqGQtN|}Q=3iW` zu?Z+F$h5kNz*>lNt=PV>KDQ^E@5m^ZHQ^dIcb`5C0UUv$?c+8{sw+(Kd3V1-1_^y* z$(`~G&L30;REBXsgfyfy)2d*{e(n~*zbL;A@PjaeG1n#UKX5lOeE6Ta-)OZ2v~p~b zR^V2Q{sg%OyRNSo1RFrKFs@Ooh1eo*me~B z^`Kw@2O#w8kpRXrjc_s5Xi4SWKl&0#rqb+O3q+j>$agX2RS7|1pX>GO7E`tUn`K;W z7kf3%ZJ-^NwXC8YoH%jN3{;=9T`_BRb*Pvo+%J zk6j195qdG;hT2)KH^pR^UMIIvanG}GQal#4(NIG{m`ao=UZ=k|}`N)g!eZz%#5NS;iqWZ8FS}dsYc8`?TK@>*p7)-KA1>sA@so z(~`p~HpHUNasTWdolPmR)7^9qx(`rP=^0!)^uxqNTgB7aQ*}UD) zquOhDUkn$dH5Fa_aigb%#^8#-dJ*?I9^&eWYRlYXVm*z!jcq2fl4?K#gf#i?{LH6> z`wr$5kU7dTI8Hg9Gd@u+f=*bgy>ej#X0$U-9V7D9eebSK_bY--AHcg|`uZ};$O+HVhX zUU5_RfK<;(p^=7hVmVxaG#}g%l|;>@1~c&>t_2V)mZXWXI9PYDwF25c+}YM9Jw~7- z4~{0xe$+r)Vb1W3xtBPA8=z_z!y+`IHOI4`T~s&&c^pNQj%$eedVPqIpafTE9~g1`ns%oNj3J4DX+#Qw~ldD^ml+U&&YN) zi~s81uZE?sah~@dJH@=A?kFFqve3hc)%t6U?*%K&jOGO^%8cp-+>9cy7#;qWnou6| z-1f{(>0u)l)_&Mp)e->h=TxLf0fT+zLvu=IkW=!nhyGJiKhAUx=RFY^`gK<74sTqZ zw@t`U*w6dqFM;k-4U}4B0m-p|zUH^xg(VVg4Ba1phGi7Mip`AwK=XnLf+Hh|D9lF+ zB7wf;~MXQnNfll;x@v2?qNRNo^gZsNk@Qda^}D>$fR@cZBOCbp7?-xc;!jCZ;koCQ0~rqzlR-#6J|~7TlJ+cbd%v;HE;s5AK@rFDDVyu zh}=V91bg5}GGIuzKf;T_!k+`g!23u^cTga?Dd4#&pt*~Ga8rO2sQe^Q`7Xf-j6Q3h zQS1T}T#PUK1#W9s45f#p;GUTt6ImLBKN8XL!X)=Q;e~f;poWdFl47umOlcqh9K^Qb zB^G=ep-)BRCpf&pZ%0s9;Zo(e-4Zo8@9o72Y9#71whIaDBi)|NkI1|A}zNE!Y%g)B5pSrIFako zFvYp91HMwdY^^9Zsi=t>65#*{$~;+}ArY=oEJNW0Z-xZ+Ipfi#qrk-ls3IV4OdTn-0c2=SN9=bmdxYV|evMt=&G z0Vd%!VJctka->vx^YxBa6`MGi*QB``Jt=>>QC3kZ6z}T8Y@x zku&LkOk)NeMG2eZ3!4w;569-W%jdVF&HXczB<7bmailzPG(B;|JaJS%apX90bUkrI zJaLpiaTKpJgRIr6(+E*Wx}mR&^g;4F-Tup zTf!O3AUqlIYeTev^E8Tv9sCkSm4+Q0{`VNmu_fRz%Q(057_09^+H%!qwrulo*#5I6U?ulcC2e?)w? z(0L+6452^d3 zmCaB!nut1+TUYs@<+CE;h;S-|QngzWr;C6qC{;>SW9Nv?6rog#T++1?OciA;T_|_4 z;%QEr$X`*?UecjUpD4Pk5VeA6PNXYnQ7Td6X^yQdbW`G3va@1t&Z{g!Qhi(^R)cWO z=9S4Qol!Zih+Z;1qjSyakPs--SE;RNU3&Yvr27KqPJYRGGs%b|Ie((WMZAXi_6!0x zRO6(`;EuOXS|I+8UZlP>R2}7ACBAgTL*)fGQB(WHuJc*{V*z&^{tkA^H5tU&$#3l0 zbMNyiI$@m3$B}=Gk;JI8;5;V%<*3P{G$X9?9x#6qT>msS(&+A>HjBL|8-EEun5fS8 zP3Qk&VX3m*LbsdDqqsosk!za&4b#3Ws!Yu$<$t_| zbgzJ9F2jqzd|wxOX5K>C-tF!76pyG-9MRtt`7X}4eoa0F9p}3Ue1v$S$>P-qX$2SM zi57;?jNZ-??UCH_#RbfuYC3$)*R8x=e+!r?U%liV2<3d8WD}wq)rUoT!$?tK_4O#= z7DAiFLXeUZNF}dr){Y!<(4eO`qTD}S@e_C^T0ndC^Mhe^58O^zdq9uyJrJe;nUlK7 z$a8pMvl=}_O7et&m1(G-c9dpfl1rRYRfVL8>y^Rv$O|WkG`3L*R2wp-RKZPG{|j<9 z=&cN#%q%8iI#1?yB1g>N@;4y14w)P&W?=%6zU?%?T8jR%XJ;8UWlQozS47GPo@_T^ zVyY!y-E|_ehT$J}rRg_9+>iKsJml!$&2vV8eKa1HP5Lu>f8^FYcX1ka@X+C?rf*G? zdgt!)mUEL?)e z37gc4!9y|D$F_Gqv&x8t5&q!NbrWcD51dp}nRTL^uYH6}(#QbjuZ*|YV3HjY7;c!e zC*tDo12|Gp!2el3uOYyoMfyZg98i7|{QQ5_gc&}Hz(^7UGMK+G;8Z~Y|Nm6=W}#nR zn@}Djwdh0{3$Em;tKyGj@yj|&TE<9dS%tK>a5Z@nU?L%#*wYuojS|lYf}W1=-W*Wz zDK`@$a+nLG=Bc)<*x{RxEeD+92zOy7U}Ous+*(n(b!6yiECy9d3fOwKO!m zj7Da(yj>OZ`V9J-=pLT~KXML?5EyViIQg%(@$=x^g>~V2+k9%XD2e6Yj+bCY49Yye zpMO%Q(5Lzd-*6F)`VQog99e$=h#2xW0y-ZY5id zsp1Ux^BuZsgxUIWqQ<+3bDUPsusdxqDpS7@(h6%_$NoR2j{MfG{~XFvj!g#{r%$gd z|7-EPIBq|^J&$rM0&Y7@v82bt+W0s*PgY3_v}6xCUAxV`@+Doy^@|nSY+rk47hODW zsx{s|7$${6iz~A(3Ma;clLk!wC>ygsN^Z9u?IaD} z-Cr_S<92pRqd~$gC7J5Cjg08q64eY6;Mb{J9(qQN9ugDsY1Z&#ajgB-rlY?m>Pf2= z^JW9g8G0{}TY%mRUc^-NN{5DrAGo-XV`6_rUn~@A8@LpEPA&Z^UE!zVIya1Z;KwcUme$T!96~C zpvCKh?)Fi9L4*94NN4ISfk$JVHQobBP`2LW2bQWY8yQ21n=KQ5s{hektm!LUbGSVv z;EBn?(nq`coSeG#zjk&GCLACZv!@{6@&RS=?2griuDIGr( zS%4@}E%kLR`85nfA2=Zmea}m-(zCU%{((x}Cqy~n8_F|=EUH1quF!J2E_xJ1A8+kz zYndBQ%}%T(jBkiopnOE$KgBPLSTaGz`-9-YUzCM8LW067ZGH~()ivZ@WiktBEo;@U zkcc*$vRE>l?%7+V0L5w#Zt_a)$9W%FHUHtfwc2E2p#a9g|IEMTf85d>;MXp;f>O0j z0xqNB)8H6=FU)&soNr~cYdSxj^40AE&Ko`sTWgOVy?Z@>Z=Qz3B3DZ=zY`HU{5h<+ zV&GWew6%*e8cGghyJ}1-ip$f?oKn?IQfA#Q@DC2QQz?GYdMq}!YKI1x!I@NLw zJ|1!62W*v$56{k;byWZ6aa=R&XUwSPc|3OCo=MZq825Gu3MYcewl%A4K95%6x5zfcP-S2MPf79BzB(FKW0=H~M+62=q4Xo6kl{_9 z;#o2ZtuPV@yiTWcdRlsbfvJJZ;Z;R?#?Q0RzENLl%Vl?UuBi-{%di?al@K<1Y!7%&G=85Rj>Zq3ofoT( zWPalqvFy9$7Gsxqx^>2O!TN~Efm0WLjS5~l1`96-!Bs;Dh zK9?r_sb;NbTH-Oa-_P2}{}5%w@h2_i9w;aHR%l*l-qE+VFaq*>FP5@~WuP! zv^=XUu00f{(QDnobWpoFp*mW(=`FUr=}qMw{uVnOH&y57k~TlqzJot~Jgo?>Zbc^W z*iI^6oO%!b-52EI-+YqYf4CS>m6O6dvh{eKA+k%eMU6UysK&?yX1TX>3U<)PC^&+j2OEOuZPcD zi(z|dKdC`KpnXN?C;z~DUZD48(tg~afT^HutYaFoYMO9QT>z+4a+bWg#2F9T?|Zno zutULCch)7;34gU2=#An!sumg#?xBH|SZu7Q*aV7FfFAZX#6gxkV#WV8Kejd7jqEM{DMilp_WXS0YOZ~=v$%0?S5`Lj z?*yg%ev}`sU+e}{n6Ni%n-3iUqVkG!b{a^AHD0D3ZnFgniWZ|=!!rP?=uNdTY#sRa zSIgzn@ox@H0{NF7gA|&#V_V(g^1&yI^^#8Ak6(4Sb+fH?0LO;Dw5+}3-JE}$e~p#* z{npuTc6k;9G?|`|5vv+rmbaqXXlrk4YkLF0#e zKrHUBnH=*EsV50CBi-IWXYURT{#c@>X(Op;)d~Je6N|}38Ma(xVgs-B_TO`U@AVaJ zV>?6HiQ4xMR4E%-$Us%Cy&P|5v+MuPkR$oRMp_Vj_P9Z7gaxu|w|lyJiyHl7+gT@7FT5rPuc@&=iAg`7waKXHarVZ(X+L&|<-YdNla0I61|r-SrEHcr1i z25>bwaJNJYAF^BOyJ7H;_hCAQYtu zNSjckB!*CeAtIeYQDmYZq96jH2#8b}5P}lQN^}I25(!uWY7CvYlmL-HmceoNtZ>eL z+OyAxd!GBd?|I(;{h$B)^=+%e_H&%~bY&8Y!|u)V8DA#tC4cU)g_lMuv?Fpkl(2BO zy%iebQ{x5w#G-t~J+>MhHKI{k|CReG_WfM>ZXmU*`iWI16nRPNvwR@ zrj;3#izV0Hb^OBj+^2$0+&%_+)E%Y4Pqh(CGvZE2H=B|g_@gfx6YtP+`+jVib?KgE z#cgYrh*uJcCx$aMGhB<^p_J<1|1wic!H zbA(^|b-E<;h956w%%Uw=9DdVHHF#vO$Ll$$q3C1dBPqqIhGF&cXU&RAOl@F2RA8E@SkBi$~&PhjBR-yDN!I>eNyjDA_2f z`m^N+YVf{~OOU9Dh>Ui}6t59Bb|KT1@_wx8Ks;-5>kU^1{>#8%W@{`r737twcisk= z$l>s>S34CCZ$DaGNK@b~6FjWVG5*aTrPOs$-UcP~v@K6@8q<2L=-8yLw$r+v)FQ-?PmXa}}Jp$W(vpWRCJoO&c zlyI4`t`XYdKZ^L;@IAHr~3e;a64b*ljBWxjb4F`nGC+Gc=U~s@sU3BVmeZa zd}AUqV(Oh-aC0GeuvxG4SnYI6x+-LM!P{QV{dM(2tC#TIH#W7L(yK5785c7AnRMRc zJ9GTcB?fY?hAe7mYfqq`zd3HYv%*OjfG_d#Xt2~Z9eP)gAb;yjS_f}2Hw(y-&bUPHg_Y*_qE@|^NmK*^6JSs z7mvSKF_mf4p9)&4^dwc*_(D(L9V0rw+G$U{(K~SdXP=iT4siwUy`D$a&{+Iass$^! z(mu#ZZzVoj5HQ|*%}777Dn=gG0WJCQM93uex;3%qxgU~8 zWjHaBw5B097 z`?)YXT^g%})P0VuIjwoiupg40Z{=cRU&Z7aTYLJ-c2vw1)XnbYNcG=jPb#(tSW5%! z>js29a(XfL?EBZGHXm~FPzv|@VjdCYu5DH9*EbpdQfi@iX2E5MZiX@& zm9482E~+~tB_$8#?J$zW|G?aw@2a|MXTpUe-dl*LYZ9gv;tl5So_0h91JF&IELx== zZs4<*x!(E%>v*!T(|aOm{s)LDw-|0I`mtb#=aH ztDdep{-1jQI`H-LpiuM%`k)&yU;_r*faz?&bT?q|^=#FV@4N!gDD?OL0fQmF_W*@N z>%#uMjzaeK55$pWK&#RG8c6j2I)z_@=1r!2%>W7o15h%cg9pv*%w<5|asibA{U4-3 cPLgq9;59{SXVj4r1YR?2on|Cl_b<)=1g>2U@&Et; literal 0 HcmV?d00001 diff --git a/sql-schema/116.sql b/sql-schema/116.sql new file mode 100644 index 0000000000..20b0f1ee55 --- /dev/null +++ b/sql-schema/116.sql @@ -0,0 +1,2 @@ +ALTER TABLE alert_rules ADD COLUMN proc VARCHAR(30) AFTER name; +UPDATE alert_rules SET proc="noproc.pdf"; From 4dadad944b65b674b81b31a35dc4832a5213bb9e Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Fri, 27 May 2016 16:13:51 +0200 Subject: [PATCH 045/133] Add procedure management --- html/includes/common/alerts.inc.php | 50 +++++++++++++++++-- html/includes/forms/create-alert-item.inc.php | 9 +++- html/includes/forms/parse-alert-rule.inc.php | 1 + html/includes/modal/new_alert_rule.inc.php | 7 +++ 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index db87ba82dd..58049285a4 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -26,6 +26,7 @@ if(defined('show_settings')) { $current_severity = isset($widget_settings['severity']) ? $widget_settings['severity'] : ''; $current_state = isset($widget_settings['state']) ? $widget_settings['state'] : ''; $current_group = isset($widget_settings['group']) ? $widget_settings['group'] : ''; + $current_proc = isset($widget_settings['proc']) ? $widget_settings['proc'] : ''; $common_output[] = ' @@ -94,6 +95,20 @@ if(defined('show_settings')) {
+
+
+ +
+
+ +
+
@@ -109,6 +124,7 @@ else { $state = $widget_settings['state']; $min_severity = $widget_settings['min_severity']; $group = $widget_settings['group']; + $proc = $widget_settings['proc']; $title = "Alerts"; @@ -165,7 +181,11 @@ else { Hostname Timestamp Severity - Acknowledge + Acknowledge'; + if (is_numeric($proc)) { + if ($proc) { $common_output[] = 'Procedure'; } + } + $common_output[] = ' @@ -192,6 +212,9 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ if (is_numeric($group)) { $common_output[]="group: '$group',\n"; } + if (is_numeric($proc)) { + $common_output[]="proc: '$proc',\n"; + } $common_output[]=' device_id: \'' . $device['device_id'] .'\' @@ -204,7 +227,10 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ }, "ack": function(column,row) { return ""; - } + }, + "proc": function(column,row) { + return ""; + } }, templates: { } @@ -219,9 +245,9 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ alerts_grid.find(".incident").each( function() { $(this).parent().addClass(\'col-lg-4 col-md-4 col-sm-4 col-xs-4\'); $(this).parent().parent().on("mouseenter", function() { - $(this).find(".incident-toggle").fadeIn(200); + $(this).find(".incident-toggle").fadeIn(400); }).on("mouseleave", function() { - $(this).find(".incident-toggle").fadeOut(200); + $(this).find(".incident-toggle").fadeOut(400); }).on("click", "td:not(.incident-toggle-td)", function() { var target = $(this).parent().find(".incident-toggle").data("target"); if( $(this).parent().find(".incident-toggle").hasClass(\'glyphicon-plus\') ) { @@ -230,6 +256,22 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ } }); }); + alerts_grid.find(".command-open-proc").on("click", function(e) { + e.preventDefault(); + var alert_id = $(this).data("alert_id"); + $.ajax({ + type: "POST", + url: "ajax_form.php", + data: { type: "open-proc", alert_id: alert_id }, + success: function(msg){ + window.open("procs/"+msg); +// $("#message").html(\'
Opening \'+msg+\'
\'); + }, + error: function(){ + $("#message").html(\'
An error occurred opening procedure for this alert. Does the procedure exists ?
\'); + } + }); + }); alerts_grid.find(".command-ack-alert").on("click", function(e) { e.preventDefault(); var alert_id = $(this).data("alert_id"); diff --git a/html/includes/forms/create-alert-item.inc.php b/html/includes/forms/create-alert-item.inc.php index 467ec8f58b..056f028fe4 100644 --- a/html/includes/forms/create-alert-item.inc.php +++ b/html/includes/forms/create-alert-item.inc.php @@ -26,10 +26,15 @@ $interval = mres($_POST['interval']); $mute = mres($_POST['mute']); $invert = mres($_POST['invert']); $name = mres($_POST['name']); +if ($_POST['proc'] != "") { $proc = $_POST['proc']; } +else { $proc = "noproc.pdf"; } if (empty($rule)) { $update_message = 'ERROR: No rule was generated - did you forget to click and / or?'; } +else if (! file_exists ("procs/".$proc)) { + $update_message = 'ERROR: Procedure \''.$proc.'\' doesn\'t exists in procs directory'; +} else if (validate_device_id($_POST['device_id']) || $_POST['device_id'] == '-1' || $_POST['device_id'][0] == ':') { $device_id = $_POST['device_id']; if (!is_numeric($count)) { @@ -61,7 +66,7 @@ else if (validate_device_id($_POST['device_id']) || $_POST['device_id'] == '-1' ); $extra_json = json_encode($extra); if (is_numeric($alert_id) && $alert_id > 0) { - if (dbUpdate(array('rule' => $rule, 'severity' => mres($_POST['severity']), 'extra' => $extra_json, 'name' => $name), 'alert_rules', 'id=?', array($alert_id)) >= 0) { + if (dbUpdate(array('rule' => $rule, 'severity' => mres($_POST['severity']), 'extra' => $extra_json, 'name' => $name, 'proc' => $proc), 'alert_rules', 'id=?', array($alert_id)) >= 0) { $update_message = "Edited Rule: $name: $rule"; } else { @@ -73,7 +78,7 @@ else if (validate_device_id($_POST['device_id']) || $_POST['device_id'] == '-1' $device_id = ':'.$device_id; } - if (dbInsert(array('device_id' => $device_id, 'rule' => $rule, 'severity' => mres($_POST['severity']), 'extra' => $extra_json, 'disabled' => 0, 'name' => $name), 'alert_rules')) { + if (dbInsert(array('device_id' => $device_id, 'rule' => $rule, 'severity' => mres($_POST['severity']), 'extra' => $extra_json, 'disabled' => 0, 'name' => $name, 'proc' => $proc), 'alert_rules')) { $update_message = "Added Rule: $name: $rule"; if (is_array($_POST['maps'])) { foreach ($_POST['maps'] as $target) { diff --git a/html/includes/forms/parse-alert-rule.inc.php b/html/includes/forms/parse-alert-rule.inc.php index 4372303bf0..c4d066ac56 100644 --- a/html/includes/forms/parse-alert-rule.inc.php +++ b/html/includes/forms/parse-alert-rule.inc.php @@ -28,6 +28,7 @@ if (is_numeric($alert_id) && $alert_id > 0) { 'severity' => $rule['severity'], 'extra' => $rule['extra'], 'name' => $rule['name'], + 'proc' => $rule['proc'], 'rules' => $rule_split, ); header('Content-type: application/json'); diff --git a/html/includes/modal/new_alert_rule.inc.php b/html/includes/modal/new_alert_rule.inc.php index dcd1783c1c..bc98040089 100644 --- a/html/includes/modal/new_alert_rule.inc.php +++ b/html/includes/modal/new_alert_rule.inc.php @@ -134,6 +134,12 @@ if(is_admin() !== false) {
+
+ +
+ +
+
@@ -219,6 +225,7 @@ $('#create-alert').on('show.bs.modal', function (event) { $("[name='mute']").bootstrapSwitch('state',extra['mute']); $("[name='invert']").bootstrapSwitch('state',extra['invert']); $('#name').val(output['name']); + $('#proc').val(output['proc']); } }); }); From 8aacb68cb302cdeb3bf36a2081488e2a9970f937 Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Fri, 27 May 2016 16:15:59 +0200 Subject: [PATCH 046/133] Correct useless change --- html/includes/common/alerts.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index 58049285a4..961939eb3e 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -245,9 +245,9 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ alerts_grid.find(".incident").each( function() { $(this).parent().addClass(\'col-lg-4 col-md-4 col-sm-4 col-xs-4\'); $(this).parent().parent().on("mouseenter", function() { - $(this).find(".incident-toggle").fadeIn(400); + $(this).find(".incident-toggle").fadeIn(200); }).on("mouseleave", function() { - $(this).find(".incident-toggle").fadeOut(400); + $(this).find(".incident-toggle").fadeOut(200); }).on("click", "td:not(.incident-toggle-td)", function() { var target = $(this).parent().find(".incident-toggle").data("target"); if( $(this).parent().find(".incident-toggle").hasClass(\'glyphicon-plus\') ) { From 88eb7c4c0481fe4bbf3dee550a195b24a0efa810 Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Fri, 27 May 2016 16:18:47 +0200 Subject: [PATCH 047/133] Change button name --- html/includes/common/alerts.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index 961939eb3e..8e570a2001 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -229,7 +229,7 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ return ""; }, "proc": function(column,row) { - return ""; + return ""; } }, templates: { From 18484db3fe1f5d4eee4bae8acdae8e3fd3b3d1b1 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 27 May 2016 09:20:33 -0500 Subject: [PATCH 048/133] Fix adding widgets (#3567) --- html/pages/front/tiles.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/pages/front/tiles.php b/html/pages/front/tiles.php index 470f262da7..c5d4a08784 100644 --- a/html/pages/front/tiles.php +++ b/html/pages/front/tiles.php @@ -169,7 +169,7 @@ foreach (array('Private','Shared (Read)','Shared') as $k=>$v) { From a7408aea88ebcaecb8d3621a0d174872d58b4716 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 27 May 2016 10:44:29 -0500 Subject: [PATCH 049/133] Spelling correction (#3569) --- poller-wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poller-wrapper.py b/poller-wrapper.py index 1fa00b461b..69d0fb5859 100755 --- a/poller-wrapper.py +++ b/poller-wrapper.py @@ -146,7 +146,7 @@ if ('distributed_poller' in config and memc = memcache.Client([config['distributed_poller_memcached_host'] + ':' + str(config['distributed_poller_memcached_port'])]) if str(memc.get("poller.master")) == config['distributed_poller_name']: - print "This sytem is already joined as the poller master." + print "This system is already joined as the poller master." sys.exit(2) if memc_alive(): if memc.get("poller.master") is None: From ddb04ad8704534f997a8bf4a5c802b97beb25260 Mon Sep 17 00:00:00 2001 From: Rick Hodger Date: Fri, 27 May 2016 17:04:29 +0100 Subject: [PATCH 050/133] Added config option to includes/defaults.inc.php --- includes/defaults.inc.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index 61d19df155..3f01b97680 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -880,3 +880,6 @@ $config['ignore_unmapable_port'] = False; $config['influxdb']['timeout'] = 0; $config['influxdb']['verifySSL'] = false; +// Xirrus - Disable station/client polling if true as it may take a long time on larger/heavily used APs. +$config['xirrus_disable_stations'] = false; + From 38448e7c3cabdf7441762f96ec884ec1eded1b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Tue, 31 May 2016 21:59:54 +0200 Subject: [PATCH 051/133] Basic HPE 3PAR Support #3521 --- includes/definitions.inc.php | 7 +++++++ includes/discovery/os/hp3par.inc.php | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 includes/discovery/os/hp3par.inc.php diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index f87bdfc0a0..1ca6fef345 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1052,6 +1052,13 @@ $config['os'][$os]['icon'] = 'generic'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Traffic'; +$os = 'informos'; +$config['os'][$os]['text'] = 'HPE 3PAR'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + $os = 'comware'; $config['os'][$os]['text'] = 'HP Comware'; $config['os'][$os]['type'] = 'network'; diff --git a/includes/discovery/os/hp3par.inc.php b/includes/discovery/os/hp3par.inc.php new file mode 100644 index 0000000000..e0325b19f8 --- /dev/null +++ b/includes/discovery/os/hp3par.inc.php @@ -0,0 +1,17 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysObjectId, '.1.3.6.1.4.1.12925.1')) { + $os = 'informos'; + } +} From 16b91f6a97786305b35ce544e6a3b833f6537183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Wed, 1 Jun 2016 04:24:03 +0200 Subject: [PATCH 052/133] Fix Smoking Path (#3577) Fix Smokping Path --- scripts/gen_smokeping.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gen_smokeping.php b/scripts/gen_smokeping.php index cd4baacfe5..5763f7349e 100755 --- a/scripts/gen_smokeping.php +++ b/scripts/gen_smokeping.php @@ -11,8 +11,8 @@ * the source code distribution for details. */ -include_once("../config.php"); include_once("../includes/defaults.inc.php"); +include_once("../config.php"); include_once("../includes/definitions.inc.php"); ?> From c7d551f6d15b2df0a1b3dc9c59b07f673baa2b98 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Tue, 31 May 2016 22:28:34 -0500 Subject: [PATCH 053/133] Check that variables are set before using them. This will hide ugly output for users not using a subdirectory, but may make it harder to diagnose issues for those that are. --- html/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/index.php b/html/index.php index 46164c663b..1005a83900 100644 --- a/html/index.php +++ b/html/index.php @@ -13,11 +13,11 @@ */ if (empty($_SERVER['PATH_INFO'])) { - if( strstr($_SERVER['SERVER_SOFTWARE'],"nginx") ) { - $_SERVER['PATH_INFO'] = str_replace($_SERVER['PATH_TRANSLATED'].$_SERVER['PHP_SELF'],"",$_SERVER['ORIG_SCRIPT_FILENAME']); + if( strstr($_SERVER['SERVER_SOFTWARE'],"nginx") && isset($_SERVER['PATH_TRANSLATED']) && isset($_SERVER['ORIG_SCRIPT_FILENAME']) ) { + $_SERVER['PATH_INFO'] = str_replace($_SERVER['PATH_TRANSLATED'] . $_SERVER['PHP_SELF'], "", $_SERVER['ORIG_SCRIPT_FILENAME']); } else { - $_SERVER['PATH_INFO'] = !empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''; + $_SERVER['PATH_INFO'] = isset($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''; } } From 9aa4203cc3423eb29c7b8aff16bef661c32cf977 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 1 Jun 2016 01:00:04 -0500 Subject: [PATCH 054/133] Use lsb_release in the distro script. Don't overwrite REV unless it is set properly by the lsb_release tool. --- scripts/distro | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/distro b/scripts/distro index 8a2ebd02ef..11fc5d5076 100755 --- a/scripts/distro +++ b/scripts/distro @@ -67,10 +67,12 @@ elif [ "${OS}" = "Linux" ] ; then fi if [ -f /etc/lsb-release -a "${IGNORE_LSB}" != 1 ] ; then - LSB_DIST="`cat /etc/lsb-release | grep DISTRIB_ID | cut -d "=" -f2`" - LSB_REV="`cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f2`" + LSB_DIST=$(lsb_release -si) + LSB_REV=$(lsb_release -sr) if [ "$LSB_DIST" != "" ] ; then DIST=$LSB_DIST + fi + if [ "$LSB_REV" != "" ] ; then REV=$LSB_REV fi fi From 77e76793c518e504ceacd0cee2157f4260203fce Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Wed, 1 Jun 2016 13:26:08 +0100 Subject: [PATCH 055/133] Moved image to correct location (Definition is ['os'][]['icon'] = 'microsemi'; ) --- microsemism.png => html/images/os/microsemi.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename microsemism.png => html/images/os/microsemi.png (100%) diff --git a/microsemism.png b/html/images/os/microsemi.png similarity index 100% rename from microsemism.png rename to html/images/os/microsemi.png From db0e1ca2033278f036736aee29e6f56c63460eef Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 2 Jun 2016 06:56:45 +0000 Subject: [PATCH 056/133] Resolved some security issues --- html/netcmd.php | 4 ++-- html/network-map.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/html/netcmd.php b/html/netcmd.php index c635552af3..c5c284e9dc 100644 --- a/html/netcmd.php +++ b/html/netcmd.php @@ -36,7 +36,7 @@ if (!$_SESSION['authenticated']) { $output = ''; if ($_GET['query'] && $_GET['cmd']) { $host = $_GET['query']; - if (Net_IPv6::checkIPv6($host) || Net_IPv4::validateip($host) || preg_match('/^[a-zA-Z0-9.-]*$/', $host)) { + if (Net_IPv6::checkIPv6($host) || Net_IPv4::validateip($host) || filter_var('http://'.$host, FILTER_VALIDATE_URL)) { switch ($_GET['cmd']) { case 'whois': $cmd = $config['whois']." $host | grep -v \%"; @@ -66,5 +66,5 @@ if ($_GET['query'] && $_GET['cmd']) { }//end if }//end if -$output = trim($output); +$output = htmlentities(trim($output), ENT_QUOTES); echo "
$output
"; diff --git a/html/network-map.php b/html/network-map.php index 040464c784..6506898478 100644 --- a/html/network-map.php +++ b/html/network-map.php @@ -44,7 +44,7 @@ if (is_array($config['branding'])) { } } -if (isset($_GET['device'])) { +if (is_numeric($_GET['device']) && isset($_GET['device'])) { $where = 'WHERE device_id = '.mres($_GET['device']); } else { From df8514e143d4337a8fd20efcff5656efba59011e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Thu, 2 Jun 2016 18:48:36 +0200 Subject: [PATCH 057/133] Basic Buffalo TeraStation Support #3492 --- html/images/os/buffalo.png | Bin 0 -> 3757 bytes includes/definitions.inc.php | 7 +++++++ includes/discovery/os/buffalo.inc.php | 17 +++++++++++++++++ includes/polling/os/buffalo.inc.php | 14 ++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 html/images/os/buffalo.png create mode 100644 includes/discovery/os/buffalo.inc.php create mode 100644 includes/polling/os/buffalo.inc.php diff --git a/html/images/os/buffalo.png b/html/images/os/buffalo.png new file mode 100644 index 0000000000000000000000000000000000000000..25e74d30c7dc09fc21230cb667edb9131b893068 GIT binary patch literal 3757 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 LdsC-e%PI0dFLUv! literal 0 HcmV?d00001 diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index f87bdfc0a0..166e1f3a0a 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -268,6 +268,13 @@ $config['os'][$os]['over'][1]['text'] = 'Processor Usage'; $config['os'][$os]['over'][2]['graph'] = 'device_mempool'; $config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$os = 'buffalo'; +$config['os'][$os]['text'] = 'Buffalo'; +$config['os'][$os]['type'] = 'storage'; +$config['os'][$os]['icon'] = 'buffalo'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; + // Other Unix-based OSes here please. $os = 'freebsd'; $config['os'][$os]['type'] = 'server'; diff --git a/includes/discovery/os/buffalo.inc.php b/includes/discovery/os/buffalo.inc.php new file mode 100644 index 0000000000..800e2687fb --- /dev/null +++ b/includes/discovery/os/buffalo.inc.php @@ -0,0 +1,17 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysDescr, 'BUFFALO TeraStation')) { + $os = 'buffalo'; + } +} diff --git a/includes/polling/os/buffalo.inc.php b/includes/polling/os/buffalo.inc.php new file mode 100644 index 0000000000..9ae6f0c719 --- /dev/null +++ b/includes/polling/os/buffalo.inc.php @@ -0,0 +1,14 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +$match = explode(" ", $poll_device['sysDescr']); +$hardware = $match[2]; From edd3d61fc8f1c74f3f45046cdaeb3b7be95b329f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Thu, 2 Jun 2016 18:59:43 +0200 Subject: [PATCH 058/133] Fix typo.. --- includes/discovery/functions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index e93099f868..ddd16f0937 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -63,7 +63,7 @@ function discover_new_device($hostname, $device = '', $method = '', $interface = $extra_log = ' (port ' . $int['label'] . ') '; } - log_event('Device $' . $remote_device['hostname'] . " ($ip) $extra_log autodiscovered through $method on " . $device['hostname'], $remote_device_id, 'discovery'); + log_event('Device ' . $remote_device['hostname'] . " ($ip) $extra_log autodiscovered through $method on " . $device['hostname'], $remote_device_id, 'discovery'); } else { log_event("$method discovery of " . $remote_device['hostname'] . " ($ip) failed - check ping and SNMP access", $device['device_id'], 'discovery'); } From 009840bf8a08e4b202b756905306e96628f5de88 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 2 Jun 2016 12:37:03 -0500 Subject: [PATCH 059/133] Store device group relationships in a pivot table. --- html/includes/api_functions.inc.php | 2 +- .../forms/create-device-group.inc.php | 6 +- html/includes/table/devices.inc.php | 2 +- html/pages/devices.inc.php | 2 +- includes/device-groups.inc.php | 162 ++++++++++++++++-- includes/polling/functions.inc.php | 4 + sql-schema/116.sql | 11 ++ 7 files changed, 173 insertions(+), 16 deletions(-) create mode 100644 sql-schema/116.sql diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index e559dfcd9a..75aa966bbf 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -1271,7 +1271,7 @@ function get_devices_by_group() { } else { $group_id = dbFetchCell("SELECT `id` FROM `device_groups` WHERE `name`=?",array($name)); - $devices = GetDevicesFromGroup($group_id); + $devices = GetDevicesFromGroup($group_id, true); $count = count($devices); if (empty($devices)) { $message = 'No devices found in group ' . $name; diff --git a/html/includes/forms/create-device-group.inc.php b/html/includes/forms/create-device-group.inc.php index ef82a16394..03f90ca3f5 100644 --- a/html/includes/forms/create-device-group.inc.php +++ b/html/includes/forms/create-device-group.inc.php @@ -16,6 +16,8 @@ if (is_admin() === false) { die('ERROR: You need to be admin'); } +require_once '../includes/device-groups.inc.php'; + $pattern = $_POST['patterns']; $group_id = $_POST['group_id']; $name = mres($_POST['name']); @@ -38,7 +40,7 @@ if (empty($pattern)) { $update_message = 'ERROR: No group was generated'; } else if (is_numeric($group_id) && $group_id > 0) { - if (dbUpdate(array('pattern' => $pattern, 'name' => $name, 'desc' => $desc), 'device_groups', 'id=?', array($group_id)) >= 0) { + if (EditDeviceGroup($group_id, $name, $desc, $pattern)) { $update_message = "Edited Group: $name: $pattern"; } else { @@ -46,7 +48,7 @@ else if (is_numeric($group_id) && $group_id > 0) { } } else { - if (dbInsert(array('pattern' => $pattern, 'name' => $name, 'desc' => $desc), 'device_groups')) { + if (AddDeviceGroup($name, $desc, $pattern)) { $update_message = "Added Group: $name: $pattern"; } else { diff --git a/html/includes/table/devices.inc.php b/html/includes/table/devices.inc.php index e84c5dfdd9..3ebcf7a44c 100644 --- a/html/includes/table/devices.inc.php +++ b/html/includes/table/devices.inc.php @@ -87,7 +87,7 @@ if (!empty($_POST['group'])) { $sql .= ' AND ( '; foreach (GetDevicesFromGroup($_POST['group']) as $dev) { $sql .= '`devices`.`device_id` = ? OR '; - $param[] = $dev['device_id']; + $param[] = $dev; } $sql = substr($sql, 0, (strlen($sql) - 3)); diff --git a/html/pages/devices.inc.php b/html/pages/devices.inc.php index 6d446d5c1d..61f5d1d15d 100644 --- a/html/pages/devices.inc.php +++ b/html/pages/devices.inc.php @@ -200,7 +200,7 @@ if($format == "graph") { $where .= " AND ( "; foreach( GetDevicesFromGroup($vars['group']) as $dev ) { $where .= "device_id = ? OR "; - $sql_param[] = $dev['device_id']; + $sql_param[] = $dev; } $where = substr($where, 0, strlen($where)-3); $where .= " )"; diff --git a/includes/device-groups.inc.php b/includes/device-groups.inc.php index 3624db490c..c4651e59ee 100644 --- a/includes/device-groups.inc.php +++ b/includes/device-groups.inc.php @@ -18,13 +18,59 @@ /** * Device-Grouping * @author Daniel Preussker - * @copyright 2015 f0o, LibreNMS + * @author Tony Murray + * @copyright 2016 f0o, murrant, LibreNMS * @license GPL * @package LibreNMS * @subpackage Devices */ +/** + * Add a new device group + * @param $pattern + * @param $name + * @param $desc + * @return int|string + */ +function AddDeviceGroup($name, $desc, $pattern) +{ + $group_id = dbInsert(array('name' => $name, 'desc' => $desc, 'pattern' => $pattern), 'device_groups'); + if ($group_id) { + UpdateDeviceGroup($group_id); + } + return $group_id; +} + +/** + * Update a device group + * @param $group_id + * @param $pattern + * @param $name + * @param $desc + * @return bool + */ +function EditDeviceGroup($group_id, $name = null, $desc = null, $pattern = null) +{ + $vars = array(); + if (!is_null($name)) { + $vars['name'] = $name; + } + if (!is_null($desc)) { + $vars['desc'] = $desc; + } + if (!is_null($pattern)) { + $vars['pattern'] = $pattern; + } + + $success = dbUpdate($vars, 'device_groups', 'id=?', array($group_id)) >= 0; + + if ($success) { + UpdateDeviceGroup($group_id); + } + return $success; +} + /** * Generate SQL from Group-Pattern * @param string $pattern Pattern to generate SQL for @@ -77,22 +123,38 @@ function GenGroupSQL($pattern, $search='',$extra=0) { /** - * Get all devices of Group + * Run the group queries again to get fresh list of devices for this group * @param integer $group_id Group-ID * @return string */ -function GetDevicesFromGroup($group_id) { - $pattern = dbFetchCell('SELECT pattern FROM device_groups WHERE id = ?', array($group_id)); +function QueryDevicesFromGroup($group_id) +{ + $pattern = dbFetchCell('SELECT pattern FROM device_groups WHERE id = ?', array($group_id)); $pattern = rtrim($pattern, '&&'); $pattern = rtrim($pattern, '||'); if (!empty($pattern)) { - return dbFetchRows(GenGroupSQL($pattern)); + return dbFetchColumn(GenGroupSQL($pattern)); } return false; -}//end GetDevicesFromGroup() +}//end QueryDevicesFromGroup() +/** + * Get an array of all the device ids belonging to this group_id + * @param $group_id + * @param bool $nested Return an array of arrays containing 'device_id'. (for API compatibility) + * @return array + */ +function GetDevicesFromGroup($group_id, $nested = false) +{ + $query = 'SELECT `device_id` FROM `device_group_device` WHERE `device_group_id`=?'; + if ($nested) { + return dbFetchRows($query, array($group_id)); + } else { + return dbFetchColumn($query, array($group_id)); + } +}//end GetDevicesFromGroup() /** * Get all Device-Groups @@ -104,14 +166,15 @@ function GetDeviceGroups() { }//end GetDeviceGroups() /** - * Get all groups of Device - * @param integer $device Device-ID + * Run the group queries again to get fresh list of groups for this device + * @param integer $device_id Device-ID + * @param int $extra Return extra info about the groups (name, desc, pattern) * @return array */ -function GetGroupsFromDevice($device,$extra=0) { +function QueryGroupsFromDevice($device_id,$extra=0) { $ret = array(); foreach (GetDeviceGroups() as $group) { - if (dbFetchCell(GenGroupSQL($group['pattern'], 'device_id=?',$extra).' LIMIT 1', array($device)) == $device) { + if (dbFetchCell(GenGroupSQL($group['pattern'], 'device_id=?',$extra).' LIMIT 1', array($device_id)) == $device_id) { if ($extra === 0) { $ret[] = $group['id']; } @@ -123,7 +186,24 @@ function GetGroupsFromDevice($device,$extra=0) { return $ret; -}//end GetGroupsFromDevice() +}//end QueryGroupsFromDevice() + +/** + * Get the Device Group IDs of a Device from the database + * @param $device_id + * @param int $extra Return extra info about the groups (name, desc, pattern) + * @return array + */ +function GetGroupsFromDevice($device_id, $extra = 0) +{ + $ret = array(); + if ($extra === 0) { + $ret = dbFetchColumn('SELECT `device_group_id` FROM `device_group_device` WHERE `device_id`=?', array($device_id)); + } else { + $ret = dbFetchRows('SELECT `device_groups`.* FROM `device_group_device` LEFT JOIN `device_groups` ON `device_group_device`.`device_group_id`=`device_groups`.`id` WHERE `device_group_device`.`device_id`=?', array($device_id)); + } + return $ret; +}//end GetGroupsFromDeviceDB() /** * Process Macros @@ -148,3 +228,63 @@ function RunGroupMacros($rule,$x=1) { } return $rule; }//end RunGroupMacros() + + +/** + * Update device-group relationship for the given device id + * @param $device_id + */ +function UpdateGroupsForDevice($device_id) +{ + global $debug; + $debug = true; + $queried_groups = QueryGroupsFromDevice($device_id); + $db_groups = GetGroupsFromDevice($device_id); + + // compare the arrays to get the added and removed groups + $added_groups = array_diff($queried_groups, $db_groups); + $removed_groups = array_diff($db_groups, $queried_groups); + + // insert new groups + $insert = array(); + foreach ($added_groups as $group_id) { + $insert[] = array('device_id' => $device_id, 'device_group_id' => $group_id); + } + if (!empty($insert)) { + dbBulkInsert($insert, 'device_group_device'); + } + + // remove old groups + if (!empty($removed_groups)) { + dbDelete('device_group_device', '`device_id`=? AND `device_group_id` IN (?)', array($device_id, array(implode(',', $removed_groups)))); + } + +} + +/** + * Update the device-group relationship for the given group id + * @param $group_id + */ +function UpdateDeviceGroup($group_id) +{ + $queried_devices = QueryDevicesFromGroup($group_id); + $db_devices = GetDevicesFromGroup($group_id); + + // compare the arrays to get the added and removed devices + $added_devices = array_diff($queried_devices, $db_devices); + $removed_devices = array_diff($db_devices, $queried_devices); + + // insert new devices + $insert = array(); + foreach ($added_devices as $device_id) { + $insert[] = array('device_id' => $device_id, 'device_group_id' => $group_id); + } + if (!empty($insert)) { + dbBulkInsert($insert, 'device_group_device'); + } + + // remove old devices + if (!empty($removed_devices)) { + dbDelete('device_group_device', '`device_group_id`=? AND `device_id` IN (?)', array($group_id, array(implode(',', $removed_devices)))); + } +} diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index e3ad021cac..bb6ef9cc14 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -1,5 +1,6 @@ Date: Thu, 2 Jun 2016 16:22:17 -0500 Subject: [PATCH 060/133] SQL query on one line --- sql-schema/116.sql | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/sql-schema/116.sql b/sql-schema/116.sql index 7d74618a6b..800a240246 100644 --- a/sql-schema/116.sql +++ b/sql-schema/116.sql @@ -1,11 +1,3 @@ ALTER TABLE `devices` CHANGE `device_id` `device_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT; ALTER TABLE `device_groups` CHANGE `id` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT; -CREATE TABLE `device_group_device` ( - `device_group_id` int(10) unsigned NOT NULL, - `device_id` int(10) unsigned NOT NULL, - PRIMARY KEY (`device_group_id`,`device_id`), - KEY `device_group_device_device_group_id_index` (`device_group_id`), - KEY `device_group_device_device_id_index` (`device_id`), - CONSTRAINT `device_group_device_device_group_id_foreign` FOREIGN KEY (`device_group_id`) REFERENCES `device_groups` (`id`) ON DELETE CASCADE, - CONSTRAINT `device_group_device_device_id_foreign` FOREIGN KEY (`device_id`) REFERENCES `devices` (`device_id`) ON DELETE CASCADE -); +CREATE TABLE `device_group_device` (`device_group_id` int(10) unsigned NOT NULL, `device_id` int(10) unsigned NOT NULL, PRIMARY KEY (`device_group_id`,`device_id`), KEY `device_group_device_device_group_id_index` (`device_group_id`), KEY `device_group_device_device_id_index` (`device_id`), CONSTRAINT `device_group_device_device_group_id_foreign` FOREIGN KEY (`device_group_id`) REFERENCES `device_groups` (`id`) ON DELETE CASCADE, CONSTRAINT `device_group_device_device_id_foreign` FOREIGN KEY (`device_id`) REFERENCES `devices` (`device_id`) ON DELETE CASCADE); From 9b0bd4c15a0be253410de25aa211268b763c9d3c Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 10:56:42 -0500 Subject: [PATCH 061/133] Rename $ds to $ldap_connection $ds is a global variable, there are many name collisions in the code. Rename it to avoid the collisions. --- .../authentication/active_directory.inc.php | 58 +++++++++---------- .../authentication/ad-authorization.inc.php | 40 ++++++------- .../authentication/ldap-authorization.inc.php | 32 +++++----- html/includes/authentication/ldap.inc.php | 44 +++++++------- 4 files changed, 87 insertions(+), 87 deletions(-) diff --git a/html/includes/authentication/active_directory.inc.php b/html/includes/authentication/active_directory.inc.php index d936b44c8d..e6dda6b7e0 100644 --- a/html/includes/authentication/active_directory.inc.php +++ b/html/includes/authentication/active_directory.inc.php @@ -8,25 +8,25 @@ if (isset($config['auth_ad_check_certificates']) && putenv('LDAPTLS_REQCERT=never'); }; -$ds = @ldap_connect($config['auth_ad_url']); +$ldap_connection = @ldap_connect($config['auth_ad_url']); // disable referrals and force ldap version to 3 -ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); -ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); +ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); +ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3); function authenticate($username, $password) { - global $config, $ds; + global $config, $ldap_connection; - if ($ds) { + if ($ldap_connection) { // bind with sAMAccountName instead of full LDAP DN - if ($username && ldap_bind($ds, "{$username}@{$config['auth_ad_domain']}", $password)) { + if ($username && ldap_bind($ldap_connection, "{$username}@{$config['auth_ad_domain']}", $password)) { // group membership in one of the configured groups is required if (isset($config['auth_ad_require_groupmembership']) && $config['auth_ad_require_groupmembership'] > 0) { - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", array('memberOf')); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); $user_authenticated = 0; @@ -53,7 +53,7 @@ function authenticate($username, $password) { } } else { - echo ldap_error($ds); + echo ldap_error($ldap_connection); } return 0; @@ -108,11 +108,11 @@ function user_exists_in_db($username) { } function user_exists($username) { - global $config, $ds; + global $config, $ldap_connection; - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})",array('samaccountname')); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { @@ -124,14 +124,14 @@ function user_exists($username) { function get_userlevel($username) { - global $config, $ds; + global $config, $ldap_connection; $userlevel = 0; // Find all defined groups $username is in - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", array('memberOf')); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); // Loop the list and find the highest level foreach ($entries[0]['memberof'] as $entry) { @@ -146,12 +146,12 @@ function get_userlevel($username) { function get_userid($username) { - global $config, $ds; + global $config, $ldap_connection; $attributes = array('objectsid'); - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", $attributes); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { return preg_replace('/.*-(\d+)$/','$1',sid_from_ldap($entries[0]['objectsid'][0])); @@ -172,7 +172,7 @@ function deluser($username) { function get_userlist() { - global $config, $ds; + global $config, $ldap_connection; $userlist = array(); $userhash = array(); @@ -180,14 +180,14 @@ function get_userlist() { foreach($ldap_groups as $ldap_group) { $group_cn = get_cn($ldap_group); - $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$group_cn})", array('member')); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(cn={$group_cn})", array('member')); + $entries = ldap_get_entries($ldap_connection, $search); foreach($entries[0]['member'] as $member) { $member_cn = get_cn($member); - $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$member_cn})", + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(cn={$member_cn})", array('sAMAccountname', 'displayName', 'objectSID', 'mail')); - $results = ldap_get_entries($ds, $search); + $results = ldap_get_entries($ldap_connection, $search); foreach($results as $result) { if(isset($result['samaccountname'][0])) { $userid = preg_replace('/.*-(\d+)$/','$1', @@ -235,12 +235,12 @@ function update_user($user_id, $realname, $level, $can_modify_passwd, $email) { function get_fullname($username) { - global $config, $ds; + global $config, $ldap_connection; $attributes = array('name'); - $result = ldap_search($ds, $config['auth_ad_base_dn'], + $result = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", $attributes); - $entries = ldap_get_entries($ds, $result); + $entries = ldap_get_entries($ldap_connection, $result); if ($entries['count'] > 0) { $membername = $entries[0]['name'][0]; } @@ -279,13 +279,13 @@ function get_group_list() { } function get_dn($samaccountname) { - global $config, $ds; + global $config, $ldap_connection; $attributes = array('dn'); - $result = ldap_search($ds, $config['auth_ad_base_dn'], + $result = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$samaccountname})", $attributes); - $entries = ldap_get_entries($ds, $result); + $entries = ldap_get_entries($ldap_connection, $result); if ($entries['count'] > 0) { return $entries[0]['dn']; } diff --git a/html/includes/authentication/ad-authorization.inc.php b/html/includes/authentication/ad-authorization.inc.php index 2f30129984..750c3f62dd 100644 --- a/html/includes/authentication/ad-authorization.inc.php +++ b/html/includes/authentication/ad-authorization.inc.php @@ -104,14 +104,14 @@ function user_exists_in_db($username) { } function user_exists($username) { - global $config, $ds; + global $config, $ldap_connection; if (auth_ldap_session_cache_get ('user_exists')) return 1; - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname=${username})",array('samaccountname')); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { /* @@ -127,7 +127,7 @@ function user_exists($username) { function get_userlevel($username) { - global $config, $ds; + global $config, $ldap_connection; $userlevel = auth_ldap_session_cache_get ('userlevel'); if ($userlevel) { @@ -138,9 +138,9 @@ function get_userlevel($username) { } // Find all defined groups $username is in - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", array('memberOf')); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); // Loop the list and find the highest level foreach ($entries[0]['memberof'] as $entry) { @@ -156,7 +156,7 @@ function get_userlevel($username) { function get_userid($username) { - global $config, $ds; + global $config, $ldap_connection; $user_id = auth_ldap_session_cache_get ('userid'); if (isset ($user_id)) { @@ -167,9 +167,9 @@ function get_userid($username) { } $attributes = array('objectsid'); - $search = ldap_search($ds, $config['auth_ad_base_dn'], + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", $attributes); - $entries = ldap_get_entries($ds, $search); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { $user_id = preg_replace('/.*-(\d+)$/','$1',sid_from_ldap($entries[0]['objectsid'][0])); @@ -191,7 +191,7 @@ function deluser($username) { function get_userlist() { - global $config, $ds; + global $config, $ldap_connection; $userlist = array(); $userhash = array(); @@ -199,14 +199,14 @@ function get_userlist() { foreach($ldap_groups as $ldap_group) { $group_cn = get_cn($ldap_group); - $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$group_cn})", array('member')); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(cn={$group_cn})", array('member')); + $entries = ldap_get_entries($ldap_connection, $search); foreach($entries[0]['member'] as $member) { $member_cn = get_cn($member); - $search = ldap_search($ds, $config['auth_ad_base_dn'], "(cn={$member_cn})", + $search = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(cn={$member_cn})", array('sAMAccountname', 'displayName', 'objectSID', 'mail')); - $results = ldap_get_entries($ds, $search); + $results = ldap_get_entries($ldap_connection, $search); foreach($results as $result) { if(isset($result['samaccountname'][0])) { $userid = preg_replace('/.*-(\d+)$/','$1', @@ -254,12 +254,12 @@ function update_user($user_id, $realname, $level, $can_modify_passwd, $email) { function get_fullname($username) { - global $config, $ds; + global $config, $ldap_connection; $attributes = array('name'); - $result = ldap_search($ds, $config['auth_ad_base_dn'], + $result = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$username})", $attributes); - $entries = ldap_get_entries($ds, $result); + $entries = ldap_get_entries($ldap_connection, $result); if ($entries['count'] > 0) { $membername = $entries[0]['name'][0]; } @@ -298,13 +298,13 @@ function get_group_list() { } function get_dn($samaccountname) { - global $config, $ds; + global $config, $ldap_connection; $attributes = array('dn'); - $result = ldap_search($ds, $config['auth_ad_base_dn'], + $result = ldap_search($ldap_connection, $config['auth_ad_base_dn'], "(samaccountname={$samaccountname})", $attributes); - $entries = ldap_get_entries($ds, $result); + $entries = ldap_get_entries($ldap_connection, $result); if ($entries['count'] > 0) { return $entries[0]['dn']; } diff --git a/html/includes/authentication/ldap-authorization.inc.php b/html/includes/authentication/ldap-authorization.inc.php index 5b68fdf82f..afda92e299 100644 --- a/html/includes/authentication/ldap-authorization.inc.php +++ b/html/includes/authentication/ldap-authorization.inc.php @@ -112,14 +112,14 @@ function adduser ($username, $password, $level, $email = '', $realname = '', $ca function user_exists ($username) { - global $config, $ds; + global $config, $ldap_connection; if (auth_ldap_session_cache_get ('user_exists')) return 1; $filter = '(' . $config['auth_ldap_prefix'] . $username . ')'; - $search = ldap_search ($ds, trim ($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries ($ds, $search); + $search = ldap_search ($ldap_connection, trim ($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries ($ldap_connection, $search); if ($entries['count']) { /* * Cache positiv result as this will result in more queries which we @@ -139,7 +139,7 @@ function user_exists ($username) { function get_userlevel ($username) { - global $config, $ds; + global $config, $ldap_connection; $userlevel = auth_ldap_session_cache_get ('userlevel'); if ($userlevel) { @@ -150,8 +150,8 @@ function get_userlevel ($username) { // Find all defined groups $username is in $filter = '(&(|(cn=' . join (')(cn=', array_keys ($config['auth_ldap_groups'])) . '))(' . $config['auth_ldap_groupmemberattr'] .'=' . get_membername ($username) . '))'; - $search = ldap_search ($ds, $config['auth_ldap_groupbase'], $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search ($ldap_connection, $config['auth_ldap_groupbase'], $filter); + $entries = ldap_get_entries($ldap_connection, $search); // Loop the list and find the highest level foreach ($entries as $entry) { @@ -168,7 +168,7 @@ function get_userlevel ($username) { function get_userid ($username) { - global $config, $ds; + global $config, $ldap_connection; $user_id = auth_ldap_session_cache_get ('userid'); if (isset ($user_id)) { @@ -178,8 +178,8 @@ function get_userid ($username) { } $filter = '(' . $config['auth_ldap_prefix'] . $username . ')'; - $search = ldap_search ($ds, trim ($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries ($ds, $search); + $search = ldap_search ($ldap_connection, trim ($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries ($ldap_connection, $search); if ($entries['count']) { $user_id = $entries[0]['uidnumber'][0]; @@ -197,13 +197,13 @@ function deluser ($username) { function get_userlist () { - global $config, $ds; + global $config, $ldap_connection; $userlist = array (); $filter = '(' . $config['auth_ldap_prefix'] . '*)'; - $search = ldap_search ($ds, trim ($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries ($ds, $search); + $search = ldap_search ($ldap_connection, trim ($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries ($ldap_connection, $search); if ($entries['count']) { foreach ($entries as $entry) { @@ -214,7 +214,7 @@ function get_userlist () { $ldap_groups = get_group_list (); foreach ($ldap_groups as $ldap_group) { $ldap_comparison = ldap_compare( - $ds, + $ldap_connection, $ldap_group, $config['auth_ldap_groupmemberattr'], get_membername($username) @@ -256,14 +256,14 @@ function update_user ($user_id, $realname, $level, $can_modify_passwd, $email) { function get_membername ($username) { - global $config, $ds; + global $config, $ldap_connection; if ($config['auth_ldap_groupmembertype'] == 'fulldn') { $membername = $config['auth_ldap_prefix'] . $username . $config['auth_ldap_suffix']; } elseif ($config['auth_ldap_groupmembertype'] == 'puredn') { $filter = '(' . $config['auth_ldap_attr']['uid'] . '=' . $username . ')'; - $search = ldap_search($ds, $config['auth_ldap_groupbase'], $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, $config['auth_ldap_groupbase'], $filter); + $entries = ldap_get_entries($ldap_connection, $search); $membername = $entries[0]['dn']; } else { diff --git a/html/includes/authentication/ldap.inc.php b/html/includes/authentication/ldap.inc.php index a9679072fd..4948b63796 100644 --- a/html/includes/authentication/ldap.inc.php +++ b/html/includes/authentication/ldap.inc.php @@ -12,14 +12,14 @@ if ($config['auth_ldap_starttls'] && ($config['auth_ldap_starttls'] == 'optional function authenticate($username, $password) { - global $config, $ds; + global $config, $ldap_connection; - if ($username && $ds) { + if ($username && $ldap_connection) { if ($config['auth_ldap_version']) { - ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $config['auth_ldap_version']); + ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, $config['auth_ldap_version']); } - if (ldap_bind($ds, $config['auth_ldap_prefix'].$username.$config['auth_ldap_suffix'], $password)) { + if (ldap_bind($ldap_connection, $config['auth_ldap_prefix'].$username.$config['auth_ldap_suffix'], $password)) { if (!$config['auth_ldap_group']) { return 1; } @@ -27,7 +27,7 @@ function authenticate($username, $password) { $ldap_groups = get_group_list(); foreach ($ldap_groups as $ldap_group) { $ldap_comparison = ldap_compare( - $ds, + $ldap_connection, $ldap_group, $config['auth_ldap_groupmemberattr'], get_membername($username) @@ -39,7 +39,7 @@ function authenticate($username, $password) { } } else { - echo ldap_error($ds); + echo ldap_error($ldap_connection); } } else { @@ -83,11 +83,11 @@ function adduser($username, $password, $level, $email='', $realname='', $can_mod function user_exists($username) { - global $config, $ds; + global $config, $ldap_connection; $filter = '('.$config['auth_ldap_prefix'].$username.')'; - $search = ldap_search($ds, trim($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, trim($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { return 1; } @@ -98,14 +98,14 @@ function user_exists($username) { function get_userlevel($username) { - global $config, $ds; + global $config, $ldap_connection; $userlevel = 0; // Find all defined groups $username is in $filter = '(&(|(cn='.join(')(cn=', array_keys($config['auth_ldap_groups'])).'))('.$config['auth_ldap_groupmemberattr'].'='.get_membername($username).'))'; - $search = ldap_search($ds, $config['auth_ldap_groupbase'], $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, $config['auth_ldap_groupbase'], $filter); + $entries = ldap_get_entries($ldap_connection, $search); // Loop the list and find the highest level foreach ($entries as $entry) { @@ -121,11 +121,11 @@ function get_userlevel($username) { function get_userid($username) { - global $config, $ds; + global $config, $ldap_connection; $filter = '('.$config['auth_ldap_prefix'].$username.')'; - $search = ldap_search($ds, trim($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, trim($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { return $entries[0]['uidnumber'][0]; @@ -144,13 +144,13 @@ function deluser($username) { function get_userlist() { - global $config, $ds; + global $config, $ldap_connection; $userlist = array(); $filter = '('.$config['auth_ldap_prefix'].'*)'; - $search = ldap_search($ds, trim($config['auth_ldap_suffix'], ','), $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, trim($config['auth_ldap_suffix'], ','), $filter); + $entries = ldap_get_entries($ldap_connection, $search); if ($entries['count']) { foreach ($entries as $entry) { @@ -161,7 +161,7 @@ function get_userlist() { $ldap_groups = get_group_list(); foreach ($ldap_groups as $ldap_group) { $ldap_comparison = ldap_compare( - $ds, + $ldap_connection, $ldap_group, $config['auth_ldap_groupmemberattr'], get_membername($username) @@ -205,14 +205,14 @@ function update_user($user_id, $realname, $level, $can_modify_passwd, $email) { function get_membername($username) { - global $config, $ds; + global $config, $ldap_connection; if ($config['auth_ldap_groupmembertype'] == 'fulldn') { $membername = $config['auth_ldap_prefix'].$username.$config['auth_ldap_suffix']; } elseif ($config['auth_ldap_groupmembertype'] == 'puredn') { $filter = '('.$config['auth_ldap_attr']['uid'].'='.$username.')'; - $search = ldap_search($ds, $config['auth_ldap_groupbase'], $filter); - $entries = ldap_get_entries($ds, $search); + $search = ldap_search($ldap_connection, $config['auth_ldap_groupbase'], $filter); + $entries = ldap_get_entries($ldap_connection, $search); $membername = $entries[0]['dn']; } else { From dcffc8381aef4d6ea62d0a8768c06e84e878bb93 Mon Sep 17 00:00:00 2001 From: Brandon Boudrias Date: Fri, 3 Jun 2016 10:25:56 -0700 Subject: [PATCH 062/133] adding name to authors and signing contributors agreement I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 83644c51ed..43d0bff1bc 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -104,6 +104,7 @@ LibreNMS contributors: - Robert Verspuy (exarv) - Peter Tkatchenko (Peter2121) - Marc Runkel (mrunkel) +- Brandon Boudrias (brandune) [1]: http://observium.org/ "Observium web site" Observium was written by: From 3b4964e13ca33792e46685132f077ab34c031ec1 Mon Sep 17 00:00:00 2001 From: Brandon Boudrias Date: Tue, 31 May 2016 15:17:11 -0700 Subject: [PATCH 063/133] create common method for generating type_wheres --- html/includes/api_functions.inc.php | 11 +---- html/includes/common/generic-graph.inc.php | 34 +++---------- html/includes/functions.inc.php | 55 ++++++++++++++++++++++ html/pages/iftype.inc.php | 24 +--------- 4 files changed, 65 insertions(+), 59 deletions(-) diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index e559dfcd9a..ab3ad2c248 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -495,19 +495,10 @@ function get_graph_by_portgroup() { $vars['width'] = $_GET['width'] ?: 1075; $vars['height'] = $_GET['height'] ?: 300; $auth = '1'; - $type_where = ' ('; - $or = ''; - $type_param = array(); - foreach (explode(',', $group) as $type) { - $type_where .= " $or `port_descr_type` = ?"; - $or = 'OR'; - $type_param[] = $type; - } - $type_where .= ') '; + $ports = get_ports_from_type(explode(',', $group)); $if_list = ''; $seperator = ''; - $ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); foreach ($ports as $port) { $if_list .= $seperator.$port['port_id']; $seperator = ','; diff --git a/html/includes/common/generic-graph.inc.php b/html/includes/common/generic-graph.inc.php index 022fb0585c..91cb64f8d1 100644 --- a/html/includes/common/generic-graph.inc.php +++ b/html/includes/common/generic-graph.inc.php @@ -393,39 +393,19 @@ else { elseif ($type == 'munin') { $param = 'device='.$widget_settings['graph_'.$type]['device_id'].'&plugin='.$widget_settings['graph_'.$type]['name']; } - elseif ($type == 'transit' || $type == 'peering' || $type == 'core') { - $type_where = ' ('; - if (is_array($config[$type.'_descr']) === false) { - $config[$type.'_descr'] = array($config[$type.'_descr']); + elseif ($type == 'transit' || $type == 'peering' || $type == 'core' || $type == 'custom') { + if ( $type == 'custom' ) { + $type = $widget_settings['graph_custom']; } - foreach ($config[$type.'_descr'] as $additional_type) { - if (!empty($additional_type)) { - $type_where .= " $or `port_descr_type` = ?"; - $or = 'OR'; - $type_param[] = $additional_type; - } - } - $type_where .= " $or `port_descr_type` = ?"; - $or = 'OR'; - $type_param[] = $type; - $type_where .= ') '; - foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE $type_where ORDER BY ifAlias", $type_param) as $port) { + + $ports = get_ports_from_type($type); + foreach ($ports as $port) { $tmp[] = $port['port_id']; } $param = 'id='.implode(',',$tmp); $widget_settings['graph_type'] = 'multiport_bits_separate'; if (empty($widget_settings['title'])) { - $widget_settings['title'] = 'Overall '.ucfirst($type).' Bits ('.$widget_settings['graph_range'].')'; - } - } - elseif ($type == 'custom') { - foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE `port_descr_type` = ? ORDER BY ifAlias", array($widget_settings['graph_custom'])) as $port) { - $tmp[] = $port['port_id']; - } - $param = 'id='.implode(',',$tmp); - $widget_settings['graph_type'] = 'multiport_bits_separate'; - if (empty($widget_settings['title'])) { - $widget_settings['title'] = 'Overall '.ucfirst(htmlspecialchars($widget_settings['graph_custom'])).' Bits ('.$widget_settings['graph_range'].')'; + $widget_settings['title'] = 'Overall '.ucfirst(htmlspecialchars($type)).' Bits ('.$widget_settings['graph_range'].')'; } } else { diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index 8952853e7f..046fb3a859 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -1283,3 +1283,58 @@ function get_ripe_api_whois_data_json($ripe_data_param, $ripe_query_param) { return json_decode(file_get_contents($ripe_whois_url) , true); }//end get_ripe_api_whois_data_json() +/** + * Return the rows from 'ports' for all ports of a certain type as parsed by port_descr_parser. + * One or an array of strings can be provided as an argument; if an array is passed, all ports matching + * any of the types in the array are returned. + * @param $types mixed String or strings matching 'port_descr_type's. + * @return array Rows from the ports table for matching ports. + */ +function get_ports_from_type($given_types) { + global $config; + + # Make the arg an array if it isn't, so subsequent steps only have to handle arrays. + if(!is_array($given_types)) { + $given_types = array($given_types); + } + + # Check the config for a '_descr' entry for each argument. This is how a 'custom_descr' entry can + # be key/valued to some other string that's actually searched for in the DB. Merge or append the + # configured value if it's an array or a string. Or append the argument itself if there's no matching + # entry in config. + $search_types = array(); + foreach($given_types as $type) { + if(isset($config[$type.'_descr']) === true) { + if (is_array($config[$type.'_descr']) === true) { + $search_types = array_merge($search_types, $config[$type.'_descr']); + } + else { + $search_types[] = $config[$type.'_descr']; + } + } + else { + $search_types[] = $type; + } + } + + # Using the full list of strings to search the DB for, build the 'where' portion of a query that + # compares 'port_descr_type' with entry in the list. Also, since '@' is the convential wildcard, + # replace it with '%' so it functions as a wildcard in the SQL query. + $type_where = ' ('; + $or = ''; + $type_param = array(); + + foreach($search_types as $type) { + if (!empty($type)) { + $type = strtr($type, '@', '%'); + $type_where .= " $or `port_descr_type` LIKE ?"; + $or = 'OR'; + $type_param[] = $type; + } + } + $type_where .= ') '; + + # Run the query with the generated 'where' and necessary parameters, and send it back. + $ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); + return $ports; +} diff --git a/html/pages/iftype.inc.php b/html/pages/iftype.inc.php index 266b98fb68..6c8495a054 100644 --- a/html/pages/iftype.inc.php +++ b/html/pages/iftype.inc.php @@ -16,27 +16,8 @@ else { $bg = '#ffffff'; } -$type_where = ' ('; -foreach (explode(',', $vars['type']) as $type) { - if (is_array($config[$type.'_descr']) === false) { - $config[$type.'_descr'] = array($config[$type.'_descr']); - } - - foreach ($config[$type.'_descr'] as $additional_type) { - if (!empty($additional_type)) { - $type_where .= " $or `port_descr_type` = ?"; - $or = 'OR'; - $type_param[] = $additional_type; - } - } - - $type_where .= " $or `port_descr_type` = ?"; - $or = 'OR'; - $type_param[] = $type; -} - -$type_where .= ') '; -$ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); +$types_array = explode(',', $vars['type']); +$ports = get_ports_from_type($types_array); foreach ($ports as $port) { $if_list .= $seperator.$port['port_id']; @@ -45,7 +26,6 @@ foreach ($ports as $port) { unset($seperator); -$types_array = explode(',', $vars['type']); for ($i = 0; $i < count($types_array); $i++) { $types_array[$i] = ucfirst($types_array[$i]); From 5117f5330adf907b501d2108ecf1f23793239ba7 Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Fri, 3 Jun 2016 20:14:41 +0100 Subject: [PATCH 064/133] Update Ubuntu-image.md --- doc/Installation/Ubuntu-image.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/Installation/Ubuntu-image.md b/doc/Installation/Ubuntu-image.md index bc20c91d1e..cf087370d5 100644 --- a/doc/Installation/Ubuntu-image.md +++ b/doc/Installation/Ubuntu-image.md @@ -47,17 +47,21 @@ Any issues with these images should be reported via [Github](https://github.com/ #### Credentials +> Please note the second character of the SSH password is a CAPITAL EYE + - SSH - username: librenms - - password: CIne3fwdfds + - password: `CIne3fwdfds` + +> Please note the second character of the SSH password is a CAPITAL EYE - MySQL/MariaDB - username: root - - password: NIfceu3fqfd + - password: `NIfceu3fqfd` - username: librenms - - password: D42nf23rewD + - password: `D42nf23rewD` - WebUI - username: librenms - - password: D32fwefwef + - password: `D32fwefwef` From 2ebdb3c083891ebf3b1d21349ffd3d4af50fbb95 Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Fri, 3 Jun 2016 20:19:53 +0100 Subject: [PATCH 065/133] Update CentOS-image.md --- doc/Installation/CentOS-image.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/Installation/CentOS-image.md b/doc/Installation/CentOS-image.md index cc55e1b370..03a5dc6a2b 100644 --- a/doc/Installation/CentOS-image.md +++ b/doc/Installation/CentOS-image.md @@ -46,17 +46,21 @@ Any issues with these images should be reported via [Github](https://github.com/ #### Credentials +> Please note the second character of the SSH password is a CAPITAL EYE + - SSH - username: librenms - - password: CIne3fwdfds + - password: `CIne3fwdfds` + +> Please note the second character of the SSH password is a CAPITAL EYE - MySQL/MariaDB - username: root - - password: NIfceu3fqfd + - password: `NIfceu3fqfd` - username: librenms - - password: D42nf23rewD + - password: `D42nf23rewD` - WebUI - username: librenms - - password: D32fwefwef + - password: `D32fwefwef` From ac63e0a6befe182a4e32a5521ad54eb6cae91363 Mon Sep 17 00:00:00 2001 From: laf Date: Fri, 3 Jun 2016 20:14:32 +0000 Subject: [PATCH 066/133] Added detection for Samsung C series printers --- includes/discovery/os/samsungprinter.inc.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/includes/discovery/os/samsungprinter.inc.php b/includes/discovery/os/samsungprinter.inc.php index b8dc041323..553f96019f 100644 --- a/includes/discovery/os/samsungprinter.inc.php +++ b/includes/discovery/os/samsungprinter.inc.php @@ -1,6 +1,8 @@ Date: Wed, 1 Jun 2016 15:28:34 -0700 Subject: [PATCH 067/133] giving graph widgets option to manually specify port type --- html/includes/common/generic-graph.inc.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/html/includes/common/generic-graph.inc.php b/html/includes/common/generic-graph.inc.php index 91cb64f8d1..bd594b5ec7 100644 --- a/html/includes/common/generic-graph.inc.php +++ b/html/includes/common/generic-graph.inc.php @@ -74,6 +74,7 @@ if( defined('show_settings') || empty($widget_settings) ) { + @@ -150,6 +151,14 @@ if( defined('show_settings') || empty($widget_settings) ) { $common_output[] = '
+
+
+ +
+
+ '; + $common_output[] = '
+
@@ -393,9 +402,10 @@ else { elseif ($type == 'munin') { $param = 'device='.$widget_settings['graph_'.$type]['device_id'].'&plugin='.$widget_settings['graph_'.$type]['name']; } - elseif ($type == 'transit' || $type == 'peering' || $type == 'core' || $type == 'custom') { - if ( $type == 'custom' ) { - $type = $widget_settings['graph_custom']; + elseif ($type == 'transit' || $type == 'peering' || $type == 'core' || $type == 'custom' || $type == 'manual') { + if ( $type == 'custom' || $type == 'manual') { + $type = $widget_settings['graph_'.$type]; + $type = explode(',', $type); } $ports = get_ports_from_type($type); From a68687de5ee49a9c1de6d0a988313d9c07f9a451 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 21:04:56 -0500 Subject: [PATCH 068/133] Alphabetize the apps list --- html/pages/device/edit/apps.inc.php | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/html/pages/device/edit/apps.inc.php b/html/pages/device/edit/apps.inc.php index 03b0ca5f48..cac2468608 100644 --- a/html/pages/device/edit/apps.inc.php +++ b/html/pages/device/edit/apps.inc.php @@ -2,14 +2,10 @@ Date: Fri, 3 Jun 2016 21:28:56 -0500 Subject: [PATCH 069/133] Initial support for RoomAlert3E Doesn't support switch yet as, avtech_add_sensor doesn't handle state type sensors. --- .../sensors/temperatures/avtech.inc.php | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/includes/discovery/sensors/temperatures/avtech.inc.php b/includes/discovery/sensors/temperatures/avtech.inc.php index 956fed49a4..7bc85361f5 100644 --- a/includes/discovery/sensors/temperatures/avtech.inc.php +++ b/includes/discovery/sensors/temperatures/avtech.inc.php @@ -28,6 +28,32 @@ if ($device['os'] == 'avtech') { ); avtech_add_sensor($device, $sen2); } + if (strpos($device['sysObjectID'], '.20916.1.9') !== false) { + // RoomAlert 3E + $device_oid = '.1.3.6.1.4.1.20916.1.9.'; + + $internal = array( + 'id' => 0, + 'oid' => $device_oid.'1.1.1.1.0', + 'descr_oid' => $device_oid.'1.1.1.3.0', + ); + avtech_add_sensor($device, $internal); + + $sen1 = array( + 'id' => 1, + 'oid' => $device_oid.'1.1.2.1.0', + 'descr_oid' => $device_oid.'1.1.2.6.0', + ); + avtech_add_sensor($device, $sen1); + +// $switch = array( +// 'id' => 2, +// 'type' => 'state', +// 'oid' => $device_oid.'1.2.1.0', +// 'descr_oid' => $device_oid.'1.2.2.0', +// ); +// avtech_add_sensor($device, $switch); + } elseif (strpos($device['sysObjectID'], '.20916.1.1') !== false) { // TemPageR 4E $device_oid = '.1.3.6.1.4.1.20916.1.1.'; From b54f449ed8feaf8f3a6ef3b393b1b3266fc683ee Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 21:44:21 -0500 Subject: [PATCH 070/133] Add Avtech switch support --- includes/discovery/functions.inc.php | 29 +++++++++++++++++++ .../discovery/sensors/states/avtech.inc.php | 18 ++++++++++++ .../sensors/temperatures/avtech.inc.php | 10 +------ 3 files changed, 48 insertions(+), 9 deletions(-) create mode 100644 includes/discovery/sensors/states/avtech.inc.php diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index ddd16f0937..25dd9b618a 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -770,6 +770,30 @@ function avtech_add_sensor($device, $sensor) { $type = $sensor['type'] ? $sensor['type'] : 'temperature'; d_echo('Sensor type: ' . $type . "\n"); + if ($type == 'switch') { + // set up state sensor + $type = 'state'; + $state_name = 'avtachSwitchState'; + $state_index_id = create_state_index($state_name); + + //Create State Translation + if ($state_index_id) { + $states = array( + array($state_index_id,'off',0,0,-1), + array($state_index_id,'on',0,1,0), + ); + foreach($states as $value){ + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + } // set the description if ($sensor['descr_oid']) { @@ -814,6 +838,11 @@ function avtech_add_sensor($device, $sensor) { // add the sensor discover_sensor($valid['sensor'], $type, $device, $oid, $id, $device['os'], $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); + + if ($type == 'state') { + create_sensor_to_state_index($device, $state_name, $index); + } + return true; } diff --git a/includes/discovery/sensors/states/avtech.inc.php b/includes/discovery/sensors/states/avtech.inc.php new file mode 100644 index 0000000000..3dd0d1daa1 --- /dev/null +++ b/includes/discovery/sensors/states/avtech.inc.php @@ -0,0 +1,18 @@ + 2, + 'type' => 'switch', + 'oid' => $device_oid.'1.2.1.0', + 'descr_oid' => $device_oid.'1.2.2.0', + ); + avtech_add_sensor($device, $switch); + } +} diff --git a/includes/discovery/sensors/temperatures/avtech.inc.php b/includes/discovery/sensors/temperatures/avtech.inc.php index 7bc85361f5..f093d104fa 100644 --- a/includes/discovery/sensors/temperatures/avtech.inc.php +++ b/includes/discovery/sensors/temperatures/avtech.inc.php @@ -1,6 +1,6 @@ $device_oid.'1.1.2.6.0', ); avtech_add_sensor($device, $sen1); - -// $switch = array( -// 'id' => 2, -// 'type' => 'state', -// 'oid' => $device_oid.'1.2.1.0', -// 'descr_oid' => $device_oid.'1.2.2.0', -// ); -// avtech_add_sensor($device, $switch); } elseif (strpos($device['sysObjectID'], '.20916.1.1') !== false) { // TemPageR 4E From f4cfd61aef1b21caf2d93b9d2968c9a5391d6d7d Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 21:48:24 -0500 Subject: [PATCH 071/133] Capitalize state descriptions --- includes/discovery/functions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 25dd9b618a..7813728ccb 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -779,8 +779,8 @@ function avtech_add_sensor($device, $sensor) { //Create State Translation if ($state_index_id) { $states = array( - array($state_index_id,'off',0,0,-1), - array($state_index_id,'on',0,1,0), + array($state_index_id,'Off',0,0,-1), + array($state_index_id,'On',0,1,0), ); foreach($states as $value){ $insert = array( From fcd7ed6ddaaedffc12d3ba7a646a96e3d8f4adf3 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 21:51:17 -0500 Subject: [PATCH 072/133] if -> elseif --- includes/discovery/sensors/temperatures/avtech.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/discovery/sensors/temperatures/avtech.inc.php b/includes/discovery/sensors/temperatures/avtech.inc.php index f093d104fa..1af040ee9d 100644 --- a/includes/discovery/sensors/temperatures/avtech.inc.php +++ b/includes/discovery/sensors/temperatures/avtech.inc.php @@ -28,7 +28,7 @@ if ($device['os'] == 'avtech') { ); avtech_add_sensor($device, $sen2); } - if (strpos($device['sysObjectID'], '.20916.1.9') !== false) { + elseif (strpos($device['sysObjectID'], '.20916.1.9') !== false) { // RoomAlert 3E $device_oid = '.1.3.6.1.4.1.20916.1.9.'; From bf471698ef54397907376c4896cd0b139ddbebfa Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Fri, 3 Jun 2016 22:16:10 -0500 Subject: [PATCH 073/133] Change the rest of the $ds variables to $ldap_connection --- .../authentication/ad-authorization.inc.php | 18 +++++++++--------- .../authentication/ldap-authorization.inc.php | 12 ++++++------ html/includes/authentication/ldap.inc.php | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/html/includes/authentication/ad-authorization.inc.php b/html/includes/authentication/ad-authorization.inc.php index 750c3f62dd..010a3e2b6c 100644 --- a/html/includes/authentication/ad-authorization.inc.php +++ b/html/includes/authentication/ad-authorization.inc.php @@ -11,27 +11,27 @@ if (isset($config['auth_ad_check_certificates']) && }; // Set up connection to LDAP server -$ds = @ldap_connect($config['auth_ad_url']); -if (! $ds) { - echo '

Fatal error while connecting to AD url ' . $config['auth_ad_url'] . ': ' . ldap_error($ds) . '

'; +$ldap_connection = @ldap_connect($config['auth_ad_url']); +if (! $ldap_connection) { + echo '

Fatal error while connecting to AD url ' . $config['auth_ad_url'] . ': ' . ldap_error($ldap_connection) . '

'; exit; } // disable referrals and force ldap version to 3 -ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); -ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); +ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); +ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3); // Bind to AD if (isset($config['auth_ad_binduser']) && isset($config['auth_ad_bindpassword'])) { // With specified bind user - if (! ldap_bind($ds, "${config['auth_ad_binduser']}@${config['auth_ad_domain']}", "${config['auth_ad_bindpassword']}")) { - echo ldap_error($ds); + if (! ldap_bind($ldap_connection, "${config['auth_ad_binduser']}@${config['auth_ad_domain']}", "${config['auth_ad_bindpassword']}")) { + echo ldap_error($ldap_connection); } } else { // Anonymous - if (! ldap_bind($ds)) { - echo ldap_error($ds); + if (! ldap_bind($ldap_connection)) { + echo ldap_error($ldap_connection); } } diff --git a/html/includes/authentication/ldap-authorization.inc.php b/html/includes/authentication/ldap-authorization.inc.php index afda92e299..6c0145c4ff 100644 --- a/html/includes/authentication/ldap-authorization.inc.php +++ b/html/includes/authentication/ldap-authorization.inc.php @@ -45,19 +45,19 @@ if (! isset ($_SESSION['username'])) { /** * Set up connection to LDAP server */ -$ds = @ldap_connect ($config['auth_ldap_server'], $config['auth_ldap_port']); -if (! $ds) { - echo '

Fatal error while connecting to LDAP server ' . $config['auth_ldap_server'] . ':' . $config['auth_ldap_port'] . ': ' . ldap_error($ds) . '

'; +$ldap_connection = @ldap_connect ($config['auth_ldap_server'], $config['auth_ldap_port']); +if (! $ldap_connection) { + echo '

Fatal error while connecting to LDAP server ' . $config['auth_ldap_server'] . ':' . $config['auth_ldap_port'] . ': ' . ldap_error($ldap_connection) . '

'; exit; } if ($config['auth_ldap_version']) { - ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $config['auth_ldap_version']); + ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, $config['auth_ldap_version']); } if ($config['auth_ldap_starttls'] && ($config['auth_ldap_starttls'] == 'optional' || $config['auth_ldap_starttls'] == 'require')) { - $tls = ldap_start_tls($ds); + $tls = ldap_start_tls($ldap_connection); if ($config['auth_ldap_starttls'] == 'require' && $tls === false) { - echo '

Fatal error: LDAP TLS required but not successfully negotiated:' . ldap_error($ds) . '

'; + echo '

Fatal error: LDAP TLS required but not successfully negotiated:' . ldap_error($ldap_connection) . '

'; exit; } } diff --git a/html/includes/authentication/ldap.inc.php b/html/includes/authentication/ldap.inc.php index 4948b63796..884ce7db14 100644 --- a/html/includes/authentication/ldap.inc.php +++ b/html/includes/authentication/ldap.inc.php @@ -1,11 +1,11 @@ Fatal error: LDAP TLS required but not successfully negotiated:'.ldap_error($ds).''; + echo '

Fatal error: LDAP TLS required but not successfully negotiated:'.ldap_error($ldap_connection).'

'; exit; } } From 9393c0e716a28cd414b49a9c8436cddd813a1da6 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Sat, 4 Jun 2016 10:06:31 -0500 Subject: [PATCH 074/133] Fixes for the Avtech sensor state --- includes/discovery/functions.inc.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 7813728ccb..4aa10e9b23 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -770,6 +770,7 @@ function avtech_add_sensor($device, $sensor) { $type = $sensor['type'] ? $sensor['type'] : 'temperature'; d_echo('Sensor type: ' . $type . "\n"); + $state_name = null; if ($type == 'switch') { // set up state sensor $type = 'state'; @@ -777,7 +778,7 @@ function avtech_add_sensor($device, $sensor) { $state_index_id = create_state_index($state_name); //Create State Translation - if ($state_index_id) { + if (isset($state_index_id)) { $states = array( array($state_index_id,'Off',0,0,-1), array($state_index_id,'On',0,1,0), @@ -839,8 +840,8 @@ function avtech_add_sensor($device, $sensor) { // add the sensor discover_sensor($valid['sensor'], $type, $device, $oid, $id, $device['os'], $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); - if ($type == 'state') { - create_sensor_to_state_index($device, $state_name, $index); + if ($type == 'state' && isset($state_name)) { + create_sensor_to_state_index($device, $state_name, $id); } return true; From 72cebe413e007d51be1d498e37a1f7bfd4040188 Mon Sep 17 00:00:00 2001 From: Josh Driver Date: Sun, 5 Jun 2016 21:45:46 +0930 Subject: [PATCH 075/133] Improvements for the link selection for the Network Map Currently the Network Map will draw multiple links between devices and ports, overlapping themselves on the graph. The criteria used to select the link is also unspecified. Instead only allow a single link between any two devices/ports. Also prefer links with shorter names, and for links derived using arp/mac, prioritise links with a matching ip address. --- html/includes/print-map.inc.php | 59 +++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/html/includes/print-map.inc.php b/html/includes/print-map.inc.php index 8470e7a32c..21c3850948 100644 --- a/html/includes/print-map.inc.php +++ b/html/includes/print-map.inc.php @@ -32,10 +32,10 @@ if (is_admin() === false && is_read() === false) { $sql_array[] = $_SESSION['user_id']; } -$tmp_devices = array(); -$tmp_ids = array(); -$tmp_links = array(); -$tmp_link_ids = array(); +$devices_by_id = array(); +$links = array(); +$link_assoc_seen = array(); +$device_assoc_seen = array(); $ports = array(); $devices = array(); @@ -74,12 +74,15 @@ if (in_array('mac',$config['network_map_items'])) { `P2`.`ifOperStatus` AS `remote_ifoperstatus`, `P2`.`ifAdminStatus` AS `remote_ifadminstatus`, `P2`.`ifInOctets_rate` AS `remote_ifinoctets_rate`, - `P2`.`ifOutOctets_rate` AS `remote_ifoutoctets_rate` + `P2`.`ifOutOctets_rate` AS `remote_ifoutoctets_rate`, + SUM(IF(`P2_ip`.`ipv4_address` = `M`.`ipv4_address`, 1, 0)) + AS `remote_matching_ips` FROM `ipv4_mac` AS `M` LEFT JOIN `ports` AS `P1` ON `P1`.`port_id`=`M`.`port_id` LEFT JOIN `ports` AS `P2` ON `P2`.`ifPhysAddress`=`M`.`mac_address` LEFT JOIN `devices` AS `D1` ON `P1`.`device_id`=`D1`.`device_id` LEFT JOIN `devices` AS `D2` ON `P2`.`device_id`=`D2`.`device_id` + LEFT JOIN `ipv4_addresses` AS `P2_ip` ON `P2_ip`.`port_id` = `P2`.`port_id` $join_sql WHERE `M`.`mac_address` NOT IN ('000000000000','ffffffffffff') AND @@ -89,6 +92,7 @@ if (in_array('mac',$config['network_map_items'])) { $where $sql GROUP BY `P1`.`port_id`,`P2`.`port_id` + ORDER BY `remote_matching_ips` DESC, `local_ifname`, `remote_ifname` ", $sql_array); } @@ -131,11 +135,14 @@ if (in_array('xdp', $config['network_map_items'])) { $where $sql GROUP BY `P1`.`port_id`,`P2`.`port_id` + ORDER BY `local_ifname`, `remote_ifname` ", $sql_array); } $list = array_merge($ports,$devices); +// Iterate though ports and links, generating a set of devices (nodes) +// and links (edges) that make up the topology graph. foreach ($list as $items) { $local_device = array('device_id'=>$items['local_device_id'], 'os'=>$items['local_os'], 'hostname'=>$items['local_hostname']); $remote_device = array('device_id'=>$items['remote_device_id'], 'os'=>$items['remote_os'], 'hostname'=>$items['remote_hostname']); @@ -143,14 +150,16 @@ foreach ($list as $items) { $local_port = array('port_id'=>$items['local_port_id'],'device_id'=>$items['local_port_device_id'],'ifName'=>$items['local_ifname'],'ifSpeed'=>$items['local_ifspeed'],'ifOperStatus'=>$items['local_ifoperstatus'],'ifAdminStatus'=>$items['local_adminstatus']); $remote_port = array('port_id'=>$items['remote_port_id'],'device_id'=>$items['remote_port_device_id'],'ifName'=>$items['remote_ifname'],'ifSpeed'=>$items['remote_ifspeed'],'ifOperStatus'=>$items['remote_ifoperstatus'],'ifAdminStatus'=>$items['remote_adminstatus']); - if (!in_array($items['local_device_id'],$tmp_ids)) { - $tmp_devices[] = array('id'=>$items['local_device_id'],'label'=>$items['local_hostname'],'title'=>generate_device_link($local_device,'',array(),'','','',0),'shape'=>'box'); + $local_device_id = $items['local_device_id']; + if (!array_key_exists($local_device_id, $devices_by_id)) { + $devices_by_id[$local_device_id] = array('id'=>$local_device_id,'label'=>$items['local_hostname'],'title'=>generate_device_link($local_device,'',array(),'','','',0),'shape'=>'box'); } - array_push($tmp_ids,$items['local_device_id']); - if (!in_array($items['remote_device_id'],$tmp_ids)) { - $tmp_devices[] = array('id'=>$items['remote_device_id'],'label'=>$items['remote_hostname'],'title'=>generate_device_link($remote_device,'',array(),'','','',0),'shape'=>'box'); + + $remote_device_id = $items['remote_device_id']; + if (!array_key_exists($remote_device_id, $devices_by_id)) { + $devices_by_id[$remote_device_id] = array('id'=>$remote_device_id,'label'=>$items['remote_hostname'],'title'=>generate_device_link($remote_device,'',array(),'','','',0),'shape'=>'box'); } - array_push($tmp_ids,$items['remote_device_id']); + $speed = $items['local_ifspeed']/1000/1000; if ($speed == 100) { $width = 3; @@ -183,22 +192,30 @@ foreach ($list as $items) { $link_used = 100; } $link_color = $config['network_map_legend'][$link_used]; - $id1 = $items['local_port_id'].':'.$items['remote_port_id']; - $id2 = $items['remote_port_id'].':'.$items['local_port_id']; - if (!in_array($id1,$tmp_link_ids) || !in_array($id2,$tmp_link_ids)) { + $link_id1 = $items['local_port_id'].':'.$items['remote_port_id']; + $link_id2 = $items['remote_port_id'].':'.$items['local_port_id']; + $device_id1 = $items['local_device_id'].':'.$items['remote_device_id']; + $device_id2 = $items['remote_device_id'].':'.$items['local_device_id']; + + // Ensure only one link exists between any two ports, or any two devices. + if (!array_key_exists($link_id1, $link_assoc_seen) && + !array_key_exists($link_id2, $link_assoc_seen) && + !array_key_exists($device_id1, $device_assoc_seen) && + !array_key_exists($device_id2, $device_assoc_seen)) { $local_port = ifNameDescr($local_port); $remote_port = ifNameDescr($remote_port); - $tmp_links[] = array('from'=>$items['local_device_id'],'to'=>$items['remote_device_id'],'label'=>shorten_interface_type($local_port['ifName']) . ' > ' . shorten_interface_type($remote_port['ifName']),'title'=>generate_port_link($local_port, "\n",'',0,1),'width'=>$width,'color'=>$link_color); + $links[] = array('from'=>$items['local_device_id'],'to'=>$items['remote_device_id'],'label'=>shorten_interface_type($local_port['ifName']) . ' > ' . shorten_interface_type($remote_port['ifName']),'title'=>generate_port_link($local_port, "\n",'',0,1),'width'=>$width,'color'=>$link_color); } - array_push($tmp_link_ids,$id1); - array_push($tmp_link_ids,$id2); + $link_assoc_seen[$link_id1] = 1; + $link_assoc_seen[$link_id2] = 1; + $device_assoc_seen[$device_id1] = 1; + $device_assoc_seen[$device_id2] = 1; } -$node_devices = $tmp_devices; -$nodes = json_encode($node_devices); -$edges = json_encode($tmp_links); +$nodes = json_encode(array_values($devices_by_id)); +$edges = json_encode($links); -if (count($node_devices) > 1 && count($tmp_links) > 0) { +if (count($devices_by_id) > 1 && count($links) > 0) { ?> From 6c8a75a5f76e879307710951059bde32f5b7addd Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Mon, 6 Jun 2016 11:41:41 +0200 Subject: [PATCH 076/133] Change procedure management. Using URL instead of file --- html/includes/common/alerts.inc.php | 8 ++++---- html/includes/forms/create-alert-item.inc.php | 5 +---- html/includes/forms/open-proc.inc.php | 3 ++- html/includes/modal/new_alert_rule.inc.php | 2 +- sql-schema/116.sql | 3 +-- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index 8e570a2001..f3adb045a0 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -97,7 +97,7 @@ if(defined('show_settings')) {
- +
diff --git a/sql-schema/116.sql b/sql-schema/116.sql index 20b0f1ee55..a7f9f6ad85 100644 --- a/sql-schema/116.sql +++ b/sql-schema/116.sql @@ -1,2 +1 @@ -ALTER TABLE alert_rules ADD COLUMN proc VARCHAR(30) AFTER name; -UPDATE alert_rules SET proc="noproc.pdf"; +ALTER TABLE alert_rules ADD COLUMN proc VARCHAR(80) AFTER name; From 0b0881ae9487f8b6847a01f4e261b3141bb9c30a Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Mon, 6 Jun 2016 11:49:50 +0200 Subject: [PATCH 077/133] Remove doc files and change code indent --- html/includes/common/alerts.inc.php | 14 +++++++------- html/includes/forms/parse-alert-rule.inc.php | 2 +- html/procs/noproc.pdf | Bin 88932 -> 0 bytes 3 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 html/procs/noproc.pdf diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index f3adb045a0..184a3c2ab9 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -183,7 +183,7 @@ else { Severity Acknowledge'; if (is_numeric($proc)) { - if ($proc) { $common_output[] = 'Procedure'; } + if ($proc) { $common_output[] = 'Procedure'; } } $common_output[] = ' @@ -228,9 +228,9 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ "ack": function(column,row) { return ""; }, - "proc": function(column,row) { - return ""; - } + "proc": function(column,row) { + return ""; + } }, templates: { } @@ -259,13 +259,13 @@ var alerts_grid = $("#alerts_'.$unique_id.'").bootgrid({ alerts_grid.find(".command-open-proc").on("click", function(e) { e.preventDefault(); var alert_id = $(this).data("alert_id"); - $.ajax({ + $.ajax({ type: "POST", url: "ajax_form.php", data: { type: "open-proc", alert_id: alert_id }, success: function(msg){ - if (msg != "ERROR") { window.open(msg); } - else { $("#message").html(\'
Procedure link does not seem to be valid, please check the rule.
\'); } + if (msg != "ERROR") { window.open(msg); } + else { $("#message").html(\'
Procedure link does not seem to be valid, please check the rule.
\'); } }, error: function(){ $("#message").html(\'
An error occurred opening procedure for this alert. Does the procedure link was configured ?
\'); diff --git a/html/includes/forms/parse-alert-rule.inc.php b/html/includes/forms/parse-alert-rule.inc.php index c4d066ac56..fde05bc83f 100644 --- a/html/includes/forms/parse-alert-rule.inc.php +++ b/html/includes/forms/parse-alert-rule.inc.php @@ -28,7 +28,7 @@ if (is_numeric($alert_id) && $alert_id > 0) { 'severity' => $rule['severity'], 'extra' => $rule['extra'], 'name' => $rule['name'], - 'proc' => $rule['proc'], + 'proc' => $rule['proc'], 'rules' => $rule_split, ); header('Content-type: application/json'); diff --git a/html/procs/noproc.pdf b/html/procs/noproc.pdf deleted file mode 100644 index 75897e1153551a4f9125947c26ac34965a537653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88932 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 From e7c74d8bc5b91ee9131264a553864ecf0dc07f32 Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Mon, 6 Jun 2016 15:09:31 +0100 Subject: [PATCH 078/133] Resolving issues on #3605 --- includes/polling/bgp-peers.inc.php | 16 ++++++++-------- includes/polling/netstats-icmp.inc.php | 12 +----------- includes/polling/netstats-tcp.inc.php | 12 +----------- 3 files changed, 10 insertions(+), 30 deletions(-) diff --git a/includes/polling/bgp-peers.inc.php b/includes/polling/bgp-peers.inc.php index 93c8fc41bb..34608f1ecc 100644 --- a/includes/polling/bgp-peers.inc.php +++ b/includes/polling/bgp-peers.inc.php @@ -262,14 +262,14 @@ print_r($peer_afis); $cbgp_data= array_pop($cbgp_data); d_echo("$cbgp_data\n"); }//end if - $cbgpPeerAcceptedPrefixes= !empty($cbgp_data['cbgpPeerAcceptedPrefixes'])?$cbgp_data['cbgpPeerAcceptedPrefixes']:''; - $cbgpPeerDeniedPrefixes= !empty($cbgp_data['cbgpPeerDeniedPrefixes'])?$cbgp_data['cbgpPeerDeniedPrefixes']:''; - $cbgpPeerPrefixAdminLimit= !empty($cbgp_data['cbgpPeerPrefixAdminLimit'])?$cbgp_data['cbgpPeerPrefixAdminLimit']:''; - $cbgpPeerPrefixThreshold= !empty($cbgp_data['cbgpPeerPrefixThreshold'])?$cbgp_data['cbgpPeerPrefixThreshold']:''; - $cbgpPeerPrefixClearThreshold= !empty($cbgp_data['cbgpPeerPrefixClearThreshold'])?$cbgp_data['cbgpPeerPrefixClearThreshold']:''; - $cbgpPeerAdvertisedPrefixes= !empty($cbgp_data['cbgpPeerAdvertisedPrefixes'])?$cbgp_data['cbgpPeerAdvertisedPrefixes']:''; - $cbgpPeerSuppressedPrefixes= !empty($cbgp_data['cbgpPeerSuppressedPrefixes'])?$cbgp_data['cbgpPeerSuppressedPrefixes']:''; - $cbgpPeerWithdrawnPrefixes= !empty($cbgp_data['cbgpPeerWithdrawnPrefixes'])?$cbgp_data['cbgpPeerWithdrawnPrefixes']:''; + $cbgpPeerAcceptedPrefixes = $cbgp_data['cbgpPeerAcceptedPrefixes']; + $cbgpPeerDeniedPrefixes = $cbgp_data['cbgpPeerDeniedPrefixes']; + $cbgpPeerPrefixAdminLimit = $cbgp_data['cbgpPeerPrefixAdminLimit']; + $cbgpPeerPrefixThreshold = $cbgp_data['cbgpPeerPrefixThreshold']; + $cbgpPeerPrefixClearThreshold = $cbgp_data['cbgpPeerPrefixClearThreshold']; + $cbgpPeerAdvertisedPrefixes = $cbgp_data['cbgpPeerAdvertisedPrefixes']; + $cbgpPeerSuppressedPrefixes = $cbgp_data['cbgpPeerSuppressedPrefixes']; + $cbgpPeerWithdrawnPrefixes = $cbgp_data['cbgpPeerWithdrawnPrefixes']; unset($cbgp_data); }//end if diff --git a/includes/polling/netstats-icmp.inc.php b/includes/polling/netstats-icmp.inc.php index f324f6a10f..19df0a5c4b 100644 --- a/includes/polling/netstats-icmp.inc.php +++ b/includes/polling/netstats-icmp.inc.php @@ -46,17 +46,7 @@ if ($device['os'] != 'Snom') { $data_array = snmpwalk_cache_oid($device, 'icmp', array(), 'IP-MIB'); - $fields = array(); - - foreach ($oids as $oid) { - if (is_numeric($data_array[0][$oid])) { - $value = $data_array[0][$oid]; - } - else { - $value = 'U'; - } - $fields[$oid] = $value; - } + $fields = $data_array[0]; unset($snmpstring); diff --git a/includes/polling/netstats-tcp.inc.php b/includes/polling/netstats-tcp.inc.php index d763e2a30b..3d060f6e4b 100644 --- a/includes/polling/netstats-tcp.inc.php +++ b/includes/polling/netstats-tcp.inc.php @@ -36,17 +36,7 @@ if ($device['os'] != 'Snom') { $data = snmp_get_multi($device, $snmpstring, '-OQUs', 'TCP-MIB'); - $fields = array(); - - foreach ($oids as $oid) { - if (is_numeric($data[0][$oid])) { - $value = $data[0][$oid]; - } - else { - $value = 'U'; - } - $fields[$oid] = $value; - } + $fields = $data[0]; unset($snmpstring); From 93f93aa660f783b59602b11c06693bbd2a051bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Mon, 6 Jun 2016 19:31:46 +0200 Subject: [PATCH 079/133] Add polling --- includes/polling/os/hp3par.inc.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 includes/polling/os/hp3par.inc.php diff --git a/includes/polling/os/hp3par.inc.php b/includes/polling/os/hp3par.inc.php new file mode 100644 index 0000000000..1c8a9101dc --- /dev/null +++ b/includes/polling/os/hp3par.inc.php @@ -0,0 +1,17 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (preg_match('/^HP_3PAR (.*), ID: (.*), Serial number: (.*), InForm OS version: (.*)/', $poll_device['sysDescr'], $regexp_result)) { + $hardware = 'HP 3Par '.$regexp_result[1]; + $serial = $regexp_result[3]; + $version = $regexp_result[4]; +} From 09518664860127f91507464e2a674c48fc422b09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Mon, 6 Jun 2016 19:34:12 +0200 Subject: [PATCH 080/133] Credit to Neil --- includes/polling/os/hp3par.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/polling/os/hp3par.inc.php b/includes/polling/os/hp3par.inc.php index 1c8a9101dc..963e40faf5 100644 --- a/includes/polling/os/hp3par.inc.php +++ b/includes/polling/os/hp3par.inc.php @@ -2,7 +2,7 @@ /* * LibreNMS * - * Copyright (c) 2016 Søren Friis Rosiak + * Copyright (c) 2016 Neil Lathwood * This program 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, either version 3 of the License, or (at your From 807e3dfe617415f367d8ca5374d3a43bf7014f69 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Mon, 6 Jun 2016 15:33:41 -0500 Subject: [PATCH 081/133] Fix avtech switch type sensors --- includes/discovery/functions.inc.php | 20 +++++++++++-------- .../discovery/sensors/states/avtech.inc.php | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 4aa10e9b23..cf6955aa9f 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -760,7 +760,8 @@ function avtech_add_sensor($device, $sensor) { // get the sensor value $value = snmp_get($device, $oid, '-OvQ'); // if the sensor doesn't exist abort - if ($value === false || $value == 0) { //issue unfortunately non-existant sensors return 0 + if ($value === false || ($type == 'temperature' && $value == 0)) { + //issue unfortunately some non-existant sensors return 0 d_echo('Error: sensor returned no data, skipping' . "\n"); return false; } @@ -770,12 +771,12 @@ function avtech_add_sensor($device, $sensor) { $type = $sensor['type'] ? $sensor['type'] : 'temperature'; d_echo('Sensor type: ' . $type . "\n"); - $state_name = null; + $type_name = $device['os']; if ($type == 'switch') { // set up state sensor + $type_name .= ucfirst($type); $type = 'state'; - $state_name = 'avtachSwitchState'; - $state_index_id = create_state_index($state_name); + $state_index_id = create_state_index($type_name); //Create State Translation if (isset($state_index_id)) { @@ -813,9 +814,12 @@ function avtech_add_sensor($device, $sensor) { if ($sensor['divisor']) { $divisor = $sensor['divisor']; } - else { + elseif ($type == 'temperature') { $divisor = 100; } + else { + $divisor = 1; + } d_echo('Sensor divisor: ' . $divisor . "\n"); @@ -838,10 +842,10 @@ function avtech_add_sensor($device, $sensor) { d_echo('Sensor alarm max: ' . $max . "\n"); // add the sensor - discover_sensor($valid['sensor'], $type, $device, $oid, $id, $device['os'], $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); + discover_sensor($valid['sensor'], $type, $device, $oid, $id, $type_name, $descr, $divisor, '1', $min, null, null, $max, $value/$divisor); - if ($type == 'state' && isset($state_name)) { - create_sensor_to_state_index($device, $state_name, $id); + if ($type == 'state') { + create_sensor_to_state_index($device, $type_name, $id); } return true; diff --git a/includes/discovery/sensors/states/avtech.inc.php b/includes/discovery/sensors/states/avtech.inc.php index 3dd0d1daa1..c5be645a9a 100644 --- a/includes/discovery/sensors/states/avtech.inc.php +++ b/includes/discovery/sensors/states/avtech.inc.php @@ -8,7 +8,7 @@ if ($device['os'] == 'avtech') { $device_oid = '.1.3.6.1.4.1.20916.1.9.'; $switch = array( - 'id' => 2, + 'id' => 0, 'type' => 'switch', 'oid' => $device_oid.'1.2.1.0', 'descr_oid' => $device_oid.'1.2.2.0', From ad8ecb0f82c654a19a81eac237362bd6a221d3c2 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Mon, 6 Jun 2016 15:39:04 -0500 Subject: [PATCH 082/133] Switch support for Avtech RoomAlert 4E --- includes/discovery/sensors/states/avtech.inc.php | 14 +++++++++++++- .../discovery/sensors/temperatures/avtech.inc.php | 9 --------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/includes/discovery/sensors/states/avtech.inc.php b/includes/discovery/sensors/states/avtech.inc.php index c5be645a9a..1dd0745f7d 100644 --- a/includes/discovery/sensors/states/avtech.inc.php +++ b/includes/discovery/sensors/states/avtech.inc.php @@ -4,7 +4,7 @@ if ($device['os'] == 'avtech') { echo 'AVTECH: '; if (strpos($device['sysObjectID'], '.20916.1.9') !== false) { - // RoomAlert 3E + // RoomAlert 3E $device_oid = '.1.3.6.1.4.1.20916.1.9.'; $switch = array( @@ -15,4 +15,16 @@ if ($device['os'] == 'avtech') { ); avtech_add_sensor($device, $switch); } + elseif (strpos($device['sysObjectID'], '.20916.1.6') !== false) { + // RoomAlert 4E + $device_oid = '.1.3.6.1.4.1.20916.1.6.'; + + $switch = array( + 'id' => 0, + 'type' => 'switch', + 'oid' => $device_oid.'1.3.1.0', + 'descr_oid' => $device_oid.'1.3.2.0', + ); + avtech_add_sensor($device, $switch); + } } diff --git a/includes/discovery/sensors/temperatures/avtech.inc.php b/includes/discovery/sensors/temperatures/avtech.inc.php index 1af040ee9d..da082cff72 100644 --- a/includes/discovery/sensors/temperatures/avtech.inc.php +++ b/includes/discovery/sensors/temperatures/avtech.inc.php @@ -114,14 +114,5 @@ if ($device['os'] == 'avtech') { 'divisor' => $divisor, ); avtech_add_sensor($device, $sen2); - -/* we don't support switches at this time - $switch = array( - 'oid' => $device_oid.'1.3.1.0', - 'descr_oid' => $device_oid.'1.3.2.0', - 'type' => 'switch' - ); - avtech_add_sensor($device, $switch); -*/ } }//end if From b37d0f2e9e2c4607218efcf2bc0d631685a9a25c Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Mon, 6 Jun 2016 19:17:19 -0500 Subject: [PATCH 083/133] Draw graphs for avtech switch state. --- includes/discovery/functions.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index cf6955aa9f..ca6ee240bf 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -781,8 +781,8 @@ function avtech_add_sensor($device, $sensor) { //Create State Translation if (isset($state_index_id)) { $states = array( - array($state_index_id,'Off',0,0,-1), - array($state_index_id,'On',0,1,0), + array($state_index_id,'Off',1,0,-1), + array($state_index_id,'On',1,1,0), ); foreach($states as $value){ $insert = array( From c6112d9a4349eeabd95b0da722532d0c8d3a6622 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Mon, 6 Jun 2016 23:45:19 -0500 Subject: [PATCH 084/133] Sort many items in defaults.inc.php The main target is the poller and discovery modules --- includes/defaults.inc.php | 262 +++++++++++++++++++------------------- 1 file changed, 131 insertions(+), 131 deletions(-) diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index 3f01b97680..b1e832799d 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -486,45 +486,45 @@ $config['nfsen_enable'] = 0; // config['location_map']['Under the Sink'] = "Under The Sink, The Office, London, UK"; // Ignores & Allows // Has to be lowercase -$config['bad_if'][] = 'voip-null'; -$config['bad_if'][] = 'virtual-'; -$config['bad_if'][] = 'unrouted'; -$config['bad_if'][] = 'eobc'; -$config['bad_if'][] = 'lp0'; $config['bad_if'][] = '-atm'; -$config['bad_if'][] = 'faith0'; -$config['bad_if'][] = 'container'; -$config['bad_if'][] = 'async'; -$config['bad_if'][] = 'plip'; $config['bad_if'][] = '-physical'; -$config['bad_if'][] = 'container'; -$config['bad_if'][] = 'unrouted'; +$config['bad_if'][] = 'async'; $config['bad_if'][] = 'bluetooth'; +$config['bad_if'][] = 'container'; +$config['bad_if'][] = 'container'; +$config['bad_if'][] = 'eobc'; +$config['bad_if'][] = 'faith0'; $config['bad_if'][] = 'isatap'; -$config['bad_if'][] = 'ras'; +$config['bad_if'][] = 'lp0'; +$config['bad_if'][] = 'plip'; +$config['bad_if'][] = 'pppoe-'; $config['bad_if'][] = 'qos'; +$config['bad_if'][] = 'ras'; $config['bad_if'][] = 'span rp'; $config['bad_if'][] = 'span sp'; $config['bad_if'][] = 'sslvpn'; -$config['bad_if'][] = 'pppoe-'; +$config['bad_if'][] = 'unrouted'; +$config['bad_if'][] = 'unrouted'; +$config['bad_if'][] = 'virtual-'; +$config['bad_if'][] = 'voip-null'; // $config['bad_if'][] = "control plane"; // Example for cisco control plane // Ignore ports based on ifType. Case-sensitive. +$config['bad_iftype'][] = 'aal5'; +$config['bad_iftype'][] = 'atmSubInterface'; +$config['bad_iftype'][] = 'ds0'; +$config['bad_iftype'][] = 'ds1'; +$config['bad_iftype'][] = 'ds3'; +// $config['bad_iftype'][] = 'isdn'; #show signaling traffic +// $config['bad_iftype'][] = 'lapd'; #show signaling traffic +$config['bad_iftype'][] = 'mpls'; +$config['bad_iftype'][] = 'shdsl'; +$config['bad_iftype'][] = 'sonet'; $config['bad_iftype'][] = 'voiceEncap'; $config['bad_iftype'][] = 'voiceFXO'; $config['bad_iftype'][] = 'voiceFXS'; $config['bad_iftype'][] = 'voiceOverAtm'; $config['bad_iftype'][] = 'voiceOverFrameRelay'; $config['bad_iftype'][] = 'voiceOverIp'; -$config['bad_iftype'][] = 'ds0'; -$config['bad_iftype'][] = 'ds1'; -$config['bad_iftype'][] = 'ds3'; -// $config['bad_iftype'][] = "isdn"; #show signaling traffic -// $config['bad_iftype'][] = "lapd"; #show signaling traffic -$config['bad_iftype'][] = 'sonet'; -$config['bad_iftype'][] = 'atmSubInterface'; -$config['bad_iftype'][] = 'aal5'; -$config['bad_iftype'][] = 'shdsl'; -$config['bad_iftype'][] = 'mpls'; $config['bad_if_regexp'][] = '/^ng[0-9]+$/'; $config['bad_if_regexp'][] = '/^sl[0-9]/'; @@ -539,20 +539,20 @@ $config['ignore_mount_network'] = 1; $config['ignore_mount_optical'] = 1; // Ignore mounted optical discs // Per-device interface graph filters -$config['device_traffic_iftype'][] = '/loopback/'; -$config['device_traffic_iftype'][] = '/tunnel/'; -$config['device_traffic_iftype'][] = '/virtual/'; -$config['device_traffic_iftype'][] = '/mpls/'; $config['device_traffic_iftype'][] = '/ieee8023adLag/'; $config['device_traffic_iftype'][] = '/l2vlan/'; +$config['device_traffic_iftype'][] = '/loopback/'; +$config['device_traffic_iftype'][] = '/mpls/'; $config['device_traffic_iftype'][] = '/ppp/'; +$config['device_traffic_iftype'][] = '/tunnel/'; +$config['device_traffic_iftype'][] = '/virtual/'; -$config['device_traffic_descr'][] = '/loopback/'; -$config['device_traffic_descr'][] = '/vlan/'; -$config['device_traffic_descr'][] = '/tunnel/'; $config['device_traffic_descr'][] = '/bond/'; -$config['device_traffic_descr'][] = '/null/'; $config['device_traffic_descr'][] = '/dummy/'; +$config['device_traffic_descr'][] = '/loopback/'; +$config['device_traffic_descr'][] = '/null/'; +$config['device_traffic_descr'][] = '/tunnel/'; +$config['device_traffic_descr'][] = '/vlan/'; // IRC Bot configuration $config['irc_host'] = ''; @@ -599,33 +599,33 @@ $config['auth_ldap_cache_ttl'] = 300; $config['allow_entity_sensor']['amperes'] = 1; $config['allow_entity_sensor']['celsius'] = 1; $config['allow_entity_sensor']['dBm'] = 1; -$config['allow_entity_sensor']['voltsDC'] = 1; -$config['allow_entity_sensor']['voltsAC'] = 1; -$config['allow_entity_sensor']['watts'] = 1; -$config['allow_entity_sensor']['truthvalue'] = 1; $config['allow_entity_sensor']['specialEnum'] = 1; +$config['allow_entity_sensor']['truthvalue'] = 1; +$config['allow_entity_sensor']['voltsAC'] = 1; +$config['allow_entity_sensor']['voltsDC'] = 1; +$config['allow_entity_sensor']['watts'] = 1; // Filesystems +$config['ignore_mount'][] = '/dev'; $config['ignore_mount'][] = '/kern'; $config['ignore_mount'][] = '/mnt/cdrom'; $config['ignore_mount'][] = '/proc'; -$config['ignore_mount'][] = '/dev'; -$config['ignore_mount_string'][] = 'packages'; $config['ignore_mount_string'][] = 'devfs'; +$config['ignore_mount_string'][] = 'MALLOC'; +$config['ignore_mount_string'][] = 'packages'; $config['ignore_mount_string'][] = 'procfs'; $config['ignore_mount_string'][] = 'UMA'; -$config['ignore_mount_string'][] = 'MALLOC'; -$config['ignore_mount_regexp'][] = '/on: \/packages/'; -$config['ignore_mount_regexp'][] = '/on: \/dev/'; -$config['ignore_mount_regexp'][] = '/on: \/proc/'; -$config['ignore_mount_regexp'][] = '/on: \/junos^/'; -$config['ignore_mount_regexp'][] = '/on: \/junos\/dev/'; -$config['ignore_mount_regexp'][] = '/on: \/jail\/dev/'; $config['ignore_mount_regexp'][] = '/^(dev|proc)fs/'; $config['ignore_mount_regexp'][] = '/^\/dev\/md0/'; $config['ignore_mount_regexp'][] = '/^\/var\/dhcpd\/dev,/'; +$config['ignore_mount_regexp'][] = '/on: \/dev/'; +$config['ignore_mount_regexp'][] = '/on: \/jail\/dev/'; +$config['ignore_mount_regexp'][] = '/on: \/junos\/dev/'; +$config['ignore_mount_regexp'][] = '/on: \/junos^/'; +$config['ignore_mount_regexp'][] = '/on: \/packages/'; +$config['ignore_mount_regexp'][] = '/on: \/proc/'; $config['ignore_mount_regexp'][] = '/UMA/'; $config['ignore_mount_removable'] = 1; @@ -634,10 +634,10 @@ $config['ignore_mount_network'] = 1; // Ignore network mounted storage // Syslog Settings // Entries older than this will be removed -$config['syslog_filter'][] = 'last message repeated'; $config['syslog_filter'][] = 'Connection from UDP: ['; -$config['syslog_filter'][] = 'ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented'; $config['syslog_filter'][] = 'diskio.c'; +$config['syslog_filter'][] = 'ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented'; +$config['syslog_filter'][] = 'last message repeated'; // Ignore some crappy stuff from SNMP daemon // Virtualization $config['enable_libvirt'] = 0; @@ -652,114 +652,114 @@ $config['astext'][65332] = 'Cymru FullBogon Feed'; $config['astext'][65333] = 'Cymru Bogon Feed'; // Nicer labels for the SLA types -$config['sla_type_labels']['echo'] = 'ICMP ping'; -$config['sla_type_labels']['pathEcho'] = 'Path ICMP ping'; -$config['sla_type_labels']['fileIO'] = 'File I/O'; -$config['sla_type_labels']['script'] = 'Script'; -$config['sla_type_labels']['udpEcho'] = 'UDP ping'; -$config['sla_type_labels']['tcpConnect'] = 'TCP connect'; -$config['sla_type_labels']['http'] = 'HTTP'; -$config['sla_type_labels']['dns'] = 'DNS'; -$config['sla_type_labels']['jitter'] = 'Jitter'; -$config['sla_type_labels']['dlsw'] = 'DLSW'; $config['sla_type_labels']['dhcp'] = 'DHCP'; -$config['sla_type_labels']['ftp'] = 'FTP'; -$config['sla_type_labels']['voip'] = 'VoIP'; -$config['sla_type_labels']['rtp'] = 'RTP'; -$config['sla_type_labels']['lspGroup'] = 'LSP group'; -$config['sla_type_labels']['icmpjitter'] = 'ICMP jitter'; -$config['sla_type_labels']['lspPing'] = 'LSP ping'; -$config['sla_type_labels']['lspTrace'] = 'LSP trace'; -$config['sla_type_labels']['ethernetPing'] = 'Ethernet ping'; +$config['sla_type_labels']['dlsw'] = 'DLSW'; +$config['sla_type_labels']['dns'] = 'DNS'; +$config['sla_type_labels']['echo'] = 'ICMP ping'; $config['sla_type_labels']['ethernetJitter'] = 'Ethernet jitter'; +$config['sla_type_labels']['ethernetPing'] = 'Ethernet ping'; +$config['sla_type_labels']['fileIO'] = 'File I/O'; +$config['sla_type_labels']['ftp'] = 'FTP'; +$config['sla_type_labels']['http'] = 'HTTP'; +$config['sla_type_labels']['icmpjitter'] = 'ICMP jitter'; +$config['sla_type_labels']['jitter'] = 'Jitter'; +$config['sla_type_labels']['lspGroup'] = 'LSP group'; +$config['sla_type_labels']['lspPing'] = 'LSP ping'; $config['sla_type_labels']['lspPingPseudowire'] = 'LSP Pseudowire ping'; +$config['sla_type_labels']['lspTrace'] = 'LSP trace'; +$config['sla_type_labels']['pathEcho'] = 'Path ICMP ping'; +$config['sla_type_labels']['rtp'] = 'RTP'; +$config['sla_type_labels']['script'] = 'Script'; +$config['sla_type_labels']['tcpConnect'] = 'TCP connect'; +$config['sla_type_labels']['udpEcho'] = 'UDP ping'; +$config['sla_type_labels']['voip'] = 'VoIP'; // Warnings on front page $config['warn']['ifdown'] = true; // Show down interfaces // List of poller modules. Need to be in the array to be // considered for execution. -$config['poller_modules']['unix-agent'] = 0; -$config['poller_modules']['os'] = 1; -$config['poller_modules']['ipmi'] = 1; -$config['poller_modules']['sensors'] = 1; -$config['poller_modules']['processors'] = 1; -$config['poller_modules']['mempools'] = 1; -$config['poller_modules']['storage'] = 1; -$config['poller_modules']['netstats'] = 1; -$config['poller_modules']['hr-mib'] = 1; -$config['poller_modules']['ucd-mib'] = 1; -$config['poller_modules']['ipSystemStats'] = 1; -$config['poller_modules']['ports'] = 1; -$config['poller_modules']['bgp-peers'] = 1; -$config['poller_modules']['junose-atm-vp'] = 1; -$config['poller_modules']['toner'] = 1; -$config['poller_modules']['ucd-diskio'] = 1; -$config['poller_modules']['wifi'] = 1; -$config['poller_modules']['ospf'] = 1; -$config['poller_modules']['cisco-ipsec-flow-monitor'] = 1; -$config['poller_modules']['cisco-remote-access-monitor'] = 1; -$config['poller_modules']['cisco-cef'] = 1; -$config['poller_modules']['cisco-sla'] = 1; -$config['poller_modules']['cisco-mac-accounting'] = 1; +$config['poller_modules']['applications'] = 1; +$config['poller_modules']['aruba-controller'] = 1; +$config['poller_modules']['bgp-peers'] = 1; $config['poller_modules']['cipsec-tunnels'] = 1; $config['poller_modules']['cisco-ace-loadbalancer'] = 1; $config['poller_modules']['cisco-ace-serverfarms'] = 1; -$config['poller_modules']['netscaler-vsvr'] = 1; -$config['poller_modules']['aruba-controller'] = 1; -$config['poller_modules']['entity-physical'] = 1; -$config['poller_modules']['applications'] = 1; $config['poller_modules']['cisco-asa-firewall'] = 1; -$config['poller_modules']['mib'] = 0; -$config['poller_modules']['cisco-voice'] = 1; $config['poller_modules']['cisco-cbqos'] = 1; -$config['poller_modules']['stp'] = 1; +$config['poller_modules']['cisco-cef'] = 1; +$config['poller_modules']['cisco-ipsec-flow-monitor'] = 1; +$config['poller_modules']['cisco-mac-accounting'] = 1; $config['poller_modules']['cisco-otv'] = 1; -$config['poller_modules']['services'] = 1; +$config['poller_modules']['cisco-remote-access-monitor'] = 1; +$config['poller_modules']['cisco-sla'] = 1; +$config['poller_modules']['cisco-voice'] = 1; +$config['poller_modules']['entity-physical'] = 1; +$config['poller_modules']['hr-mib'] = 1; +$config['poller_modules']['ipmi'] = 1; +$config['poller_modules']['ipSystemStats'] = 1; +$config['poller_modules']['junose-atm-vp'] = 1; +$config['poller_modules']['mempools'] = 1; +$config['poller_modules']['mib'] = 0; +$config['poller_modules']['netscaler-vsvr'] = 1; +$config['poller_modules']['netstats'] = 1; +$config['poller_modules']['os'] = 1; +$config['poller_modules']['ospf'] = 1; +$config['poller_modules']['ports'] = 1; +$config['poller_modules']['processors'] = 1; +$config['poller_modules']['sensors'] = 1; +$config['poller_modules']['services'] = 1; +$config['poller_modules']['storage'] = 1; +$config['poller_modules']['stp'] = 1; +$config['poller_modules']['toner'] = 1; +$config['poller_modules']['ucd-diskio'] = 1; +$config['poller_modules']['ucd-mib'] = 1; +$config['poller_modules']['unix-agent'] = 0; +$config['poller_modules']['wifi'] = 1; // List of discovery modules. Need to be in this array to be // considered for execution. -$config['discovery_modules']['os'] = 1; -$config['discovery_modules']['ports'] = 1; -$config['discovery_modules']['ports-stack'] = 1; -$config['discovery_modules']['entity-physical'] = 1; -$config['discovery_modules']['processors'] = 1; -$config['discovery_modules']['mempools'] = 1; -$config['discovery_modules']['cisco-vrf-lite'] = 1; -$config['discovery_modules']['ipv4-addresses'] = 1; -$config['discovery_modules']['ipv6-addresses'] = 1; -$config['discovery_modules']['route'] = 0; -$config['discovery_modules']['sensors'] = 1; -$config['discovery_modules']['storage'] = 1; -$config['discovery_modules']['hr-device'] = 1; -$config['discovery_modules']['discovery-protocols'] = 1; -$config['discovery_modules']['arp-table'] = 1; -$config['discovery_modules']['discovery-arp'] = 0; -$config['discovery_modules']['junose-atm-vp'] = 1; -$config['discovery_modules']['bgp-peers'] = 1; -$config['discovery_modules']['vlans'] = 1; -$config['discovery_modules']['cisco-mac-accounting'] = 1; -$config['discovery_modules']['cisco-pw'] = 1; -$config['discovery_modules']['cisco-vrf'] = 1; -//$config['discovery_modules']['cisco-cef'] = 1; -$config['discovery_modules']['cisco-sla'] = 1; -$config['discovery_modules']['vmware-vminfo'] = 1; -$config['discovery_modules']['libvirt-vminfo'] = 1; -$config['discovery_modules']['toner'] = 1; -$config['discovery_modules']['ucd-diskio'] = 1; -$config['discovery_modules']['services'] = 1; +$config['discovery_modules']['arp-table'] = 1; +$config['discovery_modules']['bgp-peers'] = 1; $config['discovery_modules']['charge'] = 1; $config['discovery_modules']['cisco-cbqos'] = 0; -$config['discovery_modules']['stp'] = 1; +//$config['discovery_modules']['cisco-cef'] = 1; +$config['discovery_modules']['cisco-mac-accounting'] = 1; $config['discovery_modules']['cisco-otv'] = 1; +$config['discovery_modules']['cisco-pw'] = 1; +$config['discovery_modules']['cisco-sla'] = 1; +$config['discovery_modules']['cisco-vrf'] = 1; +$config['discovery_modules']['cisco-vrf-lite'] = 1; +$config['discovery_modules']['discovery-arp'] = 0; +$config['discovery_modules']['discovery-protocols'] = 1; +$config['discovery_modules']['entity-physical'] = 1; +$config['discovery_modules']['hr-device'] = 1; +$config['discovery_modules']['ipv4-addresses'] = 1; +$config['discovery_modules']['ipv6-addresses'] = 1; +$config['discovery_modules']['junose-atm-vp'] = 1; +$config['discovery_modules']['libvirt-vminfo'] = 1; +$config['discovery_modules']['mempools'] = 1; +$config['discovery_modules']['os'] = 1; +$config['discovery_modules']['ports'] = 1; +$config['discovery_modules']['ports-stack'] = 1; +$config['discovery_modules']['processors'] = 1; +$config['discovery_modules']['route'] = 0; +$config['discovery_modules']['sensors'] = 1; +$config['discovery_modules']['services'] = 1; +$config['discovery_modules']['storage'] = 1; +$config['discovery_modules']['stp'] = 1; +$config['discovery_modules']['toner'] = 1; +$config['discovery_modules']['ucd-diskio'] = 1; +$config['discovery_modules']['vlans'] = 1; +$config['discovery_modules']['vmware-vminfo'] = 1; -$config['modules_compat']['rfc1628']['liebert'] = 1; -$config['modules_compat']['rfc1628']['netmanplus'] = 1; $config['modules_compat']['rfc1628']['deltaups'] = 1; -$config['modules_compat']['rfc1628']['poweralert'] = 1; -$config['modules_compat']['rfc1628']['multimatic'] = 1; -$config['modules_compat']['rfc1628']['webpower'] = 1; $config['modules_compat']['rfc1628']['huaweiups'] = 1; +$config['modules_compat']['rfc1628']['liebert'] = 1; +$config['modules_compat']['rfc1628']['multimatic'] = 1; +$config['modules_compat']['rfc1628']['netmanplus'] = 1; +$config['modules_compat']['rfc1628']['poweralert'] = 1; +$config['modules_compat']['rfc1628']['webpower'] = 1; // Enable daily updates $config['update'] = 1; @@ -781,8 +781,8 @@ $config['alert_log_purge'] = 365; // Date format for PHP date()s $config['dateformat']['long'] = 'r'; // RFC2822 style -$config['dateformat']['compact'] = 'Y-m-d H:i:s'; $config['dateformat']['byminute'] = 'Y-m-d H:i'; +$config['dateformat']['compact'] = 'Y-m-d H:i:s'; $config['dateformat']['time'] = 'H:i:s'; // Date format for MySQL DATE_FORMAT From 7c8a32e3244eb309a16d0967aa76e2caa90a49c2 Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Tue, 7 Jun 2016 09:43:12 +0200 Subject: [PATCH 085/133] Add procedure doc --- doc/Extensions/Alerting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index 43a6c6be19..173ef51fd7 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -4,6 +4,7 @@ Table of Content: - [Rules](#rules) - [Syntax](#rules-syntax) - [Examples](#rules-examples) + - [Procedure](#rules-procedure) - [Templates](#templates) - [Syntax](#templates-syntax) - [Examples](#templates-examples) @@ -89,6 +90,9 @@ Alert when: - High CPU usage(per core usage, not overall): `%macros.device_up = "1" && %processors.processor_usage >= "90"` - High port usage, where description is not client & ifType is not softwareLoopback: `%macros.port_usage_perc >= "80" && %port.port_descr_type != "client" && %ports.ifType != "softwareLoopback"` +## Procedure +You can associate a rule to a procedure by giving the URL of the procedure when creating the rule. Only links like "http://" are supported, otherwise an error will be returned. Once configured, procedure can be opened from the Alert widget through the "Open" button, which can be shown/hidden from the widget configuration box. + # Templates Templates can be assigned to a single or a group of rules. From 5cb9d751c3629bec85d865e2dc2dde121660c900 Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Tue, 7 Jun 2016 09:15:04 +0100 Subject: [PATCH 086/133] Revert "deduping type_where code, adding manual types to graph widgets " --- AUTHORS.md | 1 - html/includes/api_functions.inc.php | 11 ++++- html/includes/common/generic-graph.inc.php | 44 ++++++++++------- html/includes/functions.inc.php | 55 ---------------------- html/pages/iftype.inc.php | 24 +++++++++- 5 files changed, 59 insertions(+), 76 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 43d0bff1bc..83644c51ed 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -104,7 +104,6 @@ LibreNMS contributors: - Robert Verspuy (exarv) - Peter Tkatchenko (Peter2121) - Marc Runkel (mrunkel) -- Brandon Boudrias (brandune) [1]: http://observium.org/ "Observium web site" Observium was written by: diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index b1e5e5de95..75aa966bbf 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -495,10 +495,19 @@ function get_graph_by_portgroup() { $vars['width'] = $_GET['width'] ?: 1075; $vars['height'] = $_GET['height'] ?: 300; $auth = '1'; + $type_where = ' ('; + $or = ''; + $type_param = array(); + foreach (explode(',', $group) as $type) { + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $type; + } - $ports = get_ports_from_type(explode(',', $group)); + $type_where .= ') '; $if_list = ''; $seperator = ''; + $ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); foreach ($ports as $port) { $if_list .= $seperator.$port['port_id']; $seperator = ','; diff --git a/html/includes/common/generic-graph.inc.php b/html/includes/common/generic-graph.inc.php index bd594b5ec7..022fb0585c 100644 --- a/html/includes/common/generic-graph.inc.php +++ b/html/includes/common/generic-graph.inc.php @@ -74,7 +74,6 @@ if( defined('show_settings') || empty($widget_settings) ) { - @@ -151,14 +150,6 @@ if( defined('show_settings') || empty($widget_settings) ) { $common_output[] = '
-
-
- -
-
- '; - $common_output[] = '
-
@@ -402,20 +393,39 @@ else { elseif ($type == 'munin') { $param = 'device='.$widget_settings['graph_'.$type]['device_id'].'&plugin='.$widget_settings['graph_'.$type]['name']; } - elseif ($type == 'transit' || $type == 'peering' || $type == 'core' || $type == 'custom' || $type == 'manual') { - if ( $type == 'custom' || $type == 'manual') { - $type = $widget_settings['graph_'.$type]; - $type = explode(',', $type); + elseif ($type == 'transit' || $type == 'peering' || $type == 'core') { + $type_where = ' ('; + if (is_array($config[$type.'_descr']) === false) { + $config[$type.'_descr'] = array($config[$type.'_descr']); } - - $ports = get_ports_from_type($type); - foreach ($ports as $port) { + foreach ($config[$type.'_descr'] as $additional_type) { + if (!empty($additional_type)) { + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $additional_type; + } + } + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $type; + $type_where .= ') '; + foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE $type_where ORDER BY ifAlias", $type_param) as $port) { $tmp[] = $port['port_id']; } $param = 'id='.implode(',',$tmp); $widget_settings['graph_type'] = 'multiport_bits_separate'; if (empty($widget_settings['title'])) { - $widget_settings['title'] = 'Overall '.ucfirst(htmlspecialchars($type)).' Bits ('.$widget_settings['graph_range'].')'; + $widget_settings['title'] = 'Overall '.ucfirst($type).' Bits ('.$widget_settings['graph_range'].')'; + } + } + elseif ($type == 'custom') { + foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE `port_descr_type` = ? ORDER BY ifAlias", array($widget_settings['graph_custom'])) as $port) { + $tmp[] = $port['port_id']; + } + $param = 'id='.implode(',',$tmp); + $widget_settings['graph_type'] = 'multiport_bits_separate'; + if (empty($widget_settings['title'])) { + $widget_settings['title'] = 'Overall '.ucfirst(htmlspecialchars($widget_settings['graph_custom'])).' Bits ('.$widget_settings['graph_range'].')'; } } else { diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index 046fb3a859..8952853e7f 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -1283,58 +1283,3 @@ function get_ripe_api_whois_data_json($ripe_data_param, $ripe_query_param) { return json_decode(file_get_contents($ripe_whois_url) , true); }//end get_ripe_api_whois_data_json() -/** - * Return the rows from 'ports' for all ports of a certain type as parsed by port_descr_parser. - * One or an array of strings can be provided as an argument; if an array is passed, all ports matching - * any of the types in the array are returned. - * @param $types mixed String or strings matching 'port_descr_type's. - * @return array Rows from the ports table for matching ports. - */ -function get_ports_from_type($given_types) { - global $config; - - # Make the arg an array if it isn't, so subsequent steps only have to handle arrays. - if(!is_array($given_types)) { - $given_types = array($given_types); - } - - # Check the config for a '_descr' entry for each argument. This is how a 'custom_descr' entry can - # be key/valued to some other string that's actually searched for in the DB. Merge or append the - # configured value if it's an array or a string. Or append the argument itself if there's no matching - # entry in config. - $search_types = array(); - foreach($given_types as $type) { - if(isset($config[$type.'_descr']) === true) { - if (is_array($config[$type.'_descr']) === true) { - $search_types = array_merge($search_types, $config[$type.'_descr']); - } - else { - $search_types[] = $config[$type.'_descr']; - } - } - else { - $search_types[] = $type; - } - } - - # Using the full list of strings to search the DB for, build the 'where' portion of a query that - # compares 'port_descr_type' with entry in the list. Also, since '@' is the convential wildcard, - # replace it with '%' so it functions as a wildcard in the SQL query. - $type_where = ' ('; - $or = ''; - $type_param = array(); - - foreach($search_types as $type) { - if (!empty($type)) { - $type = strtr($type, '@', '%'); - $type_where .= " $or `port_descr_type` LIKE ?"; - $or = 'OR'; - $type_param[] = $type; - } - } - $type_where .= ') '; - - # Run the query with the generated 'where' and necessary parameters, and send it back. - $ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); - return $ports; -} diff --git a/html/pages/iftype.inc.php b/html/pages/iftype.inc.php index 6c8495a054..266b98fb68 100644 --- a/html/pages/iftype.inc.php +++ b/html/pages/iftype.inc.php @@ -16,8 +16,27 @@ else { $bg = '#ffffff'; } -$types_array = explode(',', $vars['type']); -$ports = get_ports_from_type($types_array); +$type_where = ' ('; +foreach (explode(',', $vars['type']) as $type) { + if (is_array($config[$type.'_descr']) === false) { + $config[$type.'_descr'] = array($config[$type.'_descr']); + } + + foreach ($config[$type.'_descr'] as $additional_type) { + if (!empty($additional_type)) { + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $additional_type; + } + } + + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $type; +} + +$type_where .= ') '; +$ports = dbFetchRows("SELECT * FROM `ports` as I, `devices` AS D WHERE $type_where AND I.device_id = D.device_id ORDER BY I.ifAlias", $type_param); foreach ($ports as $port) { $if_list .= $seperator.$port['port_id']; @@ -26,6 +45,7 @@ foreach ($ports as $port) { unset($seperator); +$types_array = explode(',', $vars['type']); for ($i = 0; $i < count($types_array); $i++) { $types_array[$i] = ucfirst($types_array[$i]); From 0da39d9f7b55fd72246ebf777f965c20c7105933 Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Tue, 7 Jun 2016 12:30:44 +0100 Subject: [PATCH 087/133] Updated includes/polling/functions.inc.php to include full path file Updated includes/polling/functions.inc.php to include full path file will fix weathermap --- includes/polling/functions.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index bb6ef9cc14..796d738519 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -1,6 +1,6 @@ Date: Tue, 7 Jun 2016 22:31:47 +0930 Subject: [PATCH 088/133] Allow lmsensor fanspeeds of 0 to be discovered. --- includes/discovery/sensors/fanspeeds/lmsensors.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/discovery/sensors/fanspeeds/lmsensors.inc.php b/includes/discovery/sensors/fanspeeds/lmsensors.inc.php index 3127970f30..69b523fecc 100644 --- a/includes/discovery/sensors/fanspeeds/lmsensors.inc.php +++ b/includes/discovery/sensors/fanspeeds/lmsensors.inc.php @@ -19,7 +19,7 @@ if ($device['os'] == 'linux' || $device['os'] == 'pktj' || $device['os'] == 'cu $oid = '1.3.6.1.4.1.2021.13.16.3.1.3.'.$index; $current = snmp_get($device, $oid, '-Oqv', 'LM-SENSORS-MIB'); $descr = trim(str_ireplace('fan-', '', $descr)); - if ($current > '0') { + if ($current !== false && $current >= 0) { discover_sensor($valid['sensor'], 'fanspeed', $device, $oid, $index, 'lmsensors', $descr, '1', '1', null, null, null, null, $current); } } From 88f5423aafa754a189bc171c9a86acd80f17b20c Mon Sep 17 00:00:00 2001 From: Adam Winberg Date: Tue, 7 Jun 2016 15:02:11 +0200 Subject: [PATCH 089/133] Test different hostname formats in Oxidized integration --- html/pages/device/showconfig.inc.php | 29 +++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/html/pages/device/showconfig.inc.php b/html/pages/device/showconfig.inc.php index 917e85f1bb..da57752357 100644 --- a/html/pages/device/showconfig.inc.php +++ b/html/pages/device/showconfig.inc.php @@ -103,10 +103,29 @@ if (is_admin()) { } } else if ($config['oxidized']['enabled'] === true && isset($config['oxidized']['url'])) { + // Try with hostname as set in librenms first + $oxidized_hostname = $device['hostname']; // fetch info about the node and then a list of versions for that node - $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$device['hostname'].'?format=json'), true); + $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$oxidized_hostname.'?format=json'), true); + + // Try other hostname format if Oxidized request failed + if (! $node_info) { + // Adjust hostname based on whether domain was already in it or not + if (strpos($oxidized_hostname, '.') !== false) { + // Use short name + $oxidized_hostname = strtok($device['hostname'], '.'); + } else { + // Add domain if $config['mydomain'] is set + $oxidized_hostname = $config['mydomain'] ? $device['hostname'].'.'.$config['mydomain'] : $oxidized_hostname; + } + // Try Oxidized again with new hostname, if it has changed + if ($oxidized_hostname != $device['hostname']) { + $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$oxidized_hostname.'?format=json'), true); + } + } + if ($config['oxidized']['features']['versioning'] === true) { // fetch a list of versions - $config_versions = json_decode(file_get_contents($config['oxidized']['url'].'/node/version?node_full='.(isset($node_info['full_name']) ? $node_info['full_name'] : $device['hostname']).'&format=json'), true); + $config_versions = json_decode(file_get_contents($config['oxidized']['url'].'/node/version?node_full='.(isset($node_info['full_name']) ? $node_info['full_name'] : $oxidized_hostname).'&format=json'), true); } $config_total = 1; @@ -147,7 +166,7 @@ if (is_admin()) { } if (isset($previous_config)) { - $url = $config['oxidized']['url'].'/node/version/diffs?node='.$device['hostname'].'&group='; + $url = $config['oxidized']['url'].'/node/version/diffs?node='.$oxidized_hostname.'&group='; if (!empty($node_info['group'])) { $url .= $node_info['group']; } @@ -156,11 +175,11 @@ if (is_admin()) { $text = file_get_contents($url); // fetch diff } else { // fetch current_version - $text = file_get_contents($config['oxidized']['url'].'/node/version/view?node='.$device['hostname'].'&group='.(!empty($node_info['group']) ? $node_info['group'] : '').'&oid='.$current_config['oid'].'&date='.urlencode($current_config['date']).'&num='.$current_config['version'].'&format=text'); + $text = file_get_contents($config['oxidized']['url'].'/node/version/view?node='.$oxidized_hostname.'&group='.(!empty($node_info['group']) ? $node_info['group'] : '').'&oid='.$current_config['oid'].'&date='.urlencode($current_config['date']).'&num='.$current_config['version'].'&format=text'); } } else { // just fetch the only version - $text = file_get_contents($config['oxidized']['url'].'/node/fetch/'.(!empty($node_info['group']) ? $node_info['group'].'/' : '').$device['hostname']); + $text = file_get_contents($config['oxidized']['url'].'/node/fetch/'.(!empty($node_info['group']) ? $node_info['group'].'/' : '').$oxidized_hostname); } From c2bf94254d390f04a8f3c60bd092dc46174e9b1b Mon Sep 17 00:00:00 2001 From: Dave Bell Date: Wed, 8 Jun 2016 09:23:43 +0100 Subject: [PATCH 090/133] Fix Markup on config documentation page --- doc/Support/Configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Support/Configuration.md b/doc/Support/Configuration.md index 0954a063f8..2a614c490e 100644 --- a/doc/Support/Configuration.md +++ b/doc/Support/Configuration.md @@ -210,7 +210,7 @@ Disable the footer of the WebUI by setting `enable_footer` to 0. You can enable the old style network map (only available for individual devices with links discovered via xDP) by setting: ```php $config['gui']['network-map']['style'] = 'old'; -```` +``` #### Add host settings The following setting controls how hosts are added. If a host is added as an ip address it is checked to ensure the ip is not already present. If the ip is present the host is not added. From 809d281adff427c72c4c0c484b75edb9e0cdd9f1 Mon Sep 17 00:00:00 2001 From: Eldon Koyle Date: Wed, 8 Jun 2016 10:10:34 -0600 Subject: [PATCH 091/133] Add devicee hw/location on hover in alerts table * Add devices.hardware and devices.location * Remove some un-needed column aliases (col AS col is the default) --- html/includes/table/alerts.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/includes/table/alerts.inc.php b/html/includes/table/alerts.inc.php index 43fb46a265..8431866cb6 100644 --- a/html/includes/table/alerts.inc.php +++ b/html/includes/table/alerts.inc.php @@ -100,7 +100,7 @@ if ($rowCount != -1) { $sql .= " LIMIT $limit_low,$limit_high"; } -$sql = "SELECT `alerts`.*, `devices`.`hostname` AS `hostname`, `devices`.`sysName` AS `sysName`,`alert_rules`.`rule` AS `rule`, `alert_rules`.`name` AS `name`, `alert_rules`.`severity` AS `severity` $sql"; +$sql = "SELECT `alerts`.*, `devices`.`hostname`, `devices`.`sysName`, `devices`.`hardware`, `devices`.`location`, `alert_rules`.`rule`, `alert_rules`.`name`, `alert_rules`.`severity` $sql"; $rulei = 0; $format = $_POST['format']; From 9a8b133d8fae19f99bd5ee86e53fecdd3446127a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Wed, 8 Jun 2016 20:26:28 +0200 Subject: [PATCH 092/133] Add IBM BladeCenter Switch Support #3620 --- includes/discovery/os/ibmnos.inc.php | 2 +- includes/polling/os/ibmnos.inc.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/includes/discovery/os/ibmnos.inc.php b/includes/discovery/os/ibmnos.inc.php index 01733c03f9..9f72ae692b 100644 --- a/includes/discovery/os/ibmnos.inc.php +++ b/includes/discovery/os/ibmnos.inc.php @@ -11,7 +11,7 @@ */ if (!$os) { - if (stristr($sysDescr, 'IBM Networking Operating System') || stristr($sysDescr, 'IBM Flex System Fabric')) { + if (stristr($sysDescr, 'IBM Networking Operating System') || stristr($sysDescr, 'IBM Flex System Fabric') || stristr($sysDescr, 'IBM Networking OS')) { $os = 'ibmnos'; } } diff --git a/includes/polling/os/ibmnos.inc.php b/includes/polling/os/ibmnos.inc.php index 88059323de..95dc7cbcc9 100644 --- a/includes/polling/os/ibmnos.inc.php +++ b/includes/polling/os/ibmnos.inc.php @@ -45,3 +45,6 @@ else if (strpos($sysdescr_value, 'IBM Flex System Fabric') !== false) { $version = trim(snmp_get($device, '.1.3.6.1.2.1.47.1.1.1.1.10.1', '-Ovq'), '" '); $serial = trim(snmp_get($device, '.1.3.6.1.2.1.47.1.1.1.1.11.1', '-Ovq'), '" '); }//end if +else if (strpos($sysdescr_value, 'IBM Networking OS 1/10Gb Uplink Ethernet Switch Module') !== false) { + $hardware = "IBM BladeCenter 1/10Gb Uplink Ethernet Switch Module"; +}//end if From 76920956a999836362cf3ebf06b42a13fb25e85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Wed, 8 Jun 2016 21:26:59 +0200 Subject: [PATCH 093/133] HWg Additions / Changes #3606 And some changes to existing code. --- html/images/os/hwg-poseidon.png | Bin 0 -> 1218 bytes html/images/os/hwg.png | Bin 0 -> 712 bytes html/images/os/poseidon.png | Bin 18951 -> 0 bytes includes/definitions.inc.php | 14 +- ...{poseidon.inc.php => hwg-poseidon.inc.php} | 4 +- includes/discovery/os/hwg-ste.inc.php | 17 ++ ...{poseidon.inc.php => hwg-poseidon.inc.php} | 0 mibs/STE-MIB | 160 ++++++++++++++++++ 8 files changed, 190 insertions(+), 5 deletions(-) create mode 100644 html/images/os/hwg-poseidon.png create mode 100644 html/images/os/hwg.png delete mode 100644 html/images/os/poseidon.png rename includes/discovery/os/{poseidon.inc.php => hwg-poseidon.inc.php} (94%) create mode 100644 includes/discovery/os/hwg-ste.inc.php rename includes/polling/os/{poseidon.inc.php => hwg-poseidon.inc.php} (100%) create mode 100644 mibs/STE-MIB diff --git a/html/images/os/hwg-poseidon.png b/html/images/os/hwg-poseidon.png new file mode 100644 index 0000000000000000000000000000000000000000..5762618092a22c8fa547bd45919429cf83a17329 GIT binary patch literal 1218 zcmV;z1U>tSP)Urd!{9LGP;`<{Pr zI0FSdB7}6t5etr5f!1_3h2@Z@YqQmKYwI6Z*bNsMW^LSX-mHVVgAC7)lYY zjhdX&ffq4{6$)d}1U&N3^B&H7p67kK$a$AV!Mx#n|2+Hb`~CgC&m*+fnnx&uN32zV zRe)81M-JfnFNY>)7di9I5N&;~J%F%rB{V?yg4luJ| z!s%=EFNIESKj z8Ke>^zCB)v%M^^q;z*^J7vPV(2@4R|Oo&Sv7Sh08RUjoXwKW>J5(pV@elwHZDPA(q#H%>|hN z*h(=tI?L;oVd9GtQwZwzZ)S9Afs}FpL8jl0&topH12xa&bGmB?!!SwMir1bG5nq&~ zdtIb?P2Ow0hMiK_%3=4D>z98BU)Z*RXG?Nfv=ujRFYw958;nlh_FISEdQ?E+pAnf04oOe1741`UIPt_w&dp%HSE}wvocM%HsIyz ziTzYRoev1KqXB`PQfv!lGw|_CY!Bxw?J>~zW!tuHZf@45Y3jztMy-_657Rwc>!#)w z-SE*VePi0ko77 z4=KuuAETlyM0SRY@$qr4T)BedI804V0T7GD7#ka7c6RpPMPL{Pg@uKL!(m!mTM30i zR8>{c)z!tCHERe4gA5K1;&!{KtgPhx`SV1hKT%Ut!@+|G(OOeqUr#U?WbfX+baZsE zapOjg965qzS^o@>NF?a&>|}U&nBLxAdU|>Y1Ol8qd6K%iI+~iAxOC|f<>lp6R8-L2 z-OcduFnM`-w6wI4m6b(%dpnk8(bw09ZQC?8HL-K&PNLE1!vTa4NGUN4gF}Z7v1Q8^ zq?A~eMO#}Nwrx{eTg$}61S2CO#N%-ykqA;s($dlp_nXf!3_KnWZnqn)HA*Rj5EzE> z@FH>?2d~%5fddC9Dk`F&pn!&k2BxQ{>FVlYdU~3Sj10ozFtJz+%d*f~lbxN-_3PK^ z=;$C63Q=5K%)Wj5@caGv{eC7VCov4;!7Tl44`{8KnVG?H9CC90TBY9JUP?<#$<58> z!i5VI6%`SQL>L+xLP|+~em+Vmlv0e3j}r(4C@CqSv$K=x>T2fZ=8#e%gdjaVoj@S) g|B7h!TfP$d6Kljsvv+>4=>Px#07*qoM6N<$f-P)B-~a#s literal 0 HcmV?d00001 diff --git a/html/images/os/hwg.png b/html/images/os/hwg.png new file mode 100644 index 0000000000000000000000000000000000000000..1e19ba056ccd22778c159514ef6d96ba1c4d87fe GIT binary patch literal 712 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 + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysObjectId, '.1.3.6.1.4.1.21796.4.1')) { + $os = 'hwg-ste'; + } +} diff --git a/includes/polling/os/poseidon.inc.php b/includes/polling/os/hwg-poseidon.inc.php similarity index 100% rename from includes/polling/os/poseidon.inc.php rename to includes/polling/os/hwg-poseidon.inc.php diff --git a/mibs/STE-MIB b/mibs/STE-MIB new file mode 100644 index 0000000000..4f7e1bdb16 --- /dev/null +++ b/mibs/STE-MIB @@ -0,0 +1,160 @@ +-- HWg-STE MIB 1.02 +-- History: +-- +-- 1.00 08.12.2008 Marek Hummel - Created +-- 1.01 03.08.2009 Marek Hummel - Add SensorID, Change SensorState values +-- 1.02 14.05.2010 Marek Hummel - Fix Syntax +-- + +STE-MIB DEFINITIONS ::= BEGIN +IMPORTS + OBJECT-TYPE FROM RFC-1212 + enterprises FROM RFC1155-SMI + DisplayString,sysName FROM RFC1213-MIB + TRAP-TYPE FROM RFC-1215; + +-- +-- Type Definitions +-- +PositiveInteger ::= INTEGER (1..2147483647) -- 0x7FFF FFFF + +UnitType ::= INTEGER { + none (0), + celsius (1), + fahrenheit (2), + kelvin (3), + percent(4) + } + +SensorState ::= INTEGER { + invalid (0), + normal (1), + outofrangelo (2), + outofrangehi (3), + alarmlo (4), + alarmhi (5) + } + +SensorSN ::= DisplayString (SIZE (0..16)) +SensorName ::= DisplayString (SIZE (0..16)) +SensorValue ::= INTEGER +SensorID ::= INTEGER +SensorString ::= DisplayString (SIZE (0..10)) + +-- +-- Node Definitions +-- + +hwgroup OBJECT IDENTIFIER ::= { enterprises 21796 } +x390 OBJECT IDENTIFIER ::= { hwgroup 4 } +ste OBJECT IDENTIFIER ::= { x390 1 } + +-- Application Info +info OBJECT IDENTIFIER ::= { ste 70 } + +infoAddressMAC OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..17)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "MAC address in text form. + It is here to distinguish devices in trap messages." + ::= { info 1 } + +-- Table has to be last in a branch to satisfy snmp walk engine implementation +sensTable OBJECT-TYPE + SYNTAX SEQUENCE OF SensEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "A list of sensor table entries. The number + of entries corresponds with number of detected sensors." + ::= { ste 3 } + +sensEntry OBJECT-TYPE + SYNTAX SensEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "An entry containing information applicable to a + particular sensor." + INDEX { sensIndex } + ::= { sensTable 1 } + +SensEntry ::= SEQUENCE { + sensIndex PositiveInteger, + sensName SensorName, + sensState SensorState, + sensString SensorString, + sensValue SensorValue, + sensSN SensorSN, + sensUnit UnitType, + sensID SensorID +} + +sensIndex OBJECT-TYPE + SYNTAX PositiveInteger + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "The sensor index." + ::= { sensEntry 1 } + +sensName OBJECT-TYPE + SYNTAX SensorName + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The sensor name." + ::= { sensEntry 2 } + +sensState OBJECT-TYPE + SYNTAX SensorState + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The sensor state." + ::= { sensEntry 3 } + +sensString OBJECT-TYPE + SYNTAX SensorString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The string representation of sensor value." + ::= { sensEntry 4 } + +sensValue OBJECT-TYPE + SYNTAX SensorValue + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The integer (decimal * 10) representation + of sensor value." + ::= { sensEntry 5 } + +sensSN OBJECT-TYPE + SYNTAX SensorSN + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The sensor Serial number." + ::= { sensEntry 6 } + +sensUnit OBJECT-TYPE + SYNTAX UnitType + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The sensor unit." + ::= { sensEntry 7 } + +sensID OBJECT-TYPE + SYNTAX UnitType + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The sensor ID." + ::= { sensEntry 8 } + +END From e9a06c07af494093b550bc2bb584d0fd00c40647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Wed, 8 Jun 2016 22:16:47 +0200 Subject: [PATCH 094/133] Basic IBM IMM Support #3622 --- includes/definitions.inc.php | 11 + includes/discovery/os/ibm-imm.inc.php | 17 + includes/discovery/os/linux.inc.php | 3 +- mibs/IMM-MIB | 4534 +++++++++++++++++++++++++ 4 files changed, 4564 insertions(+), 1 deletion(-) create mode 100644 includes/discovery/os/ibm-imm.inc.php create mode 100644 mibs/IMM-MIB diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index f87bdfc0a0..06e1450a48 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1038,6 +1038,17 @@ $config['os'][$os]['text'] = 'Blade Network Technologies'; $config['os'][$os]['type'] = 'network'; $config['os'][$os]['icon'] = 'bnt'; +$os = 'ibm-imm'; +$config['os'][$os]['text'] = 'IBM IMM'; +$config['os'][$os]['type'] = 'appliance'; +$config['os'][$os]['icon'] = 'ibmnos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + $os = 'ibmnos'; $config['os'][$os]['text'] = 'IBM Networking Operating System'; $config['os'][$os]['type'] = 'network'; diff --git a/includes/discovery/os/ibm-imm.inc.php b/includes/discovery/os/ibm-imm.inc.php new file mode 100644 index 0000000000..22874412ab --- /dev/null +++ b/includes/discovery/os/ibm-imm.inc.php @@ -0,0 +1,17 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysObjectId, '1.3.6.1.4.1.2.3.51.3')) { + $os = 'ibm-imm'; + } +} diff --git a/includes/discovery/os/linux.inc.php b/includes/discovery/os/linux.inc.php index 3c8fd720e6..c91849d1ab 100644 --- a/includes/discovery/os/linux.inc.php +++ b/includes/discovery/os/linux.inc.php @@ -4,7 +4,8 @@ if (!$os) { $skip_oids = array( '.1.3.6.1.4.1.674.10892.2', '.1.3.6.1.4.1.17163.1.1', - '.1.3.6.1.4.1.17713.21' + '.1.3.6.1.4.1.17713.21', + '.1.3.6.1.4.1.2.3.51.3' ); if (preg_match('/^Linux/', $sysDescr) && !in_array($sysObjectId, $skip_oids)) { $os = 'linux'; diff --git a/mibs/IMM-MIB b/mibs/IMM-MIB new file mode 100644 index 0000000000..ff41a95a6e --- /dev/null +++ b/mibs/IMM-MIB @@ -0,0 +1,4534 @@ +-- *************************************************************************** +-- *************************************************************************** +-- +-- File : imm.mib +-- Description : Integrated Management Module mib for SNMP +-- By : IBM +-- Version : 1.4 +-- Date : October 28, 2010 +-- +-- +-- Copyright (c) 2007 IBM All Rights Reserved. +-- +-- +-- Contains MIB description for: +-- This MIB is to be used to provide configuration support of IMM as well as monitoring support +-- for the system. +-- *************************************************************************** +-- *************************************************************************** +-- *************************************************************************** +-- Revisions: +-- *************************************************************************** + IMM-MIB DEFINITIONS ::= BEGIN + + IMPORTS + OBJECT-TYPE FROM RFC-1212 + enterprises FROM RFC1155-SMI + -- DisplayString FROM RFC1213-MIB + IpAddress FROM RFC1155-SMI + DisplayString FROM RFC1213-MIB + TRAP-TYPE FROM RFC-1215; + + InetAddressIPv6 ::= TEXTUAL-CONVENTION + DISPLAY-HINT "02x:02x:02x:02x:02x:02x:02x:02x" + STATUS current + DESCRIPTION + "Represents an IPv6 network address. Since MIB browsers + may require different formats, the address is + expected to be the 16 byte address in network-byte order, + and shortened formats such as 0::0 are not accepted in SET + operations. Two common examples are: + + The NetSNMP command line will accept SET requests like: + snmpset -v1 -cprivate s 2001:00:00:00:FFFF:CCC4:BBB2:AAA6 + + Other MIB browsers may require the SET request value to be formatted as: + # 0x20 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xCC 0xC4 0xBB 0xB2 0xAA 0xA6" + SYNTAX OCTET STRING (SIZE (16)) + -- IBM enterprise group + ibm OBJECT IDENTIFIER ::= { enterprises 2 } + + -- IBM products group + ibmAgents OBJECT IDENTIFIER ::= { ibm 3 } + + -- IBM e-Server Advanced System Management Support Processor(SP) agent group + netfinitySupportProcessorAgent OBJECT IDENTIFIER ::= { ibmAgents 51 } + + -- IBM integrated Management Module + ibmIntegratedManagementModuleMIB OBJECT IDENTIFIER ::= { netfinitySupportProcessorAgent 3 } + +-- *************************************************************************** +-- Start: Define groups of objects within the ibmRemoteSupSnmpMIB +-- *************************************************************************** + --This group of objects provides the various environmental monitors for the + -- local system and the IMM + monitors OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 1 } + + --This group of objects provides the error log objects for the IMM + errorLogs OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 2 } + + --This group of objects provides configuration functions for the IMM + configureSP OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 3 } + + --This group of objects provides configuration functions for the system(server) + generalSystemSettings OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 4 } + + --This group of objects provides configuration functions for system power + systemPower OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 5 } + + --This group of objects provides functions to boot the IMM and system + restartReset OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 6 } + + --This group of objects provides functions to update the IMM firmware + firmwareUpdate OBJECT IDENTIFIER ::= { ibmIntegratedManagementModuleMIB 7 } + +-- **************************************************************************** +-- Monitors +-- **************************************************************************** + -- ************************************************************************ + -- Temperature + -- ************************************************************************ + temperature OBJECT IDENTIFIER ::= { monitors 1 } + tempNumber OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION "The present number of rows in the temperature table." + ::= { temperature 1 } + + tempTable OBJECT-TYPE + SYNTAX SEQUENCE OF TempEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "This table contains temperature measurement information." + ::= { temperature 2 } + + tempEntry OBJECT-TYPE + SYNTAX TempEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "Each row contains parameters related to a temperature measurement channel." + INDEX { tempIndex } + ::= { tempTable 1 } + + TempEntry ::= + SEQUENCE { + tempIndex INTEGER, + tempDescr DisplayString, + tempReading INTEGER, + tempNominalReading INTEGER, + tempNonRecovLimitHigh INTEGER, + tempCritLimitHigh INTEGER, + tempNonCritLimitHigh INTEGER, + tempNonRecovLimitLow INTEGER, + tempCritLimitLow INTEGER, + tempNonCritLimitLow INTEGER + } + + tempIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION "This column is used to identify a particular + temperature measurement channel." + ::= { tempEntry 1 } + + tempDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..31)) + ACCESS read-only + + STATUS mandatory + DESCRIPTION "A description of the temperature measurement + channel." + ::= { tempEntry 2 } + + tempReading OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The measured temperature." + ::= { tempEntry 3 } + + tempNominalReading OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The nominal temperature, if available." + ::= { tempEntry 4 } + + tempNonRecovLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The non-recoverable limit for the measured temperature. If + the measured value rises above this limit a trap is sent." + ::= { tempEntry 5} + + tempCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The critical limit for the measured temperature. If + the measured value rises above this limit a trap is sent." + ::= { tempEntry 6} + + tempNonCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The non-critical limit for the measured temperature. If + the measured value rises above this limit a trap is sent." + ::= { tempEntry 7} + + tempNonRecovLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The non-recoverable limit for the measured temperature. If + the measured value falls below this limit a trap is sent." + ::= { tempEntry 8} + + tempCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The critical limit for the measured temperature. If + the measured value falls below this limit a trap is sent." + ::= { tempEntry 9} + + tempNonCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Degrees Celsius" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The non-critical limit for the measured temperature. If + the measured value falls below this limit a trap is sent." + ::= { tempEntry 10} + + -- ************************************************************************ + -- Voltages + -- ************************************************************************ + voltage OBJECT IDENTIFIER ::= { monitors 2 } + -------------------------------------------------------------------------------- + voltNumber OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION "The present number of rows in the voltage table." + ::= { voltage 1 } + + voltTable OBJECT-TYPE + SYNTAX SEQUENCE OF VoltEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "This table contains voltage measurement information." + ::= { voltage 2 } + + voltEntry OBJECT-TYPE + SYNTAX VoltEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "Each row contains parameters related to a + voltage measurement channel." + INDEX { voltIndex } + ::= { voltTable 1 } + + VoltEntry ::= + SEQUENCE { + voltIndex INTEGER, + voltDescr DisplayString, + voltReading INTEGER, + voltNominalReading INTEGER, + voltNonRecovLimitHigh INTEGER, + voltCritLimitHigh INTEGER, + voltNonCritLimitHigh INTEGER, + voltNonRecovLimitLow INTEGER, + voltCritLimitLow INTEGER, + voltNonCritLimitLow INTEGER + } + + voltIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION "This column is used to identify a particular + voltage measurement channel." + ::= { voltEntry 1 } + + voltDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..31)) + ACCESS read-only + STATUS mandatory + DESCRIPTION "A description of the voltage measurement channel." + ::= { voltEntry 2 } + + voltReading OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The measured voltage." + ::= { voltEntry 3 } + + voltNominalReading OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The nominal voltage, if available." + ::= { voltEntry 4 } + + voltNonRecovLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The high non-recoverable limit for the measured voltage. If the + measured value falls above this limit a trap is sent." + ::= { voltEntry 5 } + + voltCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The high critical limit for the measured voltage. If the + measured value rises above this limit a trap is sent." + ::= { voltEntry 6 } + + voltNonCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The high non-critical limit for the measured voltage. If the + measured value rises above this limit a trap is sent." + ::= { voltEntry 7 } + + voltNonRecovLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The low non-recoverable limit for the measured voltage. If the + measured value falls below this limit a trap is sent." + ::= { voltEntry 8 } + + voltCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The low critical limit for the measured voltage. If the + measured value falls below this limit a trap is sent." + ::= { voltEntry 9 } + + voltNonCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "Millivolts" + ACCESS read-write + STATUS mandatory + DESCRIPTION "The low non-critical limit for the measured voltage. If the + measured value falls below this limit a trap is sent." + ::= { voltEntry 10 } + + + -- ************************************************************************ + -- Fans + -- ************************************************************************ + fans OBJECT IDENTIFIER ::= { monitors 3 } + fanNumber OBJECT-TYPE + SYNTAX Gauge + ACCESS read-only + STATUS mandatory + DESCRIPTION "The present number of rows in the fan table." + ::= { fans 1 } + + fanTable OBJECT-TYPE + SYNTAX SEQUENCE OF FanEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "This table contains fan information." + ::= { fans 2 } + + fanEntry OBJECT-TYPE + SYNTAX FanEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION "Each row contains parameters related to a fan." + INDEX { fanIndex } + ::= { fanTable 1 } + + FanEntry ::= + SEQUENCE { + fanIndex INTEGER, + fanDescr DisplayString, + fanSpeed OCTET STRING, + fanNonRecovLimitHigh INTEGER, + fanCritLimitHigh INTEGER, + fanNonCritLimitHigh INTEGER, + fanNonRecovLimitLow INTEGER, + fanCritLimitLow INTEGER, + fanNonCritLimitLow INTEGER + } + + fanIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION "This column is used to identify a particular fan." + ::= { fanEntry 1 } + + fanDescr OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..31)) + ACCESS read-only + STATUS mandatory + DESCRIPTION "A description of the fan measurement channel." + ::= { fanEntry 2 } + + + fanSpeed OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Fan speed expressed in percent(%) of maximum RPM. + An octet string expressed as 'ddd% of maximum' where: + d is a decimal digit or blank space for a leading zero. + If the fan is determined not to be running or + the fan speed cannot be determined, the string will + indicate 'Offline'." + ::= { fanEntry 3 } + + fanNonRecovLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The high non-recoverable limit for the measured fan. If the + measured value falls above this limit a trap is sent." + ::= { fanEntry 4 } + + fanCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The high critical limit for the measured fan. If the + measured value rises above this limit a trap is sent." + ::= { fanEntry 5 } + + fanNonCritLimitHigh OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The high non-critical limit for the measured fan. If the + measured value rises above this limit a trap is sent." + ::= { fanEntry 6 } + + fanNonRecovLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The low non-recoverable limit for the measured fan. If the + measured value falls below this limit a trap is sent." + ::= { fanEntry 7 } + + fanCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The low critical limit for the measured fan. If the + measured value falls below this limit a trap is sent." + ::= { fanEntry 8 } + + fanNonCritLimitLow OBJECT-TYPE + SYNTAX INTEGER + UNITS "RPM" + ACCESS read-only + STATUS mandatory + DESCRIPTION "The low non-critical limit for the measured fan. If the + measured value falls below this limit a trap is sent." + ::= { fanEntry 9 } + + -- ************************************************************************ + -- System Health + -- ************************************************************************ + systemHealth OBJECT IDENTIFIER ::= { monitors 4 } + + -- *********************************************************************** + -- System Health Status + -- *********************************************************************** + systemHealthStat OBJECT-TYPE + SYNTAX INTEGER { + nonRecoverable(0), + critical(2), + nonCritical(4), + normal(255) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Indicates status of system health for the + system in which the IMM resides. + Value of 'nonRecoverable' indicates a severe error has occurred + and the system may not be functioning. A value of + 'critical' indicates that a error has occurred but + the system is currently functioning properly. A value of + 'nonCritical' indicates that a condition has occurred + that may change the state of the system in the future but currently + the system is working properly. A value of + 'normal' indicates that the system is operating normally." + ::= { systemHealth 1 } + + -- *********************************************************************** + -- System Health Summary + -- *********************************************************************** + systemHealthSummaryTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemHealthSummaryEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of System Health summary. Contains more detailed + information about the reasons for the overall system + health status." + ::= { systemHealth 2 } + + systemHealthSummaryEntry OBJECT-TYPE + SYNTAX SystemHealthSummaryEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "System Health Summary entry" + INDEX { systemHealthSummaryIndex } + ::= { systemHealthSummaryTable 1 } + + + SystemHealthSummaryEntry ::= SEQUENCE { + systemHealthSummaryIndex INTEGER, + systemHealthSummarySeverity OCTET STRING, + systemHealthSummaryDescription OCTET STRING + } + + + systemHealthSummaryIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System health summary index." + ::= { systemHealthSummaryEntry 1 } + + systemHealthSummarySeverity OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System health summary severity." + ::= { systemHealthSummaryEntry 2 } + + systemHealthSummaryDescription OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System health summary description." + ::= { systemHealthSummaryEntry 3 } + + -- *********************************************************************** + -- Vital Product Data(VPD) information + -- *********************************************************************** + vpdInformation OBJECT IDENTIFIER ::= { monitors 5 } + + -- *********************************************************************** + -- IMM VPD + -- *********************************************************************** + + immVpdTable OBJECT-TYPE + SYNTAX SEQUENCE OF IMMVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of IMM VPD." + ::= { vpdInformation 1 } + + immVpdEntry OBJECT-TYPE + SYNTAX IMMVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "iMBC VPD entry." + INDEX { immVpdIndex } + ::= { immVpdTable 1 } + + + IMMVpdEntry ::= SEQUENCE { + immVpdIndex INTEGER, + immVpdType OCTET STRING, + immVpdVersionString OCTET STRING, + immVpdReleaseDate OCTET STRING + } + + + immVpdIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "IMM VPD index." + ::= { immVpdEntry 1 } + + immVpdType OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "IMM VPD Type. Indicates either Bios or Diag or spFimware VPD" + ::= { immVpdEntry 2 } + + immVpdVersionString OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "IMM VPD Version Number of the software(Bios/Diag/spFirmware)." + ::= { immVpdEntry 3 } + + immVpdReleaseDate OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "IMM VPD Release Date of when the software(Bios/Diag/spFirmware) was released." + ::= { immVpdEntry 4 } + + + -- *********************************************************************** + -- Machine Level VPD + -- *********************************************************************** + machineVpd OBJECT IDENTIFIER ::= { vpdInformation 2 } + + + machineLevelVpd OBJECT IDENTIFIER ::= { machineVpd 1 } + + machineLevelVpdMachineType OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Machine type VPD information." + ::= { machineLevelVpd 1 } + + machineLevelVpdMachineModel OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Machine model VPD information." + ::= { machineLevelVpd 2 } + + machineLevelSerialNumber OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Machine serial number VPD information." + ::= { machineLevelVpd 3 } + + machineLevelUUID OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Machine UUID(Universal Unique ID information)." + ::= { machineLevelVpd 4 } + + machineLevelProductName OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Machine Product Name (e.g. System x3650 M2)." + ::= { machineLevelVpd 5 } + -- *********************************************************************** + -- System Component Level VPD + -- *********************************************************************** + systemComponentLevelVpdTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemComponentLevelVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of the system component hardware VPD information. View as a + table and not as individual entries for consistent results." + ::= { vpdInformation 17 } + + systemComponentLevelVpdEntry OBJECT-TYPE + SYNTAX SystemComponentLevelVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "System component hardware VPD entry. View as a table and not as + individual entries for consistent results." + INDEX { componentLevelVpdIndex } + ::= { systemComponentLevelVpdTable 1 } + + SystemComponentLevelVpdEntry ::= SEQUENCE { + componentLevelVpdIndex INTEGER, + componentLevelVpdFruNumber OCTET STRING, + componentLevelVpdFruName OCTET STRING, + componentLevelVpdSerialNumber OCTET STRING, + componentLevelVpdManufacturingId OCTET STRING + } + + componentLevelVpdIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD index. View as a table and not as individual + entries for consistent results." + ::= { systemComponentLevelVpdEntry 1 } + + componentLevelVpdFruNumber OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD FRU number. View as a table and not as + individual entries for consistent results." + ::= { systemComponentLevelVpdEntry 2 } + + componentLevelVpdFruName OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD FRU name. View as a table and not as + individual entries for consistent results." + ::= { systemComponentLevelVpdEntry 3 } + + componentLevelVpdSerialNumber OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD serial number. View as a table and not as + individual entries for consistent results." + ::= { systemComponentLevelVpdEntry 4 } + + componentLevelVpdManufacturingId OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD manufacturing ID. View as a table and not as + individual entries for consistent results." + ::= { systemComponentLevelVpdEntry 5 } + + -- *********************************************************************** + -- System Component Level VPD Tracking log + -- *********************************************************************** + systemComponentLevelVpdTrackingTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemComponentLevelVpdTrackingEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of system component hardware VPD tracking activity log. View as + a table and not as individual entries for consistent results." + ::= { vpdInformation 18 } + + systemComponentLevelVpdTrackingEntry OBJECT-TYPE + SYNTAX SystemComponentLevelVpdTrackingEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "System component hardware VPD tracking activity log entry. View as a + table and not as individual entries for consistent results." + INDEX { componentLevelVpdTrackingIndex } + ::= { systemComponentLevelVpdTrackingTable 1 } + + SystemComponentLevelVpdTrackingEntry ::= SEQUENCE { + componentLevelVpdTrackingIndex INTEGER, + componentLevelVpdTrackingFruNumber OCTET STRING, + componentLevelVpdTrackingFruName OCTET STRING, + componentLevelVpdTrackingSerialNumber OCTET STRING, + componentLevelVpdTrackingManufacturingId OCTET STRING, + componentLevelVpdTrackingAction OCTET STRING, + componentLevelVpdTrackingTimestamp OCTET STRING + + } + + componentLevelVpdTrackingIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log index. View as a table + and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 1 } + + componentLevelVpdTrackingFruNumber OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log FRU number. View as a + table and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 2 } + + componentLevelVpdTrackingFruName OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log FRU name. View as a + table and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 3 } + + componentLevelVpdTrackingSerialNumber OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log serial number. View as + a table and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 4 } + + componentLevelVpdTrackingManufacturingId OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log manufacturing ID. View + as a table and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 5 } + + componentLevelVpdTrackingAction OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log action(added/removed). + View as a table and not as individual entries for consistent results." + ::= {systemComponentLevelVpdTrackingEntry 6 } + + componentLevelVpdTrackingTimestamp OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System component level VPD tracking activity log timestanp. + View as a table and not as individual entries for consistent results." + ::= { systemComponentLevelVpdTrackingEntry 7 } + + -- ******************************************************************************** + -- Host MAC Address VPD + -- ******************************************************************************** + + hostMACAddressTable OBJECT-TYPE + SYNTAX SEQUENCE OF HostMACAddressEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of MAC addresses of the host NICs. + For consistent results, view as a table and not as individual entries." + ::= { vpdInformation 19 } + + hostMACAddressEntry OBJECT-TYPE + SYNTAX HostMACAddressEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Host MAC address entry. + For consistent results, view as a table and not as individual entries." + INDEX { hostMACAddressIndex } + ::= { hostMACAddressTable 1 } + + HostMACAddressEntry ::= SEQUENCE { + hostMACAddressIndex INTEGER, + hostMACAddressDescription DisplayString, + hostMACAddress OCTET STRING} + + hostMACAddressIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Host MAC address index. View as a table and not as individual + entries for consistent results." + ::= { hostMACAddressEntry 1 } + + hostMACAddressDescription OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Description of the MAC Address entry. View as a table and not as + individual entries for consistent results." + ::= { hostMACAddressEntry 2 } + + hostMACAddress OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Host MAC address must be a hexadecimal value between 000000000000 - FFFFFFFFFFFF. + This value must be in the form XX:XX:XX:XX:XX:XX View as a table and not as + individual entries for consistent results." + ::= { hostMACAddressEntry 3 } + + -- *********************************************************************** + -- System CPU VPD + -- *********************************************************************** + systemCPUVpdTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemCPUVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of the system CPU VPD information. View as a + table and not as individual entries for consistent results." + ::= { vpdInformation 20 } + + systemCPUVpdEntry OBJECT-TYPE + SYNTAX SystemCPUVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "System CPU VPD entry. View as a table and not as + individual entries for consistent results." + INDEX { cpuVpdIndex } + ::= { systemCPUVpdTable 1 } + + SystemCPUVpdEntry ::= SEQUENCE { + cpuVpdIndex INTEGER, + cpuVpdDescription DisplayString, + cpuVpdSpeed INTEGER, + cpuVpdIdentifier DisplayString, + cpuVpdType DisplayString, + cpuVpdFamily DisplayString, + cpuVpdCores INTEGER, + cpuVpdThreads INTEGER, + cpuVpdVoltage INTEGER, + cpuVpdDataWidth INTEGER } + + cpuVpdIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System CPU level VPD index. View as a table and not as individual + entries for consistent results." + ::= { systemCPUVpdEntry 1 } + + cpuVpdDescription OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System CPU Description. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 2 } + + + cpuVpdSpeed OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu speed in MHz. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 3 } + + cpuVpdIdentifier OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System CPU Identifier. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 4 } + + cpuVpdType OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu Type. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 5 } + + cpuVpdFamily OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu Family. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 6 } + + cpuVpdCores OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu number of cores. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 7 } + + cpuVpdThreads OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu number of threads. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 8 } + + cpuVpdVoltage OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu voltage in millivolts (1125 = 1.125 volts). + View as a table and not as individual entries for consistent + results." + ::= { systemCPUVpdEntry 9 } + + cpuVpdDataWidth OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System cpu data width in bits. View as a table and not as + individual entries for consistent results." + ::= { systemCPUVpdEntry 10 } + + -- *********************************************************************** + -- System Memory VPD + -- *********************************************************************** + systemMemoryVpdTable OBJECT-TYPE + SYNTAX SEQUENCE OF SystemMemoryVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of the system Memory VPD information. View as a + table and not as individual entries for consistent results." + ::= { vpdInformation 21 } + + systemMemoryVpdEntry OBJECT-TYPE + SYNTAX SystemMemoryVpdEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "System Memory VPD entry. View as a table and not as + individual entries for consistent results." + INDEX { memoryVpdIndex } + ::= { systemMemoryVpdTable 1 } + + SystemMemoryVpdEntry ::= SEQUENCE { + memoryVpdIndex INTEGER, + memoryVpdDescription DisplayString, + memoryVpdPartNumber DisplayString, + memoryVpdFRUSerialNumber DisplayString, + memoryVpdManufactureDate DisplayString, + memoryVpdType DisplayString, + memoryVpdSize INTEGER } + + memoryVpdIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System Memory level VPD index. View as a table and not as individual + entries for consistent results." + ::= { systemMemoryVpdEntry 1 } + + memoryVpdDescription OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System memory Description (e.g. DIMM 1). View as a table and not as + individual entries for consistent results." + ::= { systemMemoryVpdEntry 2 } + + memoryVpdPartNumber OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System Memory Part Number. View as a table and not as + individual entries for consistent results." + ::= { systemMemoryVpdEntry 3 } + + memoryVpdFRUSerialNumber OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System memory Serial Number. View as a table and not as + individual entries for consistent results." + ::= { systemMemoryVpdEntry 4 } + + memoryVpdManufactureDate OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System memory Manufacture Date in week/year format (e.g. 3609). + View as a table and not as individual entries for consistent + results." + ::= { systemMemoryVpdEntry 5 } + + memoryVpdType OBJECT-TYPE + SYNTAX DisplayString + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System memory Type (e.g. DDR III SDRAM). View as a table and not as + individual entries for consistent results." + ::= { systemMemoryVpdEntry 6 } + + memoryVpdSize OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "System memory size in GigaBytes. View as a table and not as + individual entries for consistent results." + ::= { systemMemoryVpdEntry 7 } + + +-- *********************************************************************** +-- Error Log Information +-- *********************************************************************** + -- *********************************************************************** + -- Event Log Information + -- *********************************************************************** + eventLog OBJECT IDENTIFIER ::= { errorLogs 1 } + + eventLogTable OBJECT-TYPE + SYNTAX SEQUENCE OF EventLogEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of event logs. View as a table and not as individual entries + for consistent results." + ::= { eventLog 1 } + + eventLogEntry OBJECT-TYPE + SYNTAX EventLogEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Event log entries. View as a table and not as individual entries for + consistent results." + INDEX { eventLogIndex } + ::= { eventLogTable 1 } + + + EventLogEntry ::= SEQUENCE { + eventLogIndex INTEGER, + eventLogString OCTET STRING, + eventLogSeverity INTEGER, + eventLogDate OCTET STRING, + eventLogTime OCTET STRING + } + + + eventLogIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Event log index number. View as a table and not as individual entries for + consistent results." + ::= { eventLogEntry 1 } + + eventLogString OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains a string of information to detail the event. View as a table and + not as individual entries for consistent results." + ::= { eventLogEntry 2} + + eventLogSeverity OBJECT-TYPE + SYNTAX INTEGER{ + error(0), + warning(1), + information(2), + other(3) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains a information to detail the severity of the event. View as a table and + not as individual entries for consistent results." + ::= { eventLogEntry 3} + + eventLogDate OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The Date of the Event occured. View as a table and + not as individual entries for consistent results." + ::= { eventLogEntry 4} + + eventLogTime OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The Time of the Event occured. View as a table and + not as individual entries for consistent results." + ::= { eventLogEntry 5} + + + eventLogClr OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Clear the event log." + ::= { eventLog 3 } + + +-- *********************************************************************** +-- Configure the IMM +-- *********************************************************************** + -- *********************************************************************** + -- Remote Access Configuration + -- *********************************************************************** + remoteAccessConfig OBJECT IDENTIFIER ::= { configureSP 1 } + + -- *********************************************************************** + -- General Remote Access and Remote Alerts Configuration + -- *********************************************************************** + generalRemoteCfg OBJECT IDENTIFIER ::= { remoteAccessConfig 1 } + + remoteAlertRetryDelay OBJECT-TYPE + SYNTAX INTEGER { + noDelay(0), + oneHalfMinute(30), + oneMinute(60), + oneAndHalfMinutes(90), + twoMinutes(120), + twoAndHalfMinutes(150), + threeMinutes(180), + threeAndHalfMinutes(210), + fourMinutes(240) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number in seconds to delay between retries if sending a + remote alert is unsuccessful." + ::= { generalRemoteCfg 1 } + + remoteAlertRetryCount OBJECT-TYPE + SYNTAX INTEGER { + noretry(0), + retry1(1), + retry2(2), + retry3(3), + retry4(4), + retry5(5), + retry6(6), + retry7(7), + retry8(8) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number of additional times a remote alert will be + retried if not succesfully sent. A value of zero indicates + no retries will be attempted." + ::= { generalRemoteCfg 2 } + + remoteAlertEntryDelay OBJECT-TYPE + SYNTAX INTEGER { + noDelay(0), + oneHalfMinute(30), + oneMinute(60), + oneAndHalfMinutes(90), + twoMinutes(120), + twoAndHalfMinutes(150), + threeMinutes(180), + threeAndHalfMinutes(210), + fourMinutes(240) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number in seconds to delay between entries if sending a + remote alert is unsuccessful." + ::= { generalRemoteCfg 3 } + + snmpCriticalAlerts OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,criticalAlerts will be sent to + SNMP , else critical alerts will not be sent." + ::= { generalRemoteCfg 4 } + + snmpWarningAlerts OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,warningAlerts will be sent to + SNMP , else warning alerts will not be sent." + ::= { generalRemoteCfg 5 } + + snmpSystemAlerts OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,systemAlerts will be sent to + SNMP , else system alerts will not be sent." + ::= { generalRemoteCfg 6 } + + remoteAccessTamperDelay OBJECT-TYPE + SYNTAX INTEGER { + oneMinute(1), + twoMinutes(2), + fiveMinutes(5), + tenMinutes(10), + fifteenMinutes(15), + twentyMinutes(20), + thirtyMinutes(30), + sixtyMinutes(60), + oneTwentyMinutes(120), + oneEightyMinutes(180), + twoFortyMinutes(240) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number in minutes to prohibit a remote login attempt + after more than 5 sequential login attempts have failed." + ::= { generalRemoteCfg 7 } + + userAuthenticationMethod OBJECT-TYPE + SYNTAX INTEGER { + localOnly(0), + ldapOnly(1), + localFirstThenLdap(2), + ldapFirstThenLocal(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Use this field to specify how users attempting to login should be authenticated. + There are two methods: + Local authentication. Userid and password are verified by searching the list + of users locally configured under Local Login Profiles. + LDAP based authentication. Users are authenticated via a remote LDAP server. + One or both authentication methods can be selected. If both methods should be + used, the order must be specified." + ::= { generalRemoteCfg 8 } + + + webInactivityTimeout OBJECT-TYPE + SYNTAX INTEGER { + oneMinutes(0), + fiveMinutes(1), + tenMinutes(2), + fifteenMinutes(3), + twentyMinutes(4), + noTimeout(5), + userPicksTimeout(6) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Use this field to indicate how long, in minutes, the IMM subsystem will wait + before disconnecting an inactive web session. Select the no timeout option to + disable this feature. Select the User picks timeout option if the timeout should + instead be selected by the user during the login process." + ::= { generalRemoteCfg 9 } + + + -- *********************************************************************** + -- SNMP alert filters + -- *********************************************************************** + + snmpAlertFilters OBJECT IDENTIFIER ::= { generalRemoteCfg 10 } + + safSpTrapTempC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Temperature threshold exceeded." + ::= { snmpAlertFilters 2 } + + safSpTrapVoltC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Voltage threshold exceeded." + ::= { snmpAlertFilters 3 } + + safSpTrapPowerC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Power failure." + ::= { snmpAlertFilters 4 } + + safSpTrapHdC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Hard disk drive failure." + ::= { snmpAlertFilters 5 } + + safSpTrapFanC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Single Fan failure." + ::= { snmpAlertFilters 6 } + + + safSpTrapIhcC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Incompatible hardware configuration." + ::= { snmpAlertFilters 7 } + + safSpTrapCPUC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: CPU Error." + ::= { snmpAlertFilters 8 } + + safSpTrapMemoryC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Memory Error." + ::= { snmpAlertFilters 9 } + + safSpTrapRdpsC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Redundant Power Supply failure." + ::= { snmpAlertFilters 10 } + + safSpTrapHardwareC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Other Failure - refer to Message ID for specific condition." + ::= { snmpAlertFilters 11 } + + + safSpTrapRdpsN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Redundant Power Supply failure." + ::= { snmpAlertFilters 12 } + + safSpTrapTempN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Temperature threshold exceeded." + ::= { snmpAlertFilters 13 } + + safSpTrapVoltN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Voltage threshold exceeded." + ::= { snmpAlertFilters 14 } + + safSpTrapPowerN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Power." + ::= { snmpAlertFilters 15 } + + safSpTrapFanN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Fan Error." + ::= { snmpAlertFilters 16 } + + safSpTrapCPUN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Memory Error." + ::= { snmpAlertFilters 17 } + + safSpTrapMemoryN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Memory Error." + ::= { snmpAlertFilters 18 } + + safSpTrapHardwareN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Warning - refer to Message ID for specific condition." + ::= { snmpAlertFilters 19 } + + safSpTrapRLogin OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Sev-Off Alert: Event Remote Login." + ::= { snmpAlertFilters 20 } + + + safSpTrapOsToS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: OS Timeout value exceeded." + ::= { snmpAlertFilters 21 } + + safSpTrapAppS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Application Alert. Refer to Message ID for specific condition." + ::= { snmpAlertFilters 22 } + + safSpTrapPowerS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Power Off." + ::= { snmpAlertFilters 23 } + + safSpTrapBootS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: System Boot Failure." + ::= { snmpAlertFilters 24 } + + safSpTrapLdrToS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: OS Loader Timeout." + ::= { snmpAlertFilters 25 } + + safSpTrapPFAS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Predictive Failure Analysis(PFA) information." + ::= { snmpAlertFilters 26 } + + safSpTrapSysLogS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: System Log 75% full." + ::= { snmpAlertFilters 27 } + + safSpTrapNwChangeS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Network change notification." + ::= { snmpAlertFilters 28 } + + -- *********************************************************************** + -- begin account security management + -- *********************************************************************** + customSecuritySettings OBJECT IDENTIFIER ::= { generalRemoteCfg 20 } + + loginPasswordRequired OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If enabled, all users require a login password to access the IMM + via the CLI and Web interfaces. The default value is disabled." + ::= { customSecuritySettings 1 } + + passwordExpirationPeriod OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The number of days before login passwords expire. The minimum + value is 1 day and the maximum value is 365 days. The default + value is 90 days. A value of 0 disables this option." + ::= { customSecuritySettings 2 } + + minimumPasswordReuseCycle OBJECT-TYPE + SYNTAX INTEGER { + none(0), + onePassword(1), + twoPasswords(2), + threePasswords(3), + fourPasswords(4), + fivePasswords(5) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The number of unique passwords a user must choose before + reusing a password. The default value is none." + ::= { customSecuritySettings 3 } + + complexPasswordRulesEnforced OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If enabled, password should contains at least one numeric and + one alphabetic character." + ::= { customSecuritySettings 4 } + + minimumPasswordLength OBJECT-TYPE + SYNTAX INTEGER { + passwordLengthOne(1), + passwordLengthTwo(2), + passwordLengthThree(3), + passwordLengthFour(4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Minimum length of the password." + ::= { customSecuritySettings 5 } + -- *********************************************************************** + -- IMM Serial Port Configuration + -- *********************************************************************** + serialPortCfg OBJECT IDENTIFIER ::= { remoteAccessConfig 2 } + + + -- *********************************************************************** + -- Serial Redirect + -- *********************************************************************** + serialRedirect OBJECT IDENTIFIER ::= { serialPortCfg 3 } + + enterCLIkeySeq OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..15)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This is the keystroke sequence used to enter the CLI. The same restrictions as + the 'Enter CLI' sequence apply to this field. The sequence is not active for + the telnet interface, since either COM port may be available from the CLI session + for serial redirect (i.e. the meaning is ambiguous). The default value for this + field is '^[(\' i.e. ESC followed by (. + + Note: IMM on some servers does not have serial port support." + ::= { serialRedirect 1 } + + -- *********************************************************************** + -- Remote Alert Profiles + -- *********************************************************************** + remoteAlertIds OBJECT IDENTIFIER ::= { remoteAccessConfig 3 } + + + remoteAlertIdsTable OBJECT-TYPE + SYNTAX SEQUENCE OF RemoteAlertIdsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of remote alert entries. + This table lets you configure remote alert recipients. + You can define up to 12 unique recipients. + Note: All selected alert events will be sent to all + enabled alert recipients." + ::= { remoteAlertIds 1 } + + remoteAlertIdsEntry OBJECT-TYPE + SYNTAX RemoteAlertIdsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Remote alert entries." + INDEX { remoteAlertIdEntryIndex } + ::= { remoteAlertIdsTable 1 } + + + RemoteAlertIdsEntry ::= SEQUENCE { + remoteAlertIdEntryIndex INTEGER, + remoteAlertIdEntryStatus INTEGER, + remoteAlertIdEntryName OCTET STRING, + remoteAlertIdEmailAddr OCTET STRING, + remoteAlertIdEntryCriticalAlert INTEGER, + remoteAlertIdEntryWarningAlert INTEGER, + remoteAlertIdEntrySystemAlert INTEGER, + remoteAlertIdEntryAttachmentsToEmailAlerts INTEGER + } + + + remoteAlertIdEntryIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for remote alert entry." + ::= { remoteAlertIdsEntry 1 } + + remoteAlertIdEntryStatus OBJECT-TYPE + SYNTAX INTEGER { + disabled(1), + enabled(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If enabled alerts will be sent to this alert + recipient else alerts will not be sent." + ::= { remoteAlertIdsEntry 2 } + + + remoteAlertIdEntryName OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..50)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A null terminated string that contains + a text description of this entry." + + ::= { remoteAlertIdsEntry 3 } + + remoteAlertIdEmailAddr OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A null terminated string that + contains a E-Mail Address. For example 'jeb@us.ibm.com'. + Used only for a E-mail over Lan." + + ::= { remoteAlertIdsEntry 4} + + remoteAlertIdEntryCriticalAlert OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,criticalAlerts will be sent to this + remote alert receipient,else critical alerts will not be sent." + ::= { remoteAlertIdsEntry 5 } + + + remoteAlertIdEntryWarningAlert OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,warningAlerts will be sent to this + remote alert receipient,else warningAlerts will not be sent." + ::= { remoteAlertIdsEntry 6 } + + remoteAlertIdEntrySystemAlert OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If Enabled,systemAlerts will be sent to this + remote alert receipient,else systemAlerts will not be sent." + ::= { remoteAlertIdsEntry 7 } + + + remoteAlertIdEntryAttachmentsToEmailAlerts OBJECT-TYPE + SYNTAX INTEGER { + noAttachments(0), + attachEventLog(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Indicates if the event log should be attached to + a email alert." + ::= { remoteAlertIdsEntry 8 } + + remoteAlertFiltersTable OBJECT-TYPE + SYNTAX SEQUENCE OF RemoteAlertFiltersEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of Alert Filters. The entries (rows) in this table correspond 1-1 with the entries in the + remoteAlertIdsTable. They are correlated by index. " + ::= { remoteAlertIds 2 } + + remoteAlertFiltersEntry OBJECT-TYPE + SYNTAX RemoteAlertFiltersEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Remote Filters entries." + INDEX { rafIndex } + ::= { remoteAlertFiltersTable 1 } + + RemoteAlertFiltersEntry ::= SEQUENCE { + rafIndex INTEGER(0..255), + rafSpTrapTempC INTEGER, + rafSpTrapVoltC INTEGER, + rafSpTrapPowerC INTEGER, + rafSpTrapHdC INTEGER, + rafSpTrapFanC INTEGER, + rafSpTrapIhcC INTEGER, + rafSpTrapCPUC INTEGER, + rafSpTrapMemoryC INTEGER, + rafSpTrapRdpsC INTEGER, + rafSpTrapHardwareC INTEGER, + rafSpTrapRdpsN INTEGER, + rafSpTrapTempN INTEGER, + rafSpTrapVoltN INTEGER, + rafSpTrapPowerN INTEGER, + rafSpTrapFanN INTEGER, + rafSpTrapCPUN INTEGER, + rafSpTrapMemoryN INTEGER, + rafSpTrapHardwareN INTEGER, + rafSpTrapRLogin INTEGER, + rafSpTrapOsToS INTEGER, + rafSpTrapAppS INTEGER, + rafSpTrapPowerS INTEGER, + rafSpTrapBootS INTEGER, + rafSpTrapLdrToS INTEGER, + rafSpTrapPFAS INTEGER, + rafSpTrapSysLogS INTEGER, + rafSpTrapNwChangeS INTEGER + } + + rafIndex OBJECT-TYPE + SYNTAX INTEGER(0..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for User Authority Level entry." + ::= { remoteAlertFiltersEntry 1 } + + + rafSpTrapTempC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Temperature threshold exceeded." + ::= { remoteAlertFiltersEntry 2 } + + rafSpTrapVoltC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Voltage threshold exceeded." + ::= { remoteAlertFiltersEntry 3 } + + rafSpTrapPowerC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Power failure." + ::= { remoteAlertFiltersEntry 4 } + + rafSpTrapHdC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Hard disk drive failure." + ::= { remoteAlertFiltersEntry 5 } + + rafSpTrapFanC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Single Fan failure." + ::= { remoteAlertFiltersEntry 6 } + + + rafSpTrapIhcC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Incompatible hardware configuration." + ::= { remoteAlertFiltersEntry 7 } + + rafSpTrapCPUC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: CPU Error." + ::= { remoteAlertFiltersEntry 8 } + + rafSpTrapMemoryC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Memory Error." + ::= { remoteAlertFiltersEntry 9 } + + rafSpTrapRdpsC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Redundant Power Supply failure." + ::= { remoteAlertFiltersEntry 10 } + + rafSpTrapHardwareC OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Critical Alert: Other Failure - refer to Message ID for specific condition." + ::= { remoteAlertFiltersEntry 11 } + + + rafSpTrapRdpsN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Redundant Power Supply failure." + ::= { remoteAlertFiltersEntry 12 } + + rafSpTrapTempN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Temperature threshold exceeded." + ::= { remoteAlertFiltersEntry 13 } + + rafSpTrapVoltN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Voltage threshold exceeded." + ::= { remoteAlertFiltersEntry 14 } + + rafSpTrapPowerN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Power." + ::= { remoteAlertFiltersEntry 15 } + + rafSpTrapFanN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Fan Error." + ::= { remoteAlertFiltersEntry 16 } + + rafSpTrapCPUN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Memory Error." + ::= { remoteAlertFiltersEntry 17 } + + rafSpTrapMemoryN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Memory Error." + ::= { remoteAlertFiltersEntry 18 } + + rafSpTrapHardwareN OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Non-Critical Alert: Warning - refer to Message ID for specific condition." + ::= { remoteAlertFiltersEntry 19 } + + rafSpTrapRLogin OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Sev-Off Alert: Event Remote Login." + ::= { remoteAlertFiltersEntry 20 } + + + rafSpTrapOsToS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: OS Timeout value exceeded." + ::= { remoteAlertFiltersEntry 21 } + + rafSpTrapAppS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Application Alert. Refer to Message ID for specific condition." + ::= { remoteAlertFiltersEntry 22 } + + rafSpTrapPowerS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Power Off." + ::= { remoteAlertFiltersEntry 23 } + + rafSpTrapBootS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: System Boot Failure." + ::= { remoteAlertFiltersEntry 24 } + + rafSpTrapLdrToS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: OS Loader Timeout." + ::= { remoteAlertFiltersEntry 25 } + + rafSpTrapPFAS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Predictive Failure Analysis(PFA) information." + ::= { remoteAlertFiltersEntry 26 } + + rafSpTrapSysLogS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: System Log 75% full." + ::= { remoteAlertFiltersEntry 27 } + + rafSpTrapNwChangeS OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "System Alert: Network change notification." + ::= { remoteAlertFiltersEntry 28 } + generateTestAlert OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Generate a Test Alert. This will send a test alert to all configured + and enabled remote alert receipients. The text portion of the + alert will contain 'Application Posted Alert to IMM'." + ::= { remoteAlertIds 30 } + + -- *********************************************************************** + -- Remote Access Profiles + -- *********************************************************************** + remoteAccessIds OBJECT IDENTIFIER ::= { remoteAccessConfig 4 } + + + remoteAccessIdsTable OBJECT-TYPE + SYNTAX SEQUENCE OF RemoteAccessIdsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of remote access profiles. + + This table lets you to configure all login profiles. + You can define up to 12 unique profiles. + + Note: By default, the remote supervisor adapter + comes configured with one login profile that allows remote + access using a login ID of 'USERID' and a password of 'PASSW0RD' + (the 0 is a zero). To avoid a potential security exposure, + we strongly recommend that you change this default Login + Profile to values of your choice." + ::= { remoteAccessIds 1 } + + remoteAccessIdsEntry OBJECT-TYPE + SYNTAX RemoteAccessIdsEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Remote access entries." + INDEX { remoteAccessIdEntryIndex } + ::= { remoteAccessIdsTable 1 } + + + RemoteAccessIdsEntry ::= SEQUENCE { + remoteAccessIdEntryIndex INTEGER, + remoteAccessIdEntryUserId OCTET STRING, + remoteAccessIdEntryPassword OCTET STRING, + remoteAccessIdEntryUserPwdLeftDays INTEGER + } + + + remoteAccessIdEntryIndex OBJECT-TYPE + SYNTAX INTEGER(0..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for Remote access entry." + ::= { remoteAccessIdsEntry 1 } + + remoteAccessIdEntryUserId OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..16)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Remote access entry null terminated string that + contains the user-id. This can only be modified from + blank to non-blank, then back to blank." + ::= { remoteAccessIdsEntry 2 } + + remoteAccessIdEntryPassword OBJECT-TYPE + SYNTAX OCTET STRING(SIZE(0..16)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Remote access entry null terminated string that + contains the password. On a read a NULL string + will be returned for security reasons." + ::= { remoteAccessIdsEntry 3 } + + -- made part of user structure instead of separate structure + remoteAccessIdEntryUserPwdLeftDays OBJECT-TYPE + SYNTAX INTEGER(0..365) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "left days before password expired for selected user" + ::= {remoteAccessIdsEntry 4 } + + -- 51.1.4.1.4.2 + remoteAccessUserAuthorityLevelTable OBJECT-TYPE + SYNTAX SEQUENCE OF RemoteAccessUserAuthorityLevelEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of user authority level profiles." + ::= { remoteAccessIds 2 } + + remoteAccessUserAuthorityLevelEntry OBJECT-TYPE + SYNTAX RemoteAccessUserAuthorityLevelEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "User authority level entries." + INDEX { ualIndex } + ::= { remoteAccessUserAuthorityLevelTable 1 } + + RemoteAccessUserAuthorityLevelEntry ::= SEQUENCE { + ualIndex INTEGER(0..255), + ualId OCTET STRING (SIZE(0..16)), + ualSupervisor INTEGER, + ualReadOnly INTEGER, + ualAccountManagement INTEGER, + ualConsoleAccess INTEGER, + ualConsoleAndVirtualMediaAccess INTEGER, + ualServerPowerAccess INTEGER, + ualAllowClearLog INTEGER, + ualAdapterBasicConfig INTEGER, + ualAdapterNetworkAndSecurityConfig INTEGER, + ualAdapterAdvancedConfig INTEGER + } + + ualIndex OBJECT-TYPE + SYNTAX INTEGER(0..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for User Authority Level entry." + ::= { remoteAccessUserAuthorityLevelEntry 1 } + + ualId OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..16)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "User ID" + ::= { remoteAccessUserAuthorityLevelEntry 2 } + + ualSupervisor OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User has no restrictions." + ::= { remoteAccessUserAuthorityLevelEntry 3 } + + ualReadOnly OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User has only read-only access, and cannot perform any save, modify, + clear, or state affecting operations (eg. restart IMM, restore defaults, + upgrade the firmware, etc.)." + ::= { remoteAccessUserAuthorityLevelEntry 4 } + + ualAccountManagement OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can add/modify/delete users and change the global login settings in + the Login Profiles panel." + ::= { remoteAccessUserAuthorityLevelEntry 5 } + + ualConsoleAccess OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can access the remote console." + ::= { remoteAccessUserAuthorityLevelEntry 6 } + + ualConsoleAndVirtualMediaAccess OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can access both the remote console and the virtual media feature." + ::= { remoteAccessUserAuthorityLevelEntry 7 } + + ualServerPowerAccess OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can access the power on and restart functions for the remote server. + These functions are available via the Power/Restart panel." + ::= { remoteAccessUserAuthorityLevelEntry 8 } + + ualAllowClearLog OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can clear the event logs. Everyone can look at the + event logs, but this particular permission is required to clear the logs." + ::= { remoteAccessUserAuthorityLevelEntry 9 } + + ualAdapterBasicConfig OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can modify configuration parameters in the System Settings and Alerts + panels." + ::= { remoteAccessUserAuthorityLevelEntry 10 } + + ualAdapterNetworkAndSecurityConfig OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User can modify configuration parameters in the Security, Network Protocols, + Network Interface, Port Assignments, and Serial Port panels." + ::= { remoteAccessUserAuthorityLevelEntry 11 } + + ualAdapterAdvancedConfig OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "User has no restrictions when configuring the adapter. In addition, the + user is said to have administrative access to the IMM, meaning that the + user can also perform the following advanced functions: firmware upgrades, + PXE network boot, restore adapter factory defaults, modify and restore + adapter configuration from a configuration file, and restart/reset the + adapter." + ::= { remoteAccessUserAuthorityLevelEntry 12 } + + -- *********************************************************************** + -- SP Clock + -- *********************************************************************** + spClock OBJECT IDENTIFIER ::= { configureSP 2 } + + spClockDateAndTimeSetting OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IMM clock date and time setting. + A date-time specification for the local time of day. + For example to set the date and time to + March 4, 2001 at 06:00:00AM, set the value to:'03/04/2001,06:00:00'. + field contents range + _____ ________ _____ + 1 month 01..12 + 2 separator '/' + 3 day 01..31 + 4 separator '/' + 5 year 2000..2037 + 6 separator ',' + 7 hour 00..23 + 8 separator ':' + 9 minutes 00..59 + 10 separator ':' + 11 seconds 00..59 + " + ::= { spClock 1 } + + spClockTimezoneSetting OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IMM clock Greenwich Mean Time(GMT) offset and Daylight Saving Time(DST) + settings. + + The following table lists GMT offsets and associated DST + information. DST is not observed in time zones where + the 'Observe DST' value does not contain 'yes' in the table. + Also, note that in some cases additional information + is required to determine the clock adjustment when DST is + observed. The additional information is required when the + GMT offset being written is +2:00 or +10:00. + + Examples + -to set the GMT offset to +3:30, + set the value to:'+3:30,no' + + -for Eastern Standard Time and observing DST, + set the value to:'-5:00,yes' + + -for Egypt and observing DST, + set the value to:'+2:00,yes,6' + + + GMT Observe Additional + Offset DST? DST value + ______ _______ __________ + +0:00 yes|no + +1:00 yes|no + +2:00 yes|no When 'Observe DST?' value is 'yes': + 5 (for E.Europe) + 4 (for BEL) + 6 (for Egypt) + +3:00 yes|no + +3:30 yes|no + +4:00 yes|no + +4:30 no + +5:00 yes|no + +5:30 no + +6:00 yes|no + +7:00 no + +8:00 no + +9:00 yes|no + +9:30 yes|no + +10:00 yes|no When 'Observe DST?' value is 'yes': + 9 (for AUS Eastern) + 10 (for Tasmania) + 4 (for Vladivostok) + +11:00 yes|no + +12:00 yes|no When 'Observe DST?' value is 'yes': + 4 (for Fiji) + 11 (New Zealand) + 7 (Chatham) + -12:00 no + -11:00 no + -10:00 no + -9:00 yes|no + -8:00 yes|no + -7:00 yes|no + -6:00 yes|no + -5:00 yes|no + -4:00 yes|no + -3:30 yes|no + -3:00 yes|no When 'Observe DST?' value is 'yes': + 12 (Greenland) + 13 (Brasilia) + -2:00 no + -1:00 yes|no + " + ::= { spClock 2 } + + + -- *********************************************************************** + -- SP identification + -- *********************************************************************** + spIdentification OBJECT IDENTIFIER ::= { configureSP 3 } + + spTxtId OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..16)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IMM text ID. Note: Do not put any 'space + character' at end of the ID." + ::= { spIdentification 1 } + + + -- *********************************************************************** + -- Network Configuration + -- *********************************************************************** + networkConfiguration OBJECT IDENTIFIER ::= { configureSP 4 } + + -- *********************************************************************** + -- Network Interfaces + -- *********************************************************************** + networkInterfaces OBJECT IDENTIFIER ::= { networkConfiguration 1 } + -- *********************************************************************** + -- Ethernet Interface 1 + -- *********************************************************************** + ethernetInterface OBJECT IDENTIFIER ::= { networkInterfaces 1 } + + ethernetInterfaceType OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..16)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The type of interface. Indicates 'Ethernet-1'." + ::= { ethernetInterface 1 } + + ethernetInterfaceEnabled OBJECT-TYPE + SYNTAX INTEGER { + interfaceDisabled(0), + interfaceEnabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable the interface. + + Note: To alter any of the configuration settings for the ethernet + interface the following procedure should be used: + (1)This object should be written with 'interfaceDisabled' + (2)Make the modifications to other settings + (3)This object should be written with 'interfaceEnabled' + (4)Restart the remote supervisor adapter + + Also note that when this object has a value of interfaceEnabled + the following is verifed, if this verification fails a error + response will be returned for the set of this object and the + ethernet interface will be left in a disabled state. + (1)Is the range for the MTU between 60-1500 + (2)Are the speed settings one of 10Mb, 100Mb, AUTO + (3)Are the speed settings one of Half, Full, AUTO + (4)If DHCP is disabled then is there a valid IP address + " + ::= { ethernetInterface 2 } + + ethernetInterfaceHostName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the 64 byte null terminated DNS host name for this + interface." + ::= { ethernetInterface 3 } + + ethernetInterfaceIPAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the IP address for the ethernet interface." + ::= { ethernetInterface 4 } + + ethernetInterfaceAutoNegotiate OBJECT-TYPE + SYNTAX INTEGER { + enabled(0), + disabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "If this is enabled, then we should ignore Speed/Duplex." + ::= { ethernetInterface 5 } + + ethernetInterfaceDataRate OBJECT-TYPE + SYNTAX INTEGER { + enet10Megabit(3), + enet100Megabit(4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Specifies the data transfer rate to be used over the ethernet + interface 10Mb/100Mb/Auto." + ::= { ethernetInterface 6 } + + ethernetInterfaceDuplexSetting OBJECT-TYPE + SYNTAX INTEGER { + fullDuplex(1), + halfDuplex(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Specifies the duplex settings for the data transfer rate to be used over + the ethernet interface Half/Full/Auto." + ::= { ethernetInterface 7 } + + ethernetInterfaceLAA OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(17)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Specifies the locally administered MAC address. The locally administered + address must be a hexadecimal value between 000000000000 - FFFFFFFFFFFF. This + value must be in the form XX:XX:XX:XX:XX:XX where 'X' is a number between 0 - 9 and + A - F. This IMM subsystem does not allow use of a multicast address. A multicast + address has the least significant bit of the first byte set to a 1. The first + byte must, therefore, be an even number." + ::= { ethernetInterface 8 } + + ethernetInterfaceDhcpEnabled OBJECT-TYPE + SYNTAX INTEGER { + dhcpDisabled(0), + dhcpEnabled(1), + dhcpTry(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable DHCP on this interface." + ::= { ethernetInterface 9 } + + ethernetInterfaceGatewayIPAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the IP address of the gateway/router for the ethernet + interface." + ::= { ethernetInterface 10 } + + ethernetInterfaceBIA OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(6)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Specifies the burned-in MAC (BIA) address." + ::= { ethernetInterface 11 } + + ethernetInterfaceMTU OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the Maximum Transmission Unit(MTU) for the ethernet + interface" + ::= { ethernetInterface 12 } + + ethernetInterfaceSubnetMask OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the Subnet Mask for the ethernet + interface" + ::= { ethernetInterface 13 } + + -- *********************************************************************** + -- DHCP Server Assigned Settings for ethernet interface 1 + -- *********************************************************************** + dhcpEthernetInterface OBJECT IDENTIFIER ::= { ethernetInterface 14 } + + dhcpHostName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the 64 byte null terminated DNS host name for this + interface, assigned by the DHCP server." + ::= { dhcpEthernetInterface 1 } + + dhcpIPAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the IP address for the ehternet interface, + assigned by the DHCP server." + ::= { dhcpEthernetInterface 2 } + + dhcpGatewayIPAddress OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the IP address of the gateway/router for the ethernet + interface, assigned by the DHCP server." + ::= { dhcpEthernetInterface 3 } + + dhcpSubnetMask OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the Subnet Mask for the ethernet + interface, assigned by the DHCP server." + ::= { dhcpEthernetInterface 4 } + + dhcpDomainName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the 64 byte null terminated Domain Name for this + interface, assigned by the DHCP server." + ::= { dhcpEthernetInterface 5 } + + dhcpPrimaryDNSServer OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the Primary DNS server, assigned by the DHCP server." + ::= { dhcpEthernetInterface 6 } + + dhcpSecondaryDNSServer OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the Secondary DNS server, assigned by the DHCP server." + ::= { dhcpEthernetInterface 7 } + + dhcpTertiaryDNSServer OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Contains the tertiary DNS server, assigned by the DHCP server." + ::= { dhcpEthernetInterface 8 } + + -- ******************************************************************************** + -- Ethernet Interface IPv6 + -- ******************************************************************************** + ethernetInterfaceIPv6 OBJECT IDENTIFIER ::= { networkInterfaces 4 } + +-- ethernetInterfaceIPv6Type OBJECT-TYPE +-- SYNTAX OCTET STRING (SIZE(0..16)) +-- ACCESS read-only +-- STATUS mandatory +-- DESCRIPTION +-- "The type of interface. Indicates 'Ethernet-1'." +-- ::= { ethernetInterfaceIPv6 1 } + + ethernetInterfaceIPv6Enabled OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The current IPv6 enabled or disabled state of this IMM. + + NOTE: If IPv6 address(es) have been configured for one or more + interfaces/protocols/services on this IMM, when you update + the firmware to a level which does not support IPv6, all IPv6 + connectivity will be lost, and services/interfaces for which an IPv6 + address was configured may not function properly. You will be required + to reconfigure these services/interfaces." + ::= { ethernetInterfaceIPv6 2 } + + ethernetInterfaceIPv6Config OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6 5 } + + ethernetInterfaceIPv6LocalAddress OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6Config 1 } + + ethernetInterfaceIPv6LinkLocalAddress OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IPv6 link local IP address for the ethernet interface. + + NOTE: If ethernetInterfaceIPv6Enabled is currently disabled, this + object has the value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceIPv6LocalAddress 1 } + + ethernetInterfaceIPv6StaticIPConfig OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6Config 2 } + + ethernetInterfaceIPv6StaticIPConfigEnabled OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IPv6 static IP address enabled or disabled state for the ethernet interface." + ::= { ethernetInterfaceIPv6StaticIPConfig 1 } + + ethernetInterfaceIPv6StaticIPAddress OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IPv6 static IP address for the ethernet interface. + + NOTE: If ethernetInterfaceIPv6Enabled is currently disabled, this + object has the value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceIPv6StaticIPConfig 2 } + + ethernetInterfaceIPv6StaticIPAddressPrefixLen OBJECT-TYPE + SYNTAX INTEGER (1..128) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IPv6 static IP address prefix length for the ethernet interface. + + NOTE: If ethernetInterfaceIPv6Enabled is currently disabled, this + object has the value 0." + ::= { ethernetInterfaceIPv6StaticIPConfig 3 } + + ethernetInterfaceIPv6StaticIPDefaultRoute OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IPv6 static IP address default route for the ethernet interface. + + NOTE: If ethernetInterfaceIPv6Enabled is currently disabled, this + object has the value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceIPv6StaticIPConfig 4 } + + ethernetInterfaceIPv6AutoIPConfig OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6Config 3 } + + ethernetInterfaceDHCPv6Config OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6AutoIPConfig 2 } + + ethernetInterfaceDHCPv6Enabled OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The DHCPv6 enabled or disabled state for the ethernet interface. + + NOTE: If ethernetInterfaceIPv6StatelessAutoConfigEnabled is currently disabled, Disabling + ethernetInterfaceDHCPv6Enabled will cause ethernetInterfaceIPv6AutoIPConfigEnabled to be disabled. + NOTE: If ethernetInterfaceIPv6StaticIPConfigEnabled and + ethernetInterfaceIPv6StatelessAutoConfigEnabled are currently disabled, Disabling + ethernetInterfaceDHCPv6Enabled will not be allowed." + ::= { ethernetInterfaceDHCPv6Config 1 } + + ethernetInterfaceDHCPv6IPAddress OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The IPv6 address for the ethernet interface, assigned by DHCPv6 server. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the value + '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceDHCPv6Config 2 } + + ethernetInterfaceDHCPv6DomainName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The 64 byte Domain Name for the ethernet interface, + assigned by the DHCPv6 server. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the + value '(Not available)'." + ::= { ethernetInterfaceDHCPv6Config 4 } + + ethernetInterfaceDHCPv6PrimaryDNSServer OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The primary DNS server, assigned by the DHCPv6 server. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the + value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceDHCPv6Config 5 } + + ethernetInterfaceDHCPv6SecondaryDNSServer OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The secondary DNS server, assigned by the DHCPv6 server. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the + value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceDHCPv6Config 6 } + + ethernetInterfaceDHCPv6TertiaryDNSServer OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The tertiary DNS server, assigned by the DHCPv6 server. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the + value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceDHCPv6Config 7 } + + ethernetInterfaceDHCPv6Server OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The DHCPv6 server IPv6 address used to acquire the DHCP settings. + + NOTE: If ethernetInterfaceIPv6Enabled or ethernetInterfaceDHCPv6Enabled + is disabled or if DHCPv6 server is not available, this object has the + value '0:0:0:0:0:0:0:0'." + ::= { ethernetInterfaceDHCPv6Config 8 } + + ethernetInterfaceIPv6StatelessAutoConfig OBJECT IDENTIFIER ::= { ethernetInterfaceIPv6AutoIPConfig 3 } + + ethernetInterfaceIPv6StatelessAutoConfigEnabled OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The IPv6 stateless auto-configuration enabled or disabled state for the ethernet interface. + + NOTE: If EthernetfInterfaceDHCPv6Enabled is currently disabled, Disabling + ethernetInterfaceIPv6StatelessAutoConfigEnabled will cause ethernetInterfaceIPv6AutoIPConfigEnabled + to be disabled." + ::= { ethernetInterfaceIPv6StatelessAutoConfig 1 } + + ethernetInterfaceStatelessAutoConfigAddressesTable OBJECT-TYPE + SYNTAX SEQUENCE OF EthernetInterfaceStatelessAutoConfigAddressesEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of stateless Auto-Config addresses entries" + ::= { ethernetInterfaceIPv6StatelessAutoConfig 2 } + + ethernetInterfaceStatelessAutoConfigAddressesEntry OBJECT-TYPE + SYNTAX EthernetInterfaceStatelessAutoConfigAddressesEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Stateless Auto-Config address entries" + INDEX { ethernetInterfaceStatelessAutoConfigAddressesIndex } + ::= { ethernetInterfaceStatelessAutoConfigAddressesTable 1 } + + EthernetInterfaceStatelessAutoConfigAddressesEntry ::= SEQUENCE { + ethernetInterfaceStatelessAutoConfigAddressesIndex INTEGER, + ethernetInterfaceStatelessAutoConfigAddresses InetAddressIPv6, + ethernetInterfaceStatelessAutoConfigAddressesPrefixLen INTEGER + } + + ethernetInterfaceStatelessAutoConfigAddressesIndex OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for stateless Auto-Config addresses. + + NOTE: If ethernetInterfaceIPv6StatelessAutoConfigEnabled or + ethernetInterfaceIPv6Enabled is currently disabled, this + object will show nothing." + ::= { ethernetInterfaceStatelessAutoConfigAddressesEntry 1 } + + ethernetInterfaceStatelessAutoConfigAddresses OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The stateless Auto-Configuration IPv6 address. + + NOTE: If ethernetInterfaceIPv6StatelessAutoConfigEnabled or + ethernetInterfaceIPv6Enabled is currently disabled, this + object will show nothing." + ::= { ethernetInterfaceStatelessAutoConfigAddressesEntry 2 } + + ethernetInterfaceStatelessAutoConfigAddressesPrefixLen OBJECT-TYPE + SYNTAX INTEGER (1..128) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "The stateless Auto-Configration address prefix length. + + NOTE: If ethernetInterfaceIPv6StatelessAutoConfigEnabled or + ethernetInterfaceIPv6Enabled is currently disabled, this + object will show nothing." + ::= { ethernetInterfaceStatelessAutoConfigAddressesEntry 3 } + + + ddnsStatus OBJECT-TYPE + SYNTAX INTEGER { disabled(0), enabled(1) } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Dynamic DNS provides the capability for a networked device + to notify a domain name server to change, in real time, the + active DNS configuration of its configured hostnames, addresses + or other information stored in DNS. With Dynamic DNS, host + computers gain the capability to notify their respective DNS + server of the IP address they have received from a DHCP server + or through self-configuration." + ::= { networkInterfaces 10 } + + hostName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the DNS host name for this system. This object + provides the exact same function as ethernetInterfaceHostName" + ::= { networkInterfaces 11 } + + ddnsDomainToUse OBJECT-TYPE + SYNTAX INTEGER { + dhcp(1), + manual(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The domain name to be used with Dynamic DNS. + The value shall be either dhcp or manual" + ::= { networkInterfaces 12 } + + domainName OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The user assigned DNS domain name." + ::= { networkInterfaces 13 } + -- *********************************************************************** + -- TCP/IP Protocol Configuration + -- *********************************************************************** + tcpProtocols OBJECT IDENTIFIER ::= { networkConfiguration 2 } + + -- *********************************************************************** + -- SNMP Agent Configuration + -- *********************************************************************** + snmpAgentConfig OBJECT IDENTIFIER ::= { tcpProtocols 1 } + + snmpSystemName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..48)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 48 byte string that contains the + SNMP agent name. Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpAgentConfig 1 } + + snmpSystemContact OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..48)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 48 byte string that contains the + SNMP agent contact name. Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpAgentConfig 2 } + + snmpSystemLocation OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..48)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 48 byte string that contains the + SNMP agent location name. Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpAgentConfig 3 } + + snmpSystemAgentTrapsDisable OBJECT-TYPE + SYNTAX INTEGER { + trapsEnabled(0), + trapsDisabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable SNMP traps. Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpAgentConfig 4 } + + -- *********************************************************************** + -- SNMP Agent Community Configuration + -- *********************************************************************** + snmpAgentCommunityConfig OBJECT IDENTIFIER ::= { snmpAgentConfig 5 } + + + -- *********************************************************************** + -- SNMP Community Configuration table + -- *********************************************************************** + + snmpCommunityTable OBJECT-TYPE + SYNTAX SEQUENCE OF SnmpCommunityEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of SNMP Community entries" + ::= { snmpAgentCommunityConfig 1 } + + snmpCommunityEntry OBJECT-TYPE + SYNTAX SnmpCommunityEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "DASD temperature threshold entries" + INDEX { snmpCommunityEntryIndex } + ::= { snmpCommunityTable 1 } + + SnmpCommunityEntry ::= SEQUENCE { + snmpCommunityEntryIndex INTEGER(0..255), + snmpCommunityEntryCommunityName OCTET STRING (SIZE(0..15)), + snmpCommunityEntryCommunityIpAddress1 OCTET STRING (SIZE(0..63)), + snmpCommunityEntryCommunityIpAddress2 OCTET STRING (SIZE(0..63)), + snmpCommunityEntryCommunityIpAddress3 OCTET STRING (SIZE(0..63)), + snmpCommunityEntryCommunityViewType INTEGER(1..3) + } + + + snmpCommunityEntryIndex OBJECT-TYPE + SYNTAX INTEGER(0..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for SNMP Agent Community entry." + ::= { snmpCommunityEntry 1 } + + snmpCommunityEntryCommunityName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..15)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Community entry name. Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpCommunityEntry 2 } + + snmpCommunityEntryCommunityIpAddress1 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Community IP address or host name. + Can either be a dotted decimal IP string(eg. 9.37.44.2) + or if DNS is enabled a host name. This field also allows two + wildcard values for read-Traps and write-Read-Traps communities: + 0.0.0.0 - allow any IPv4 address + 0::0 - allow any IPv6 address + Note: Set snmpSystemAgentEnable to disabled before performing a + set of this object." + ::= { snmpCommunityEntry 3 } + + snmpCommunityEntryCommunityIpAddress2 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Community IP address or host name. + Can either be a dotted decimal IP string(eg. 9.37.44.2) + or if DNS is enabled a host name. This field also allows two + wildcard values for read-Traps and write-Read-Traps communities: + 0.0.0.0 - allow any IPv4 address + 0::0 - allow any IPv6 address + Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpCommunityEntry 4 } + + snmpCommunityEntryCommunityIpAddress3 OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Community IP address or host name. + Can either be a dotted decimal IP string(eg. 9.37.44.2) + or if DNS is enabled a host name. This field also allows two + wildcard values for read-Traps and write-Read-Traps communities: + 0.0.0.0 - allow any IPv4 address + 0::0 - allow any IPv6 address + Note: Set snmpSystemAgentEnable + to disabled before performing a set of this object." + ::= { snmpCommunityEntry 5 } + + -- 4.9.3.1.4.5 + snmpCommunityEntryCommunityViewType OBJECT-TYPE + SYNTAX INTEGER { + read-Traps(1), + write-Read-Traps(2), + traps-Only(3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Access Level of the SNMPv1 managers. Note this parameter + is set for each community. Therefore all three managers + in the same community have the same access level." + ::= { snmpCommunityEntry 6 } + + + snmpv1SystemAgentEnable OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable the SNMPv1 agent. + + Note: To alter any of the configuration settings for the SNMP Agent + the following procedure should be used: + (1)This object should be written with 'disabled' + (2)Make the modifications to other settings + (3)This object should be written with 'enabled' + (4)Restart the remote supervisor adapter + + Also note that when this object has a value of enabled + that the following is verifed, if this verification fails a error + response will be returned for the set of this object and the SNMP + agent will be left in a disabled state. + (1)Is there a valid system contact + (2)Is there a valid system name + (3)Is there at least one valid community name and for that + community name is there one valid IP address or hostname + " + ::= { snmpAgentConfig 6 } + + snmpv3SystemAgentEnable OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable the SNMPv3 agent. + + Note: To alter any of the configuration settings for the SNMP Agent + the following procedure should be used: + (1)This object should be written with 'disabled' + (2)Make the modifications to other settings + (3)This object should be written with 'enabled' + (4)Restart the remote supervisor adapter + + Also note that when this object has a value of enabled + that the following is verifed, if this verification fails a error + response will be returned for the set of this object and the SNMP + agent will be left in a disabled state. + (1)Is there a valid system contact + (2)Is there a valid system name + (3)Is there at least one valid community name and for that + community name is there one valid IP address or hostname + " + ::= { snmpAgentConfig 7 } + + + -- ******************************************************************************** + -- SNMP Agent User Profile Configuration + -- ******************************************************************************** + + snmpAgentUserProfileConfig OBJECT IDENTIFIER ::= { snmpAgentConfig 8 } + + + -- ******************************************************************************** + -- SNMP User Profile Configuration table + -- ******************************************************************************** + + snmpUserProfileTable OBJECT-TYPE + SYNTAX SEQUENCE OF SnmpUserProfileEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "Table of SNMPv3 User Profile entries" + ::= { snmpAgentUserProfileConfig 1 } + + snmpUserProfileEntry OBJECT-TYPE + SYNTAX SnmpUserProfileEntry + ACCESS not-accessible + STATUS mandatory + DESCRIPTION + "SNMP User Profile entries" + INDEX { snmpUserProfileEntryIndex } + ::= { snmpUserProfileTable 1 } + + SnmpUserProfileEntry ::= SEQUENCE { + snmpUserProfileEntryIndex INTEGER, + snmpUserProfileEntryAuthProt INTEGER, + snmpUserProfileEntryPrivProt INTEGER, + snmpUserProfileEntryPrivPassword OCTET STRING, + snmpUserProfileEntryViewType INTEGER, + snmpUserProfileEntryIpAddress OCTET STRING + } + + + snmpUserProfileEntryIndex OBJECT-TYPE + SYNTAX INTEGER(0..255) + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Index for SNMPv3 Agent User Profile entry." + ::= { snmpUserProfileEntry 1 } + + snmpUserProfileEntryAuthProt OBJECT-TYPE + SYNTAX INTEGER { + none (1), + md5 (2), + sha (3) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMPv3 User Profile entry - Authentication Protocol + supported by the user." + ::= { snmpUserProfileEntry 2 } + + snmpUserProfileEntryPrivProt OBJECT-TYPE + SYNTAX INTEGER { + none (1), + des (2), + aes (4) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMPv3 User Profile entry - Privacy Protocol + supported by the user. The Privacy Password must be set + and the Authentication Protocol must be md5 or sha + before this field may be set to des or aes." + ::= { snmpUserProfileEntry 3 } + + snmpUserProfileEntryPrivPassword OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..31)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMPv3 User Profile entry - Privacy password + for the user. + + NOTE: Value returned for the GET command is + meaningless for this MIB object for security reason." + ::= { snmpUserProfileEntry 4 } + + snmpUserProfileEntryViewType OBJECT-TYPE + SYNTAX INTEGER { + read-Traps(1), + read-Write-Traps(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMPv3 User Profile entry - Access level (Get and Set) + of the user. " + ::= { snmpUserProfileEntry 5 } + + + snmpUserProfileEntryIpAddress OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMPv3 User Profile entry - IP address or host name. + Can either be a dotted decimal IP string (e.g. 9.37.44.2) + or if DNS is enabled a host name." + ::= { snmpUserProfileEntry 6 } + + -- *********************************************************************** + -- DNS Configuration + -- *********************************************************************** + dnsConfig OBJECT IDENTIFIER ::= { tcpProtocols 2 } + + dnsEnabled OBJECT-TYPE + SYNTAX INTEGER { + dnsDisabled(0), + dnsEnabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable or enable the DNS agent. + + Note that when this object has a value of enabled + that the following is verifed, if this verification fails a error + response will be returned for the set of this object and the DNS + resolver will be left in a disabled state. + (1)Is there at least one valid DNS server IP address + " + ::= { dnsConfig 1 } + + dnsServerIPAddress1 OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the primary DNS server IP address." + ::= { dnsConfig 2 } + + dnsServerIPAddress2 OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the secondary DNS server IP address." + ::= { dnsConfig 3 } + + dnsServerIPAddress3 OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the tertiary DNS server IP address." + ::= { dnsConfig 4 } + + dnsServerIPv6Address1 OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the primary IPv6 DNS server address." + ::= { dnsConfig 12 } + + dnsServerIPv6Address2 OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the secondary IPv6 DNS server address." + ::= { dnsConfig 13 } + + dnsServerIPv6Address3 OBJECT-TYPE + SYNTAX InetAddressIPv6 + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Contains the tertiary IPv6 DNS server address." + ::= { dnsConfig 14 } + + dnsPriority OBJECT-TYPE + SYNTAX INTEGER { + ipv6(1), + ipv4(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Tells the order host names are resolved. The options are + to either first resolve with an IPv6 DNS server or to first + resolve with an IPv6 DNS server." + ::= { dnsConfig 20 } + -- *********************************************************************** + -- SMTP Configuration + -- *********************************************************************** + smtpConfig OBJECT IDENTIFIER ::= { tcpProtocols 3 } + + + smtpServerNameOrIPAddress OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 64 byte string that contains the + SMTP server Host name or IP address(a.b.c.d)." + ::= { smtpConfig 1 } + + + -- *********************************************************************** + -- Telnet Configuration + -- *********************************************************************** + + -- 4.9.3.4.1 + tcpApplicationConfig OBJECT IDENTIFIER ::= { tcpProtocols 4 } + + -- 4.9.3.4.3 + telnetConnectionCounts OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + one(1), + two(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The number of telnet connections that can be active + concurrently." + ::= { tcpApplicationConfig 1 } + + -- 4.9.3.4.5 + slpAddrType OBJECT-TYPE + SYNTAX INTEGER { + multicast(0), + broadcast(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Set SLP address type to 0 (multicast) or 1 (broadcast). Note that when + slpAddrType is set to broadast value then the multicast address set in in + slpMulticastAddt will be ignored." + ::= { tcpApplicationConfig 2 } + + -- 4.9.3.4.6 + slpMulticastAddr OBJECT-TYPE + SYNTAX IpAddress + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Service Locator Protocol Multicast address" + ::= { tcpApplicationConfig 3 } + + -- *********************************************************************** + -- TCP Port Assignment + -- *********************************************************************** + tcpPortAssignmentCfg OBJECT IDENTIFIER ::= { tcpProtocols 5 } + + tcpPortsRestoreDefault OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Reset all the ports to the factory defaults. SP has to be reset + for change to take effect." + ::= { tcpPortAssignmentCfg 1 } + + httpPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "HTTP port number. Default value is 80. Once changed, the url's have to + include :port at the end. SP has to be reset for change to take effect." + ::= { tcpPortAssignmentCfg 2 } + + httpsPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SSL port number. Default value is 443. Once changed, the url's have to + include :port at the end. SP has to be reset for change to take effect." + ::= { tcpPortAssignmentCfg 3 } + + telnetLegacyCLIPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "telnet port number. Default value is 23. SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 4 } + + + sshLegacyCLIPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SSH port number. Default value is 22. SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 6 } + + + + snmpAgentPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Agent port number. Default value is 161. SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 8 } + + snmpTrapsPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "SNMP Traps port number. Default value is 162. SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 9 } + + remvidPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Remote Console port number. Default value is 2000. SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 10 } + + ibmSystemDirectorHttpPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IBM Systems Director Http port number.SP has to be reset for change + to take effect." + ::= { tcpPortAssignmentCfg 11 } + + + ibmSystemDirectorHttpsPortAssignment OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IBM Systems Director Https port number.SP has to be reset for change." + ::= { tcpPortAssignmentCfg 12 } + + + -- *********************************************************************** + -- LDAP Clinet Configuration + -- *********************************************************************** + + ldapClientCfg OBJECT IDENTIFIER ::= { tcpProtocols 6 } + + ldapServer1NameOrIPAddress OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 64 byte string that contains the + LDAP server host name or IP address (a.b.c.d)." + ::= { ldapClientCfg 1 } + + ldapServer1PortNumber OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "LDAP server port number." + ::= { ldapClientCfg 2 } + + ldapServer2NameOrIPAddress OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 64 byte string that contains the + LDAP server host name or IP address (a.b.c.d)." + ::= { ldapClientCfg 3 } + + ldapServer2PortNumber OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "LDAP server port number." + ::= { ldapClientCfg 4 } + + ldapServer3NameOrIPAddress OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A NULL terminated 64 byte string that contains the + LDAP server host name or IP address (a.b.c.d)." + ::= { ldapClientCfg 5 } + + ldapServer3PortNumber OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "LDAP server port number." + ::= { ldapClientCfg 6 } + + ldapRootDN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Distinguished Name for root entry of directory tree. + An example might look like dn=foobar,dn=com." + ::= { ldapClientCfg 7 } + + ldapUserSearchBaseDN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "As part of the user authentication process, it is necessary to search + the LDAP server for one or more attributes associated with a particular + user. Any search request must specify the base DN for the actual search. + This field specifies the base DN which should be used to search the User + directory. An example might look like cn=users,dn=foobar,dn=com. If this + field is left blank, the Root DN will be used as the search base instead. + As mentioned, user searches are part of the authentication process. They + are carried out to retrieve information about the user such as login + permissions, callback number, and group memberships. For Version 2.0 LDAP + clients, it is strongly encouraged that this parameter be configured, + otherwise a search using the root DN may not succeed (as seen on Active + Directory servers)." + ::= { ldapClientCfg 8 } + + ldapGroupFilter OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This filter is used for group authentication. It specifies what group or + groups that this MM belongs to. If left blank, group authentication is + disabled. Otherwise, group authentication will be performed against the + filter. The filter can be a specific group name (eg. IMMWest), a wildcard (*) + which matches everything, or a wildcard with a prefix (eg. IMM*). The default + filter is IMM*. + After user authentication, group authentication will take place, whereby an + attempt will be made to match the group or groups (that the user belongs to) + to the group filter defined here. If there is no match, the user will not pass + authentication and will be blocked. If there is a match, the login permissions + for the user will be retrieved from the matched group(s), unless the user + already has login permissions assigned directly from the user record retrieved + from the LDAP server." + ::= { ldapClientCfg 9 } + + + ldapBindingMethod OBJECT-TYPE + SYNTAX INTEGER { + anonymousAuthentication(0), + clientAuthentication(1), + userPrincipalName(2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "On initial binds to the LDAP server during user authentication, there are + three options: + Anonymous authentication: Bind attempt is made without a client DN or password. + If the bind is successful, a search will be requested in order to find an entry + on the LDAP server for the user attempting to login. If an entry is found, a + second attempt to bind will be attempted, this time with the user's DN and + password. If this succeeds, the user is deemed to have passed the user + authentication phase. Group authentication is then attempted if it is enabled. + Client authentication: Bind attempt is made with client DN and password + specified by this configuration parameter. If the bind is successful, we + proceed as above. + User Principal Name (UPN): Bind attempt is made directly with the credentials + used during the login process. If this succeeds, the user is deemed to have + passed the user authentication phase. Note that for Active Directory servers, + the userid can have the form someuser@somedomain or simply someuser." + ::= { ldapClientCfg 10 } + + ldapClientAuthenticationDN OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The initial bind to the LDAP server during user authentication can be + performed with anonymous authentication, client based authentication, or UPN. + The client based option requires a client DN and password as parameters to + the bind request. These parameters are configured here. Note that the password + can be left blank." + ::= { ldapClientCfg 11 } + + ldapClientAuthenticationPassword OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..25)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The client authentication password" + ::= { ldapClientCfg 12 } + + ldapRoleBasedSecurityEnabled OBJECT-TYPE + SYNTAX INTEGER { + enabled(1), + disabled(0) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "A value of true for RoleBasedSecurityEnabled indicates enhanced + will be used by the service processor. A value of false for + RoleBasedSecurityEnabled indicates the legacy bit mask based + security is being used." + ::= { ldapClientCfg 13 } + + ldapServerTargetName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "When administrator chooses Enhanced Role Based Security authentication model, + he can associate one IMM with one managed target object in Snap-in (one tool + to configure LDAP users permission) via one target name. The IMM target name can + be looked as alias of IMM, administrator can change it according to his + configuration requirements. This is a string of up to 63 characters (plus the + null character)" + ::= { ldapClientCfg 14 } + + + ldapUIDsearchAttribute OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "When the binding method selected is Anonymous authentication or Client + authentication, the initial bind to the LDAP server is followed by a search + request aimed at retrieving specific information about the user, including the + user's DN, login permissions, and group ownerships. In order to retrieve this + information, the search request must specify the attribute name used to + represent userids on that server. Specifically, this name is used as a search + filter against the login id entered by the user. This attribute name is + configured here. If this field is left blank, a default of uid is used during + user authentication. + For example, on Active Directory servers, the attribute name used for userids + is often sAMAccoutName. + When the binding method selected is UPN or Strict UPN, this field defaults + automatically to userPrincipalName during user authentication if the userid + entered has the form userid@somedomain." + ::= { ldapClientCfg 15 } + + ldapGroupSearchAttribute OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "When the MM Group Filter name is configured, it is necessary to retrieve + from the LDAP server the list of groups that a particular user belongs to. + This is required to do group authentication. In order to retrieve this list, + the search filter sent to the server must specify the attribute name associated + with groups. This field specifies this attribute name. + If this field is left blank, the attribute name in the filter will default + to memberOf." + ::= { ldapClientCfg 16 } + + ldapLoginPermissionAttribute OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "When a user successfully authenticates via a LDAP server, it is necessary + to retrieve the login permissions for this user. In order to retrieve these + permissions, the search filter sent to the server must specify the attribute + name associated with login permissions. This field specifies this attribute + name." + ::= { ldapClientCfg 17 } + + ldapUseDNSOrPreConfiguredServers OBJECT-TYPE + SYNTAX INTEGER { + usePreConfiguredLDAPServers (0), + useDNSToFindLDAPServers (1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The MM contains a Version 2.0 LDAP Client that may be configured to provide + user authentication through one or more LDAP servers. The LDAP server(s) to be + used for authentication can be discovered dynamically or manually pre-configured. + + If the usePreConfiguredLDAPServers option is selected, up to 3 LDAP servers can + be configured. Simply enter the server's IP address or hostname (assuming DNS + is enabled). The port number for each server is optional. If left blank, + the default value of 389 is used for non-secured LDAP connections. For secured + connections, the default is 636. At least one server must be configured. + + If the useDNSToFindLDAPServers is selected, the mechanisms described by RFC2782 + (A DNS RR for specifying the location of services) are applied to find the + server(s). This is known as DNS SRV." + ::= { ldapClientCfg 18 } + + ldapDomainSource OBJECT-TYPE + SYNTAX INTEGER { + extractSearchDomainFromLoginID (0), + useOnlyConfiguredSearchDomainBelow (1), + tryLoginFirstThenConfiguredValue (2) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The DNS SRV request sent to the DNS server must specify a domain name. + The LDAP client will determine where to get this domain name based on one + of the following three options: + + - extractSearchDomainFromLoginID: With this option, the LDAP client will + use the domain name in the login id. For example, if the login id is + joesmith@mycompany.com, the domain name equals mycompany.com. If the domain + name cannot be extracted, the DNS SRV will fail, causing the user + authentication to fail automatically. + + - useOnlyConfiguredSearchDomainBelow: With this option, the LDAP client + will use the domain name configured in the Search Domain parameter. + + - tryLoginFirstThenConfiguredValue: With this option, the LDAP client will + first attempt to extract the domain name from the login id. If this succeeds, + this domain name will be used in the DNS SRV request. If there is no domain + name present in the login id, the LDAP client will instead use the configured + Search Domain parameter as the domain name in the DNS SRV request. + If nothing is configured, user authentication will fail immediately." + ::= { ldapClientCfg 19 } + + ldapSearchDomain OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..64)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "This parameter may be used as the domain name in the DNS SRV request, + depending on how the Domain Source parameter is configured." + ::= { ldapClientCfg 20 } + + ldapServiceName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..16)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The DNS SRV request sent to the DNS server must also specify a service name. + The configured value will be used for this purpose. If left blank, the default + value used is 'ldap'. Note that the DNS SRV request must also specify a protocol + name. This defaults to 'tcp' and is not configurable." + ::= { ldapClientCfg 21 } + + + -- ******************************************************************************** + -- NTP Configuration + -- ******************************************************************************** + ntpConfig OBJECT IDENTIFIER ::= { tcpProtocols 8 } + + -- 4.9.3.8.1 + ntpEnable OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + enabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Disable/Enable the NTP client. The client will update + the IMM system clock at the frequency specified." + ::= { ntpConfig 1 } + + -- 4.9.3.8.2 + ntpIpAddressHostname OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "NTP server's IP address or hostname if DNS is enabled + and configured." + ::= { ntpConfig 2 } + + -- 4.9.3.8.3 + ntpUpdateFrequency OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The frequency in minutes that the NTP service runs. + The value range is 3 to 1440." + ::= { ntpConfig 3 } + + -- 4.9.3.8.5 + ntpUpdateClock OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Update the IMM system clock with the specified NTP server. + A valid NTP server must be configured first." + ::= { ntpConfig 5 } + +-- *********************************************************************** +-- System Services +-- *********************************************************************** + -- *********************************************************************** + -- System Watch Dog Timers + -- *********************************************************************** + serverTimers OBJECT IDENTIFIER ::= { generalSystemSettings 1 } + + oSHang OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + twoAndHalfMinutes(150), + threeMinutes(180), + threeAndHalfMinutes(210), + fourMinutes(240), + tenMinutes(600) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number, in 1 second intervals, the IMM will + check to insure the OS is operating properly. + If the operating system fails to respond within 6 seconds to one + of these checks, the remote supervisor adapter will generate + an O/S Timeout alert(if enabled) and automatically restart the + system one time. Once the system is restarted, the O/S Watchdog + is automatically disabled until the operating + system is shutdown and the server is power cycled." + ::= { serverTimers 1 } + + oSLoader OBJECT-TYPE + SYNTAX INTEGER { + disabled(0), + oneHalfMinutes(1), + oneMinutes(2), + oneAndHalfMinutes(3), + twoMinutes(4), + twoAndHalfMinutes(5), + threeMinutes(6), + threeAndHalfMinutes(7), + fourMinutes(8), + fourAndHalfMinutes(9), + fiveMinutes(10), + sevenAndHalfMinutes(15), + tenMinutes(20), + fifteenMinutes(30), + twentyMinutes(40), + thirtyMinutes(60), + oneHour(120), + twoHours(240) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Number in 30 second intervals the remote IMM will wait + between completion of POST and the end of loading the OS. + If this interval is exceeded, the IMM will + generate a Loader Timeout alert(if enabled) and automatically restart + the system one time. Once the system is restarted, the + Loader Timeout is automatically disabled until the operating + system is shutdown and the server is power cycled." + ::= { serverTimers 2 } + + + -- *********************************************************************** + -- PXE Boot + -- *********************************************************************** + networkPXEboot OBJECT-TYPE + SYNTAX INTEGER { + networkPXEBootDisabled(0), + networkPXEBootEnabled(1) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Modify the system's boot sequence for the next system restart + in order to attempt a PXE/DHCP network boot. The system's boot + sequence(set via the BIOS settings) will be altered only if the + system is not under PAP (Privileged Access Protection)." + ::= { generalSystemSettings 2 } + +-- *********************************************************************** +-- System Power Control +-- *********************************************************************** + + -- *********************************************************************** + -- Power Statistics for the system + -- *********************************************************************** + powerStatistics OBJECT IDENTIFIER ::= { systemPower 1 } + currentSysPowerStatus OBJECT-TYPE + SYNTAX INTEGER { + poweredOff(0), + poweredOn(255) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Indicates if the system is currently powered on or off." + ::= { powerStatistics 1 } + + + powerOnHours OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Number of hours the system has been powered on." + ::= { powerStatistics 2 } + + restartCount OBJECT-TYPE + SYNTAX INTEGER + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Number of times the system has been restarted." + ::= { powerStatistics 3 } + + systemState OBJECT-TYPE + SYNTAX INTEGER { + systemPowerOfforStateUnknown(0), + systemPowerOnorStartingUEFI(1), + systemInUEFI(2), + uEFIErrorDetected(3), + bootingOSorInUnsupportedOS(4), + oSBooted(5) + } + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Shows the current operational state of the system." + ::= { powerStatistics 4 } + + -- *********************************************************************** + -- System Power off configuration + -- *********************************************************************** + powerSysConfig OBJECT IDENTIFIER ::= { systemPower 2 } + + + powerSysOffDelay OBJECT-TYPE + SYNTAX INTEGER { + noDelay(0), + oneHalfMinute(30), + oneMinute(60), + twoMinutes(120), + threeMinutes(180), + fourMinutes(240), + fiveMinute(300), + sevenAndHalfMinutes(450), + tenMinutes(600), + fifteenMinutes(900), + twentyMinutes(1200), + thirtyMinutes(1800), + oneHour(3600), + twoHours(7200) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The number of 1 second interval the IMM will + wait before powering off the system." + ::= { powerSysConfig 1 } + + + powerSysOnClockSetting OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "The clock setting used to determine when the IMM + will power on the system. The examples and the format follow: + + (1)For example to set the value so the system will power on + March 4, 2001 at 06:00AM set the value to: '03/04/2001,06:00'. + In order to insure correct operation, it is advisable for the + user to read the date and time of the IMM + clock before setting this value to a future time. + (2)Setting the reset value will cause the + power off timer to be reset and be deactivated. For example + to reset the clock set the value to: '01/01/2000,00:00', + + field contents range + _____ ________ _____ + 1 month 01..12 (reset value - 01) + 2 separator '/' + 3 day 01..31 (reset value - 01) + 4 separator '/' + 5 year 2000..2037 (reset value - 2000) + 6 separator ',' + 7 hour 00..23 (reset value - 00) + 8 separator ':' + 9 minutes 00..59 (reset value - 00) + " + ::= { powerSysConfig 2 } + + -- *********************************************************************** + -- System Power off control + -- *********************************************************************** + powerOffSystemControl OBJECT IDENTIFIER ::= { systemPower 3 } + + powerOffWithOsShutdown OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Power off the system after performing a OS shutdown." + ::= { powerOffSystemControl 1 } + + powerOffImmediately OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Power off the system immediately." + ::= { powerOffSystemControl 2 } + + -- *********************************************************************** + -- System Power on control + -- *********************************************************************** + powerOnSystemControl OBJECT IDENTIFIER ::= { systemPower 4 } + + powerOnImmediately OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Power on the system immediately." + ::= { powerOnSystemControl 2 } + + -- *********************************************************************** + -- Schedule Power Actions + -- *********************************************************************** + powerCyclingSchedule OBJECT IDENTIFIER ::= { systemPower 5 } + + schedulePowerOffWithOsShutdown OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Power Off the system after performing a OS shutdown at specified time and day of the week. + Example: Monday,09:00 + + field contents range + _____ ________ _____ + 1 day EveryDayOfWeek,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Never (reset value - Never) + 2 separator ',' + 3 hour 00..23 (reset value - 00) + 4 separator ':' + 5 minutes 00..59 (reset value - 00) + day is case insensitive. + It is invalid to set a non zero time with day as Never. + To reset, set as Never,00:00." + ::= { powerCyclingSchedule 1 } + + schedulePowerOnSystem OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Power On the system at specified time and day of the week. + Example: Monday,09:00 + + field contents range + _____ ________ _____ + 1 day EveryDayOfWeek,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Never (reset value - Never) + 2 separator ',' + 3 hour 00..23 (reset value - 00) + 4 separator ':' + 5 minutes 00..59 (reset value - 00) + day is case insensitive. + It is invalid to set a non zero time with day as Never. + To reset, set as Never,00:00." + ::= { powerCyclingSchedule 2 } + +-- *********************************************************************** +-- Restart Control +-- *********************************************************************** + + shutdownOsThenRestart OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Shutdown the OS and then restart the system and boot the OS." + ::= { restartReset 1 } + + restartSystemImmediately OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Restart the system immediately and then the boot OS." + ::= { restartReset 2 } + + + restartSPImmediately OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Restart the IMM immediately." + ::= { restartReset 3 } + + resetSPConfigAndRestart OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Will cause all the IMM information to + be reset to it's initial factory defaults(all previous + configuration information is lost) and the IMM + will be re-started." + ::= { restartReset 4 } + + scheduleShutdownOsThenRestart OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Shutdown the OS and then restart the system and boot the OS + at specified Time and Day of the week. + Example: Monday,09:00 + + field contents range + _____ ________ _____ + 1 day EveryDayOfWeek,Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Never (reset value - Never) + 2 separator ',' + 3 hour 00..23 (reset value - 00) + 4 separator ':' + 5 minutes 00..59 (reset value - 00) + day is case insensitive. + It is invalid to set a non zero time with day as Never. + To reset, set as Never,00:00." + ::= { restartReset 5 } + + resetPowerSchedules OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "reset all power schedules. + schedulePowerOnSystem,schedulePowerOffWithOsShutdown, scheduleShutdownOsThenRestart. + This does not reset powerSysOnClockSetting" + ::= { restartReset 6 } + + + +-- *********************************************************************** +-- Firmware Update +-- *********************************************************************** + firmwareUpdateTarget OBJECT-TYPE + SYNTAX INTEGER { + immCard(0) + } + ACCESS read-write + STATUS mandatory + DESCRIPTION + "Target module whose firmware will be updated." + ::= { firmwareUpdate 1 } + + firmwareUpdateTftpServer OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "IP address of the TFTP server where the firmware file resides. + The address must be entered in a dotted decimal IP string + (eg. 9.37.44.2)." + ::= { firmwareUpdate 2 } + + firmwareUpdateFileName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..63)) + ACCESS read-write + STATUS mandatory + DESCRIPTION + "File name of the firmware file." + ::= { firmwareUpdate 3 } + + firmwareUpdateStart OBJECT-TYPE + SYNTAX INTEGER { + execute(1) + } + ACCESS write-only + STATUS mandatory + DESCRIPTION + "Start updating the firmware of the specified IMM Card. + Note 1: The firmware update might take up to several + minutes to complete. Do not reset the IMM Card until + the control has been returned. At this point, the results + will be displayed. + Note 2: Use firmwareUpdateStatus to confirm the status of + the last firmware update initiated by SNMP method. The + IMM Card must be restarted for the new firmware to + take affect." + ::= { firmwareUpdate 4 } + + + firmwareUpdateStatus OBJECT-TYPE + SYNTAX OCTET STRING + ACCESS read-only + STATUS mandatory + DESCRIPTION + "Get the status of the last firmware update which was + initiated through SNMP method." + ::= { firmwareUpdate 5 } + + + +END From c3dfba4a205aabfe6d8e88a103f3901ce8f2924c Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 8 Jun 2016 15:34:11 -0500 Subject: [PATCH 095/133] Revert "Sort many items in defaults.inc.php" --- includes/defaults.inc.php | 258 +++++++++++++++++++------------------- 1 file changed, 129 insertions(+), 129 deletions(-) diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index b1e832799d..3f01b97680 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -486,45 +486,45 @@ $config['nfsen_enable'] = 0; // config['location_map']['Under the Sink'] = "Under The Sink, The Office, London, UK"; // Ignores & Allows // Has to be lowercase -$config['bad_if'][] = '-atm'; -$config['bad_if'][] = '-physical'; -$config['bad_if'][] = 'async'; -$config['bad_if'][] = 'bluetooth'; -$config['bad_if'][] = 'container'; -$config['bad_if'][] = 'container'; +$config['bad_if'][] = 'voip-null'; +$config['bad_if'][] = 'virtual-'; +$config['bad_if'][] = 'unrouted'; $config['bad_if'][] = 'eobc'; -$config['bad_if'][] = 'faith0'; -$config['bad_if'][] = 'isatap'; $config['bad_if'][] = 'lp0'; +$config['bad_if'][] = '-atm'; +$config['bad_if'][] = 'faith0'; +$config['bad_if'][] = 'container'; +$config['bad_if'][] = 'async'; $config['bad_if'][] = 'plip'; -$config['bad_if'][] = 'pppoe-'; -$config['bad_if'][] = 'qos'; +$config['bad_if'][] = '-physical'; +$config['bad_if'][] = 'container'; +$config['bad_if'][] = 'unrouted'; +$config['bad_if'][] = 'bluetooth'; +$config['bad_if'][] = 'isatap'; $config['bad_if'][] = 'ras'; +$config['bad_if'][] = 'qos'; $config['bad_if'][] = 'span rp'; $config['bad_if'][] = 'span sp'; $config['bad_if'][] = 'sslvpn'; -$config['bad_if'][] = 'unrouted'; -$config['bad_if'][] = 'unrouted'; -$config['bad_if'][] = 'virtual-'; -$config['bad_if'][] = 'voip-null'; +$config['bad_if'][] = 'pppoe-'; // $config['bad_if'][] = "control plane"; // Example for cisco control plane // Ignore ports based on ifType. Case-sensitive. -$config['bad_iftype'][] = 'aal5'; -$config['bad_iftype'][] = 'atmSubInterface'; -$config['bad_iftype'][] = 'ds0'; -$config['bad_iftype'][] = 'ds1'; -$config['bad_iftype'][] = 'ds3'; -// $config['bad_iftype'][] = 'isdn'; #show signaling traffic -// $config['bad_iftype'][] = 'lapd'; #show signaling traffic -$config['bad_iftype'][] = 'mpls'; -$config['bad_iftype'][] = 'shdsl'; -$config['bad_iftype'][] = 'sonet'; $config['bad_iftype'][] = 'voiceEncap'; $config['bad_iftype'][] = 'voiceFXO'; $config['bad_iftype'][] = 'voiceFXS'; $config['bad_iftype'][] = 'voiceOverAtm'; $config['bad_iftype'][] = 'voiceOverFrameRelay'; $config['bad_iftype'][] = 'voiceOverIp'; +$config['bad_iftype'][] = 'ds0'; +$config['bad_iftype'][] = 'ds1'; +$config['bad_iftype'][] = 'ds3'; +// $config['bad_iftype'][] = "isdn"; #show signaling traffic +// $config['bad_iftype'][] = "lapd"; #show signaling traffic +$config['bad_iftype'][] = 'sonet'; +$config['bad_iftype'][] = 'atmSubInterface'; +$config['bad_iftype'][] = 'aal5'; +$config['bad_iftype'][] = 'shdsl'; +$config['bad_iftype'][] = 'mpls'; $config['bad_if_regexp'][] = '/^ng[0-9]+$/'; $config['bad_if_regexp'][] = '/^sl[0-9]/'; @@ -539,20 +539,20 @@ $config['ignore_mount_network'] = 1; $config['ignore_mount_optical'] = 1; // Ignore mounted optical discs // Per-device interface graph filters -$config['device_traffic_iftype'][] = '/ieee8023adLag/'; -$config['device_traffic_iftype'][] = '/l2vlan/'; $config['device_traffic_iftype'][] = '/loopback/'; -$config['device_traffic_iftype'][] = '/mpls/'; -$config['device_traffic_iftype'][] = '/ppp/'; $config['device_traffic_iftype'][] = '/tunnel/'; $config['device_traffic_iftype'][] = '/virtual/'; +$config['device_traffic_iftype'][] = '/mpls/'; +$config['device_traffic_iftype'][] = '/ieee8023adLag/'; +$config['device_traffic_iftype'][] = '/l2vlan/'; +$config['device_traffic_iftype'][] = '/ppp/'; -$config['device_traffic_descr'][] = '/bond/'; -$config['device_traffic_descr'][] = '/dummy/'; $config['device_traffic_descr'][] = '/loopback/'; -$config['device_traffic_descr'][] = '/null/'; -$config['device_traffic_descr'][] = '/tunnel/'; $config['device_traffic_descr'][] = '/vlan/'; +$config['device_traffic_descr'][] = '/tunnel/'; +$config['device_traffic_descr'][] = '/bond/'; +$config['device_traffic_descr'][] = '/null/'; +$config['device_traffic_descr'][] = '/dummy/'; // IRC Bot configuration $config['irc_host'] = ''; @@ -599,33 +599,33 @@ $config['auth_ldap_cache_ttl'] = 300; $config['allow_entity_sensor']['amperes'] = 1; $config['allow_entity_sensor']['celsius'] = 1; $config['allow_entity_sensor']['dBm'] = 1; -$config['allow_entity_sensor']['specialEnum'] = 1; -$config['allow_entity_sensor']['truthvalue'] = 1; -$config['allow_entity_sensor']['voltsAC'] = 1; $config['allow_entity_sensor']['voltsDC'] = 1; +$config['allow_entity_sensor']['voltsAC'] = 1; $config['allow_entity_sensor']['watts'] = 1; +$config['allow_entity_sensor']['truthvalue'] = 1; +$config['allow_entity_sensor']['specialEnum'] = 1; // Filesystems -$config['ignore_mount'][] = '/dev'; $config['ignore_mount'][] = '/kern'; $config['ignore_mount'][] = '/mnt/cdrom'; $config['ignore_mount'][] = '/proc'; +$config['ignore_mount'][] = '/dev'; -$config['ignore_mount_string'][] = 'devfs'; -$config['ignore_mount_string'][] = 'MALLOC'; $config['ignore_mount_string'][] = 'packages'; +$config['ignore_mount_string'][] = 'devfs'; $config['ignore_mount_string'][] = 'procfs'; $config['ignore_mount_string'][] = 'UMA'; +$config['ignore_mount_string'][] = 'MALLOC'; +$config['ignore_mount_regexp'][] = '/on: \/packages/'; +$config['ignore_mount_regexp'][] = '/on: \/dev/'; +$config['ignore_mount_regexp'][] = '/on: \/proc/'; +$config['ignore_mount_regexp'][] = '/on: \/junos^/'; +$config['ignore_mount_regexp'][] = '/on: \/junos\/dev/'; +$config['ignore_mount_regexp'][] = '/on: \/jail\/dev/'; $config['ignore_mount_regexp'][] = '/^(dev|proc)fs/'; $config['ignore_mount_regexp'][] = '/^\/dev\/md0/'; $config['ignore_mount_regexp'][] = '/^\/var\/dhcpd\/dev,/'; -$config['ignore_mount_regexp'][] = '/on: \/dev/'; -$config['ignore_mount_regexp'][] = '/on: \/jail\/dev/'; -$config['ignore_mount_regexp'][] = '/on: \/junos\/dev/'; -$config['ignore_mount_regexp'][] = '/on: \/junos^/'; -$config['ignore_mount_regexp'][] = '/on: \/packages/'; -$config['ignore_mount_regexp'][] = '/on: \/proc/'; $config['ignore_mount_regexp'][] = '/UMA/'; $config['ignore_mount_removable'] = 1; @@ -634,10 +634,10 @@ $config['ignore_mount_network'] = 1; // Ignore network mounted storage // Syslog Settings // Entries older than this will be removed -$config['syslog_filter'][] = 'Connection from UDP: ['; -$config['syslog_filter'][] = 'diskio.c'; -$config['syslog_filter'][] = 'ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented'; $config['syslog_filter'][] = 'last message repeated'; +$config['syslog_filter'][] = 'Connection from UDP: ['; +$config['syslog_filter'][] = 'ipSystemStatsTable node ipSystemStatsOutFragOKs not implemented'; +$config['syslog_filter'][] = 'diskio.c'; // Ignore some crappy stuff from SNMP daemon // Virtualization $config['enable_libvirt'] = 0; @@ -652,114 +652,114 @@ $config['astext'][65332] = 'Cymru FullBogon Feed'; $config['astext'][65333] = 'Cymru Bogon Feed'; // Nicer labels for the SLA types -$config['sla_type_labels']['dhcp'] = 'DHCP'; -$config['sla_type_labels']['dlsw'] = 'DLSW'; -$config['sla_type_labels']['dns'] = 'DNS'; $config['sla_type_labels']['echo'] = 'ICMP ping'; -$config['sla_type_labels']['ethernetJitter'] = 'Ethernet jitter'; -$config['sla_type_labels']['ethernetPing'] = 'Ethernet ping'; -$config['sla_type_labels']['fileIO'] = 'File I/O'; -$config['sla_type_labels']['ftp'] = 'FTP'; -$config['sla_type_labels']['http'] = 'HTTP'; -$config['sla_type_labels']['icmpjitter'] = 'ICMP jitter'; -$config['sla_type_labels']['jitter'] = 'Jitter'; -$config['sla_type_labels']['lspGroup'] = 'LSP group'; -$config['sla_type_labels']['lspPing'] = 'LSP ping'; -$config['sla_type_labels']['lspPingPseudowire'] = 'LSP Pseudowire ping'; -$config['sla_type_labels']['lspTrace'] = 'LSP trace'; $config['sla_type_labels']['pathEcho'] = 'Path ICMP ping'; -$config['sla_type_labels']['rtp'] = 'RTP'; +$config['sla_type_labels']['fileIO'] = 'File I/O'; $config['sla_type_labels']['script'] = 'Script'; -$config['sla_type_labels']['tcpConnect'] = 'TCP connect'; $config['sla_type_labels']['udpEcho'] = 'UDP ping'; +$config['sla_type_labels']['tcpConnect'] = 'TCP connect'; +$config['sla_type_labels']['http'] = 'HTTP'; +$config['sla_type_labels']['dns'] = 'DNS'; +$config['sla_type_labels']['jitter'] = 'Jitter'; +$config['sla_type_labels']['dlsw'] = 'DLSW'; +$config['sla_type_labels']['dhcp'] = 'DHCP'; +$config['sla_type_labels']['ftp'] = 'FTP'; $config['sla_type_labels']['voip'] = 'VoIP'; +$config['sla_type_labels']['rtp'] = 'RTP'; +$config['sla_type_labels']['lspGroup'] = 'LSP group'; +$config['sla_type_labels']['icmpjitter'] = 'ICMP jitter'; +$config['sla_type_labels']['lspPing'] = 'LSP ping'; +$config['sla_type_labels']['lspTrace'] = 'LSP trace'; +$config['sla_type_labels']['ethernetPing'] = 'Ethernet ping'; +$config['sla_type_labels']['ethernetJitter'] = 'Ethernet jitter'; +$config['sla_type_labels']['lspPingPseudowire'] = 'LSP Pseudowire ping'; // Warnings on front page $config['warn']['ifdown'] = true; // Show down interfaces // List of poller modules. Need to be in the array to be // considered for execution. -$config['poller_modules']['applications'] = 1; -$config['poller_modules']['aruba-controller'] = 1; -$config['poller_modules']['bgp-peers'] = 1; +$config['poller_modules']['unix-agent'] = 0; +$config['poller_modules']['os'] = 1; +$config['poller_modules']['ipmi'] = 1; +$config['poller_modules']['sensors'] = 1; +$config['poller_modules']['processors'] = 1; +$config['poller_modules']['mempools'] = 1; +$config['poller_modules']['storage'] = 1; +$config['poller_modules']['netstats'] = 1; +$config['poller_modules']['hr-mib'] = 1; +$config['poller_modules']['ucd-mib'] = 1; +$config['poller_modules']['ipSystemStats'] = 1; +$config['poller_modules']['ports'] = 1; +$config['poller_modules']['bgp-peers'] = 1; +$config['poller_modules']['junose-atm-vp'] = 1; +$config['poller_modules']['toner'] = 1; +$config['poller_modules']['ucd-diskio'] = 1; +$config['poller_modules']['wifi'] = 1; +$config['poller_modules']['ospf'] = 1; +$config['poller_modules']['cisco-ipsec-flow-monitor'] = 1; +$config['poller_modules']['cisco-remote-access-monitor'] = 1; +$config['poller_modules']['cisco-cef'] = 1; +$config['poller_modules']['cisco-sla'] = 1; +$config['poller_modules']['cisco-mac-accounting'] = 1; $config['poller_modules']['cipsec-tunnels'] = 1; $config['poller_modules']['cisco-ace-loadbalancer'] = 1; $config['poller_modules']['cisco-ace-serverfarms'] = 1; -$config['poller_modules']['cisco-asa-firewall'] = 1; -$config['poller_modules']['cisco-cbqos'] = 1; -$config['poller_modules']['cisco-cef'] = 1; -$config['poller_modules']['cisco-ipsec-flow-monitor'] = 1; -$config['poller_modules']['cisco-mac-accounting'] = 1; -$config['poller_modules']['cisco-otv'] = 1; -$config['poller_modules']['cisco-remote-access-monitor'] = 1; -$config['poller_modules']['cisco-sla'] = 1; -$config['poller_modules']['cisco-voice'] = 1; +$config['poller_modules']['netscaler-vsvr'] = 1; +$config['poller_modules']['aruba-controller'] = 1; $config['poller_modules']['entity-physical'] = 1; -$config['poller_modules']['hr-mib'] = 1; -$config['poller_modules']['ipmi'] = 1; -$config['poller_modules']['ipSystemStats'] = 1; -$config['poller_modules']['junose-atm-vp'] = 1; -$config['poller_modules']['mempools'] = 1; -$config['poller_modules']['mib'] = 0; -$config['poller_modules']['netscaler-vsvr'] = 1; -$config['poller_modules']['netstats'] = 1; -$config['poller_modules']['os'] = 1; -$config['poller_modules']['ospf'] = 1; -$config['poller_modules']['ports'] = 1; -$config['poller_modules']['processors'] = 1; -$config['poller_modules']['sensors'] = 1; -$config['poller_modules']['services'] = 1; -$config['poller_modules']['storage'] = 1; -$config['poller_modules']['stp'] = 1; -$config['poller_modules']['toner'] = 1; -$config['poller_modules']['ucd-diskio'] = 1; -$config['poller_modules']['ucd-mib'] = 1; -$config['poller_modules']['unix-agent'] = 0; -$config['poller_modules']['wifi'] = 1; +$config['poller_modules']['applications'] = 1; +$config['poller_modules']['cisco-asa-firewall'] = 1; +$config['poller_modules']['mib'] = 0; +$config['poller_modules']['cisco-voice'] = 1; +$config['poller_modules']['cisco-cbqos'] = 1; +$config['poller_modules']['stp'] = 1; +$config['poller_modules']['cisco-otv'] = 1; +$config['poller_modules']['services'] = 1; // List of discovery modules. Need to be in this array to be // considered for execution. -$config['discovery_modules']['arp-table'] = 1; -$config['discovery_modules']['bgp-peers'] = 1; -$config['discovery_modules']['charge'] = 1; -$config['discovery_modules']['cisco-cbqos'] = 0; -//$config['discovery_modules']['cisco-cef'] = 1; -$config['discovery_modules']['cisco-mac-accounting'] = 1; -$config['discovery_modules']['cisco-otv'] = 1; -$config['discovery_modules']['cisco-pw'] = 1; -$config['discovery_modules']['cisco-sla'] = 1; -$config['discovery_modules']['cisco-vrf'] = 1; -$config['discovery_modules']['cisco-vrf-lite'] = 1; -$config['discovery_modules']['discovery-arp'] = 0; -$config['discovery_modules']['discovery-protocols'] = 1; +$config['discovery_modules']['os'] = 1; +$config['discovery_modules']['ports'] = 1; +$config['discovery_modules']['ports-stack'] = 1; $config['discovery_modules']['entity-physical'] = 1; -$config['discovery_modules']['hr-device'] = 1; -$config['discovery_modules']['ipv4-addresses'] = 1; -$config['discovery_modules']['ipv6-addresses'] = 1; -$config['discovery_modules']['junose-atm-vp'] = 1; +$config['discovery_modules']['processors'] = 1; +$config['discovery_modules']['mempools'] = 1; +$config['discovery_modules']['cisco-vrf-lite'] = 1; +$config['discovery_modules']['ipv4-addresses'] = 1; +$config['discovery_modules']['ipv6-addresses'] = 1; +$config['discovery_modules']['route'] = 0; +$config['discovery_modules']['sensors'] = 1; +$config['discovery_modules']['storage'] = 1; +$config['discovery_modules']['hr-device'] = 1; +$config['discovery_modules']['discovery-protocols'] = 1; +$config['discovery_modules']['arp-table'] = 1; +$config['discovery_modules']['discovery-arp'] = 0; +$config['discovery_modules']['junose-atm-vp'] = 1; +$config['discovery_modules']['bgp-peers'] = 1; +$config['discovery_modules']['vlans'] = 1; +$config['discovery_modules']['cisco-mac-accounting'] = 1; +$config['discovery_modules']['cisco-pw'] = 1; +$config['discovery_modules']['cisco-vrf'] = 1; +//$config['discovery_modules']['cisco-cef'] = 1; +$config['discovery_modules']['cisco-sla'] = 1; +$config['discovery_modules']['vmware-vminfo'] = 1; $config['discovery_modules']['libvirt-vminfo'] = 1; -$config['discovery_modules']['mempools'] = 1; -$config['discovery_modules']['os'] = 1; -$config['discovery_modules']['ports'] = 1; -$config['discovery_modules']['ports-stack'] = 1; -$config['discovery_modules']['processors'] = 1; -$config['discovery_modules']['route'] = 0; -$config['discovery_modules']['sensors'] = 1; -$config['discovery_modules']['services'] = 1; -$config['discovery_modules']['storage'] = 1; -$config['discovery_modules']['stp'] = 1; $config['discovery_modules']['toner'] = 1; $config['discovery_modules']['ucd-diskio'] = 1; -$config['discovery_modules']['vlans'] = 1; -$config['discovery_modules']['vmware-vminfo'] = 1; +$config['discovery_modules']['services'] = 1; +$config['discovery_modules']['charge'] = 1; +$config['discovery_modules']['cisco-cbqos'] = 0; +$config['discovery_modules']['stp'] = 1; +$config['discovery_modules']['cisco-otv'] = 1; -$config['modules_compat']['rfc1628']['deltaups'] = 1; -$config['modules_compat']['rfc1628']['huaweiups'] = 1; $config['modules_compat']['rfc1628']['liebert'] = 1; -$config['modules_compat']['rfc1628']['multimatic'] = 1; $config['modules_compat']['rfc1628']['netmanplus'] = 1; +$config['modules_compat']['rfc1628']['deltaups'] = 1; $config['modules_compat']['rfc1628']['poweralert'] = 1; +$config['modules_compat']['rfc1628']['multimatic'] = 1; $config['modules_compat']['rfc1628']['webpower'] = 1; +$config['modules_compat']['rfc1628']['huaweiups'] = 1; // Enable daily updates $config['update'] = 1; @@ -781,8 +781,8 @@ $config['alert_log_purge'] = 365; // Date format for PHP date()s $config['dateformat']['long'] = 'r'; // RFC2822 style -$config['dateformat']['byminute'] = 'Y-m-d H:i'; $config['dateformat']['compact'] = 'Y-m-d H:i:s'; +$config['dateformat']['byminute'] = 'Y-m-d H:i'; $config['dateformat']['time'] = 'H:i:s'; // Date format for MySQL DATE_FORMAT From 60624c1ac0427a5bf788d437e2b75d2866aa4bf3 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 8 Jun 2016 20:40:51 -0500 Subject: [PATCH 096/133] Rrdcached application monitoring Can collect data from the agent or by connecting directly --- .../graphs/application/rrdcached.inc.php | 5 ++ .../application/rrdcached_events.inc.php | 31 ++++++++ .../application/rrdcached_journal.inc.php | 20 +++++ .../rrdcached_queue_length.inc.php | 14 ++++ .../graphs/application/rrdcached_tree.inc.php | 20 +++++ html/pages/device/apps/rrdcached.inc.php | 29 +++++++ .../polling/applications/rrdcached.inc.php | 77 +++++++++++++++++++ includes/polling/unix-agent.inc.php | 21 ++--- 8 files changed, 207 insertions(+), 10 deletions(-) create mode 100644 html/includes/graphs/application/rrdcached.inc.php create mode 100644 html/includes/graphs/application/rrdcached_events.inc.php create mode 100644 html/includes/graphs/application/rrdcached_journal.inc.php create mode 100644 html/includes/graphs/application/rrdcached_queue_length.inc.php create mode 100644 html/includes/graphs/application/rrdcached_tree.inc.php create mode 100644 html/pages/device/apps/rrdcached.inc.php create mode 100644 includes/polling/applications/rrdcached.inc.php diff --git a/html/includes/graphs/application/rrdcached.inc.php b/html/includes/graphs/application/rrdcached.inc.php new file mode 100644 index 0000000000..1d951d33bc --- /dev/null +++ b/html/includes/graphs/application/rrdcached.inc.php @@ -0,0 +1,5 @@ + 'updates_written', + 'filename' => $rrd_filename, + 'descr' => 'Updates Written', + ), + array ( + 'ds' => 'data_sets_written', + 'filename' => $rrd_filename, + 'descr' => 'Data Sets Written', + ), + array( + 'ds' => 'updates_received', + 'filename' => $rrd_filename, + 'descr' => 'Updates Recieved', + ), + array ( + 'ds' => 'flushes_received', + 'filename' => $rrd_filename, + 'descr' => 'Flushes Recieved', + ), +); + +require 'includes/graphs/generic_multi_line.inc.php'; diff --git a/html/includes/graphs/application/rrdcached_journal.inc.php b/html/includes/graphs/application/rrdcached_journal.inc.php new file mode 100644 index 0000000000..92e9698df8 --- /dev/null +++ b/html/includes/graphs/application/rrdcached_journal.inc.php @@ -0,0 +1,20 @@ + 'journal_rotate', + 'filename' => $rrd_filename, + 'descr' => 'Rotated', + ), + array( + 'ds' => 'journal_bytes', + 'filename' => $rrd_filename, + 'descr' => 'Bytes Written', + ) +); + +require 'includes/graphs/generic_multi.inc.php'; diff --git a/html/includes/graphs/application/rrdcached_queue_length.inc.php b/html/includes/graphs/application/rrdcached_queue_length.inc.php new file mode 100644 index 0000000000..862e6b2a99 --- /dev/null +++ b/html/includes/graphs/application/rrdcached_queue_length.inc.php @@ -0,0 +1,14 @@ + 'tree_depth', + 'filename' => $rrd_filename, + 'descr' => 'Depth', + ), + array( + 'ds' => 'tree_nodes_number', + 'filename' => $rrd_filename, + 'descr' => 'Nodes', + ) +); + +require 'includes/graphs/generic_multi.inc.php'; diff --git a/html/pages/device/apps/rrdcached.inc.php b/html/pages/device/apps/rrdcached.inc.php new file mode 100644 index 0000000000..f09011d510 --- /dev/null +++ b/html/pages/device/apps/rrdcached.inc.php @@ -0,0 +1,29 @@ + 'Queue Length', + 'rrdcached_events' => 'Events', + 'rrdcached_tree' => 'Tree', + 'rrdcached_journal' => 'Journal', +); + +foreach ($graphs as $key => $text) { + $graph_array['height'] = '100'; + $graph_array['width'] = '215'; + $graph_array['to'] = $config['time']['now']; + $graph_array['id'] = $app['app_id']; + $graph_array['type'] = 'application_'.$key; + + echo '
+
+

'.$text.'

+
+
+
'; + include 'includes/print-graphrow.inc.php'; + echo '
'; + echo '
'; + echo '
'; +} diff --git a/includes/polling/applications/rrdcached.inc.php b/includes/polling/applications/rrdcached.inc.php new file mode 100644 index 0000000000..9135379397 --- /dev/null +++ b/includes/polling/applications/rrdcached.inc.php @@ -0,0 +1,77 @@ + 'rrdcached', 'app_id' => $app['app_id']); +influx_update($device,'app',$tags,$fields); + +unset($data); +unset($rrd_filename); +unset($fields); +unset($tags); diff --git a/includes/polling/unix-agent.inc.php b/includes/polling/unix-agent.inc.php index 43a4f499a5..b3cb418dcd 100644 --- a/includes/polling/unix-agent.inc.php +++ b/includes/polling/unix-agent.inc.php @@ -52,20 +52,21 @@ if ($device['os_group'] == 'unix') { $graphs['agent'] = true; + $agentapps = array( + "apache", + "bind", + "ceph", + "mysql", + "nginx", + "powerdns", + "proxmox", + "rrdcached", + "tinydns"); + foreach (explode('<<<', $agent_raw) as $section) { list($section, $data) = explode('>>>', $section); list($sa, $sb) = explode('-', $section, 2); - $agentapps = array( - "apache", - "ceph", - "mysql", - "nginx", - "bind", - "powerdns", - "proxmox", - "tinydns"); - if (in_array($section, $agentapps)) { $agent_data['app'][$section] = trim($data); } From 5d9925a5a172b9ed7a64ab9bea32b3445ef611e7 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 8 Jun 2016 21:13:01 -0500 Subject: [PATCH 097/133] Tidy applications poller output --- includes/polling/applications.inc.php | 2 +- includes/polling/applications/memcached.inc.php | 2 +- includes/polling/applications/nginx.inc.php | 4 ++-- includes/polling/applications/rrdcached.inc.php | 2 +- includes/polling/applications/tinydns.inc.php | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/includes/polling/applications.inc.php b/includes/polling/applications.inc.php index 4258129a65..1ec549482f 100644 --- a/includes/polling/applications.inc.php +++ b/includes/polling/applications.inc.php @@ -6,7 +6,7 @@ d_echo($sql."\n"); $app_rows = dbFetchRows('SELECT * FROM `applications` WHERE `device_id` = ?', array($device['device_id'])); if (count($app_rows)) { - echo 'Applications: '; + echo 'Applications:'; foreach ($app_rows as $app) { $app_include = $config['install_dir'].'/includes/polling/applications/'.$app['app_type'].'.inc.php'; if (is_file($app_include)) { diff --git a/includes/polling/applications/memcached.inc.php b/includes/polling/applications/memcached.inc.php index e5246a40ec..d68013a698 100644 --- a/includes/polling/applications/memcached.inc.php +++ b/includes/polling/applications/memcached.inc.php @@ -4,7 +4,7 @@ $data = $agent_data['app']['memcached'][$app['app_instance']]; $rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-memcached-'.$app['app_id'].'.rrd'; -echo 'memcached('.$app['app_instance'].') '; +echo ' memcached('.$app['app_instance'].')'; if (!is_file($rrd_filename)) { rrdtool_create( diff --git a/includes/polling/applications/nginx.inc.php b/includes/polling/applications/nginx.inc.php index 14fa549fb5..25950f099b 100644 --- a/includes/polling/applications/nginx.inc.php +++ b/includes/polling/applications/nginx.inc.php @@ -10,7 +10,7 @@ else { $nginx_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/app-nginx-'.$app['app_id'].'.rrd'; -echo " nginx statistics\n"; +echo ' nginx'; list($active, $reading, $writing, $waiting, $req) = explode("\n", $nginx); if (!is_file($nginx_rrd)) { @@ -25,7 +25,7 @@ if (!is_file($nginx_rrd)) { ); } -print "active: $active reading: $reading writing: $writing waiting: $waiting Requests: $req"; +d_echo("active: $active reading: $reading writing: $writing waiting: $waiting Requests: $req"); $fields = array( 'Requests' => $req, 'Active' => $active, diff --git a/includes/polling/applications/rrdcached.inc.php b/includes/polling/applications/rrdcached.inc.php index 9135379397..178e89b64c 100644 --- a/includes/polling/applications/rrdcached.inc.php +++ b/includes/polling/applications/rrdcached.inc.php @@ -1,6 +1,6 @@ 0) { - echo ' tinydns '; + echo ' tinydns'; $rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-tinydns-'.$app['app_id'].'.rrd'; if (!is_file($rrd_filename)) { rrdtool_create( From 2e23d14b98ed3b8c9f80d26dd047ba4d4857f1e4 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 8 Jun 2016 21:42:18 -0500 Subject: [PATCH 098/133] Allow agent to enable apps in the $agentapps array --- includes/polling/unix-agent.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/polling/unix-agent.inc.php b/includes/polling/unix-agent.inc.php index b3cb418dcd..d5fdd2104b 100644 --- a/includes/polling/unix-agent.inc.php +++ b/includes/polling/unix-agent.inc.php @@ -114,7 +114,7 @@ if ($device['os_group'] == 'unix') { if (file_exists("includes/polling/applications/$key.inc.php")) { d_echo("Enabling $key for ".$device['hostname']." if not yet enabled\n"); - if (in_array($key, array('apache', 'mysql', 'nginx', 'proxmox', 'ceph', 'powerdns'))) { + if (in_array($key, $agentapps)) { if (dbFetchCell('SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?', array($device['device_id'], $key)) == '0') { echo "Found new application '$key'\n"; dbInsert(array('device_id' => $device['device_id'], 'app_type' => $key, 'app_status' => '', 'app_instance' => ''), 'applications'); From 9f94b278d3ee2f9731a8fd9f92c8eda3aadf0a12 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Wed, 8 Jun 2016 23:29:33 -0500 Subject: [PATCH 099/133] Sort poller/discovery modules without affecting the $config order --- html/pages/device/edit/modules.inc.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/html/pages/device/edit/modules.inc.php b/html/pages/device/edit/modules.inc.php index e433dd037c..3894d7607f 100644 --- a/html/pages/device/edit/modules.inc.php +++ b/html/pages/device/edit/modules.inc.php @@ -18,7 +18,9 @@ $module_status) { +$poller_modules = $config['poller_modules']; +ksort($poller_modules); +foreach ($poller_modules as $module => $module_status) { echo(' '.$module.' @@ -86,7 +88,9 @@ foreach ($config['poller_modules'] as $module => $module_status) { $module_status) { +$discovery_modules = $config['discovery_modules']; +ksort($discovery_modules); +foreach ($discovery_modules as $module => $module_status) { echo(' From 36818e7a525cfef31c4d193c8f4671ca39a499f3 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 9 Jun 2016 00:40:04 -0500 Subject: [PATCH 100/133] Add graphs to graphs menu page. Use rrd_name() function Add copyright headers --- .../graphs/application/rrdcached.inc.php | 26 +++++++++++- .../application/rrdcached_events.inc.php | 23 +++++++++++ .../application/rrdcached_journal.inc.php | 27 +++++++++++- .../rrdcached_queue_length.inc.php | 25 ++++++++++- .../graphs/application/rrdcached_tree.inc.php | 27 +++++++++++- html/pages/apps.inc.php | 7 ++++ html/pages/device/apps/rrdcached.inc.php | 23 +++++++++++ .../polling/applications/rrdcached.inc.php | 41 +++++++++++++++---- 8 files changed, 185 insertions(+), 14 deletions(-) diff --git a/html/includes/graphs/application/rrdcached.inc.php b/html/includes/graphs/application/rrdcached.inc.php index 1d951d33bc..8d16005b81 100644 --- a/html/includes/graphs/application/rrdcached.inc.php +++ b/html/includes/graphs/application/rrdcached.inc.php @@ -1,5 +1,29 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ + +$rrd = rrd_name($device['hostname'], array('app', 'rrdcached', $app['app_id'])); if (is_file($rrd)) { $rrd_filename = $rrd; } diff --git a/html/includes/graphs/application/rrdcached_events.inc.php b/html/includes/graphs/application/rrdcached_events.inc.php index 73947777ee..17766c1ee9 100644 --- a/html/includes/graphs/application/rrdcached_events.inc.php +++ b/html/includes/graphs/application/rrdcached_events.inc.php @@ -1,4 +1,27 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ include 'rrdcached.inc.php'; diff --git a/html/includes/graphs/application/rrdcached_journal.inc.php b/html/includes/graphs/application/rrdcached_journal.inc.php index 92e9698df8..73f679cdbf 100644 --- a/html/includes/graphs/application/rrdcached_journal.inc.php +++ b/html/includes/graphs/application/rrdcached_journal.inc.php @@ -1,4 +1,27 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ include 'rrdcached.inc.php'; @@ -8,12 +31,12 @@ $rrd_list = array( array( 'ds' => 'journal_rotate', 'filename' => $rrd_filename, - 'descr' => 'Rotated', + 'descr' => 'Journal Rotated', ), array( 'ds' => 'journal_bytes', 'filename' => $rrd_filename, - 'descr' => 'Bytes Written', + 'descr' => 'Journal Bytes Written', ) ); diff --git a/html/includes/graphs/application/rrdcached_queue_length.inc.php b/html/includes/graphs/application/rrdcached_queue_length.inc.php index 862e6b2a99..e82a62bbb0 100644 --- a/html/includes/graphs/application/rrdcached_queue_length.inc.php +++ b/html/includes/graphs/application/rrdcached_queue_length.inc.php @@ -1,4 +1,27 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ require 'rrdcached.inc.php'; require 'includes/graphs/common.inc.php'; @@ -9,6 +32,6 @@ $colour_area = 'F37900'; $colour_line = 'FFA700'; $colour_area_max = 'F78800'; -$unit_text = 'Count'; +$unit_text = 'Queue Length'; require 'includes/graphs/generic_simplex.inc.php'; diff --git a/html/includes/graphs/application/rrdcached_tree.inc.php b/html/includes/graphs/application/rrdcached_tree.inc.php index 4ef3850062..07adb6145b 100644 --- a/html/includes/graphs/application/rrdcached_tree.inc.php +++ b/html/includes/graphs/application/rrdcached_tree.inc.php @@ -1,4 +1,27 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ include 'rrdcached.inc.php'; @@ -8,12 +31,12 @@ $rrd_list = array( array( 'ds' => 'tree_depth', 'filename' => $rrd_filename, - 'descr' => 'Depth', + 'descr' => 'Tree Depth', ), array( 'ds' => 'tree_nodes_number', 'filename' => $rrd_filename, - 'descr' => 'Nodes', + 'descr' => 'Tree Nodes', ) ); diff --git a/html/pages/apps.inc.php b/html/pages/apps.inc.php index cfd2378dde..e0843279b6 100644 --- a/html/pages/apps.inc.php +++ b/html/pages/apps.inc.php @@ -33,6 +33,13 @@ $graphs['nginx'] = array( 'req', ); +$graphs['rrdcached'] = array( + 'queue_length', + 'events', + 'tree', + 'journal' +); + $graphs['bind'] = array('queries'); $graphs['tinydns'] = array( diff --git a/html/pages/device/apps/rrdcached.inc.php b/html/pages/device/apps/rrdcached.inc.php index f09011d510..4263346a82 100644 --- a/html/pages/device/apps/rrdcached.inc.php +++ b/html/pages/device/apps/rrdcached.inc.php @@ -1,4 +1,27 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ global $config; diff --git a/includes/polling/applications/rrdcached.inc.php b/includes/polling/applications/rrdcached.inc.php index 178e89b64c..21bb5e4684 100644 --- a/includes/polling/applications/rrdcached.inc.php +++ b/includes/polling/applications/rrdcached.inc.php @@ -1,27 +1,52 @@ . + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2016 Tony Murray + * @author Tony Murray + */ echo ' rrdcached'; $data = ""; -if($agent_data['app']['rrdcached']) { +if ($agent_data['app']['rrdcached']) { $data = $agent_data['app']['rrdcached']; } else { - d_echo("\nNo Agent Data. Attempting to connect directly to the rrdcached server ".$device['hostname'].":42217\n"); + d_echo("\nNo Agent Data. Attempting to connect directly to the rrdcached server " . $device['hostname'] . ":42217\n"); $sock = fsockopen($device['hostname'], 42217, $errno, $errstr, 5); - if(!$sock && $device['hostname'] == 'localhost') { + if (!$sock && $device['hostname'] == 'localhost') { if (file_exists('/var/run/rrdcached.sock')) { - $sock = fsockopen('unix:///var/run/rrdcached.sock'); - } elseif (file_exists('/run/rrdcached.sock')) { - $sock = fsockopen('unix:///run/rrdcached.sock'); + $sock = fsockopen('unix:///var/run/rrdcached.sock'); + } elseif (file_exists('/run/rrdcached.sock')) { + $sock = fsockopen('unix:///run/rrdcached.sock'); } elseif (file_exists('/tmp/rrdcached.sock')) { - $sock = fsockopen('unix:///tmp/rrdcached.sock'); + $sock = fsockopen('unix:///tmp/rrdcached.sock'); } } - if($sock) { + if ($sock) { fwrite($sock, "STATS\n"); $max = -1; $count = 0; From 0ed7a51de34d39efe43c42b2c545cfd06711c67a Mon Sep 17 00:00:00 2001 From: Adam Winberg Date: Thu, 9 Jun 2016 08:50:19 +0200 Subject: [PATCH 101/133] adjust if statement syntax, as per suggestion from @murrant --- html/pages/device/showconfig.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/html/pages/device/showconfig.inc.php b/html/pages/device/showconfig.inc.php index da57752357..1347e73296 100644 --- a/html/pages/device/showconfig.inc.php +++ b/html/pages/device/showconfig.inc.php @@ -114,10 +114,10 @@ if (is_admin()) { if (strpos($oxidized_hostname, '.') !== false) { // Use short name $oxidized_hostname = strtok($device['hostname'], '.'); - } else { - // Add domain if $config['mydomain'] is set - $oxidized_hostname = $config['mydomain'] ? $device['hostname'].'.'.$config['mydomain'] : $oxidized_hostname; + } elseif($config['mydomain']) { + $oxidized_hostname = $device['hostname'].'.'.$config['mydomain']; } + // Try Oxidized again with new hostname, if it has changed if ($oxidized_hostname != $device['hostname']) { $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$oxidized_hostname.'?format=json'), true); From 6641bb17f582f01b3350fe26163f93a6179f7c11 Mon Sep 17 00:00:00 2001 From: Adam Winberg Date: Thu, 9 Jun 2016 12:35:04 +0200 Subject: [PATCH 102/133] Adhering to librenms style guidelines --- html/pages/device/showconfig.inc.php | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/html/pages/device/showconfig.inc.php b/html/pages/device/showconfig.inc.php index 1347e73296..7ae4bd5a21 100644 --- a/html/pages/device/showconfig.inc.php +++ b/html/pages/device/showconfig.inc.php @@ -110,18 +110,19 @@ if (is_admin()) { // Try other hostname format if Oxidized request failed if (! $node_info) { - // Adjust hostname based on whether domain was already in it or not - if (strpos($oxidized_hostname, '.') !== false) { - // Use short name - $oxidized_hostname = strtok($device['hostname'], '.'); - } elseif($config['mydomain']) { - $oxidized_hostname = $device['hostname'].'.'.$config['mydomain']; - } + // Adjust hostname based on whether domain was already in it or not + if (strpos($oxidized_hostname, '.') !== false) { + // Use short name + $oxidized_hostname = strtok($device['hostname'], '.'); + } + elseif($config['mydomain']) { + $oxidized_hostname = $device['hostname'].'.'.$config['mydomain']; + } - // Try Oxidized again with new hostname, if it has changed - if ($oxidized_hostname != $device['hostname']) { - $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$oxidized_hostname.'?format=json'), true); - } + // Try Oxidized again with new hostname, if it has changed + if ($oxidized_hostname != $device['hostname']) { + $node_info = json_decode(file_get_contents($config['oxidized']['url'].'/node/show/'.$oxidized_hostname.'?format=json'), true); + } } if ($config['oxidized']['features']['versioning'] === true) { // fetch a list of versions From 871f2d7ac687bfc961b1c347161a916b7696321a Mon Sep 17 00:00:00 2001 From: Josh Driver Date: Thu, 9 Jun 2016 21:03:51 +0930 Subject: [PATCH 103/133] I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 83644c51ed..100bf7f5c1 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -104,6 +104,7 @@ LibreNMS contributors: - Robert Verspuy (exarv) - Peter Tkatchenko (Peter2121) - Marc Runkel (mrunkel) +- Josh Driver (keeperofdakeys) [1]: http://observium.org/ "Observium web site" Observium was written by: From d705836c888a66e29b7b43401d502f57185bbb6e Mon Sep 17 00:00:00 2001 From: Guillaume COEUGNET Date: Thu, 9 Jun 2016 15:07:02 +0200 Subject: [PATCH 104/133] Change SQL file name and add /alerts support for procedure --- html/includes/common/alerts.inc.php | 1 + sql-schema/{116.sql => 117.sql} | 0 2 files changed, 1 insertion(+) rename sql-schema/{116.sql => 117.sql} (100%) diff --git a/html/includes/common/alerts.inc.php b/html/includes/common/alerts.inc.php index 184a3c2ab9..3ff832c9d5 100644 --- a/html/includes/common/alerts.inc.php +++ b/html/includes/common/alerts.inc.php @@ -185,6 +185,7 @@ else { if (is_numeric($proc)) { if ($proc) { $common_output[] = 'Procedure'; } } + else { $common_output[] = 'Procedure'; } $common_output[] = ' diff --git a/sql-schema/116.sql b/sql-schema/117.sql similarity index 100% rename from sql-schema/116.sql rename to sql-schema/117.sql From 8a6d327b96e87002c81e17ea944b5f10a2cde7d6 Mon Sep 17 00:00:00 2001 From: Tony Murray Date: Thu, 9 Jun 2016 08:10:21 -0500 Subject: [PATCH 105/133] Update the Riverbed icon so it isn't stretched --- html/images/os/riverbed.png | Bin 3339 -> 5400 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/html/images/os/riverbed.png b/html/images/os/riverbed.png index 51804d52b4fbd0712cfd0c0f86aeaf349764e6a7..19077cbd3d5c8be1288d7fe23386a5950fa14837 100644 GIT binary patch literal 5400 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 literal 3339 zcmai12{=^i8y|ElqD9C^8AH;w%)-QsFQzBg#S+dl)+~{`eo--Bm7tfvNIdi`AzVGjSfA8{r=Q(><_6@6cY_a_eD4qu3^rpfbg99PW*Wj^Q`fSB zXkwb5FM+}1*wUH2aKKi|;e*yN7*R?9mmEM$M@Ttru81IYMk*}`;2IL6kO-xTINBLW z^IL&%=LrD>&eq-*jU;Iy5D21>89|_uJ-@-hCuihFv6xRlp<-iWZDZ|hdBR8(29L+1 z&{z}}YXe%?h-6$bU24M>nSFKg-47WMF@!9>n8o8FAiwl*o1B%2{V3LU6k)j|O zA3#w75l3l!p@F}nouzzkTw}mMKK=e&SUe0 zEBSN=0A-|%r6N+XRt_M6!WD_>Tn0cPlR$wji^U{h9UVOIu8y9bSXT!O#={=J)E$RM zdpM%;SU0k#>rx`>2j~xO$vlPx8lrD*nWJv;=>Kx70{zh~AY{b=Oiv+?qukAWx=;i_ zv+j(9Is*;6>g++|r`#Ka>O~%Bf`!W+;rph-=IVk#8Blp{(9CcrQl&t(gKm+ zUmPSYH~B*(_?n?m$gV*&&Aya%>>v-l>blzIrkLe3&g`O=aa<2=$LJ9t`Y0Q|&hnXXFUo!EXwfZH^pX(O#Gg4NSJ%2Wzo6(T*M@?2t5q@aI z_pjpTImf#CC7g4T^I=<7gnV(sJh4cf|29IM_DCQybkOT?FiiKB_bkH7w_^5&p7g1# z_ugp5h1oSH&BYAD?IX3<+-@y79#obV-~MF#Kc?&7RA{$w{qD3xCz}5GdBj9NJFU{? zBTo<$_fi)1{<(kg$hy7f*81kgBb#$`?|r#1lP~5D*_+w@vYYju5l|egI1}jX(! zryx-T!U zKPp~QCGWOLvRnq+5w&yKKHyV(0b|j_Eymkp1c5qQALPN5ZI)N5wa)o<^E9)Puw|J; zewRxG@M>$%+*O$&Gx!E;mZulc|Dk*czaJ`~JKcyfh;D4I`l+yD{o*X*$znN4gVSc7 z8LH8;K4OSH{ZJ>&VihjA^hhoHqyC=!ltXy|XxKy8#>n01dPmDw?jP}TS)JCja4c9)=u|o!5?o2U{EDVlI^-Oed58vZH=$~p9 zD~DGN3iR=Jyq?q*?0U8CQ=Lbl$#tRPT3Pzv3V7fS*k#RtF7I@FNL?4gxrREGM@}ll z-OY0hs;NgdsVDLbiyr+?^At%@odxSg4%n9lm~}?IQa5~K`CxuSp7~muRb(G9c#xkx zRrqQEqn74mm0lm#LiNKfziAXtOPM2iy=u+}c*hD{xq6K5?0Zhx{x_DE*$!Ru&q)`B zi;TB>9lIGPttWdKhPm*#`y+b;ryo-nUG{uKY1t~O62~N%8&7%WeiK(wtbX$KOLJIi z;%2JB+vaKehp<;ZWo7r^&=yX}U&}0F?SESET8C4q6*9L+m}m&s$GR7FP%IG&^kcoo z+4;yL{arKDR!$>^n<$-JoMi@rjCE0|W&je(|(4o^}2_&oh)M zGuPIs+xBkv|l~XF7Ivg-DGfPTz&MAznbUq#x?hn{-&rsf1 zdOr_M5^gcMx7|Dr10ND_+sjrPbsUaJ*89*}JRPZ3bj#oTF`H7F+Ml1xt!HQ_{}tig zFuU_`N@)!_m3cZUsMgSKz6;ms$(oPDhYN~RdWGB+^O2=G3+fNC(Fp?!1iM}a+#E5u z;G(P6b5*y%H)45rg)zPGl#gd-&)pH$4$&XwFYT#x_BzfD`FoM?(9IMyzD zoyZm^5+8@olmellB3bEMt9iIP`@=@$e^Kblb4=UtR Date: Sat, 11 Jun 2016 09:45:39 -0500 Subject: [PATCH 106/133] Output numbers (#3637) add numbers only output option to snmpbulkwalk command. --- .github/ISSUE_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index f0c3abfa25..f5be93f471 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -9,7 +9,7 @@ Please replace the relevant information in these commands. ```bash ./discovery.php -h HOSTNAME -d -m os ./poller.php -h HOSTNAME -r -f -d -m os -snmpbulkwalk -v2c -c COMMUNITY HOSTNAME . +snmpbulkwalk -On -v2c -c COMMUNITY HOSTNAME . ``` If possible please also provide what the OS name should be if it doesn't exist already. From c1b752e373c2015efba091dda7705682ad9d9c66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Sun, 12 Jun 2016 14:48:25 +0200 Subject: [PATCH 107/133] HWg-STE Temp & State Support #3606 --- .../discovery/sensors/states/hwg-ste.inc.php | 52 +++++++++++++++++++ .../sensors/temperatures/hwg-ste.inc.php | 23 ++++++++ 2 files changed, 75 insertions(+) create mode 100644 includes/discovery/sensors/states/hwg-ste.inc.php create mode 100644 includes/discovery/sensors/temperatures/hwg-ste.inc.php diff --git a/includes/discovery/sensors/states/hwg-ste.inc.php b/includes/discovery/sensors/states/hwg-ste.inc.php new file mode 100644 index 0000000000..1d54b4dd63 --- /dev/null +++ b/includes/discovery/sensors/states/hwg-ste.inc.php @@ -0,0 +1,52 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if ($device['os'] == 'hwg-ste') { + + $temp = snmpwalk_cache_multi_oid($device, 'sensTable', array(), 'STE-MIB'); + $cur_oid = '.1.3.6.1.4.1.21796.4.1.3.1.5.'; + + if (is_array($temp)) { + //Create State Index + $state_name = 'sensState'; + $state_index_id = create_state_index($state_name); + + //Create State Translation + if ($state_index_id !== null) { + $states = array( + array($state_index_id,'invalid',0,0,3) , + array($state_index_id,'normal',0,1,0) , + array($state_index_id,'alarmstate',0,2,1) , + array($state_index_id,'alarm',0,3,2) + ); + foreach($states as $value){ + $insert = array( + 'state_index_id' => $value[0], + 'state_descr' => $value[1], + 'state_draw_graph' => $value[2], + 'state_value' => $value[3], + 'state_generic_value' => $value[4] + ); + dbInsert($insert, 'state_translations'); + } + } + + foreach ($temp as $index => $entry) { + $descr = $temp[$index]['sensName']; + //Discover Sensors + discover_sensor($valid['sensor'], 'state', $device, $cur_oid.$index, $index, $state_name, $descr, '1', '1', null, null, null, null, $temp[$index]['sensState'], 'snmp', $index); + + //Create Sensor To State Index + create_sensor_to_state_index($device, $state_name, $index); + } + } +} diff --git a/includes/discovery/sensors/temperatures/hwg-ste.inc.php b/includes/discovery/sensors/temperatures/hwg-ste.inc.php new file mode 100644 index 0000000000..3ed7ed6da2 --- /dev/null +++ b/includes/discovery/sensors/temperatures/hwg-ste.inc.php @@ -0,0 +1,23 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if ($device['os'] == 'hwg-ste') { + + $temp = snmpwalk_cache_multi_oid($device, 'sensTable', array(), 'STE-MIB'); + $cur_oid = '.1.3.6.1.4.1.21796.4.1.3.1.5.'; + + if (is_array($temp)) { + foreach ($temp as $index => $entry) { + discover_sensor($valid['sensor'], 'temperature', $device, $cur_oid.$index, $index, 'hwg-ste', $temp[$index]['sensName'], '10', '1', null, null, null, null, $temp[$index]['sensValue'], 'snmp', $index); + } + } +} From 097753a3cc4c354eee6d809f8b138af06255ff6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Sun, 12 Jun 2016 15:06:31 +0200 Subject: [PATCH 108/133] Basic HP Blade Management Support #3631 --- includes/definitions.inc.php | 12 ++++++++++++ includes/discovery/os/hpblmos.inc.php | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 includes/discovery/os/hpblmos.inc.php diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 3d11f2690a..94e7125dec 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -1619,6 +1619,18 @@ $config['os'][$os]['icon'] = 'generic'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Traffic'; +// HP Blade Management +$os = 'hpblmos'; +$config['os'][$os]['text'] = 'HP Blade Management'; +$config['os'][$os]['type'] = 'appliance'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + // HP MSM $os = 'hpmsm'; $config['os'][$os]['text'] = 'HP MSM'; diff --git a/includes/discovery/os/hpblmos.inc.php b/includes/discovery/os/hpblmos.inc.php new file mode 100644 index 0000000000..88548a7443 --- /dev/null +++ b/includes/discovery/os/hpblmos.inc.php @@ -0,0 +1,16 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysObjectId, '.1.3.6.1.4.1.11.5.7.1.2')) { + $os = 'hpblmos'; + } From 82066f8430df925635f3466dec45c2176d4df30d Mon Sep 17 00:00:00 2001 From: Felix Eckhofer Date: Sun, 12 Jun 2016 15:40:21 +0200 Subject: [PATCH 109/133] Keep aspect ratio for external images on dashboard --- html/includes/common/generic-image.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/includes/common/generic-image.inc.php b/html/includes/common/generic-image.inc.php index 314caa1cf2..91f80ac1b3 100644 --- a/html/includes/common/generic-image.inc.php +++ b/html/includes/common/generic-image.inc.php @@ -58,5 +58,5 @@ if( defined('show_settings') || empty($widget_settings) ) { } else { $widget_settings['title'] = $widget_settings['image_title']; - $common_output[] = ''; + $common_output[] = ''; } From 9ba5a38b5640b4c4a4b0e8c054545d2b82040a46 Mon Sep 17 00:00:00 2001 From: Felix Eckhofer Date: Sun, 12 Jun 2016 15:43:53 +0200 Subject: [PATCH 110/133] I agree to the conditions of the Contributor Agreement contained in doc/General/Contributing.md. --- AUTHORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.md b/AUTHORS.md index 100bf7f5c1..cfafbbda83 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -105,6 +105,7 @@ LibreNMS contributors: - Peter Tkatchenko (Peter2121) - Marc Runkel (mrunkel) - Josh Driver (keeperofdakeys) +- Felix Eckhofer (tribut) [1]: http://observium.org/ "Observium web site" Observium was written by: From f5b3fb1136e5ed1074ac5483aa113a858904816d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Sun, 12 Jun 2016 15:59:17 +0200 Subject: [PATCH 111/133] Basic Oracle ILOM Support #3632 --- html/images/os/oracle.png | Bin 0 -> 764 bytes includes/definitions.inc.php | 12 ++++++++++++ includes/discovery/os/oracle-ilom.inc.php | 17 +++++++++++++++++ includes/polling/os/oracle-ilom.inc.php | 16 ++++++++++++++++ 4 files changed, 45 insertions(+) create mode 100644 html/images/os/oracle.png create mode 100644 includes/discovery/os/oracle-ilom.inc.php create mode 100644 includes/polling/os/oracle-ilom.inc.php diff --git a/html/images/os/oracle.png b/html/images/os/oracle.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4235fc654c331b0389540532aaf42cd9b92f4f GIT binary patch literal 764 zcmVBTPQ(BJ0*OgP zK~z}7?bb_3RACgr@&9+fJL9~^nI1$omWV;7Eh0tQMf9KtSO^gWLC_*16gMrRh@dxt z5p60Ig^Cu@iz0fcAu&{oh#uouL{^igQCV|m?#$eKzZOB!rtNI**&Pm?^MeD2Ba~8# zGKNN(!v(ki7vKV1fR0kwsbQ@2YY-rULA=YC;e7o{@xc&6N{|v+Q-j`64}i)VSTA1U zX=(nQ=ki$3o@0N?ApCx`NEi{TL|?e@?<`JqwvgAa~EI+Mn;~LyN~z zQ$Mg@zri?o6i;I#xvo>lsw$kZam=gN(V|ggb%K0%FUH>ecvmb3Ab0o}rDPH<90sAG zCMGG~ANW&O#UlB$-Q>G_kuzt2kwZknD5cQN%U6lrz4?!nu2U5H2kj4qXhy)`p!}8A4E1bpwF+P;Pp^?^cWEg{D09( z;k+BAkjYRCh7greD%Pz*U(|rE&zpzYcLBX=F(^=mfqDKSfzA%B$4>}!wqreiMfk)K zgwKz8@e;najeJ|(ikLnP`|Ueqb%Mg3d&s%f2#*J6auW6PC-&%jRNh1tifD-hA{@fk zwgJb;p+zI06vD~nm2v0@c6tPaKmnzBf9n>o zZJhCO%q!Q?=htCgyMgm*44IgNr)deLr%!Q4KcE~NPjeF$>(^4ab(>Q15$F=%=1urE uwj#><5h+#XJ0OI630;5-Z~-pB1@H@Ep9gabW)W`y0000 + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (!$os) { + if (strstr($sysObjectId, '.1.3.6.1.4.1.42.2.200.2.1.1')) { + $os = 'oracle-ilom'; + } +} diff --git a/includes/polling/os/oracle-ilom.inc.php b/includes/polling/os/oracle-ilom.inc.php new file mode 100644 index 0000000000..60166f3b34 --- /dev/null +++ b/includes/polling/os/oracle-ilom.inc.php @@ -0,0 +1,16 @@ + + * This program 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, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if (preg_match('/^(.*), ILOM v(.*), (.*)/', $poll_device['sysDescr'], $regexp_result)) { + $hardware = 'Oracle ' . $regexp_result[1]; + $version = $regexp_result[2]; +} From ac5edc296750141295eaf021000201b04acba853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rosiak?= Date: Sun, 12 Jun 2016 16:00:38 +0200 Subject: [PATCH 112/133] Missing end --- includes/discovery/os/hpblmos.inc.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/discovery/os/hpblmos.inc.php b/includes/discovery/os/hpblmos.inc.php index 88548a7443..9eba8faa5c 100644 --- a/includes/discovery/os/hpblmos.inc.php +++ b/includes/discovery/os/hpblmos.inc.php @@ -14,3 +14,4 @@ if (!$os) { if (strstr($sysObjectId, '.1.3.6.1.4.1.11.5.7.1.2')) { $os = 'hpblmos'; } +} From 26011752d9a39f619b567131976cf88896d3c2a0 Mon Sep 17 00:00:00 2001 From: laf Date: Sun, 12 Jun 2016 17:54:47 +0000 Subject: [PATCH 113/133] Updated changelog until June 2016 --- doc/General/Changelog.md | 85 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/doc/General/Changelog.md b/doc/General/Changelog.md index 5c83b6c47a..8c1822b004 100644 --- a/doc/General/Changelog.md +++ b/doc/General/Changelog.md @@ -1,3 +1,88 @@ +### June 2016 + +#### Bug fixes + - WebUI: + - Rename $ds to $ldap_connection for auth modules (PR3596) + - Misc: + - Fix smokeping path in gen_smokeping (PR3577) + - Fix full include path in includes/polling/functions.inc.php (PR3614) + +#### Improvements + - Added / improved detection for: + - HPE 3Par (PR3578) + - Buffalo TeraStation (PR3587) + - Samsung C printers (PR3598) + - Roomalert3e (PR3599) + - Avtech Switches (PR3611) + - IBM Bladecenter switches (PR3623) + - HWg support (PR3624) + - IBM IMM (PR3625) + - Polling / Discovery: + - Use lsb_release in distro script (PR3580) + - Allow lmsensors fanspeeds of 0 to be discovered (PR3616) + - Added support for rrdcached application monitoring (PR3627) + - WebUI: + - Resolve some reported security issues (PR3586) With thanks to https://twitter.com/wireghoul + - Order apps list alphabetically (PR3600) + - Network map improvements (PR3602) + - Added support for varying hostname formats in Oxidized integration (PR3617) + - Added device hw/location on hover in alerts table (PR3621) + - Misc: + - Added pivot table for device groups ready for V2 (PR3589) + +### May 2016 + +#### Bug fixes + - WebUI: + - Fixed broken performance charts using VisJS (PR3479) + - Fixed include path to file in create alert item (PR3480) + - Updated services box on front page to utilise the new services (PR3481) + - Potential fix for intermittent logouts (PR3372) + - Updated sensors hostname to use correct variable (PR3485) + - Polling / Discovery: + - Only poll AirMAX if device supports the MIB (PR3486) + - Alerting: + - Don't alert unless the sensor value surpasses the threshold (PR3507) + +#### Improvements + - Added / improved detection for: + - Microsemo timing devices (PR3453) + - Bintec smart routers (PR3454) + - PoweWalker support (PR3456) + - BDCom support (PR3459) + - Cisco WAPs (PR3460) + - EMC Data domain (PR3461) + - Xerox support (PR3462) + - Calix support (PR3463) + - Isilon OneFS (PR3482) + - Ricoh printers (PR3483) + - HP Virtual Connect (PR3487) + - Equallogic arrays + Dell servers (PR3519) + - Alcatel-Lucent SR + SAR (PR3535, PR3553) + - Xirrus Wireless Access Points (PR3543) + - Polling / Discovery: + - Add config option to stop devices with duplicate sysName's being added (PR3473) + - Enable discovery support of CDP neighbours by IP (PR3561) + - Alerting: + - Added ability to use sysName in templates (PR3470) + - Send Slack alerts as pure JSON (PR3522) + - Apply colour to HipChat messages (PR3539) + - WebUI: + - Added ability to filter alerts by state (PR3471) + - Added support for using local openstreet map tiles (PR3472) + - Added ability to show services on availability map (PR3496) + - Added combined auth module for http auth and AD auth (PR3531) + - List services alphabetically (PR3538) + - Added support for scrollable widgets (PR3565) + - Graphs: + - Added Hit/Misses for memcached graphs (PR3499) + - API: + - Update get_graph_generic_by_hostname to use device_id as well (PR3494) + - Docs: + - Added configuration for SNMP Proxy support (PR3528) + - Misc: + - Added purge for alert log (PR3469) + ### April 2016 #### Bug fixes From e1ee0df0fab9d814b8625d0432d726fe82cdf678 Mon Sep 17 00:00:00 2001 From: laf Date: Sun, 12 Jun 2016 20:13:44 +0000 Subject: [PATCH 114/133] Updated poweralert sensors divisor to 1 from 10 --- .../discovery/sensors/current/rfc1628.inc.php | 13 +++++++++---- .../discovery/sensors/frequencies/rfc1628.inc.php | 15 ++++++++++++--- .../discovery/sensors/voltages/rfc1628.inc.php | 12 ++++++------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/includes/discovery/sensors/current/rfc1628.inc.php b/includes/discovery/sensors/current/rfc1628.inc.php index 73811ae101..51a3833738 100644 --- a/includes/discovery/sensors/current/rfc1628.inc.php +++ b/includes/discovery/sensors/current/rfc1628.inc.php @@ -1,5 +1,10 @@ Date: Sun, 12 Jun 2016 21:23:21 -0500 Subject: [PATCH 115/133] Fix custom port not showing on the device edit page --- html/pages/device/edit/snmp.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/pages/device/edit/snmp.inc.php b/html/pages/device/edit/snmp.inc.php index b2749069a5..c0614790be 100644 --- a/html/pages/device/edit/snmp.inc.php +++ b/html/pages/device/edit/snmp.inc.php @@ -92,7 +92,7 @@ echo "
- +
- +
' data-storage_id='"+row.storage_id+"' value='"+row.storage_perc_warn+"'>
"; @@ -58,7 +58,7 @@ var $this = $(this); $.ajax({ type: 'POST', - url: '/ajax_form.php', + url: 'ajax_form.php', data: {type: "storage-update", device_id: device_id, data: data, storage_id: storage_id}, dataType: "json", success: function (data) { diff --git a/html/pages/device/mib.inc.php b/html/pages/device/mib.inc.php index 19131cdd09..a920702950 100644 --- a/html/pages/device/mib.inc.php +++ b/html/pages/device/mib.inc.php @@ -61,7 +61,7 @@ if (is_module_enabled('poller', 'mib')) { device_id: '', }; }, - url: "/ajax_table.php", + url: "ajax_table.php", formatters: { }, templates: { @@ -80,7 +80,7 @@ if (is_module_enabled('poller', 'mib')) { device_id: '', }; }, - url: "/ajax_table.php", + url: "ajax_table.php", formatters: { }, templates: { diff --git a/html/pages/mib_assoc.inc.php b/html/pages/mib_assoc.inc.php index 3296c7518a..d9626a2f37 100644 --- a/html/pages/mib_assoc.inc.php +++ b/html/pages/mib_assoc.inc.php @@ -41,7 +41,7 @@ if (is_module_enabled('poller', 'mib')) { id: "device_mibs", }; }, - url: "/ajax_table.php", + url: "ajax_table.php", formatters: { }, templates: { diff --git a/html/pages/mibs.inc.php b/html/pages/mibs.inc.php index 6c7c6e8518..a9e2da4687 100644 --- a/html/pages/mibs.inc.php +++ b/html/pages/mibs.inc.php @@ -47,7 +47,7 @@ if (is_module_enabled('poller', 'mib')) { view: '' }; }, - url: "/ajax_table.php", + url: "ajax_table.php", formatters: { }, templates: { From f5d9c5e48be6643f3fe5c4098df928ff6ede8b4c Mon Sep 17 00:00:00 2001 From: Lucas Rolff Date: Wed, 15 Jun 2016 15:20:19 +0200 Subject: [PATCH 127/133] Add In/Out to multiport graph - Add In/Out text and color boxes to multiport bit graph --- html/includes/graphs/generic_multi_data.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/includes/graphs/generic_multi_data.inc.php b/html/includes/graphs/generic_multi_data.inc.php index d3ab6c2e21..eb28975b5b 100644 --- a/html/includes/graphs/generic_multi_data.inc.php +++ b/html/includes/graphs/generic_multi_data.inc.php @@ -87,14 +87,14 @@ if ($i) { // $rrd_options .= " LINE1.25:dout".$format."#".$colour_line_out.":"; } else { - $rrd_options .= ' AREA:in'.$format.'#'.$colour_area_in.':'; $rrd_options .= " COMMENT:'bps Now Ave Max 95th %\\n'"; + $rrd_options .= ' AREA:in'.$format.'#'.$colour_area_in.':In '; // $rrd_options .= " LINE1.25:in".$format."#".$colour_line_in.":In\ "; $rrd_options .= ' GPRINT:in'.$format.':LAST:%6.2lf%s'; $rrd_options .= ' GPRINT:in'.$format.':AVERAGE:%6.2lf%s'; $rrd_options .= ' GPRINT:in'.$format.':MAX:%6.2lf%s'; $rrd_options .= " GPRINT:95thin:%6.2lf%s\\\\n"; - $rrd_options .= ' AREA:dout'.$format.'#'.$colour_area_out.':'; + $rrd_options .= ' AREA:dout'.$format.'#'.$colour_area_out.':Out'; // $rrd_options .= " LINE1.25:dout".$format."#".$colour_line_out.":Out"; $rrd_options .= ' GPRINT:out'.$format.':LAST:%6.2lf%s'; $rrd_options .= ' GPRINT:out'.$format.':AVERAGE:%6.2lf%s'; From ed17c7e39d523e41f23a902f72076a7e25082fa4 Mon Sep 17 00:00:00 2001 From: laf Date: Wed, 15 Jun 2016 13:21:09 +0000 Subject: [PATCH 128/133] Added detection for SwOS --- includes/definitions.inc.php | 11 +++++++++++ includes/discovery/os/routeros.inc.php | 4 ---- includes/discovery/os/swos.inc.php | 7 +++++++ 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 includes/discovery/os/swos.inc.php diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 11ec674696..9dfeb35653 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -742,6 +742,17 @@ $config['os'][$os]['over'][1]['text'] = 'CPU Usage'; $config['os'][$os]['over'][2]['graph'] = 'device_mempool'; $config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$os = 'swos'; +$config['os'][$os]['text'] = 'Mikrotik SwOS'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['nobulk'] = 1; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + $os = 'bintec-smart'; $config['os'][$os]['text'] = 'Bintec Smart Router'; $config['os'][$os]['type'] = 'network'; diff --git a/includes/discovery/os/routeros.inc.php b/includes/discovery/os/routeros.inc.php index 4d035a2142..1918c9cd19 100644 --- a/includes/discovery/os/routeros.inc.php +++ b/includes/discovery/os/routeros.inc.php @@ -15,10 +15,6 @@ if (!$os) { $os = 'routeros'; } - if ($sysDescr == 'RB260GS') { - $os = 'routeros'; - } - // poll Cisco AAA MIB if (!empty($os)) { $extra_mibs = array( diff --git a/includes/discovery/os/swos.inc.php b/includes/discovery/os/swos.inc.php new file mode 100644 index 0000000000..29e5e8e4b1 --- /dev/null +++ b/includes/discovery/os/swos.inc.php @@ -0,0 +1,7 @@ + Date: Wed, 15 Jun 2016 15:30:40 +0100 Subject: [PATCH 129/133] Add SCTP MIB --- mibs/SCTP-MIB | 1342 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1342 insertions(+) create mode 100644 mibs/SCTP-MIB diff --git a/mibs/SCTP-MIB b/mibs/SCTP-MIB new file mode 100644 index 0000000000..9d809d2823 --- /dev/null +++ b/mibs/SCTP-MIB @@ -0,0 +1,1342 @@ +SCTP-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, Integer32, Unsigned32, Gauge32, + Counter32, Counter64, mib-2 + FROM SNMPv2-SMI -- [RFC2578] + TimeStamp, TruthValue + FROM SNMPv2-TC -- [RFC2579] + MODULE-COMPLIANCE, OBJECT-GROUP + FROM SNMPv2-CONF -- [RFC2580] + InetAddressType, InetAddress, InetPortNumber + FROM INET-ADDRESS-MIB; -- [RFC3291] + +sctpMIB MODULE-IDENTITY + LAST-UPDATED "200409020000Z" -- 2nd September 2004 + ORGANIZATION "IETF SIGTRAN Working Group" + CONTACT-INFO + " + WG EMail: sigtran@ietf.org + + Web Page: + http://www.ietf.org/html.charters/sigtran-charter.html + + Chair: Lyndon Ong + Ciena Corporation + 0480 Ridgeview Drive + Cupertino, CA 95014 + USA + Tel: + Email: lyong@ciena.com + + Editors: Maria-Carmen Belinchon + R&D Department + Ericsson Espana S. A. + Via de los Poblados, 13 + 28033 Madrid + Spain + Tel: +34 91 339 3535 + Email: Maria.C.Belinchon@ericsson.com + + Jose-Javier Pastor-Balbas + R&D Department + Ericsson Espana S. A. + Via de los Poblados, 13 + 28033 Madrid + Spain + Tel: +34 91 339 1397 + Email: J.Javier.Pastor@ericsson.com + " + DESCRIPTION + "The MIB module for managing SCTP implementations. + + Copyright (C) The Internet Society (2004). This version of + this MIB module is part of RFC 3873; see the RFC itself for + full legal notices. " + + REVISION "200409020000Z" -- 2nd September 2004 + DESCRIPTION " Initial version, published as RFC 3873" + ::= { mib-2 104 } + +-- the SCTP base variables group + +sctpObjects OBJECT IDENTIFIER ::= { sctpMIB 1 } + +sctpStats OBJECT IDENTIFIER ::= { sctpObjects 1 } +sctpParams OBJECT IDENTIFIER ::= { sctpObjects 2 } + +-- STATISTICS +-- ********** + +-- STATE-RELATED STATISTICS + +sctpCurrEstab OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of associations for which the current state is + either ESTABLISHED, SHUTDOWN-RECEIVED or SHUTDOWN-PENDING." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpStats 1 } + +sctpActiveEstabs OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of times that associations have made a direct + transition to the ESTABLISHED state from the COOKIE-ECHOED + state: COOKIE-ECHOED -> ESTABLISHED. The upper layer initiated + the association attempt." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpStats 2 } + +sctpPassiveEstabs OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of times that associations have made a direct + transition to the ESTABLISHED state from the CLOSED state: + CLOSED -> ESTABLISHED. The remote endpoint initiated the + association attempt." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpStats 3 } + +sctpAborteds OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of times that associations have made a direct + transition to the CLOSED state from any state using the + primitive 'ABORT': AnyState --Abort--> CLOSED. Ungraceful + termination of the association." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpStats 4 } + +sctpShutdowns OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of times that associations have made a direct + transition to the CLOSED state from either the SHUTDOWN-SENT + state or the SHUTDOWN-ACK-SENT state. Graceful termination of + the association." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpStats 5 } + +-- OTHER LAYER STATISTICS + +sctpOutOfBlues OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of out of the blue packets received by the host. + An out of the blue packet is an SCTP packet correctly formed, + including the proper checksum, but for which the receiver was + unable to identify an appropriate association." + REFERENCE + "Section 8.4 in RFC2960 deals with the Out-Of-The-Blue + (OOTB) packet definition and procedures." + ::= { sctpStats 6 } + +sctpChecksumErrors OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP packets received with an invalid + checksum." + REFERENCE + "The checksum is located at the end of the SCTP packet as per + Section 3.1 in RFC2960. RFC3309 updates SCTP to use a 32 bit + CRC checksum." +::= { sctpStats 7 } + +sctpOutCtrlChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP control chunks sent (retransmissions are + not included). Control chunks are those chunks different from + DATA." + REFERENCE + "Sections 1.3.5 and 1.4 in RFC2960 refer to control chunk as + those chunks different from those that contain user + information, i.e., DATA chunks." + ::= { sctpStats 8 } + +sctpOutOrderChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP ordered data chunks sent (retransmissions + are not included)." + REFERENCE + "Section 3.3.1 in RFC2960 defines the ordered data chunk." + ::= { sctpStats 9 } + +sctpOutUnorderChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP unordered chunks (data chunks in which the + U bit is set to 1) sent (retransmissions are not included)." + REFERENCE + "Section 3.3.1 in RFC2960 defines the unordered data chunk." + ::= { sctpStats 10 } + +sctpInCtrlChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP control chunks received (no duplicate + chunks included)." + REFERENCE + "Sections 1.3.5 and 1.4 in RFC2960 refer to control chunk as + those chunks different from those that contain user + information, i.e., DATA chunks." + ::= { sctpStats 11 } + +sctpInOrderChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP ordered data chunks received (no duplicate + chunks included)." + REFERENCE + "Section 3.3.1 in RFC2960 defines the ordered data chunk." + ::= { sctpStats 12 } + +sctpInUnorderChunks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP unordered chunks (data chunks in which the + U bit is set to 1) received (no duplicate chunks included)." + REFERENCE + "Section 3.3.1 in RFC2960 defines the unordered data chunk." + ::= { sctpStats 13 } + +sctpFragUsrMsgs OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of user messages that have to be fragmented + because of the MTU." + ::= { sctpStats 14 } + +sctpReasmUsrMsgs OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of user messages reassembled, after conversion + into DATA chunks." + REFERENCE + "Section 6.9 in RFC2960 includes a description of the + reassembly process." + ::= { sctpStats 15 } + +sctpOutSCTPPacks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP packets sent. Retransmitted DATA chunks + are included." + ::= { sctpStats 16 } + +sctpInSCTPPacks OBJECT-TYPE + SYNTAX Counter64 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of SCTP packets received. Duplicates are + included." + ::= { sctpStats 17 } + +sctpDiscontinuityTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime on the most recent occasion at which + any one or more of this general statistics counters suffered a + discontinuity. The relevant counters are the specific + instances associated with this interface of any Counter32 or + Counter64 object contained in the SCTP layer statistics + (defined below sctpStats branch). If no such discontinuities + have occurred since the last re-initialization of the local + management subsystem, then this object contains a zero value." + REFERENCE + "The inclusion of this object is recommended by RFC2578." + ::= { sctpStats 18 } + +-- PROTOCOL GENERAL VARIABLES +-- ************************** + +sctpRtoAlgorithm OBJECT-TYPE + SYNTAX INTEGER { + other(1), -- Other new one. Future use + vanj(2) -- Van Jacobson's algorithm + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The algorithm used to determine the timeout value (T3-rtx) + used for re-transmitting unacknowledged chunks." + REFERENCE + "Section 6.3.1 and 6.3.2 in RFC2960 cover the RTO calculation + and retransmission timer rules." + DEFVAL {vanj} -- vanj(2) + ::= { sctpParams 1 } + +sctpRtoMin OBJECT-TYPE + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The minimum value permitted by a SCTP implementation for the + retransmission timeout value, measured in milliseconds. More + refined semantics for objects of this type depend upon the + algorithm used to determine the retransmission timeout value. + + A retransmission time value of zero means immediate + retransmission. + + The value of this object has to be lower than or equal to + stcpRtoMax's value." + DEFVAL {1000} -- milliseconds + ::= { sctpParams 2 } + +sctpRtoMax OBJECT-TYPE + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The maximum value permitted by a SCTP implementation for the + retransmission timeout value, measured in milliseconds. More + refined semantics for objects of this type depend upon the + algorithm used to determine the retransmission timeout value. + + A retransmission time value of zero means immediate re- + transmission. + + The value of this object has to be greater than or equal to + stcpRtoMin's value." + DEFVAL {60000} -- milliseconds + ::= { sctpParams 3 } + +sctpRtoInitial OBJECT-TYPE + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The initial value for the retransmission timer. + + A retransmission time value of zero means immediate re- + transmission." + DEFVAL {3000} -- milliseconds + ::= { sctpParams 4 } + +sctpMaxAssocs OBJECT-TYPE + SYNTAX Integer32 (-1 | 0..2147483647) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The limit on the total number of associations the entity can + support. In entities where the maximum number of associations + is dynamic, this object should contain the value -1." + ::= { sctpParams 5 } + +sctpValCookieLife OBJECT-TYPE + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Valid cookie life in the 4-way start-up handshake procedure." + REFERENCE + "Section 5.1.3 in RFC2960 explains the cookie generation + process. Recommended value is per section 14 in RFC2960." + DEFVAL {60000} -- milliseconds + ::= { sctpParams 6 } + +sctpMaxInitRetr OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The maximum number of retransmissions at the start-up phase + (INIT and COOKIE ECHO chunks). " + REFERENCE + "Section 5.1.4, 5.1.6 in RFC2960 refers to Max.Init.Retransmit + parameter. Recommended value is per section 14 in RFC2960." + DEFVAL {8} -- number of attempts + ::= { sctpParams 7 } + +-- TABLES +-- ****** + +-- the SCTP Association TABLE + +-- The SCTP association table contains information about each +-- association in which the local endpoint is involved. + +sctpAssocTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpAssocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "A table containing SCTP association-specific information." + ::= { sctpObjects 3 } + +sctpAssocEntry OBJECT-TYPE + SYNTAX SctpAssocEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "General common variables and statistics for the whole + association." + INDEX { sctpAssocId } + ::= { sctpAssocTable 1 } + +SctpAssocEntry ::= SEQUENCE { + sctpAssocId Unsigned32, + sctpAssocRemHostName OCTET STRING, + sctpAssocLocalPort InetPortNumber, + sctpAssocRemPort InetPortNumber, + sctpAssocRemPrimAddrType InetAddressType, + sctpAssocRemPrimAddr InetAddress, + sctpAssocHeartBeatInterval Unsigned32, + sctpAssocState INTEGER, + sctpAssocInStreams Unsigned32, + sctpAssocOutStreams Unsigned32, + sctpAssocMaxRetr Unsigned32, + sctpAssocPrimProcess Unsigned32, + sctpAssocT1expireds Counter32, -- Statistic + sctpAssocT2expireds Counter32, -- Statistic + sctpAssocRtxChunks Counter32, -- Statistic + sctpAssocStartTime TimeStamp, + sctpAssocDiscontinuityTime TimeStamp + } + +sctpAssocId OBJECT-TYPE + SYNTAX Unsigned32 (1..4294967295) + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Association Identification. Value identifying the + association. " + ::= { sctpAssocEntry 1 } + +sctpAssocRemHostName OBJECT-TYPE + SYNTAX OCTET STRING (SIZE(0..255)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The peer's DNS name. This object needs to have the same + format as the encoding in the DNS protocol. This implies that + the domain name can be up to 255 octets long, each octet being + 0<=x<=255 as value with US-ASCII A-Z having a case insensitive + matching. + + If no DNS domain name was received from the peer at init time + (embedded in the INIT or INIT-ACK chunk), this object is + meaningless. In such cases the object MUST contain a zero- + length string value. Otherwise, it contains the remote host + name received at init time." + ::= { sctpAssocEntry 2 } + +sctpAssocLocalPort OBJECT-TYPE + SYNTAX InetPortNumber (1..65535) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The local SCTP port number used for this association." + ::= { sctpAssocEntry 3 } + +sctpAssocRemPort OBJECT-TYPE + SYNTAX InetPortNumber (1..65535) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The remote SCTP port number used for this association." + ::= { sctpAssocEntry 4 } + +sctpAssocRemPrimAddrType OBJECT-TYPE + SYNTAX InetAddressType + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The internet type of primary remote IP address. " + ::= { sctpAssocEntry 5 } + +sctpAssocRemPrimAddr OBJECT-TYPE + SYNTAX InetAddress + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The primary remote IP address. The type of this address is + determined by the value of sctpAssocRemPrimAddrType. + + The client side will know this value after INIT_ACK message + reception, the server side will know this value when sending + INIT_ACK message. However, values will be filled in at + established(4) state." + ::= { sctpAssocEntry 6 } + +sctpAssocHeartBeatInterval OBJECT-TYPE + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The current heartbeat interval.. + + Zero value means no HeartBeat, even when the concerned + sctpAssocRemAddrHBFlag object is true." + DEFVAL {30000} -- milliseconds + ::= { sctpAssocEntry 7 } + +sctpAssocState OBJECT-TYPE + SYNTAX INTEGER { + closed(1), + cookieWait(2), + cookieEchoed(3), + established(4), + shutdownPending(5), + shutdownSent(6), + shutdownReceived(7), + shutdownAckSent(8), + deleteTCB(9) + } + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "The state of this SCTP association. + + As in TCP, deleteTCB(9) is the only value that may be set by a + management station. If any other value is received, then the + agent must return a wrongValue error. + + If a management station sets this object to the value + deleteTCB(9), then this has the effect of deleting the TCB (as + defined in SCTP) of the corresponding association on the + managed node, resulting in immediate termination of the + association. + + As an implementation-specific option, an ABORT chunk may be + sent from the managed node to the other SCTP endpoint as a + result of setting the deleteTCB(9) value. The ABORT chunk + implies an ungraceful association shutdown." + REFERENCE + "Section 4 in RFC2960 covers the SCTP Association state + diagram." + ::= { sctpAssocEntry 8 } + +sctpAssocInStreams OBJECT-TYPE + SYNTAX Unsigned32 (1..65535) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Inbound Streams according to the negotiation at association + start up." + REFERENCE + "Section 1.3 in RFC2960 includes a definition of stream. + Section 5.1.1 in RFC2960 covers the streams negotiation + process." + ::= { sctpAssocEntry 9 } + +sctpAssocOutStreams OBJECT-TYPE + SYNTAX Unsigned32 (1..65535) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Outbound Streams according to the negotiation at association + start up. " + REFERENCE + "Section 1.3 in RFC2960 includes a definition of stream. + Section 5.1.1 in RFC2960 covers the streams negotiation + process." + ::= { sctpAssocEntry 10 } + +sctpAssocMaxRetr OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The maximum number of data retransmissions in the association + context. This value is specific for each association and the + upper layer can change it by calling the appropriate + primitives. This value has to be smaller than the addition of + all the maximum number for all the paths + (sctpAssocRemAddrMaxPathRtx). + + A value of zero value means no retransmissions." + DEFVAL {10} -- number of attempts + ::= { sctpAssocEntry 11 } + +sctpAssocPrimProcess OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "This object identifies the system level process which holds + primary responsibility for the SCTP association. + Wherever possible, this should be the system's native unique + identification number. The special value 0 can be used to + indicate that no primary process is known. + + Note that the value of this object can be used as a pointer + into the swRunTable of the HOST-RESOURCES-MIB(if the value is + smaller than 2147483647) or into the sysApplElmtRunTable of + the SYSAPPL-MIB." + ::= { sctpAssocEntry 12 } + +-- Association Statistics + +sctpAssocT1expireds OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The T1 timer determines how long to wait for an + acknowledgement after sending an INIT or COOKIE-ECHO chunk. + This object reflects the number of times the T1 timer expires + without having received the acknowledgement. + + Discontinuities in the value of this counter can occur at re- + initialization of the management system, and at other times as + indicated by the value of sctpAssocDiscontinuityTime." + REFERENCE + "Section 5 in RFC2960." + ::= { sctpAssocEntry 13 } + +sctpAssocT2expireds OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The T2 timer determines how long to wait for an + acknowledgement after sending a SHUTDOWN or SHUTDOWN-ACK + chunk. This object reflects the number of times that T2- timer + expired. + + Discontinuities in the value of this counter can occur at re- + initialization of the management system, and at other times as + indicated by the value of sctpAssocDiscontinuityTime." +REFERENCE + "Section 9.2 in RFC2960." + ::= { sctpAssocEntry 14 } + +sctpAssocRtxChunks OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "When T3-rtx expires, the DATA chunks that triggered the T3 + timer will be re-sent according with the retransmissions + rules. Every DATA chunk that was included in the SCTP packet + that triggered the T3-rtx timer must be added to the value of + this counter. + + Discontinuities in the value of this counter can occur at re- + initialization of the management system, and at other times as + indicated by the value of sctpAssocDiscontinuityTime." + REFERENCE + "Section 6 in RFC2960 covers the retransmission process and + rules." + ::= { sctpAssocEntry 15 } + +sctpAssocStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that the association + represented by this row enters the ESTABLISHED state, i.e., + the sctpAssocState object is set to established(4). The + value of this object will be zero: + - before the association enters the established(4) + state, or + + - if the established(4) state was entered prior to + the last re-initialization of the local network management + subsystem." + ::= { sctpAssocEntry 16 } + +sctpAssocDiscontinuityTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime on the most recent occasion at which + any one or more of this SCTP association counters suffered a + discontinuity. The relevant counters are the specific + instances associated with this interface of any Counter32 or + Counter64 object contained in the sctpAssocTable or + sctpLocalAddrTable or sctpRemAddrTable. If no such + discontinuities have occurred since the last re-initialization + of the local management subsystem, then this object contains a + zero value. " + REFERENCE + "The inclusion of this object is recommended by RFC2578." + ::= { sctpAssocEntry 17 } + +-- Expanded tables: Including Multi-home feature + +-- Local Address TABLE +-- ******************* + +sctpAssocLocalAddrTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpAssocLocalAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Expanded table of sctpAssocTable based on the AssocId index. + This table shows data related to each local IP address which + is used by this association." + ::= { sctpObjects 4 } + +sctpAssocLocalAddrEntry OBJECT-TYPE + SYNTAX SctpAssocLocalAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Local information about the available addresses. There will + be an entry for every local IP address defined for this + + association. + Implementors need to be aware that if the size of + sctpAssocLocalAddr exceeds 114 octets then OIDs of column + instances in this table will have more than 128 sub- + identifiers and cannot be accessed using SNMPv1, SNMPv2c, or + SNMPv3." + INDEX { sctpAssocId, -- shared index + sctpAssocLocalAddrType, + sctpAssocLocalAddr } + ::= { sctpAssocLocalAddrTable 1 } + +SctpAssocLocalAddrEntry ::= SEQUENCE { + sctpAssocLocalAddrType InetAddressType, + sctpAssocLocalAddr InetAddress, + sctpAssocLocalAddrStartTime TimeStamp + } + +sctpAssocLocalAddrType OBJECT-TYPE + SYNTAX InetAddressType + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Internet type of local IP address used for this association." + ::= { sctpAssocLocalAddrEntry 1 } + +sctpAssocLocalAddr OBJECT-TYPE + SYNTAX InetAddress + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "The value of a local IP address available for this + association. The type of this address is determined by the + value of sctpAssocLocalAddrType." + ::= { sctpAssocLocalAddrEntry 2 } + +sctpAssocLocalAddrStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that this row was + created." + ::= { sctpAssocLocalAddrEntry 3 } + +-- Remote Addresses TABLE +-- ********************** + +sctpAssocRemAddrTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpAssocRemAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Expanded table of sctpAssocTable based on the AssocId index. + This table shows data related to each remote peer IP address + which is used by this association." + ::= { sctpObjects 5 } + +sctpAssocRemAddrEntry OBJECT-TYPE + SYNTAX SctpAssocRemAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Information about the most important variables for every + remote IP address. There will be an entry for every remote IP + address defined for this association. + + Implementors need to be aware that if the size of + sctpAssocRemAddr exceeds 114 octets then OIDs of column + instances in this table will have more than 128 sub- + identifiers and cannot be accessed using SNMPv1, SNMPv2c, or + SNMPv3." + INDEX { sctpAssocId, -- shared index + sctpAssocRemAddrType, + sctpAssocRemAddr } + ::= { sctpAssocRemAddrTable 1 } + +SctpAssocRemAddrEntry ::= SEQUENCE { + sctpAssocRemAddrType InetAddressType, + sctpAssocRemAddr InetAddress, + sctpAssocRemAddrActive TruthValue, + sctpAssocRemAddrHBActive TruthValue, + sctpAssocRemAddrRTO Unsigned32, + sctpAssocRemAddrMaxPathRtx Unsigned32, + sctpAssocRemAddrRtx Counter32, -- Statistic + sctpAssocRemAddrStartTime TimeStamp + } + +sctpAssocRemAddrType OBJECT-TYPE + SYNTAX InetAddressType + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Internet type of a remote IP address available for this + association." + ::= { sctpAssocRemAddrEntry 1 } + +sctpAssocRemAddr OBJECT-TYPE + SYNTAX InetAddress + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "The value of a remote IP address available for this + association. The type of this address is determined by the + value of sctpAssocLocalAddrType." + ::= { sctpAssocRemAddrEntry 2 } + +sctpAssocRemAddrActive OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "This object gives information about the reachability of this + specific remote IP address. + + When the object is set to 'true' (1), the remote IP address is + understood as Active. Active means that the threshold of no + answers received from this IP address has not been reached. + + When the object is set to 'false' (2), the remote IP address + is understood as Inactive. Inactive means that either no + heartbeat or any other message was received from this address, + reaching the threshold defined by the protocol." + REFERENCE + "The remote transport states are defined as Active and + Inactive in the SCTP, RFC2960." + ::= { sctpAssocRemAddrEntry 3 } + +sctpAssocRemAddrHBActive OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "This object indicates whether the optional Heartbeat check + associated to one destination transport address is activated + or not (value equal to true or false, respectively). " + ::= { sctpAssocRemAddrEntry 4 } + +sctpAssocRemAddrRTO OBJECT-TYPE -- T3-rtx- Timer + SYNTAX Unsigned32 + UNITS "milliseconds" + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The current Retransmission Timeout. T3-rtx timer as defined + in the protocol SCTP." + REFERENCE + "Section 6.3 in RFC2960 deals with the Retransmission Timer + Management." + ::= { sctpAssocRemAddrEntry 5 } + +sctpAssocRemAddrMaxPathRtx OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Maximum number of DATA chunks retransmissions allowed to a + remote IP address before it is considered inactive, as defined + in RFC2960." + REFERENCE + "Section 8.2, 8.3 and 14 in RFC2960." + DEFVAL {5} -- number of attempts + ::= { sctpAssocRemAddrEntry 6 } + +-- Remote Address Statistic + +sctpAssocRemAddrRtx OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of DATA chunks retransmissions to this specific IP + address. When T3-rtx expires, the DATA chunk that triggered + the T3 timer will be re-sent according to the retransmissions + rules. Every DATA chunk that is included in a SCTP packet and + was transmitted to this specific IP address before, will be + included in this counter. + + Discontinuities in the value of this counter can occur at re- + initialization of the management system, and at other times as + indicated by the value of sctpAssocDiscontinuityTime." + ::= { sctpAssocRemAddrEntry 7 } + +sctpAssocRemAddrStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that this row was + created." + ::= { sctpAssocRemAddrEntry 8 } + +-- ASSOCIATION INVERSE TABLE +-- ************************* + +-- BY LOCAL PORT + +sctpLookupLocalPortTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpLookupLocalPortEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "With the use of this table, a list of associations which are + + using the specified local port can be retrieved." + ::= { sctpObjects 6 } + +sctpLookupLocalPortEntry OBJECT-TYPE + SYNTAX SctpLookupLocalPortEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "This table is indexed by local port and association ID. + Specifying a local port, we would get a list of the + associations whose local port is the one specified." + INDEX { sctpAssocLocalPort, + sctpAssocId } + ::= { sctpLookupLocalPortTable 1 } + +SctpLookupLocalPortEntry::= SEQUENCE { + sctpLookupLocalPortStartTime TimeStamp + } + +sctpLookupLocalPortStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that this row was created. + + As the table will be created after the sctpAssocTable + creation, this value could be equal to the sctpAssocStartTime + object from the main table." + ::= { sctpLookupLocalPortEntry 1 } + +-- BY REMOTE PORT + +sctpLookupRemPortTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpLookupRemPortEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "With the use of this table, a list of associations which are + using the specified remote port can be got" + ::= { sctpObjects 7 } + +sctpLookupRemPortEntry OBJECT-TYPE + SYNTAX SctpLookupRemPortEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "This table is indexed by remote port and association ID. + Specifying a remote port we would get a list of the + associations whose local port is the one specified " + INDEX { sctpAssocRemPort, + sctpAssocId } + ::= { sctpLookupRemPortTable 1 } + +SctpLookupRemPortEntry::= SEQUENCE { + sctpLookupRemPortStartTime TimeStamp + } + +sctpLookupRemPortStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that this row was created. + + As the table will be created after the sctpAssocTable + creation, this value could be equal to the sctpAssocStartTime + object from the main table." + ::= { sctpLookupRemPortEntry 1 } + +-- BY REMOTE HOST NAME + +sctpLookupRemHostNameTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpLookupRemHostNameEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "With the use of this table, a list of associations with that + particular host can be retrieved." + ::= { sctpObjects 8 } + +sctpLookupRemHostNameEntry OBJECT-TYPE + SYNTAX SctpLookupRemHostNameEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "This table is indexed by remote host name and association ID. + Specifying a host name we would get a list of the associations + specifying that host name as the remote one. + + Implementors need to be aware that if the size of + sctpAssocRemHostName exceeds 115 octets then OIDs of column + instances in this table will have more than 128 sub- + identifiers and cannot be accessed using SNMPv1, SNMPv2c, or + SNMPv3." + INDEX { sctpAssocRemHostName, + sctpAssocId } + ::= { sctpLookupRemHostNameTable 1 } + +SctpLookupRemHostNameEntry::= SEQUENCE { + sctpLookupRemHostNameStartTime TimeStamp + } + +sctpLookupRemHostNameStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of sysUpTime at the time that this row was created. + + As the table will be created after the sctpAssocTable + creation, this value could be equal to the sctpAssocStartTime + object from the main table." + ::= { sctpLookupRemHostNameEntry 1 } + +-- BY REMOTE PRIMARY IP ADDRESS + +sctpLookupRemPrimIPAddrTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpLookupRemPrimIPAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "With the use of this table, a list of associations that have + the specified IP address as primary within the remote set of + active addresses can be retrieved." + ::= { sctpObjects 9 } + +sctpLookupRemPrimIPAddrEntry OBJECT-TYPE + SYNTAX SctpLookupRemPrimIPAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "This table is indexed by primary address and association ID. + Specifying a primary address, we would get a list of the + associations that have the specified remote IP address marked + as primary. + Implementors need to be aware that if the size of + sctpAssocRemPrimAddr exceeds 114 octets then OIDs of column + instances in this table will have more than 128 sub- + identifiers and cannot be accessed using SNMPv1, SNMPv2c, or + SNMPv3." + INDEX { sctpAssocRemPrimAddrType, + sctpAssocRemPrimAddr, + sctpAssocId } + ::= { sctpLookupRemPrimIPAddrTable 1 } + +SctpLookupRemPrimIPAddrEntry::= SEQUENCE { + sctpLookupRemPrimIPAddrStartTime TimeStamp + } + +sctpLookupRemPrimIPAddrStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of SysUpTime at the time that this row was created. + + As the table will be created after the sctpAssocTable + creation, this value could be equal to the sctpAssocStartTime + object from the main table." + ::= { sctpLookupRemPrimIPAddrEntry 1 } + +-- BY REMOTE IP ADDRESS + +sctpLookupRemIPAddrTable OBJECT-TYPE + SYNTAX SEQUENCE OF SctpLookupRemIPAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "With the use of this table, a list of associations that have + the specified IP address as one of the remote ones can be + retrieved. " + ::= { sctpObjects 10 } + +sctpLookupRemIPAddrEntry OBJECT-TYPE + SYNTAX SctpLookupRemIPAddrEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "This table is indexed by a remote IP address and association + ID. Specifying an IP address we would get a list of the + associations that have the specified IP address included + within the set of remote IP addresses." + INDEX { sctpAssocRemAddrType, + sctpAssocRemAddr, + sctpAssocId } + ::= { sctpLookupRemIPAddrTable 1 } + +SctpLookupRemIPAddrEntry::= SEQUENCE { + + sctpLookupRemIPAddrStartTime TimeStamp + } + +sctpLookupRemIPAddrStartTime OBJECT-TYPE + SYNTAX TimeStamp + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The value of SysUpTime at the time that this row was created. + + As the table will be created after the sctpAssocTable + creation, this value could be equal to the sctpAssocStartTime + object from the main table." + ::= { sctpLookupRemIPAddrEntry 1 } + +-- 4.1 Conformance Information + +sctpMibConformance OBJECT IDENTIFIER ::= { sctpMIB 2 } +sctpMibCompliances OBJECT IDENTIFIER ::= { sctpMibConformance 1 } +sctpMibGroups OBJECT IDENTIFIER ::= { sctpMibConformance 2 } + +-- 4.1.1 Units of conformance + +-- +-- MODULE GROUPS +-- + +sctpLayerParamsGroup OBJECT-GROUP + OBJECTS { sctpRtoAlgorithm, + sctpRtoMin, + sctpRtoMax, + sctpRtoInitial, + sctpMaxAssocs, + sctpValCookieLife, + sctpMaxInitRetr + } + STATUS current + DESCRIPTION + "Common parameters for the SCTP layer, i.e., for all the + associations. They can usually be referred to as configuration + parameters." + ::= { sctpMibGroups 1 } + +sctpStatsGroup OBJECT-GROUP + OBJECTS { sctpCurrEstab, + sctpActiveEstabs, + sctpPassiveEstabs, + sctpAborteds, + sctpShutdowns, + sctpOutOfBlues, + sctpChecksumErrors, + sctpOutCtrlChunks, + sctpOutOrderChunks, + sctpOutUnorderChunks, + sctpInCtrlChunks, + sctpInOrderChunks, + sctpInUnorderChunks, + sctpFragUsrMsgs, + sctpReasmUsrMsgs, + sctpOutSCTPPacks, + sctpInSCTPPacks, + sctpDiscontinuityTime, + sctpAssocT1expireds, + sctpAssocT2expireds, + sctpAssocRtxChunks, + sctpAssocRemAddrRtx + } + STATUS current + DESCRIPTION + "Statistics group. It includes the objects to collect state + changes in the SCTP protocol local layer and flow control + statistics." + ::= { sctpMibGroups 2 } + +sctpPerAssocParamsGroup OBJECT-GROUP + OBJECTS { sctpAssocRemHostName, + sctpAssocLocalPort, + sctpAssocRemPort, + sctpAssocRemPrimAddrType, + sctpAssocRemPrimAddr, + sctpAssocHeartBeatInterval, + sctpAssocState, + sctpAssocInStreams, + sctpAssocOutStreams, + sctpAssocMaxRetr, + sctpAssocPrimProcess, + sctpAssocStartTime, + sctpAssocDiscontinuityTime, + sctpAssocLocalAddrStartTime, + sctpAssocRemAddrActive, + sctpAssocRemAddrHBActive, + sctpAssocRemAddrRTO, + sctpAssocRemAddrMaxPathRtx, + sctpAssocRemAddrStartTime + } + STATUS current + DESCRIPTION + "The SCTP group of objects to manage per-association + parameters. These variables include all the SCTP basic + features." + ::= { sctpMibGroups 3 } + +sctpPerAssocStatsGroup OBJECT-GROUP + OBJECTS + { sctpAssocT1expireds, + sctpAssocT2expireds, + sctpAssocRtxChunks, + sctpAssocRemAddrRtx + } + STATUS current + DESCRIPTION + "Per Association Statistics group. It includes the objects to + collect flow control statistics per association." + ::= { sctpMibGroups 4 } + +sctpInverseGroup OBJECT-GROUP + OBJECTS { sctpLookupLocalPortStartTime, + sctpLookupRemPortStartTime, + sctpLookupRemHostNameStartTime, + sctpLookupRemPrimIPAddrStartTime, + sctpLookupRemIPAddrStartTime + } + STATUS current + DESCRIPTION + "Objects used in the inverse lookup tables." + ::= { sctpMibGroups 5 } + +-- 4.1.2 Compliance Statements + +-- +-- MODULE COMPLIANCES +-- + +sctpMibCompliance MODULE-COMPLIANCE + STATUS current + DESCRIPTION + "The compliance statement for SNMP entities which implement + this SCTP MIB Module. + + There are a number of INDEX objects that cannot be represented + in the form of OBJECT clauses in SMIv2, but for which we have + the following compliance requirements, expressed in OBJECT + clause form in this description clause: + +-- OBJECT sctpAssocLocalAddrType +-- SYNTAX InetAddressType {ipv4(1), ipv6(2)} +-- DESCRIPTION +-- It is only required to have IPv4 and IPv6 addresses without +-- zone indices. +-- The address with zone indices is required if an +-- implementation can connect multiple zones. +-- +-- OBJECT sctpAssocLocalAddr +-- SYNTAX InetAddress (SIZE(4|16)) +-- DESCRIPTION +-- An implementation is only required to support globally +-- unique IPv4 and IPv6 addresses. +-- +-- OBJECT sctpAssocRemAddrType +-- SYNTAX InetAddressType {ipv4(1), ipv6(2)} +-- DESCRIPTION +-- It is only required to have IPv4 and IPv6 addresses without +-- zone indices. +-- The address with zone indices is required if an +-- implementation can connect multiple zones. +-- +-- OBJECT sctpAssocRemAddr +-- SYNTAX InetAddress (SIZE(4|16)) +-- DESCRIPTION +-- An implementation is only required to support globally +-- unique IPv4 and IPv6 addresses. +-- + " -- closes DESCRIPTION clause of MODULE-COMPLIANCE + + MODULE -- this module + + MANDATORY-GROUPS { sctpLayerParamsGroup, + sctpPerAssocParamsGroup, + sctpStatsGroup, + sctpPerAssocStatsGroup + } + + OBJECT sctpAssocRemPrimAddrType + SYNTAX InetAddressType { ipv4(1), + ipv6(2) + } + DESCRIPTION + "It is only required to have IPv4 and IPv6 addresses + without zone indices. + + The address with zone indices is required if an + implementation can connect multiple zones." + + OBJECT sctpAssocRemPrimAddr + SYNTAX InetAddress (SIZE(4|16)) + DESCRIPTION + "An implementation is only required to support globally + unique IPv4 and globally unique IPv6 addresses." + + OBJECT sctpAssocState + WRITE-SYNTAX INTEGER { deleteTCB(9) } + MIN-ACCESS read-only + DESCRIPTION + "Only the deleteTCB(9) value MAY be set by a management + station at most. A read-only option is also considered to + be compliant with this MIB module description." + + GROUP sctpInverseGroup + DESCRIPTION + "Objects used in inverse lookup tables. This should be + implemented, at the discretion of the implementers, for + easier lookups in the association tables" + ::= { sctpMibCompliances 1 } + +END From 16155e2264df8b3db85c92c71bf6d3f96b69df2b Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 16 Jun 2016 00:50:22 +0100 Subject: [PATCH 130/133] Un-acknowledging an alert will allow it to continue sending alerts --- html/includes/forms/ack-alert.inc.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/html/includes/forms/ack-alert.inc.php b/html/includes/forms/ack-alert.inc.php index a89c4d694a..f33ee8bde3 100644 --- a/html/includes/forms/ack-alert.inc.php +++ b/html/includes/forms/ack-alert.inc.php @@ -19,19 +19,21 @@ if (!is_numeric($alert_id)) { echo 'ERROR: No alert selected'; exit; } -else if (!is_numeric($state)) { +elseif (!is_numeric($state)) { echo 'ERROR: No state passed'; exit; } else { if ($state == 2) { $state = dbFetchCell('SELECT alerted FROM alerts WHERE id = ?', array($alert_id)); + $open = 1; } - else if ($state >= 1) { + elseif ($state >= 1) { $state = 2; + $open = 1; } - if (dbUpdate(array('state' => $state), 'alerts', 'id=?', array($alert_id)) >= 0) { + if (dbUpdate(array('state' => $state, 'open' => $open), 'alerts', 'id=?', array($alert_id)) >= 0) { echo 'Alert acknowledged status changed.'; exit; } From 5497af750fe4ffcd74570152e32517e74d14512a Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 16 Jun 2016 10:16:13 +0100 Subject: [PATCH 131/133] Added docs for auto discovery --- doc/Extensions/Auto-Discovery.md | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 doc/Extensions/Auto-Discovery.md diff --git a/doc/Extensions/Auto-Discovery.md b/doc/Extensions/Auto-Discovery.md new file mode 100644 index 0000000000..917e70576d --- /dev/null +++ b/doc/Extensions/Auto-Discovery.md @@ -0,0 +1,50 @@ +# Auto discovery support + +LibreNMS provides the ability to automatically add devices on your network, we can do this with via +a few methods which will be explained below and also indicate if they are enabled by default. + +### Discovery methods + +#### ARP +Disabled by default. + +To enable, switch on globally the `$config['discovery_modules']['discovery-arp'] = 1;` or per device within the Modules section. + +#### XDP +Enabled by default. + +`$config['autodiscovery']['xdp'] = false;` to disable. + +This includes FDP, CDP and LLDP support based on the device type. + +#### OSPF +Enabled by default. + +`$config['autodiscovery']['ospf'] = false;` to disable. + +#### BGP +Enabled by default. + +`$config['autodiscovery']['bgp'] = false;` to disable. + +### Including / Excluding subnets to scan + +By default the following config is in place to exclude loopback, multicast, etc ranges. You can expand this out by adding more +ranges to config.php + +```php +$config['autodiscovery']['nets-exclude'][] = '0.0.0.0/8'; +$config['autodiscovery']['nets-exclude'][] = '127.0.0.0/8'; +$config['autodiscovery']['nets-exclude'][] = '169.254.0.0/16'; +$config['autodiscovery']['nets-exclude'][] = '224.0.0.0/4'; +$config['autodiscovery']['nets-exclude'][] = '240.0.0.0/4'; +``` + +You will need to specify your own subnets that you would like to scan for which can be done with: + +`$config['nets'][] = '8.8.8.0/24';` + +#### Discovering devices by IP + +By default we don't add devices by IP address, we look for a reverse dns name to be found and add with that. If this fails +and you would like to still add devices automatically then you will need to set `$config['discovery_by_ip'] = true;` From 26e23545e3eb2585b641fe625c123d84246dd744 Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 16 Jun 2016 10:19:59 +0100 Subject: [PATCH 132/133] Added additional config option to docs --- doc/Extensions/Auto-Discovery.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/Extensions/Auto-Discovery.md b/doc/Extensions/Auto-Discovery.md index 917e70576d..9e0010813a 100644 --- a/doc/Extensions/Auto-Discovery.md +++ b/doc/Extensions/Auto-Discovery.md @@ -48,3 +48,8 @@ You will need to specify your own subnets that you would like to scan for which By default we don't add devices by IP address, we look for a reverse dns name to be found and add with that. If this fails and you would like to still add devices automatically then you will need to set `$config['discovery_by_ip'] = true;` + +#### Short hostnames + +If your devices only return a short hostname such as lax-fa0-dc01 but the full name should be lax-fa0-dc01.example.com then you can +set `$config['mydomain'] = 'example.com';` From 1774d0a3d7e68bff5f45e22ee3f26948f751d000 Mon Sep 17 00:00:00 2001 From: laf Date: Thu, 16 Jun 2016 10:22:17 +0100 Subject: [PATCH 133/133] Added info on when discovery runs --- doc/Extensions/Auto-Discovery.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/Extensions/Auto-Discovery.md b/doc/Extensions/Auto-Discovery.md index 9e0010813a..8e3342452c 100644 --- a/doc/Extensions/Auto-Discovery.md +++ b/doc/Extensions/Auto-Discovery.md @@ -3,6 +3,8 @@ LibreNMS provides the ability to automatically add devices on your network, we can do this with via a few methods which will be explained below and also indicate if they are enabled by default. +All discovery methods run when discovery.php runs (every 6 hours by default and within 5 minutes for new devices). + ### Discovery methods #### ARP @@ -27,6 +29,8 @@ Enabled by default. `$config['autodiscovery']['bgp'] = false;` to disable. +This module is invoked from bgp-peers discovery module. + ### Including / Excluding subnets to scan By default the following config is in place to exclude loopback, multicast, etc ranges. You can expand this out by adding more