diff --git a/.gitignore b/.gitignore index d56e86250..5c73ae6be 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ nbproject .alerts.lock .ircbot.alert .metadata_never_index +*.swp diff --git a/AUTHORS.md b/AUTHORS.md index 95833993b..277bb2ad5 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -50,6 +50,9 @@ Contributors to LibreNMS: - Mark Schouten (tuxis-ie) - Todd Eddy (vrillusions) - Arjit Chaudhary (arjit.c@gmail.com) (arjitc) - +- Sergiusz Paprzycki (spaprzycki) +- Juho Vanhanen (juhovan) +- Bart de Bruijn (bartdebruijn) +- Christophe Martinet (chrisgfx) [1]: http://observium.org/ "Observium web site" diff --git a/alerts.php b/alerts.php index fafc909ac..dc8e9949a 100755 --- a/alerts.php +++ b/alerts.php @@ -96,24 +96,14 @@ function IssueAlert($alert) { return true; } - $default_tpl = "%title\r\nSeverity: %severity\r\n{if %state == 0}Time elapsed: %elapsed\r\n{/if}Timestamp: %timestamp\r\nUnique-ID: %uid\r\nRule: {if %name}%name{else}%rule{/if}\r\n{if %faults}Faults:\r\n{foreach %faults} #%key: %value.string\r\n{/foreach}{/if}Alert sent to: {foreach %contacts}%value <%key> {/foreach}"; - // FIXME: Put somewhere else? if ($config['alert']['fixed-contacts'] == false) { $alert['details']['contacts'] = GetContacts($alert['details']['rule']); } $obj = DescribeAlert($alert); if (is_array($obj)) { - $tpl = dbFetchRow('SELECT `template` FROM `alert_templates` JOIN `alert_template_map` ON `alert_template_map`.`alert_templates_id`=`alert_templates`.`id` WHERE `alert_template_map`.`alert_rule_id`=?', array($alert['rule_id'])); - if (isset($tpl['template'])) { - $tpl = $tpl['template']; - } - else { - $tpl = $default_tpl; - } - echo 'Issuing Alert-UID #'.$alert['id'].'/'.$alert['state'].': '; - $msg = FormatAlertTpl($tpl, $obj); + $msg = FormatAlertTpl($obj); $obj['msg'] = $msg; if (!empty($config['alert']['transports'])) { ExtTransports($obj); @@ -193,7 +183,7 @@ function RunFollowUp() { $state = 4; } - if ($state > 0) { + if ($state > 0 && $n > 0) { $alert['details']['rule'] = $chk; if (dbInsert(array('state' => $state, 'device_id' => $alert['device_id'], 'rule_id' => $alert['rule_id'], 'details' => gzcompress(json_encode($alert['details']), 9)), 'alert_log')) { dbUpdate(array('state' => $state, 'open' => 1, 'alerted' => 1), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); @@ -238,7 +228,7 @@ function RunAlerts() { if (!empty($rextra['count']) && empty($rextra['interval'])) { // This check below is for compat-reasons if (!empty($rextra['delay'])) { - if ((time() - strtotime($alert['time_logged']) + $config['alert']['tolerance-window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $config['alert']['tolerance-window']) < $rextra['delay'])) { + if ((time() - strtotime($alert['time_logged']) + $config['alert']['tolerance_window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $config['alert']['tolerance_window']) < $rextra['delay'])) { continue; } else { @@ -258,12 +248,12 @@ function RunAlerts() { } else { // This is the new way - if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $config['alert']['tolerance-window']) < $rextra['delay']) { + if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $config['alert']['tolerance_window']) < $rextra['delay']) { continue; } if (!empty($rextra['interval'])) { - if (!empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $config['alert']['tolerance-window']) < $rextra['interval']) { + if (!empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $config['alert']['tolerance_window']) < $rextra['interval']) { continue; } else { @@ -326,7 +316,7 @@ function ExtTransports($obj) { foreach ($config['alert']['transports'] as $transport => $opts) { if (($opts === true || !empty($opts)) && $opts != false && file_exists($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php')) { echo $transport.' => '; - eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' };'); + eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' return false; };'); $tmp = $tmp($obj,$opts); $prefix = array( 0=>"recovery", 1=>$obj['severity']." alert", 2=>"acknowledgment" ); $prefix[3] = &$prefix[0]; @@ -349,11 +339,11 @@ function ExtTransports($obj) { /** * Format Alert - * @param string $tpl Template * @param array $obj Alert-Array * @return string */ -function FormatAlertTpl($tpl, $obj) { +function FormatAlertTpl($obj) { + $tpl = $obj["template"]; $msg = '$ret .= "'.str_replace(array('{else}', '{/if}', '{/foreach}'), array('"; } else { $ret .= "', '"; } $ret .= "', '"; } $ret .= "'), addslashes($tpl)).'";'; $parsed = $msg; $s = strlen($msg); @@ -426,11 +416,23 @@ function DescribeAlert($alert) { $obj = array(); $i = 0; $device = dbFetchRow('SELECT hostname FROM devices WHERE device_id = ?', array($alert['device_id'])); + $tpl = dbFetchRow('SELECT `template`,`title`,`title_rec` FROM `alert_templates` JOIN `alert_template_map` ON `alert_template_map`.`alert_templates_id`=`alert_templates`.`id` WHERE `alert_template_map`.`alert_rule_id`=?', array($alert['rule_id'])); + $default_tpl = "%title\r\nSeverity: %severity\r\n{if %state == 0}Time elapsed: %elapsed\r\n{/if}Timestamp: %timestamp\r\nUnique-ID: %uid\r\nRule: {if %name}%name{else}%rule{/if}\r\n{if %faults}Faults:\r\n{foreach %faults} #%key: %value.string\r\n{/foreach}{/if}Alert sent to: {foreach %contacts}%value <%key> {/foreach}"; $obj['hostname'] = $device['hostname']; $obj['device_id'] = $alert['device_id']; $extra = $alert['details']; + if (!isset($tpl['template'])) { + $obj['template'] = $default_tpl; + } else { + $obj['template'] = $tpl['template']; + } if ($alert['state'] >= 1) { - $obj['title'] = 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']); + if (!empty($tpl['title'])) { + $obj['title'] = $tpl['title']; + } + else { + $obj['title'] = 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']); + } if ($alert['state'] == 2) { $obj['title'] .= ' got acknowledged'; } @@ -458,7 +460,12 @@ function DescribeAlert($alert) { } $extra = json_decode(gzuncompress($id['details']), true); - $obj['title'] = 'Device '.$device['hostname'].' recovered from '.($alert['name'] ? $alert['name'] : $alert['rule']); + if (!empty($tpl['title_rec'])) { + $obj['title'] = $tpl['title_rec']; + } + else { + $obj['title'] = 'Device '.$device['hostname'].' recovered from '.($alert['name'] ? $alert['name'] : $alert['rule']); + } $obj['elapsed'] = TimeFormat(strtotime($alert['time_logged']) - strtotime($id['time_logged'])); $obj['id'] = $id['id']; $obj['faults'] = false; @@ -473,6 +480,9 @@ function DescribeAlert($alert) { $obj['timestamp'] = $alert['time_logged']; $obj['contacts'] = $extra['contacts']; $obj['state'] = $alert['state']; + if (strstr($obj['title'],'%')) { + $obj['title'] = RunJail('$ret = "'.populate(addslashes($obj['title'])).'";', $obj); + } return $obj; }//end DescribeAlert() diff --git a/build-base.php b/build-base.php index 4e0609ff0..c6135a12c 100644 --- a/build-base.php +++ b/build-base.php @@ -14,7 +14,7 @@ if ($sql_fh === false) { exit(1); } -$database_link = mysqli_connect($config['db_host'], $config['db_user'], $config['db_pass']); +$database_link = mysqli_connect('p:'.$config['db_host'], $config['db_user'], $config['db_pass']); if ($database_link === false) { echo 'ERROR: Cannot connect to database: '.mysqli_error($database_link)."\n"; exit(1); @@ -26,8 +26,23 @@ if ($select === false) { exit(1); } +$limit = 0; while (!feof($sql_fh)) { $line = fgetss($sql_fh); + if (isset($_SESSION['stage']) ) { + $limit++; + if (isset($_SESSION['offset']) && $limit < $_REQUEST['offset']) { + continue; + } + elseif ( time()-$_SESSION['last'] > 45 ) { + $_SESSION['offset'] = $limit; + $GLOBALS['refresh'] = 'Installing, please wait..'.date('r').''; + return; + } else { + echo 'Step #'.$limit.' ...'.PHP_EOL; + } + } + if (!empty($line)) { $creation = mysqli_query($database_link, $line); if (!$creation) { diff --git a/discovery.php b/discovery.php index c70878054..3006399ff 100755 --- a/discovery.php +++ b/discovery.php @@ -23,11 +23,11 @@ require 'includes/discovery/functions.inc.php'; $start = utime(); $runtime_stats = array(); -// Observium Device Discovery $options = getopt('h:m:i:n:d::a::q'); if (!isset($options['q'])) { - echo $config['project_name_version']." Discovery\n\n"; + echo $config['project_name_version']." Discovery\n"; + echo get_last_commit()."\n"; } if (isset($options['h'])) { diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index aec8ee6e5..92d264e20 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -17,6 +17,7 @@ Table of Content: - [PagerDuty](#transports-pagerduty) - [Pushover](#transports-pushover) - [Boxcar](#transports-boxcar) + - [Pushbullet](#transports-pushbullet) - [Entities](#entities) - [Devices](#entity-devices) - [BGP Peers](#entity-bgppeers) @@ -360,6 +361,17 @@ $config['alert']['transports']['boxcar'][] = array( ``` ~~ +## Pushbullet + +Enabling Pushbullet is a piece of cake. +Get your Access Token from your Pushbullet's settings page and set it in your config like: + +~~ +```php +$config['alert']['transports']['pushbullet'] = 'MYFANCYACCESSTOKEN'; +``` +~~ + # Entities Entities as described earlier are based on the table and column names within the database, if you are ensure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `. diff --git a/doc/Extensions/Device-Groups.md b/doc/Extensions/Device-Groups.md new file mode 100644 index 000000000..cc48cdaad --- /dev/null +++ b/doc/Extensions/Device-Groups.md @@ -0,0 +1,30 @@ +# Device Groups + +LibreNMS supports grouping your devices together in much the same way as you can configure alerts. This document will hopefully help you get started. + +### Pattern + +Patterns work in the same was as Entities within the alerting system, the format of the pattern is based on the MySQL structure your data is in such +as __tablename.columnname__. If you are ensure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `. + +As a working example and a common question, let's assume you want to group devices by hostname. If you hostname format is dcX.[devicetype].example.com. You would use the pattern +devices.hostname. Select the condition which in this case would Like and then enter dc1.@.example.com. This would then match dc1.sw01.example.com, dc1.rtr01.example.com but not + dc2.sw01.example.com. + +#### Wildcards + +As used in the example above, wildcards are represented by the @ symbol. I.e @.example.com would match any hostnames under example.com. + +A list of common entities is maintained in our [Alerting docs](http://docs.librenms.org/Extensions/Alerting/#entities). + +### Conditions + +Please see our [Alerting docs](http://docs.librenms.org/Extensions/Alerting/#syntax) for explanations. + +### Connection + +If you only want to group based on one pattern then select And. If however you want to build a group based on multiple patterns then you can build a SQL like +query using And / Or. As an example, we want to base our group on the devices hostname AND it's type. Use the pattern as before, devices.hostname, select the condition which in this case would Like and then enter dc1.@.example.com then click And. Now enter devices.type in the pattern, select Equals and enter firewall. This would then match dc1.fw01.example.com but not dc1.sw01.example.com as that is a network type. + +You can now select this group from the Devices -> All Devices link in the navigation at the top. You can also use the group to map alert rules to by creating an alert mapping +Overview -> Alerts -> Rule Mapping. diff --git a/doc/Extensions/Email-Alerting.md b/doc/Extensions/Email-Alerting.md index 67b51a6ba..55a2f0a5f 100644 --- a/doc/Extensions/Email-Alerting.md +++ b/doc/Extensions/Email-Alerting.md @@ -2,7 +2,10 @@ #### Please see [The new alerting docs](http://docs.librenms.org/Extensions/Alerting/#transports-email) -Currently, the email alerts needs to be set up in the config. If you want to enable it, paste this in your config and change it: +> None of these configuration options will work on builds older than the 1st of August 2015. + + +~~Currently, the email alerts needs to be set up in the config. If you want to enable it, paste this in your config and change it:~~ ```php // Mailer backend Settings diff --git a/doc/Extensions/Oxidized.md b/doc/Extensions/Oxidized.md new file mode 100644 index 000000000..7fb605571 --- /dev/null +++ b/doc/Extensions/Oxidized.md @@ -0,0 +1,40 @@ +# Oxidized integration + +You can integrate LibreNMS with [Oxidized](https://github.com/ytti/oxidized-web) in two ways: + +### Config viewing + +This is a straight forward use of Oxidized, it relies on you having a working Oxidized setup which is already taking config snapshots for your devices. +When you have that, you only need the following config to enable the display of device configs within the device page itself: + +```php +$config['oxidized']['enabled'] = TRUE; +$config['oxidized']['url'] = 'http://127.0.0.1:8888'; +``` + +We also support config versioning within Oxidized, this will allow you to see the old configs stored. + +```php +$config['oxidized']['features']['versioning'] = true; +``` + +### Feeding Oxidized + +Oxidized has support for feeding devices into it via an API call, support for Oxidized has been added to the LibreNMS API. A sample config for Oxidized is provided below. + +You will need to configure default credentials for your devices, LibreNMS doesn't provide login credentials at this time. + +```bash + source: + default: http + debug: false + http: + url: https://librenms/api/v0/oxidized + scheme: https + delimiter: !ruby/regexp /:/ + map: + name: hostname + model: os + headers: + X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed' +``` diff --git a/doc/Extensions/Poller-Service.md b/doc/Extensions/Poller-Service.md new file mode 100644 index 000000000..6d33e27b9 --- /dev/null +++ b/doc/Extensions/Poller-Service.md @@ -0,0 +1,32 @@ +# Poller Service + +# WARNING: THIS IS HIGHLY EXPERIMENTAL AND MAY NOT WORK + +The Poller service is an alternative to polling and discovery cron jobs and provides support for distributed polling without memcache. It is multi-threaded and runs continuously discovering and polling devices with the oldest data attempting to honor the polling frequency configured in `config.php`. This service replaces all the required cron jobs except for `/opt/librenms/daily.sh` and `/opt/librenms/alerts.php`. + +Configure the maximum number of threads for the service in `$config['poller_service_workers']`. Configure the minimum desired polling frequency in `$config['poller_service_poll_frequency']` and the minimum desired discovery frequency in `$config['poller_service_discover_frequency']`. The service will not poll or discover devices which have data newer than this this configured age in seconds. Configure how frequently the service will attempt to poll devices which are down in `$config['poller_service_down_retry']`. + +The poller service is designed to gracefully degrade. If not all devices can be polled within the configured frequency, the service will continuously poll devices refreshing as frequently as possible using the configured number of threads. + +The service logs to syslog. A loglevel of INFO will print status updates every 5 minutes. Loglevel of DEBUG will print updates on every device as it is scanned. + +## Configuration +```php +// Poller-Service settings +$config['poller_service_loglevel'] = "INFO"; +$config['poller_service_workers'] = 16; +$config['poller_service_poll_frequency'] = 300; +$config['poller_service_discover_frequency'] = 21600; +$config['poller_service_down_retry'] = 60; +``` + +## Distributed Polling +Distributed polling is possible, and uses the same configuration options as are described for traditional distributed polling, except that the memcached options are not necessary. The database must be acessable from the distributed pollers, and properly configured. Remote access to the RRD directory must also be configured as described in the Distributed Poller documentation. Memcache is not required. Concurrency is managed using mysql GET_LOCK to ensure that devices are only being polled by one device at at time. The poller service is compatible with poller groups. + +## Multi-Master MySQL considerations +Because locks are not replicated in Multi-Master MySQL configurations, if you are using such a configuration, you will need to make sure that all pollers are using the same MySQL server. + +## Service Installation +An upstart configuration `poller-service.conf` is provided. To install run `ln -s /opt/librenms/poller-service.conf /etc/init/poller-service.conf`. The service will start on boot and can be started manually by running `start poller-service`. If you recieve an error that the service does not exist, run `initctl reload-configuration`. The service is configured to run as the user `librenms` and will fail if that user does not exist. + +An LSB init script `poller-service.init` is also provided. To install run `ln -s /opt/librenms/poller-service.init /etc/init.d/poller-service && update-rc.d poller-service defaults`. diff --git a/doc/Extensions/Proxmox.md b/doc/Extensions/Proxmox.md new file mode 100644 index 000000000..0691e1d27 --- /dev/null +++ b/doc/Extensions/Proxmox.md @@ -0,0 +1,23 @@ +# Proxmox graphing + +It is possible to create graphs of the Proxmox VMs that run on your monitored machines. Currently, only trafficgraphs are created. One for each interface on each VM. Possibly, IO grahps will be added later on. + +The ultimate goal is to be able to create traffic bills for VMs, no matter on which physical machine that VM runs. + +### Enabling Proxmox graphs + +To enable Proxmox graphs, do the following: + +In config.php, enable Proxmox: +```php +$config['enable_proxmox'] = 1 +``` + +Then, install librenms-agent on the machines running Proxmox, and enable the Proxmox-plugin using: +```bash +mk_enplug proxmox +``` + +Then, enable the unix-agent on the machines running Proxmox. + +You should now see an application in LibreNMS, as well as a new menu-item in the topmenu, allowing you to choose which cluster you want to look at. diff --git a/doc/Extensions/RRDCached.md b/doc/Extensions/RRDCached.md index 1459235c6..290710d69 100644 --- a/doc/Extensions/RRDCached.md +++ b/doc/Extensions/RRDCached.md @@ -2,23 +2,30 @@ This document will explain how to setup RRDCached for LibreNMS. -### RRDCached installation -This example is based on a fresh LibreNMS install, on a minimimal CentOS installation. -In this example, we'll use the Repoforge repository. +> If you are using rrdtool / rrdcached version 1.5 or above then this now supports creating rrd files over rrdcached. To +enable this set the following config: ```php +$config['rrdtool_version'] = 1.5; +``` + +### RRDCached installation CentOS 6 +This example is based on a fresh LibreNMS install, on a minimimal CentOS 6 installation. +In this example, we'll use the Repoforge repository. + +```ssh rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm vi /etc/yum.repos.d/rpmforge.repo ``` - Enable the Extra repo -```php +```ssh yum update rrdtool vi /etc/yum.repos.d/rpmforge.repo ``` - Disable the [rpmforge] and [rpmforge-extras] repos again -```php +```ssh vi /etc/sysconfig/rrdcached # Settings for rrdcached @@ -33,14 +40,73 @@ chkconfig rrdcached on service rrdcached start ``` -Edit config.php to include: +- Edit /opt/librenms/config.php to include: ```php $config['rrdcached'] = "unix:/var/run/rrdcached/rrdcached.sock"; ``` +### RRDCached installation CentOS 7 +This example is based on a fresh LibreNMS install, on a minimimal CentOS 7.x installation. +We'll use the epel-release and setup a RRDCached as a service. +It is recommended that you monitor your LibreNMS server with LibreNMS so you can view the disk I/O usage delta. +See [Installation (RHEL CentOS)][1] for localhost monitoring. -> If you are using rrdtool / rrdcached version 1.5 or above then this now supports creating rrd files over rrdcached. To -enable this set the following config: - -```php -$config['rrdtool_version'] = 1.5; +- Install the EPEL and update the repos and RRDtool. +```ssh +yum install epel-release +yum update +yum update rrdtool ``` + +- Create the needed directories, set ownership and permissions. +```ssh +mkdir /var/run/rrdcached +chown librenms:librenms /var/run/rrdcached +chmod 755 /var/run/rrdcached +``` + +- Create an rrdcache service for easy daemon management. +```ssh +touch /etc/systemd/system/rrdcache.service +``` +- Edit rrdcache.service and paste the example config: +```ssh +[Unit] +Description=RRDtool Cache +After=network.service + +[Service] +Type=forking +PIDFile=/run/rrdcached.pid +ExecStart=/usr/bin/rrdcached -w 1800 -z 1800 -f 3600 -s librenms -j /var/tmp -l unix:/var/run/rrdcached/rrdcached.sock -t 4 -F -b /opt/librenms/rrd/ +RRDC_USER=librenms + +[Install] +WantedBy=default.target +``` + +- Restart the systemctl daemon so it can recognize the newly created rrdcache.service. Enable the rrdcache.service on boot, and start the service. +```ssh +systemctl daemon-reload +systemctl enable rrdcache.service +systemctl start rrdcache.service +``` + +- Edit /opt/librenms/config.php to include: +```ssh +$config['rrdcached'] = "unix:/var/run/rrdcached/rrdcached.sock"; +``` + +- Restart Apache +```ssh +systemctl restart httpd +``` + +Check to see if the graphs are being drawn in LibreNMS. This might take a few minutes. +After at least one poll cycle (5 mins), check the LibreNMS disk I/O performance delta. +Disk I/O can be found under the menu Devices>All Devices>[localhost hostname]>Health>Disk I/O. + +Depending on many factors, you should see the Ops/sec drop by ~30-40%. + + +[1]: http://librenms.readthedocs.org/Installation/Installation-(RHEL-CentOS)/#add-localhost +"Add localhost to LibreNMS" diff --git a/doc/Extensions/Varnish.md b/doc/Extensions/Varnish.md new file mode 100644 index 000000000..001332007 --- /dev/null +++ b/doc/Extensions/Varnish.md @@ -0,0 +1,53 @@ +# Setting up Varnish + +This document will explain how to setup Varnish for LibreNMS. + +### Varnish installation +This example is based on a fresh LibreNMS install, on a minimimal CentOS installation. +In this example, we'll use the default package available through yum. + +- Install Varnish + +```ssh +yum install varnish +chkconfig varnish on +``` +- Confirm that Varnish has been installed + +```ssh +varnishd -V +varnishd (varnish-2.1.5 SVN ) +``` +- Change the webservers port to 8080, since we'll put Varnish in front(Or whatever you prefer) + +- Point Varnish towards the webserver by editing the default.vcl + +```ssh +vi /etc/varnish/default.vcl + +backend default { + .host = "127.0.0.1"; + .port = "8080"; +} + +``` +- Change the default port Varnish listens on + +```ssh +vi /etc/sysconfig/varnish + +VARNISH_LISTEN_PORT=80 +``` + +- Restart webserver(Apache in this case) and start Varnish afterwards + +```ssh +service httpd restart +service varnish start +``` + +- Browse around the webui to build up the cache, verify that the cache is working afterwards + +```ssh +varnishstat +``` diff --git a/doc/General/Changelog.md b/doc/General/Changelog.md index 25eb1421a..f4d083117 100644 --- a/doc/General/Changelog.md +++ b/doc/General/Changelog.md @@ -1,3 +1,48 @@ +### September 2015 + +#### Bug fixes + - Alerting: + - Process followups if there are changes (PR1817) + - Typo in alert_window setting (PR1841) + - Issue alert-trigger as test object (PR1850) + - WebUI: + - Fix permissions for World-map widget (PR1866) + - Clean up Gloabl / World Map name mixup (PR1874) + - Services: + - Honour IP field for DNS checks (PR1933) + - Discovery / Poller: + - Fix Huawei VRP os detection (PR1931)t + - General: + - Remove 'sh' from cronjob (PR1818) + - Remove MySQL Locks (PR1822,PR1826,PR1829,PR1836) + +#### Improvements + - WebUI: + - Ability to edit ifAlias (PR1811) + - Honour Mouseout/Mouseleave on map widget (PR1814) + - Make syslog/eventlog responsive (PR1816) + - Reformat Proxmox UI (PR1825,PR1827) + - Misc Changes (PR1828,PR1830,PR1875,PR1885,PR1886,PR1887,PR1891,PR1896,PR1901,PR1913) + - Added support for Oxidized versioning (PR1842) + - Added graph widget + settings for widgets (PR1835,PR1861) + - Added Support for multiple dashboards (PR1869) + - Added settings page for Worldmap widget (PR1872) + - Added uptime to availability widget (PR1881) + - Added top devices and ports widgets (PR1903) + - Added support for saving notes for devices (PR1927) + - Added detection for: + - FortiOS (PR1815) + - Discovery / Poller: + - Added Proxmox support (PR1789) + - Documentation: + - Add varnish docs (PR1809) + - Added CentOS 7 RRCached docs (1893) + - General: + - Make installer more responsive (PR1832) + - Update fping millisec option to 200 default (PR1833) + - Reduced cleanup of device_perf (PR1837) + - Added support for negative values in munin-plugins (PR1907) + ### August 2015 #### Bug fixes @@ -8,6 +53,9 @@ - Fixed Web installer due to code tidying update (PR1644) - Updated gridster variable names to make unique (PR1646) - Fixed issues with displaying devices with ' in location (PR1655) + - Fixes updating snmpv3 details in webui (PR1727) + - Check for user perms before listing neighbour ports (PR1749) + - Fixed Test-Transport button (PR1772) - DB: - Added proper indexes on device_perf table (PR1621) - Fixed multiple mysql strict issues (PR1638, PR1659) @@ -17,8 +65,18 @@ - Fixed discovery-arp not running since code formatting update (PR1671) - Correct the DSM upgrade OID (PR1696) - Fix MySQL agent host variable usage (PR1710) + - Pass snmp-auth parameters enclosed by single-quotes (PR1730) + - Revert change which skips over down ports (PR1742) + - Stop PoE polling for each port (PR1747) + - Use ifHighSpeed if ifSpeed equals 0 (PR1750) + - Keep PHP Backwards compatibility (PR1766) + - False identification of Zyxel as Cisco (PR1776) + - Fix MySQL statement in poller-service.py (PR1794) + - Fix upstart script for poller-service.py (PR1812) - General: - Fixed path to defaults.inc.php in config.php.default (PR1673) + - Strip '::ffff:' from syslog input (PR1734) + - Fix RRA (PR1791) #### Improvements - WebUI Updates: @@ -32,29 +90,50 @@ - Added support for running under sub-directory (PR1667) - Updated vis.js to latest version (PR1708) - Added border on availability map (PR1713) + - Make new dashboard the default (PR1719) + - Rearrange about page (PR1735,PR1743) + - Center/Cleanup graphs (PR1736) + - Added Hover-Effect on devices table (PR1738) + - Show Test-Transport result (PR1777) + - Add arrows to the network map (PR1787) + - Add errored ports to summary widget (PR1788) + - Show message if no Device-Groups exist (PR1796) + - Misc UI fixes (Titles, Headers, ...) (PR1797,PR1798,PR1800,PR1801,PR1802,PR1803,PR1804,PR1805) + - Move packages to overview dropdown (PR1810) - API Updates: - Improvided billing support in API (PR1599) + - Extended support for list devices to support mac/ipv4 and ipv6 filtering (PR1744) - Added detection for: - Perle Media convertors (PR1607) + - Mac OSX 10 (PR1774) - Improved detection for: - Windows devices (PR1639) - - Zywall CPU, Version and Memory (PR1660) + - Zywall CPU, Version and Memory (PR1660,PR1784) - Added LLDP support for PBN devices (PR1705) + - Netgear GS110TP (PR1751) - Additional Sensors: - Added Compressor state for PCOWEB (PR1600) - Added dbm support for IOS-XR (PR1661) + - Added temperature support for DNOS (PR1782) - Discovery / Poller: - Updated autodiscovery function to log new type (PR1623) + - Improve application polling (PR1724) + - Improve debug output (PR1756) - DB: - Added MySQLi support (PR1647) - Documentation: - Added docs on MySQL strict mode (PR1635) - Updated billing docs to use librenms user in cron (PR1676) - Updated LDAP docs to indicate php-ldap module needs installing (PR1716) + - Typo/Spellchecks (PR1731,PR1806) + - Improved Alerting and Device-Groups (PR1781) - Alerting: - Reformatted eventlog message to show state for alerts (PR1685) + - Add basic Pushbullet transport (PR1721) + - Allow custom titles (PR1807) - General: - Added more debugging and checks to discovery-protocols (PR1590) + - Cleanup debug statements (PR1725,PR1737) ### July 2015 diff --git a/doc/General/Contributing.md b/doc/General/Contributing.md index 8561f3f29..c1d49bc22 100644 --- a/doc/General/Contributing.md +++ b/doc/General/Contributing.md @@ -170,7 +170,7 @@ project. Proposed workflow for submitting pull requests ---------------------------------------------- -Please see the new [Using Git](http://doc.librenms.org/Developing/Using-Git/) document which gives you step-by-step +Please see the new [Using Git](http://docs.librenms.org/Developing/Using-Git/) document which gives you step-by-step instructions on using git to submit a pull request. [1]: http://www.gnu.org/licenses/license-list.html diff --git a/doc/Installation/Installation-(RHEL-CentOS).md b/doc/Installation/Installation-(RHEL-CentOS).md index 124fbe9f8..101a0d766 100644 --- a/doc/Installation/Installation-(RHEL-CentOS).md +++ b/doc/Installation/Installation-(RHEL-CentOS).md @@ -27,14 +27,13 @@ service mariadb start Now continue with the installation: ```bash -yum install net-snmp mysql-server service snmpd start chkconfig snmpd on mysql_secure_installation mysql -uroot -p ``` -Enter the MySQL root password to enter the MySQL command-line interface. +Enter the MySQL/MariaDB root password to enter the command-line interface. Create database. diff --git a/doc/Support/Configuration.md b/doc/Support/Configuration.md index dfc2fd143..771509db6 100644 --- a/doc/Support/Configuration.md +++ b/doc/Support/Configuration.md @@ -50,7 +50,7 @@ $config['fping6'] = "/usr/bin/fping6"; $config['fping_options']['retries'] = 3; $config['fping_options']['timeout'] = 500; $config['fping_options']['count'] = 3; -$config['fping_options']['millisec'] = 5; +$config['fping_options']['millisec'] = 200; ``` fping configuration options, this includes setting the timeout and retry options. @@ -143,6 +143,7 @@ $config['show_locations'] = 1; # Enable Locations on menu $config['show_locations_dropdown'] = 1; # Enable Locations dropdown on menu $config['show_services'] = 0; # Enable Services on menu $config['int_customers'] = 1; # Enable Customer Port Parsing +$config['summary_errors'] = 0; # Show Errored ports in summary boxes on the dashboard $config['customers_descr'] = 'cust'; // The description to look for in ifDescr. Can be an array as well array('cust','cid'); $config['transit_descr'] = ""; // Add custom transit descriptions (can be an array) $config['peering_descr'] = ""; // Add custom peering descriptions (can be an array) diff --git a/html/ajax_dash.php b/html/ajax_dash.php index 3b4c56e46..ec88e68ec 100644 --- a/html/ajax_dash.php +++ b/html/ajax_dash.php @@ -30,20 +30,30 @@ $type = mres($_POST['type']); if ($type == 'placeholder') { $output = 'Please add a Widget to get started'; $status = 'ok'; + $title = 'Placeholder'; } elseif (is_file('includes/common/'.$type.'.inc.php')) { - $results_limit = 10; - $no_form = true; + $results_limit = 10; + $no_form = true; + $title = ucfirst($type); + $unique_id = str_replace(array("-","."),"_",uniqid($type,true)); + $widget_id = mres($_POST['id']); + $widget_settings = json_decode(dbFetchCell('select settings from users_widgets where user_widget_id = ?',array($widget_id)),true); + $widget_dimensions = $_POST['dimensions']; + if( !empty($_POST['settings']) ) { + define('show_settings',true); + } include 'includes/common/'.$type.'.inc.php'; $output = implode('', $common_output); $status = 'ok'; - + $title = $widget_settings['title'] ?: $title; } $response = array( 'status' => $status, 'html' => $output, + 'title' => $title, ); echo _json_encode($response); diff --git a/html/ajax_search.php b/html/ajax_search.php index 791513972..7d82a1ac9 100644 --- a/html/ajax_search.php +++ b/html/ajax_search.php @@ -96,23 +96,22 @@ if (isset($_REQUEST['search'])) { }//end if $json = json_encode($device); - print_r($json); - exit; + die($json); } else if ($_REQUEST['type'] == 'ports') { // Search ports if (is_admin() === true || is_read() === true) { - $results = dbFetchRows("SELECT `ports`.*,`devices`.* FROM `ports` LEFT JOIN `devices` ON `ports`.`device_id` = `devices`.`device_id` WHERE `ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' ORDER BY ifDescr LIMIT 8"); + $results = dbFetchRows("SELECT `ports`.*,`devices`.* FROM `ports` LEFT JOIN `devices` ON `ports`.`device_id` = `devices`.`device_id` WHERE `ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' OR `ifName` LIKE '%".$search."%' ORDER BY ifDescr LIMIT 8"); } else { - $results = dbFetchRows("SELECT DISTINCT(`I`.`port_id`), `I`.*, `D`.`hostname` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%') ORDER BY ifDescr LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); + $results = dbFetchRows("SELECT DISTINCT(`I`.`port_id`), `I`.*, `D`.`hostname` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' OR `ifName` LIKE '%".$search."%') ORDER BY ifDescr LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); } if (count($results)) { $found = 1; foreach ($results as $result) { - $name = $result['ifDescr']; + $name = $result['ifDescr'] == $result['ifAlias'] ? $result['ifName'] : $result['ifDescr']; $description = $result['ifAlias']; if ($result['deleted'] == 0 && ($result['ignore'] == 0 || $result['ignore'] == 0) && ($result['ifInErrors_delta'] > 0 || $result['ifOutErrors_delta'] > 0)) { @@ -143,13 +142,13 @@ if (isset($_REQUEST['search'])) { 'description' => $description, 'colours' => $highlight_colour, 'hostname' => $result['hostname'], + 'port_id' => $result['port_id'], ); }//end foreach }//end if $json = json_encode($ports); - print_r($json); - exit; + die($json); } else if ($_REQUEST['type'] == 'bgp') { // Search bgp peers @@ -204,8 +203,121 @@ if (isset($_REQUEST['search'])) { }//end if $json = json_encode($bgp); - print_r($json); - exit; + die($json); + } + else if ($_REQUEST['type'] == 'applications') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT * FROM `applications` INNER JOIN `devices` ON devices.device_id = applications.device_id WHERE `app_type` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%' ORDER BY hostname LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT * FROM `applications` INNER JOIN `devices` AS `D` ON `D`.`device_id` = `applications`.`device_id` INNER JOIN `devices_perms` AS `P` ON `P`.`device_id` = `D`.`device_id` WHERE `P`.`user_id` = ? AND (`app_type` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%') ORDER BY hostname LIMIT 8", array($_SESSION['user_id'])); + } + + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $name = $result['app_type']; + if ($result['disabled'] == 1) { + $highlight_colour = '#808080'; + } + else if ($result['ignored'] == 1 && $result['disabled'] == 0) { + $highlight_colour = '#000000'; + } + else if ($result['status'] == 0 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#ff0000'; + } + else if ($result['status'] == 1 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#008000'; + } + + $device[] = array( + 'name' => $name, + 'hostname' => $result['hostname'], + 'app_id' => $result['app_id'], + 'device_id' => $result['device_id'], + 'colours' => $highlight_colour, + 'device_image' => getImageSrc($result), + 'device_hardware' => $result['hardware'], + 'device_os' => $config['os'][$result['os']]['text'], + 'version' => $result['version'], + 'location' => $result['location'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); + } + else if ($_REQUEST['type'] == 'munin') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT * FROM `munin_plugins` INNER JOIN `devices` ON devices.device_id = munin_plugins.device_id WHERE `mplug_type` LIKE '%".$search."%' OR `mplug_title` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%' ORDER BY hostname LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT * FROM `munin_plugins` INNER JOIN `devices` AS `D` ON `D`.`device_id` = `munin_plugins`.`device_id` INNER JOIN `devices_perms` AS `P` ON `P`.`device_id` = `D`.`device_id` WHERE `P`.`user_id` = ? AND (`mplug_type` LIKE '%".$search."%' OR `mplug_title` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%') ORDER BY hostname LIMIT 8", array($_SESSION['user_id'])); + } + + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $name = $result['mplug_title']; + if ($result['disabled'] == 1) { + $highlight_colour = '#808080'; + } + else if ($result['ignored'] == 1 && $result['disabled'] == 0) { + $highlight_colour = '#000000'; + } + else if ($result['status'] == 0 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#ff0000'; + } + else if ($result['status'] == 1 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#008000'; + } + + $device[] = array( + 'name' => $name, + 'hostname' => $result['hostname'], + 'device_id' => $result['device_id'], + 'colours' => $highlight_colour, + 'device_image' => getImageSrc($result), + 'device_hardware' => $result['hardware'], + 'device_os' => $config['os'][$result['os']]['text'], + 'version' => $result['version'], + 'location' => $result['location'], + 'plugin' => $result['mplug_type'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); + } + else if ($_REQUEST['type'] == 'iftype') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT `ports`.ifType FROM `ports` WHERE `ifType` LIKE '%".$search."%' GROUP BY ifType ORDER BY ifType LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT `I`.ifType FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifType` LIKE '%".$search."%') GROUP BY ifType ORDER BY ifType LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); + } + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $device[] = array( + 'filter' => $result['ifType'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); }//end if }//end if }//end if diff --git a/html/images/icons/appliance.png b/html/images/icons/appliance.png new file mode 100644 index 000000000..851950db7 Binary files /dev/null and b/html/images/icons/appliance.png differ diff --git a/html/images/os/edgeos.png b/html/images/os/edgeos.png index ae3f499e6..41e24ea41 100644 Binary files a/html/images/os/edgeos.png and b/html/images/os/edgeos.png differ diff --git a/html/images/os/fortios.png b/html/images/os/fortios.png new file mode 100644 index 000000000..3c4252d05 Binary files /dev/null and b/html/images/os/fortios.png differ diff --git a/html/includes/application/proxmox.inc.php b/html/includes/application/proxmox.inc.php new file mode 100644 index 000000000..bd775247b --- /dev/null +++ b/html/includes/application/proxmox.inc.php @@ -0,0 +1,50 @@ + + * + * 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; version 2 dated June, + * 1991. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * See http://www.gnu.org/licenses/gpl.txt for the full license + */ + +/** + * Fetch all VM's in a Proxmox Cluster + * @param string $c Clustername + * @return array An array with all the VM's on this cluster + */ +function proxmox_cluster_vms($c) { + return dbFetchRows("SELECT * FROM proxmox WHERE cluster = ? ORDER BY vmid", array($c)); +} + +/** + * Fetch all VM's on a Proxmox node + * @param integer $n device_id + * @return array An array with all the VM's on this node + */ +function proxmox_node_vms($n) { + return dbFetchRows("SELECT * FROM proxmox WHERE device_id = ? ORDER BY vmid", array($n)); +} + +/** + * Fetch all info about a Proxmox VM + * @param integer $vmid Proxmox VM ID + * @param string $c Clustername + * @return array An array with all info of this VM on this cluster, including ports + */ +function proxmox_vm_info($vmid, $c) { + $vm = dbFetchRow("SELECT pm.*, d.hostname AS host, d.device_id FROM proxmox pm, devices d WHERE pm.device_id = d.device_id AND pm.vmid = ? AND pm.cluster = ?", array($vmid, $c)); + $appid = dbFetchRow("SELECT app_id FROM applications WHERE device_id = ? AND app_type = ?", array($vm['device_id'], 'proxmox')); + + $vm['ports'] = dbFetchRows("SELECT * FROM proxmox_ports WHERE vm_id = ?", array($vm['id'])); + $vm['app_id'] = $appid['app_id']; + return $vm; +} diff --git a/html/includes/common/availability-map.inc.php b/html/includes/common/availability-map.inc.php index 4073abd54..e5c2df8df 100644 --- a/html/includes/common/availability-map.inc.php +++ b/html/includes/common/availability-map.inc.php @@ -42,7 +42,7 @@ foreach(dbFetchRows($sql, $param) as $device) { $temp_output[] = ''; + )) . '" role="button" class="btn ' . $btn_type . ' btn-xs" title="' . $device['hostname'] . " - " . formatUptime($device['uptime']) . '" style="min-height:25px; min-width:25px; border-radius:0px; margin:0; padding:0;">'; } $temp_rows = count($temp_output); diff --git a/html/includes/common/device-summary-horiz.inc.php b/html/includes/common/device-summary-horiz.inc.php index 439234af4..f8b6b56bd 100644 --- a/html/includes/common/device-summary-horiz.inc.php +++ b/html/includes/common/device-summary-horiz.inc.php @@ -12,6 +12,7 @@ $temp_output = ' Down Ignored Disabled + '.($config['summary_errors'] ? 'Errored' : '').' @@ -22,6 +23,7 @@ $temp_output = ' '.$devices['down'].' '.$devices['ignored'].' '.$devices['disabled'].' + '.($config['summary_errors'] ? '-' : '').' Ports @@ -30,6 +32,7 @@ $temp_output = ' '.$ports['down'].' '.$ports['ignored'].' '.$ports['shutdown'].' + '.($config['summary_errors'] ? ' '.$ports['errored'].'' : '').' '; if ($config['show_services']) { @@ -41,6 +44,7 @@ $temp_output .= ' '.$services['down'].' '.$services['ignored'].' '.$services['disabled'].' + '.($config['summary_errors'] ? '-' : '').' '; } $temp_output .= ' diff --git a/html/includes/common/device-summary-vert.inc.php b/html/includes/common/device-summary-vert.inc.php index e5d5706fe..067677504 100644 --- a/html/includes/common/device-summary-vert.inc.php +++ b/html/includes/common/device-summary-vert.inc.php @@ -83,6 +83,21 @@ if ($config['show_services']) { } +if ($config['summary_errors']) { + $temp_output .= ' + + + Errored + - + '.$ports['errored'].' +'; + if ($config['show_services']) { + $temp_output .= ' + - +'; + } +} + $temp_output .= ' diff --git a/html/includes/common/eventlog.inc.php b/html/includes/common/eventlog.inc.php index 7ce1590c0..fcf5e955e 100644 --- a/html/includes/common/eventlog.inc.php +++ b/html/includes/common/eventlog.inc.php @@ -1,17 +1,18 @@ - - - Datetime - Hostname - Type - Message - - - - +
+ + + + + + + + + +
DatetimeHostnameTypeMessage
+
+'; +} +else { + $widget_settings['title'] = ""; + $type = explode('_',$widget_settings['graph_type'],2); + $type = array_shift($type); + $widget_settings['graph_'.$type] = json_decode($widget_settings['graph_'.$type],true); + if ($type == 'device') { + $widget_settings['title'] = $widget_settings['graph_device']['name']." / ".$widget_settings['graph_type']; + $param = 'device='.$widget_settings['graph_device']['device_id']; + } + elseif ($type == 'application') { + $param = 'id='.$widget_settings['graph_'.$type]['app_id']; + } + elseif ($type == 'munin') { + $param = 'device='.$widget_settings['graph_'.$type]['device_id'].'&plugin='.$widget_settings['graph_'.$type]['name']; + } + else { + $param = 'id='.$widget_settings['graph_'.$type][$type.'_id']; + } + if (empty($widget_settings['title'])) { + $widget_settings['title'] = $widget_settings['graph_'.$type]['hostname']." / ".$widget_settings['graph_'.$type]['name']." / ".$widget_settings['graph_type']; + } + $common_output[] = ''; +} diff --git a/html/includes/common/syslog.inc.php b/html/includes/common/syslog.inc.php index eb61936a5..87eb4c04d 100644 --- a/html/includes/common/syslog.inc.php +++ b/html/includes/common/syslog.inc.php @@ -1,17 +1,18 @@ - - - Datetime - Hostname - Program - Message - - - - +
+ + + + + + + + + +
DatetimeHostnameProgramMessage
+
+ + '; +} +else { + $interval = $widget_settings['time_interval']; + (integer) $lastpoll_seconds = ($interval * 60); + (integer) $interface_count = $widget_settings['interface_count']; + $params = array('user' => $_SESSION['user_id'], 'lastpoll' => array($lastpoll_seconds), 'count' => array($interface_count), 'filter' => ($widget_settings['interface_filter']?:(int)1)); + if (is_admin() || is_read()) { + $query = ' + SELECT *, p.ifInOctets_rate + p.ifOutOctets_rate as total + FROM ports as p + INNER JOIN devices ON p.device_id = devices.device_id + AND unix_timestamp() - p.poll_time <= :lastpoll + AND ( p.ifType = :filter || 1 = :filter ) + AND ( p.ifInOctets_rate > 0 || p.ifOutOctets_rate > 0 ) + ORDER BY total DESC + LIMIT :count + '; + } + else { + $query = ' + SELECT ports.*, devices.hostname, ports.ifInOctets_rate + ports.ifOutOctets_rate as total + FROM ports + INNER JOIN devices ON ports.device_id = devices.device_id + LEFT JOIN ports_perms ON ports.port_id = ports_perms.port_id + LEFT JOIN devices_perms ON devices.device_id = devices_perms.device_id + WHERE ( ports_perms.user_id = :user || devices_perms.user_id = :user ) + AND unix_timestamp() - ports.poll_time <= :lastpoll + AND ( ports.ifType = :filter || 1 = :filter ) + AND ( ports.ifInOctets_rate > 0 || ports.ifOutOctets_rate > 0 ) + GROUP BY ports.port_id + ORDER BY total DESC + LIMIT :count + '; + } + $common_output[] = ' +

Top '.$interface_count.' interfaces polled within '.$interval.' minutes

+
+ + + + + + + + + + '; + + foreach (dbFetchRows($query, $params) as $result) { + $common_output[] = ' + + + + + + '; + } + $common_output[] = ' + +
DeviceInterfaceTotal traffic
'.generate_device_link($result, shorthost($result['hostname'])).''.generate_port_link($result).''.generate_port_link($result, generate_port_thumbnail($result)).'
+
+ '; +} diff --git a/html/includes/common/worldmap.inc.php b/html/includes/common/worldmap.inc.php index 7ab55228c..493bd0ab1 100644 --- a/html/includes/common/worldmap.inc.php +++ b/html/includes/common/worldmap.inc.php @@ -23,19 +23,72 @@ */ if ($config['map']['engine'] == 'leaflet') { - -$temp_output = ' + if ((defined('show_settings') || empty($widget_settings)) && $config['front_page'] == "pages/front/tiles.php") { + $temp_output = ' +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ '; + } + else { + $temp_output = '
'; - -} else { + } +} +else { $temp_output = 'Mapael engine not supported here'; } diff --git a/html/includes/forms/add-dashboard.inc.php b/html/includes/forms/add-dashboard.inc.php new file mode 100644 index 000000000..e34993a6e --- /dev/null +++ b/html/includes/forms/add-dashboard.inc.php @@ -0,0 +1,41 @@ + + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Create Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_name']) && ($dash_id = dbInsert(array('dashboard_name'=>$_REQUEST['dashboard_name'],'user_id'=>$_SESSION['user_id']),'dashboards'))) { + $status = 'ok'; + $message = 'Created'; +} +else { + $status = 'error'; + $message = 'ERROR: Could not create'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, + 'dashboard_id' => $dash_id +))); + diff --git a/html/includes/forms/alert-templates.inc.php b/html/includes/forms/alert-templates.inc.php index 67182b1f2..74fda1b8c 100644 --- a/html/includes/forms/alert-templates.inc.php +++ b/html/includes/forms/alert-templates.inc.php @@ -52,7 +52,7 @@ if(!empty($name)) { elseif( $_REQUEST['template'] && is_numeric($_REQUEST['template_id']) ) { //Update template-text - if($ret = dbUpdate(array('template' => $_REQUEST['template'], 'name' => $name), "alert_templates", "id = ?", array($_REQUEST['template_id']))) { + if($ret = dbUpdate(array('template' => $_REQUEST['template'], 'name' => $name, 'title' => $_REQUEST['title'], 'title_rec' => $_REQUEST['title_rec']), "alert_templates", "id = ?", array($_REQUEST['template_id']))) { $ok = "Updated template"; } else { @@ -62,7 +62,7 @@ if(!empty($name)) { elseif( $_REQUEST['template'] ) { //Create new template - if(dbInsert(array('template' => $_REQUEST['template'], 'name' => $name), "alert_templates")) { + if(dbInsert(array('template' => $_REQUEST['template'], 'name' => $name, 'title' => $_REQUEST['title'], 'title_rec' => $_REQUEST['title_rec']), "alert_templates")) { $ok = "Alert template has been created."; } else { diff --git a/html/includes/forms/delete-dashboard.inc.php b/html/includes/forms/delete-dashboard.inc.php new file mode 100644 index 000000000..2874dec6e --- /dev/null +++ b/html/includes/forms/delete-dashboard.inc.php @@ -0,0 +1,45 @@ + + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Delete Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_id'])) { + dbDelete('users_widgets','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id'])); + if (dbDelete('dashboards','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { + $status = 'ok'; + $message = 'Deleted dashboard'; + } + else { + $message = 'ERROR: Could not delete dashboard '.$_REQUEST['dashboard_id']; + } +} +else { + $message = 'ERROR: Not enough params'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, +))); + diff --git a/html/includes/forms/edit-dashboard.inc.php b/html/includes/forms/edit-dashboard.inc.php new file mode 100644 index 000000000..fe9d9c527 --- /dev/null +++ b/html/includes/forms/edit-dashboard.inc.php @@ -0,0 +1,44 @@ + + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Edit Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_id']) && isset($_REQUEST['dashboard_name']) && isset($_REQUEST['access'])) { + if(dbUpdate(array('dashboard_name'=>$_REQUEST['dashboard_name'],'access'=>$_REQUEST['access']),'dashboards','(user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { + $status = 'ok'; + $message = 'Updated dashboard'; + } + else { + $message = 'ERROR: Could not update dashboard '.$_REQUEST['dashboard_id']; + } +} +else { + $message = 'ERROR: Not enough params'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, +))); + diff --git a/html/includes/forms/parse-alert-template.inc.php b/html/includes/forms/parse-alert-template.inc.php index 31dc3c714..2b8bb2e56 100644 --- a/html/includes/forms/parse-alert-template.inc.php +++ b/html/includes/forms/parse-alert-template.inc.php @@ -21,8 +21,10 @@ $template_id = ($_POST['template_id']); if (is_numeric($template_id) && $template_id > 0) { $template = dbFetchRow('SELECT * FROM `alert_templates` WHERE `id` = ? LIMIT 1', array($template_id)); $output = array( - 'template' => $template['template'], - 'name' => $template['name'], + 'template' => $template['template'], + 'name' => $template['name'], + 'title' => $template['title'], + 'title_rec' => $template['title_rec'], ); echo _json_encode($output); } diff --git a/html/includes/forms/test-transport.inc.php b/html/includes/forms/test-transport.inc.php index 121961ee0..05b4dcfdd 100644 --- a/html/includes/forms/test-transport.inc.php +++ b/html/includes/forms/test-transport.inc.php @@ -18,31 +18,32 @@ if (is_admin() === false) { $transport = mres($_POST['transport']); +require_once $config['install_dir'].'/includes/alerts.inc.php'; +$tmp = array(dbFetchRow('select device_id,hostname from devices order by device_id asc limit 1')); +$tmp['contacts'] = GetContacts($tmp); $obj = array( - 'contacts' => $config['alert']['default_mail'], - 'title' => 'Testing transport from ' . $config['project_name'], - 'msg' => 'This is a test alert', - 'severity' => 'critical', - 'state' => 'critical', - 'hostname' => 'testing', - 'name' => 'Testing rule', + "hostname" => $tmp[0]['hostname'], + "device_id" => $tmp[0]['device_id'], + "title" => "Testing transport from ".$config['project_name'], + "elapsed" => "11s", + "id" => "000", + "faults" => false, + "uid" => "000", + "severity" => "critical", + "rule" => "%macros.device = 1", + "name" => "Test-Rule", + "timestamp" => date("Y-m-d H:i:s"), + "contacts" => $tmp['contacts'], + "state" => "1", + "msg" => "This is a test alert", ); -unset($obj); -$obj['contacts'] = 'test'; -$obj['title'] = 'test'; -$obj['msg'] = 'test'; -$obj['severity'] = 'test'; -$obj['state'] = 'test'; -$obj['hostname'] = 'test'; -$obj['name'] = 'test'; - $status = 'error'; -if (file_exists($config['install_dir']."/includes/alerts/transport.$transport.php")) { +if (file_exists($config['install_dir']."/includes/alerts/transport.".$transport.".php")) { $opts = $config['alert']['transports'][$transport]; if ($opts) { - eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' };'); + eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' return false; };'); $tmp = $tmp($obj,$opts); if ($tmp) { $status = 'ok'; diff --git a/html/includes/forms/update-dashboard-config.inc.php b/html/includes/forms/update-dashboard-config.inc.php index c2760adb5..e9bdb23db 100644 --- a/html/includes/forms/update-dashboard-config.inc.php +++ b/html/includes/forms/update-dashboard-config.inc.php @@ -6,49 +6,65 @@ $message = 'Error updating user dashboard config'; $data = json_decode($_POST['data'],true); $sub_type = mres($_POST['sub_type']); $widget_id = mres($_POST['widget_id']); +$dasboard_id = mres($_POST['dashboard_id']); if ($sub_type == 'remove' && is_numeric($widget_id)) { - if ($widget_id == 0 || dbDelete('users_widgets','`user_id`=? AND `user_widget_id`=?', array($_SESSION['user_id'],$widget_id))) { - $status = 'ok'; - $message = ''; + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + if ($widget_id == 0 || dbDelete('users_widgets','`user_widget_id`=? AND `dashboard_id`=?', array($widget_id,$dasboard_id))) { + $status = 'ok'; + $message = ''; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; } } elseif ($sub_type == 'remove-all') { - if (dbDelete('users_widgets','`user_id`=?', array($_SESSION['user_id']))) { - $status = 'ok'; - $message = ''; + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + if (dbDelete('users_widgets','`dashboard_id`=?', array($dasboard_id))) { + $status = 'ok'; + $message = ''; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; } } elseif ($sub_type == 'add' && is_numeric($widget_id)) { - $dupe_check = dbFetchCEll('SELECT `user_widget_id` FROM `users_widgets` WHERE `user_id`=? AND `widget_id`=?',array($_SESSION['user_id'],$widget_id)); - - if (is_numeric($dupe_check)) { - $message = 'This widget has already been added'; - } - else { - + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { $widget = dbFetchRow('SELECT * FROM `widgets` WHERE `widget_id`=?', array($widget_id)); if (is_array($widget)) { list($x,$y) = explode(',',$widget['base_dimensions']); - $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y),'users_widgets'); + $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y,'settings'=>'','dashboard_id'=>$dasboard_id),'users_widgets'); if (is_numeric($item_id)) { - $extra = array('widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'size_x'=>$x,'size_y'=>$y); + $extra = array('user_widget_id'=>$item_id,'widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'refresh'=>60,'size_x'=>$x,'size_y'=>$y); $status = 'ok'; $message = ''; } } } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; + } } else { - $status = 'ok'; - $message = ''; - - foreach ($data as $line) { - if (is_array($line)) { - $update = array('col'=>$line['col'],'row'=>$line['row'],'size_x'=>$line['size_x'],'size_y'=>$line['size_y']); - dbUpdate($update, 'users_widgets', '`user_widget_id`=?', array($line['id'])); + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + $status = 'ok'; + $message = ''; + foreach ($data as $line) { + if (is_array($line)) { + $update = array('col'=>$line['col'],'row'=>$line['row'],'size_x'=>$line['size_x'],'size_y'=>$line['size_y']); + dbUpdate($update, 'users_widgets', '`user_widget_id`=? AND `dashboard_id`=?', array($line['id'],$dasboard_id)); + } } } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; + } } $response = array( diff --git a/html/includes/forms/update-ifalias.inc.php b/html/includes/forms/update-ifalias.inc.php new file mode 100644 index 000000000..55a10e47c --- /dev/null +++ b/html/includes/forms/update-ifalias.inc.php @@ -0,0 +1,48 @@ + + * + * 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. +*/ + +$status = 'error'; + +$descr = mres($_POST['descr']); +$device_id = mres($_POST['device_id']); +$ifName = mres($_POST['ifName']); +$port_id = mres($_POST['port_id']); + +logfile($descr . ','. $device_id . ','. $ifName. ','. $port_id); + +if (!empty($ifName) && is_numeric($port_id)) { + // We have ifName and port id so update ifAlias + if (empty($descr)) { + $descr = 'repoll'; + // Set to repoll so we avoid using ifDescr on port poll + } + if (dbUpdate(array('ifAlias'=>$descr), 'ports', '`port_id`=?', array($port_id)) > 0) { + $device = device_by_id_cache($device_id); + if ($descr === 'repoll') { + del_dev_attrib($device, 'ifName'); + } + else { + set_dev_attrib($device, 'ifName', $ifName); + } + $status = 'ok'; + } + else { + $status = 'na'; + } +} + +$response = array( + 'status' => $status, +); +echo _json_encode($response); diff --git a/html/includes/forms/update-notes.inc.php b/html/includes/forms/update-notes.inc.php new file mode 100644 index 000000000..4848add6b --- /dev/null +++ b/html/includes/forms/update-notes.inc.php @@ -0,0 +1,32 @@ + + * 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. + */ + +$status = 'error'; +$message = 'unknown error'; + +$device_id = mres($_POST['device_id']); +$notes = mres($_POST['notes']); + +if (isset($notes) && (dbUpdate(array('notes' => $notes), 'devices', 'device_id = ?', array($device_id)))) { + $status = 'ok'; + $message = 'Updated'; +} +else { + $status = 'error'; + $message = 'ERROR: Could not update'; +} +die(json_encode(array( + 'status' => $status, + 'message' => $message, + 'notes' => $notes, + 'device_id' => $device_id +))); diff --git a/html/includes/forms/widget-settings.inc.php b/html/includes/forms/widget-settings.inc.php new file mode 100644 index 000000000..fabe6c4aa --- /dev/null +++ b/html/includes/forms/widget-settings.inc.php @@ -0,0 +1,57 @@ + + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Store per-widget settings + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +$status = 'error'; +$message = 'unknown error'; +$widget_id = (int) $_REQUEST['id']; + +if ($widget_id < 1) { + $status = 'error'; + $message = 'ERROR: malformed widget ID.'; +} +else { + $widget_settings = $_REQUEST['settings']; + if (!is_array($widget_settings)) { + $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))) { + $status = 'ok'; + $message = 'Updated'; + } + else { + $status = 'error'; + $message = 'ERROR: Could not update'; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write-access to this dashboard'; + } +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message +))); diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index b1c44481b..b4ab63c70 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -12,6 +12,35 @@ * @copyright (C) 2013 LibreNMS Group */ +/** + * Compare $t with the value of $vars[$v], if that exists + * @param string $v Name of the var to test + * @param string $t Value to compare $vars[$v] to + * @return boolean true, if values are the same, false if $vars[$v] is unset or values differ + */ +function var_eq($v, $t) { + global $vars; + if (isset($vars[$v]) && $vars[$v] == $t) { + return true; + } + + return false; +} + +/** + * Get the value of $vars[$v], if it exists + * @param string $v Name of the var to get + * @return string|boolean The value of $vars[$v] if it exists, false if it does not exist + */ +function var_get($v) { + global $vars; + if (isset($vars[$v])) { + return $vars[$v]; + } + + return false; +} + function data_uri($file, $mime) { $contents = file_get_contents($file); @@ -152,8 +181,8 @@ function get_percentage_colours($percentage) { }//end get_percentage_colours() -function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image') { - return ''; +function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image',$absolute_size=0) { + return ''; }//end generate_minigraph_image() diff --git a/html/includes/graphs/application/auth.inc.php b/html/includes/graphs/application/auth.inc.php index 15c8f01ca..719145015 100644 --- a/html/includes/graphs/application/auth.inc.php +++ b/html/includes/graphs/application/auth.inc.php @@ -3,7 +3,12 @@ if (is_numeric($vars['id']) && ($auth || application_permitted($vars['id']))) { $app = get_application_by_id($vars['id']); $device = device_by_id_cache($app['device_id']); - $title = generate_device_link($device); - $title .= $graph_subtype; + if ($app['app_type'] != 'proxmox') { + $title = generate_device_link($device); + $title .= $graph_subtype; + } + else { + $title = $vars['port'].'@'.$vars['hostname'].' on '.generate_device_link($device); + } $auth = true; } diff --git a/html/includes/graphs/application/proxmox_traffic.inc.php b/html/includes/graphs/application/proxmox_traffic.inc.php new file mode 100644 index 000000000..26d6e6682 --- /dev/null +++ b/html/includes/graphs/application/proxmox_traffic.inc.php @@ -0,0 +1,30 @@ + + * + * 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; version 2 dated June, + * 1991. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * See http://www.gnu.org/licenses/gpl.txt for the full license + */ + +require 'includes/graphs/common.inc.php'; + +$proxmox_rrd = $config['rrd_dir'].'/proxmox/'.$vars['cluster'].'/'.$vars['vmid'].'_netif_'.$vars['port'].'.rrd'; + +if (is_file($proxmox_rrd)) { + $rrd_filename = $proxmox_rrd; +} + +$ds_in = 'INOCTETS'; +$ds_out = 'OUTOCTETS'; + +require 'includes/graphs/generic_data.inc.php'; diff --git a/html/includes/graphs/common.inc.php b/html/includes/graphs/common.inc.php index 9dbc97b80..ba77fb3f6 100644 --- a/html/includes/graphs/common.inc.php +++ b/html/includes/graphs/common.inc.php @@ -103,3 +103,7 @@ else { } $rrd_options .= ' --font-render-mode normal'; + +if (isset($_GET['absolute']) && $_GET['absolute'] == "1") { + $rrd_options .= ' --full-size-mode'; +} diff --git a/html/includes/modal/alert_template.inc.php b/html/includes/modal/alert_template.inc.php index 71574ba6f..8e96f3032 100644 --- a/html/includes/modal/alert_template.inc.php +++ b/html/includes/modal/alert_template.inc.php @@ -51,6 +51,8 @@ if(is_admin() === false) {

Give your template a name:

+ Optionally, add custom titles:
+

@@ -113,6 +115,8 @@ $('#alert-template').on('show.bs.modal', function (event) { success: function(output) { $('#template').val(output['template']); $('#name').val(output['name']); + $('#title').val(output['title']); + $('#title_rec').val(output['title_rec']); } }); } @@ -123,10 +127,12 @@ $('#create-template').click('', function(e) { var template = $("#template").val(); var template_id = $("#template_id").val(); var name = $("#name").val(); + var title = $("#title").val(); + var title_rec = $("#title_rec").val(); $.ajax({ type: "POST", url: "ajax_form.php", - data: { type: "alert-templates", template: template , name: name, template_id: template_id}, + data: { type: "alert-templates", template: template , name: name, template_id: template_id, title: title, title_rec: title_rec}, dataType: "html", success: function(msg){ if(msg.indexOf("ERROR:") <= -1) { diff --git a/html/includes/print-alert-rules.php b/html/includes/print-alert-rules.php index 670a57815..27e15ad36 100644 --- a/html/includes/print-alert-rules.php +++ b/html/includes/print-alert-rules.php @@ -107,7 +107,7 @@ echo '
echo ''; if ($_SESSION['userlevel'] >= '10') { - echo ''; + echo ''; } echo ' diff --git a/html/includes/print-interface.inc.php b/html/includes/print-interface.inc.php index bfb5d1bd7..223c169fc 100644 --- a/html/includes/print-interface.inc.php +++ b/html/includes/print-interface.inc.php @@ -233,7 +233,7 @@ if (strpos($port['label'], 'oopback') === false && !$graph_type) { }//end foreach }//end if - if ($port_details && $config['enable_port_relationship'] === true) { + if ($port_details && $config['enable_port_relationship'] === true && port_permitted($int_link,$device['device_id'])) { foreach ($int_links as $int_link) { $link_if = dbFetchRow('SELECT * from ports AS I, devices AS D WHERE I.device_id = D.device_id and I.port_id = ?', array($int_link)); @@ -263,7 +263,7 @@ if (strpos($port['label'], 'oopback') === false && !$graph_type) { // unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br); }//end if -if ($port_details && $config['enable_port_relationship'] === true) { +if ($port_details && $config['enable_port_relationship'] === true && port_permitted($port['port_id'], $device['device_id'])) { foreach (dbFetchRows('SELECT * FROM `pseudowires` WHERE `port_id` = ?', array($port['port_id'])) as $pseudowire) { // `port_id`,`peer_device_id`,`peer_ldp_id`,`cpwVcID`,`cpwOid` $pw_peer_dev = dbFetchRow('SELECT * FROM `devices` WHERE `device_id` = ?', array($pseudowire['peer_device_id'])); diff --git a/html/includes/print-menubar.php b/html/includes/print-menubar.php index 06b4ffb04..2f89096f5 100644 --- a/html/includes/print-menubar.php +++ b/html/includes/print-menubar.php @@ -89,6 +89,15 @@ if (isset($config['graylog']['server']) && isset($config['graylog']['port'])) { ?>
  • Inventory
  • + +
  • + Packages +
  • +
  • IPv4 Search
  • @@ -351,21 +360,32 @@ foreach (array_keys($menu_sensors) as $item) { = '5' && ($app_count) > "0") { +if ($_SESSION['userlevel'] >= '5' && count($app_list) > "0") { ?>
    diff --git a/html/pages/about.inc.php b/html/pages/about.inc.php index 53eee1e3e..8d131d5b5 100644 --- a/html/pages/about.inc.php +++ b/html/pages/about.inc.php @@ -1,4 +1,5 @@
    diff --git a/html/pages/adduser.inc.php b/html/pages/adduser.inc.php index 1ba262150..7f5c21c09 100644 --- a/html/pages/adduser.inc.php +++ b/html/pages/adduser.inc.php @@ -10,6 +10,7 @@ else if ($_SESSION['userlevel'] == 11) { } else { echo '

    Add User

    '; + echo '
    '; $pagetitle[] = 'Add user'; @@ -37,7 +38,6 @@ else { echo '
    Please enter a username!
    '; }//end if }//end if - echo "
    "; echo "
    @@ -89,22 +89,25 @@ else { +
    + +
    +
    +
    "; echo "
    -
    - -
    +
    "; - echo ""; + echo '
    '; } else { diff --git a/html/pages/api-access.inc.php b/html/pages/api-access.inc.php index 3124aad6e..a57cc935b 100644 --- a/html/pages/api-access.inc.php +++ b/html/pages/api-access.inc.php @@ -79,7 +79,7 @@ foreach (dbFetchRows("SELECT user_id,username FROM `users` WHERE `level` >= '10' diff --git a/html/pages/device/performance.inc.php b/html/pages/device/performance.inc.php index da2056c54..dd5d15194 100644 --- a/html/pages/device/performance.inc.php +++ b/html/pages/device/performance.inc.php @@ -35,17 +35,19 @@ if (empty($vars['dtpickerto'])) { ?>
    -
    -
    - - -
    -
    - - -
    - -
    +
    +
    +
    + + +
    +
    + + +
    + +
    +

    @@ -75,7 +214,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", data: s}, + data: {type: "update-dashboard-config", data: s, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -91,43 +230,38 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg } $(function(){ + dashboard_collapse(); gridster = $(".gridster ul").gridster({ widget_base_dimensions: [100, 100], widget_margins: [5, 5], avoid_overlapped_widgets: true, draggable: { - handle: 'header', + handle: 'header, span', stop: function(e, ui, $widget) { updatePos(gridster); }, }, resize: { enabled: true, - stop: function(e, ui, $widget) { + stop: function(e, ui, widget) { updatePos(gridster); + widget_reload(widget.attr('id'),widget.data('type')); } }, - serialize_params: function($w, wgd) { - return { - id: $($w).attr('id'), - col: wgd.col, - row: wgd.row, - size_x: wgd.size_x, - size_y: wgd.size_y + serialize_params: function(w, wgd) { + return { + id: $(w).attr('id'), + col: wgd.col, + row: wgd.row, + size_x: wgd.size_x, + size_y: wgd.size_y }; } }).data('gridster'); gridster.remove_all_widgets(); $.each(serialization, function() { - gridster.add_widget( - '
  • '+ - '\var timeout'+this.user_widget_id+' = grab_data('+this.user_widget_id+','+this.refresh+',\''+this.widget+'\');\<\/script\>'+ - '
    '+this.title+'
    '+ - '
    '+this.widget+'
    '+ - '
  • ', - parseInt(this.size_x), parseInt(this.size_y), parseInt(this.col), parseInt(this.row) - ); + widget_dom(this); }); $(document).on('click','#clear_widgets', function() { @@ -135,7 +269,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'remove-all'}, + data: {type: "update-dashboard-config", sub_type: 'remove-all', dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -156,23 +290,11 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'add', widget_id: widget_id}, + data: {type: "update-dashboard-config", sub_type: 'add', widget_id: widget_id, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { - var widget_id = data.extra.widget_id; - var title = data.extra.title; - var widget = data.extra.widget; - var size_x = data.extra.size_x; - var size_y = data.extra.size_y; - gridster.add_widget( - '
  • '+ - '\var timeout'+widget_id+' = grab_data('+widget_id+',60,\''+widget+'\');\<\/script\>'+ - '
    '+title+'
    '+ - '
    '+widget+'
    '+ - '
  • ', - parseInt(size_x), parseInt(size_y) - ); + widget_dom(data.extra); updatePos(gridster); } else { @@ -190,7 +312,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'remove', widget_id: widget_id}, + data: {type: "update-dashboard-config", sub_type: 'remove', widget_id: widget_id, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -207,33 +329,176 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg }); }); + $(document).on("click",".edit-widget",function() { + obj = $(this).parent().parent(); + if( obj.data('settings') == 1 ) { + obj.data('settings','0'); + } else { + obj.data('settings','1'); + } + widget_reload(obj.attr('id'),obj.data('type')); + }); + }); - function grab_data(id,refresh,data_type) { - new_refresh = refresh * 1000; - $.ajax({ - type: 'POST', - url: 'ajax_dash.php', - data: {type: data_type}, - dataType: "json", - success: function (data) { - if (data.status == 'ok') { - $("#widget_body_"+id).html(data.html); - } - else { - $("#widget_body_"+id).html('
    ' + data.message + '
    '); - } - }, - error: function () { - $("#widget_body_"+id).html('
    Problem with backend
    '); - } - }); - - setTimeout(function() { - grab_data(id,refresh,data_type); - }, - new_refresh); - } -$('#new-widget').popover(); + function dashboard_collapse(target) { + if (target !== undefined) { + $('.dash-collapse:not('+target+')').each(function() { + $(this).fadeOut(0); + }); + $(target).fadeToggle(300); + } else { + $('.dash-collapse').fadeOut(0); + } + } + function dashboard_delete(data) { + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'delete-dashboard', dashboard_id: $(data).data('dashboard')}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview"; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function dashboard_edit(data) { + datas = $(data).serializeArray(); + data = []; + for( var field in datas ) { + data[datas[field].name] = datas[field].value; + } + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'edit-dashboard', dashboard_name: data['dashboard_name'], dashboard_id: , access: data['access']}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview/dashboard="; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function dashboard_add(data) { + datas = $(data).serializeArray(); + data = []; + for( var field in datas ) { + data[datas[field].name] = datas[field].value; + } + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'add-dashboard', dashboard_name: data['dashboard_name']}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview/dashboard="+data.dashboard_id; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function widget_dom(data) { + dom = '
  • '+ + '
    '+data.title+''+ + ''+ + ''+ + '
    '+ + '
    '+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')) { + gridster.add_widget(dom, parseInt(data.size_x), parseInt(data.size_y), parseInt(data.col), parseInt(data.row)); + } else { + gridster.add_widget(dom, parseInt(data.size_x), parseInt(data.size_y)); + } + } + + function widget_settings(data) { + var widget_settings = {}; + var widget_id = 0; + datas = $(data).serializeArray(); + for( var field in datas ) { + widget_settings[datas[field].name] = datas[field].value; + } + $('.gridster').find('div[id^=widget_body_]').each(function() { + if(this.contains(data)) { + widget_id = $(this).parent().attr('id'); + widget_type = $(this).parent().data('type'); + $(this).parent().data('settings','0'); + } + }); + if( widget_id > 0 && widget_settings != {} ) { + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'widget-settings', id: widget_id, settings: widget_settings}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + widget_reload(widget_id,widget_type); + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + } + + function widget_reload(id,data_type) { + if( $("#widget_body_"+id).parent().data('settings') == 1 ) { + settings = 1; + } else { + settings = 0; + } + $.ajax({ + type: 'POST', + url: 'ajax_dash.php', + data: {type: data_type, id: id, dimensions: {x:$("#widget_body_"+id).innerWidth()-50, y:$("#widget_body_"+id).innerHeight()-50}, settings:settings}, + dataType: "json", + success: function (data) { + if (data.status == 'ok') { + $("#widget_title_"+id).html(data.title); + $("#widget_body_"+id).html(data.html); + } + else { + $("#widget_body_"+id).html('
    ' + data.message + '
    '); + } + }, + error: function () { + $("#widget_body_"+id).html('
    Problem with backend
    '); + } + }); + } + + function grab_data(id,refresh,data_type) { + if( $("#widget_body_"+id).parent().data('settings') == 0 ) { + widget_reload(id,data_type); + } + new_refresh = refresh * 1000; + setTimeout(function() { + grab_data(id,refresh,data_type); + }, + new_refresh); + } + $('#new-widget').popover(); diff --git a/html/pages/logon.inc.php b/html/pages/logon.inc.php index a8a156574..97e104acc 100644 --- a/html/pages/logon.inc.php +++ b/html/pages/logon.inc.php @@ -4,57 +4,64 @@ if( $config['twofactor'] && isset($twofactorform) ) { } else { ?> -
    -
    -
    -

    Please log in:

    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - Remember me. +
    +
    +
    +
    +
    +

    +
    + +

    +
    +
    + +
    + + + +
    +
    + + + +
    +
    + +
    + Remember me. +
    + +
    +
    + +
    + 'error','message'=>$auth_message,'title'=>'Login error'); + } + ?> + +
    '.$config['login_message'].'
    +
    '); + } + ?> + + + +
    +
    +
    +
    +
    -
    -
    -
    - -
    -
    -'error','message'=>$auth_message,'title'=>'Login error'); -} -?> - -
    -
    '.$config['login_message'].'
    -
    -
    '); -} -?> - - - - - diff --git a/html/pages/poll-log.inc.php b/html/pages/poll-log.inc.php index ac912a6f8..ddeca02c8 100644 --- a/html/pages/poll-log.inc.php +++ b/html/pages/poll-log.inc.php @@ -1,5 +1,6 @@ diff --git a/html/pages/preferences.inc.php b/html/pages/preferences.inc.php index 91a02e1ce..661a7a8f5 100644 --- a/html/pages/preferences.inc.php +++ b/html/pages/preferences.inc.php @@ -4,7 +4,8 @@ $no_refresh = true; $pagetitle[] = 'Preferences'; -echo '

    User Preferences

    '; +echo '

    User Preferences

    '; +echo '
    '; if ($_SESSION['userlevel'] == 11) { demo_account(); @@ -30,10 +31,12 @@ else { include 'includes/update-preferences-password.inc.php'; - echo "
    "; + if (passwordscanchange($_SESSION['username'])) { echo '

    Change Password

    '; + echo '
    '; + echo "
    "; echo $changepass_message; echo "
    @@ -57,11 +60,13 @@ else {
    +
    +
    - + "; echo '
    '; }//end if @@ -183,9 +188,10 @@ else { }//end if }//end if -echo "
    "; -echo "
    Device Permissions
    "; +echo "

    Device Permissions

    "; +echo "
    "; +echo "
    "; if ($_SESSION['userlevel'] == '10') { echo "Global Administrative Access"; } diff --git a/html/pages/settings.inc.php b/html/pages/settings.inc.php index e3a6e21a2..d7170ee97 100644 --- a/html/pages/settings.inc.php +++ b/html/pages/settings.inc.php @@ -23,10 +23,12 @@ * @package LibreNMS * @subpackage Page */ - +$pagetitle[] = 'Global Settings'; ?>
    +

    Global Settings

    +
    diff --git a/html/pages/settings/alerting.inc.php b/html/pages/settings/alerting.inc.php index f3a4cf0d3..f6c1bda0a 100644 --- a/html/pages/settings/alerting.inc.php +++ b/html/pages/settings/alerting.inc.php @@ -799,6 +799,25 @@ echo '
    +
    +
    +

    + Pushbullet +

    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    '; @@ -815,12 +834,33 @@ echo '
    $(".toolTip").tooltip(); $("button#test-alert").click(function() { - var transport = $(this).data("transport"); + var $this = $(this); + var transport = $this.data("transport"); $.ajax({ type: 'POST', url: '/ajax_form.php', data: { type: "test-transport", transport: transport }, - dataType: "json" + dataType: "json", + success: function(data){ + if (data.status == 'ok') { + $this.removeClass('btn-primary').addClass('btn-success'); + setTimeout(function(){ + $this.removeClass('btn-success').addClass('btn-primary'); + }, 2000); + } + else { + $this.removeClass('btn-primary').addClass('btn-danger'); + setTimeout(function(){ + $this.removeClass('btn-danger').addClass('btn-primary'); + }, 2000); + } + }, + error: function(){ + $this.removeClass('btn-primary').addClass('btn-danger'); + setTimeout(function(){ + $this.removeClass('btn-danger').addClass('btn-primary'); + }, 2000); + } }); }); diff --git a/includes/alerts/transport.pushbullet.php b/includes/alerts/transport.pushbullet.php new file mode 100644 index 000000000..c5d75f4ef --- /dev/null +++ b/includes/alerts/transport.pushbullet.php @@ -0,0 +1,47 @@ +/* Copyright (C) 2015 Daniel Preussker + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Pushbullet API Transport + * @author f0o + * @copyright 2015 f0o, LibreNMS + * @license GPL + * @package LibreNMS + * @subpackage Alerts + */ + +// Note: At this point it might be useful to iterate through $obj['contacts'] and send each of them a note ? + +$data = array("type" => "note", "title" => $obj['title'], "body" => $obj['msg']); +$data = json_encode($data); + +$curl = curl_init('https://api.pushbullet.com/v2/pushes'); +curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); +curl_setopt($curl, CURLOPT_POSTFIELDS, $data); +curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); +curl_setopt($curl, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length: '.strlen($data), + 'Authorization: Bearer '.$opts, +)); + +$ret = curl_exec($curl); +$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); +if( $code > 201 ) { + if( $debug ) { + var_dump($ret); + } + return false; +} +return true; diff --git a/includes/common.php b/includes/common.php index 32e6e65af..bcef46da0 100644 --- a/includes/common.php +++ b/includes/common.php @@ -435,8 +435,14 @@ function get_dev_entity_state($device) { return $state; } -function get_dev_attrib($device, $attrib_type) { - if ($row = dbFetchRow("SELECT attrib_value FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ?", array($device['device_id'], $attrib_type))) { +function get_dev_attrib($device, $attrib_type, $attrib_value='') { + $sql = ''; + $params = array($device['device_id'], $attrib_type); + if (!empty($attrib_value)) { + $sql = " AND `attrib_value`=?"; + array_push($params, $attrib_value); + } + if ($row = dbFetchRow("SELECT attrib_value FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ? $sql", $params)) { return $row['attrib_value']; } else { @@ -687,9 +693,7 @@ function get_graph_subtypes($type) { // find the MIB subtypes foreach ($config['graph_types'] as $type => $unused1) { - print_r($type); foreach ($config['graph_types'][$type] as $subtype => $unused2) { - print_r($subtype); if (is_mib_graph($type, $subtype)) { $types[] = $subtype; } diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index 9f370381a..0a7bcf0ca 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -56,7 +56,7 @@ $config['fping'] = '/usr/bin/fping'; $config['fping_options']['retries'] = 3; $config['fping_options']['timeout'] = 500; $config['fping_options']['count'] = 3; -$config['fping_options']['millisec'] = 20; +$config['fping_options']['millisec'] = 200; $config['snmpwalk'] = '/usr/bin/snmpwalk'; $config['snmpget'] = '/usr/bin/snmpget'; $config['snmpbulkwalk'] = '/usr/bin/snmpbulkwalk'; @@ -192,14 +192,7 @@ $config['snmp']['v3'][0]['cryptopass'] = ''; // Privacy (Encryption) Passphrase $config['snmp']['v3'][0]['cryptoalgo'] = 'AES'; // AES | DES -// RRD Format Settings -// These should not normally be changed -// Though one could conceivably increase or decrease the size of each RRA if one had performance problems -// Or if one had a very fast I/O subsystem with no performance worries. -$config['rrd_rra'] = ' RRA:AVERAGE:0.5:1:2016 RRA:AVERAGE:0.5:6:1440 RRA:AVERAGE:0.5:24:1440 RRA:AVERAGE:0.5:288:1440 '; -$config['rrd_rra'] .= ' RRA:MAX:0.5:1:720 RRA:MIN:0.5:6:1440 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 '; -$config['rrd_rra'] .= ' RRA:MAX:0.5:1:720 RRA:MAX:0.5:6:1440 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 '; -$config['rrd_rra'] .= ' RRA:LAST:0.5:1:1440 '; + // Autodiscovery Settings $config['autodiscovery']['xdp'] = true; @@ -340,6 +333,9 @@ $config['network_map_vis_options'] = '{ randomSeed:2 }, "edges": { + arrows: { + to: {enabled: true, scaleFactor:0.5}, + }, "smooth": { enabled: false }, @@ -709,9 +705,10 @@ $config['eventlog_purge'] = 30; $config['authlog_purge'] = 30; // Number in days of how long to keep authlog entries for. $config['perf_times_purge'] = 30; -// Number in days of how long to keep performace pooling stats entries for. -$config['device_perf_purge'] = 30; +// Number in days of how long to keep performace polling stats entries for. +$config['device_perf_purge'] = 7; // Number in days of how long to keep device performance data for. + // Date format for PHP date()s $config['dateformat']['long'] = 'r'; // RFC2822 style @@ -784,3 +781,6 @@ $config['gui']['network-map']['style'] = 'new';//old is also va // Navbar variables $config['navbar']['manage_groups']['hide'] = 0; + +// Show errored ports in the summary table on the dashboard +$config['summary_errors'] = 0; diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index e98c7b07e..762034ea9 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -634,6 +634,12 @@ $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'; @@ -1276,6 +1282,26 @@ $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'; + +// 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'; + // Graph Types require_once $config['install_dir'].'/includes/load_db_graph_types.inc.php'; @@ -1630,10 +1656,15 @@ if (isset($config['enable_printers']) && $config['enable_printers']) { $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'] = '2014.master'; +$config['version'] = '2015.master'; $config['project_name_version'] = $config['project_name'].' '.$config['version']; if (isset($config['rrdgraph_def_text'])) { diff --git a/includes/discovery/os/avaya-ipo.inc.php b/includes/discovery/os/avaya-ipo.inc.php new file mode 100644 index 000000000..ec4dcfbae --- /dev/null +++ b/includes/discovery/os/avaya-ipo.inc.php @@ -0,0 +1,7 @@ + + * 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 (strpos($sysObjectId, '1.3.6.1.4.1.8072.3.2.16') !== false) { + $os = 'macosx'; + } +} diff --git a/includes/discovery/os/netgear.inc.php b/includes/discovery/os/netgear.inc.php index 4c8e8246c..21068df05 100644 --- a/includes/discovery/os/netgear.inc.php +++ b/includes/discovery/os/netgear.inc.php @@ -4,4 +4,7 @@ if (!$os) { if (stristr($sysDescr, 'ProSafe')) { $os = 'netgear'; } + elseif (strpos($sysObjectId, '1.3.6.1.4.1.4526') !== FALSE) { + $os = 'netgear'; + } } diff --git a/includes/discovery/os/vrp.inc.php b/includes/discovery/os/vrp.inc.php index 6c49cf862..b57689271 100644 --- a/includes/discovery/os/vrp.inc.php +++ b/includes/discovery/os/vrp.inc.php @@ -1,15 +1,7 @@ 0) { + return true; + } + if ($row = dbFetchRow("SELECT id FROM proxmox WHERE vmid = ? AND cluster = ?", array($i, $c))) { + $pmxcache[$c][$i] = (integer) $row['id']; + return true; + } + + return false; +} + +$pmxlines = explode("\n", $proxmox); + +if (count($pmxlines) > 2) { + $pmxcluster = array_shift($pmxlines); + + $pmxcdir = join('/', array($config['rrd_dir'],'proxmox',$pmxcluster)); + if (!is_dir($pmxcdir)) { + mkdir($pmxcdir, 0775, true); + } + + dbUpdate(array('device_id' => $device['device_id'], 'app_type' => 'proxmox', 'app_instance' => $pmxcluster), 'applications', '`device_id` = ? AND `app_type` = ?', array($device['device_id'], 'proxmox')); + + $pmxcache = []; + + foreach ($pmxlines as $vm) { + list($vmid, $vmport, $vmpin, $vmpout, $vmdesc) = explode('/', $vm, 5); + + $rrd_filename = join('/', array( + $pmxcdir, + $vmid.'_netif_'.$vmport.'.rrd')); + + if (!is_file($rrd_filename)) { + rrdtool_create( + $rrd_filename, + ' --step 300 \ + DS:INOCTETS:DERIVE:600:0:12500000000 \ + DS:OUTOCTETS:DERIVE:600:0:12500000000 '.$config['rrd_rra']); + } + + rrdtool_update($rrd_filename, 'N:'.$vmpin.':'.$vmpout); + if (proxmox_vm_exists($vmid, $pmxcluster, $pmxcache) === true) { + dbUpdate(array('device_id' => $device['device_id'], 'last_seen' => array('NOW()'), 'description' => $vmdesc), 'proxmox', '`vmid` = ? AND `cluster` = ?', array($vmid, $pmxcluster)); + } + else { + $pmxcache[$pmxcluster][$vmid] = dbInsert(array('cluster' => $pmxcluster, 'vmid' => $vmid, 'description' => $vmdesc, 'device_id' => $device['device_id']), 'proxmox'); + } + + if ($portid = proxmox_port_exists($vmid, $pmxcluster, $vmport) !== false) { + dbUpdate(array('last_seen' => array('NOW()')), 'proxmox_ports', '`vm_id` = ? AND `port` = ?', array($pmxcache[$pmxcluster][$vmid], $vmport)); + } + else { + dbInsert(array('vm_id' => $pmxcache[$pmxcluster][$vmid], 'port' => $vmport), 'proxmox_ports'); + } + + } + + unset($pmxlines); + unset($pmxcluster); + unset($pmxcdir); + unset($proxmox); + unset($pmxcache); +} diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 27bf8053f..d97555d46 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -278,7 +278,8 @@ function poll_device($device, $options) { // echo("$device_end - $device_start; $device_time $device_run"); echo "Polled in $device_time seconds\n"; - d_echo('Updating '.$device['hostname'].' - '.print_r($update_array)." \n"); + d_echo('Updating '.$device['hostname']."\n"); + d_echo($update_array); $updated = dbUpdate($update_array, 'devices', '`device_id` = ?', array($device['device_id'])); if ($updated) { diff --git a/includes/polling/os/avaya-ipo.inc.php b/includes/polling/os/avaya-ipo.inc.php new file mode 100644 index 000000000..0ca43ea34 --- /dev/null +++ b/includes/polling/os/avaya-ipo.inc.php @@ -0,0 +1,10 @@ + '0') { $port_stats = snmpwalk_cache_oid($device, '.1.3.6.1.2.1.10.94.1.1.7.1.7', $port_stats, 'ADSL-LINE-MIB'); }//end if +if ($config['enable_ports_poe']) { + $port_stats = snmpwalk_cache_oid($device, 'pethPsePortEntry', $port_stats, 'POWER-ETHERNET-MIB'); + $port_stats = snmpwalk_cache_oid($device, 'cpeExtPsePortEntry', $port_stats, 'CISCO-POWER-ETHERNET-EXT-MIB'); +} + // FIXME This probably needs re-enabled. We need to clear these things when they get unset, too. // foreach ($etherlike_oids as $oid) { $port_stats = snmpwalk_cache_oid($device, $oid, $port_stats, "EtherLike-MIB"); } // foreach ($cisco_oids as $oid) { $port_stats = snmpwalk_cache_oid($device, $oid, $port_stats, "OLD-CISCO-INTERFACES-MIB"); } @@ -289,7 +294,7 @@ foreach ($ports as $port) { } // Overwrite ifSpeed with ifHighSpeed if it's over 1G - if (is_numeric($this_port['ifHighSpeed']) && $this_port['ifSpeed'] > '1000000000') { + if (is_numeric($this_port['ifHighSpeed']) && ($this_port['ifSpeed'] > '1000000000' || $this_port['ifSpeed'] == 0)) { echo 'HighSpeed '; $this_port['ifSpeed'] = ($this_port['ifHighSpeed'] * 1000000); } @@ -328,6 +333,13 @@ foreach ($ports as $port) { // Update IF-MIB data foreach ($data_oids as $oid) { + + if ($oid == 'ifAlias') { + if (get_dev_attrib($device, 'ifName', $port['ifName'])) { + $this_port['ifAlias'] = $port['ifAlias']; + } + } + if ($port[$oid] != $this_port[$oid] && !isset($this_port[$oid])) { $port['update'][$oid] = array('NULL'); log_event($oid.': '.$port[$oid].' -> NULL', $device, 'interface', $port['port_id']); diff --git a/includes/polling/unix-agent.inc.php b/includes/polling/unix-agent.inc.php index 3d1754498..5b78b682c 100644 --- a/includes/polling/unix-agent.inc.php +++ b/includes/polling/unix-agent.inc.php @@ -50,6 +50,7 @@ if ($device['os_group'] == 'unix') { "mysql", "nginx", "bind", + "proxmox", "tinydns"); if (in_array($section, $agentapps)) { @@ -99,7 +100,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'))) { + if (in_array($key, array('apache', 'mysql', 'nginx', 'proxmox'))) { 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), 'applications'); diff --git a/includes/polling/unix-agent/munin-plugins.inc.php b/includes/polling/unix-agent/munin-plugins.inc.php index b9ab67985..5ab043403 100644 --- a/includes/polling/unix-agent/munin-plugins.inc.php +++ b/includes/polling/unix-agent/munin-plugins.inc.php @@ -97,7 +97,7 @@ if (!empty($agent_data['munin'])) { $data['draw'] = 'LINE1.5'; } - $cmd = '--step 300 DS:val:'.$data['type'].':600:0:U '; + $cmd = '--step 300 DS:val:'.$data['type'].':600:U:U '; $cmd .= $config['rrd_rra']; $ds_uniq = $mplug_id.'_'.$name; $filename = $plugin_rrd.'_'.$name.'.rrd'; diff --git a/includes/services/dns/check.inc b/includes/services/dns/check.inc index 28fa47993..0b259d68d 100644 --- a/includes/services/dns/check.inc +++ b/includes/services/dns/check.inc @@ -1,9 +1,10 @@ $db_rev) { + + if (isset($_SESSION['stage']) ) { + $limit++; + if ( time()-$_SESSION['last'] > 45 ) { + $_SESSION['offset'] = $limit; + $GLOBALS['refresh'] = 'Updating, please wait..'.date('r').''; + return; + } + } + if (!$updating) { echo "-- Updating database schema\n"; } @@ -118,7 +136,7 @@ foreach ($filelist as $file) { if ($config['db']['extension'] == 'mysqli') { echo mysqli_error($database_link)."\n"; } - else { + else { echo mysql_error()."\n"; } } @@ -140,16 +158,19 @@ foreach ($filelist as $file) { $updating++; $db_rev = $filename; + if ($insert) { + dbInsert(array('version' => $db_rev), 'dbSchema'); + } + else { + dbUpdate(array('version' => $db_rev), 'dbSchema'); + } }//end if }//end foreach if ($updating) { - if ($insert) { - dbInsert(array('version' => $db_rev), 'dbSchema'); - } - else { - dbUpdate(array('version' => $db_rev), 'dbSchema'); - } - echo "-- Done\n"; + if( isset($_SESSION['stage']) ) { + $_SESSION['build-ok'] = true; + } } + diff --git a/librenms.cron b/librenms.cron index ad03af7f5..f03f5316d 100644 --- a/librenms.cron +++ b/librenms.cron @@ -3,5 +3,5 @@ 33 */6 * * * root /opt/librenms/discovery.php -h all >> /dev/null 2>&1 */5 * * * * root /opt/librenms/discovery.php -h new >> /dev/null 2>&1 */5 * * * * root /opt/librenms/cronic /opt/librenms/poller-wrapper.py 16 -15 0 * * * root sh /opt/librenms/daily.sh >> /dev/null 2>&1 +15 0 * * * root /opt/librenms/daily.sh >> /dev/null 2>&1 * * * * * root /opt/librenms/alerts.php >> /dev/null 2>&1 diff --git a/librenms.nonroot.cron b/librenms.nonroot.cron index 6183ebc18..3c83bf8b1 100644 --- a/librenms.nonroot.cron +++ b/librenms.nonroot.cron @@ -3,5 +3,5 @@ 33 */6 * * * librenms /opt/librenms/discovery.php -h all >> /dev/null 2>&1 */5 * * * * librenms /opt/librenms/discovery.php -h new >> /dev/null 2>&1 */5 * * * * librenms /opt/librenms/cronic /opt/librenms/poller-wrapper.py 16 -15 0 * * * librenms sh /opt/librenms/daily.sh >> /dev/null 2>&1 +15 0 * * * librenms /opt/librenms/daily.sh >> /dev/null 2>&1 * * * * * librenms /opt/librenms/alerts.php >> /dev/null 2>&1 diff --git a/mibs/FORTINET-FORTIANALYZER-MIB.mib b/mibs/FORTINET-FORTIANALYZER-MIB.mib new file mode 100755 index 000000000..e4681cd51 --- /dev/null +++ b/mibs/FORTINET-FORTIANALYZER-MIB.mib @@ -0,0 +1,538 @@ + +FORTINET-FORTIANALYZER-MIB DEFINITIONS ::= BEGIN + +IMPORTS + FnIndex, fnGenTrapMsg, fnSysSerial, fortinet, fnTrapsPrefix + FROM FORTINET-CORE-MIB + InetPortNumber + FROM INET-ADDRESS-MIB + sysName + FROM SNMPv2-MIB + MODULE-COMPLIANCE, NOTIFICATION-GROUP, OBJECT-GROUP + FROM SNMPv2-CONF + Counter32, Gauge32, Integer32, IpAddress, MODULE-IDENTITY, + NOTIFICATION-TYPE, OBJECT-TYPE + FROM SNMPv2-SMI + DisplayString, TEXTUAL-CONVENTION + FROM SNMPv2-TC; + +fnFortiAnalyzerMib MODULE-IDENTITY + LAST-UPDATED "200909210000Z" + ORGANIZATION + "Fortinet Technologies, Inc." + CONTACT-INFO + " + Technical Support + email: support@fortinet.com + http://www.fortinet.com" + DESCRIPTION + "MIB module for Fortinet FortiAnalyzer devices." + REVISION "200909210000Z" + DESCRIPTION + "Fix syntax errors." + REVISION "200902050000Z" + DESCRIPTION + "Initial version of FORTINET-FORTIANALYZER-MIB." + ::= { fortinet 102 } + +FaSessProto ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "data type for session protocols" + SYNTAX INTEGER { ip(0), icmp(1), igmp(2), ipip(4), tcp(6), + egp(8), pup(12), udp(17), idp(22), ipv6(41), + rsvp(46), gre(47), esp(50), ah(51), ospf(89), + pim(103), comp(108), raw(255) } + +FaRAIDStatusCode ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "Enumerated list of RAID status codes." + SYNTAX INTEGER { arrayOK(1), arrayDegraded(2), arrayInoperable(3), + arrayRebuilding(4), arrayRebuildingStarted(5), + arrayRebuildingFinished(6), arrayInitializing(7), + arrayInitializingStarted(8), arrayInitializingFinished(9), + diskOK(10), diskDegraded(11), diskFailEvent(12) } + +FaSysEventCode ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "Enumerated list of system events." + SYNTAX INTEGER { systemHalt(1), systemReboot(2), + upgradeConfig(3), systemUpgrade(4), logdiskFormat(5) } + +faTraps OBJECT IDENTIFIER + ::= { fnFortiAnalyzerMib 0 } + +faTrapPrefix OBJECT IDENTIFIER + ::= { faTraps 0 } + +faTrapObject OBJECT IDENTIFIER + ::= { faTraps 1 } + +faSystemEvent OBJECT-TYPE + SYNTAX FaSysEventCode + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Type of system event that triggered notification." + ::= { faTrapObject 1 } + +faRAIDStatus OBJECT-TYPE + SYNTAX FaRAIDStatusCode + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "New RAID state associated with a RAID status change event." + ::= { faTrapObject 2 } + +faRAIDDevIndex OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..32)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Name/index of a RAID device relating to the event." + ::= { faTrapObject 3 } + +faGenAlert OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Detail of defined event alert sent from FortiAnalyzer" + ::= { faTrapObject 4 } + +faModel OBJECT IDENTIFIER + ::= { fnFortiAnalyzerMib 1 } + +faz100 OBJECT IDENTIFIER + ::= { faModel 1000 } + +faz100A OBJECT IDENTIFIER + ::= { faModel 1001 } + +faz100B OBJECT IDENTIFIER + ::= { faModel 1002 } + +faz100C OBJECT IDENTIFIER + ::= { faModel 1003 } + +faz400 OBJECT IDENTIFIER + ::= { faModel 4000 } + +faz400B OBJECT IDENTIFIER + ::= { faModel 4002 } + +faz800 OBJECT IDENTIFIER + ::= { faModel 8000 } + +faz800B OBJECT IDENTIFIER + ::= { faModel 8002 } + +faz1000B OBJECT IDENTIFIER + ::= { faModel 10002 } + +faz2000 OBJECT IDENTIFIER + ::= { faModel 20000 } + +faz2000A OBJECT IDENTIFIER + ::= { faModel 20001 } + +faz4000 OBJECT IDENTIFIER + ::= { faModel 40000 } + +faz4000A OBJECT IDENTIFIER + ::= { faModel 40001 } + + +faInetProto OBJECT IDENTIFIER + ::= { fnFortiAnalyzerMib 2 } + +faInetProtoInfo OBJECT IDENTIFIER + ::= { faInetProto 1 } + +faInetProtoTables OBJECT IDENTIFIER + ::= { faInetProto 2 } + +faIpSessTable OBJECT-TYPE + SYNTAX SEQUENCE OF FaIpSessEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Information on the IP sessions active on the device" + ::= { faInetProtoTables 1 } + +faIpSessEntry OBJECT-TYPE + SYNTAX FaIpSessEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "Information on a specific session, including source and destination" + INDEX { faIpSessIndex } + ::= { faIpSessTable 1 } + +FaIpSessEntry ::= SEQUENCE { + faIpSessIndex FnIndex, + faIpSessProto FaSessProto, + faIpSessFromAddr IpAddress, + faIpSessFromPort InetPortNumber, + faIpSessToAddr IpAddress, + faIpSessToPort InetPortNumber, + faIpSessExp Counter32 +} + +faIpSessIndex OBJECT-TYPE + SYNTAX FnIndex + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "An index value that uniquely identifies + an IP session within the faIpSessTable" + ::= { faIpSessEntry 1 } + +faIpSessProto OBJECT-TYPE + SYNTAX FaSessProto + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The protocol the session is using (IP, TCP, UDP, etc.)" + ::= { faIpSessEntry 2 } + +faIpSessFromAddr OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Source IP address (IPv4 only) of the session" + ::= { faIpSessEntry 3 } + +faIpSessFromPort OBJECT-TYPE + SYNTAX InetPortNumber + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Source port number (UDP and TCP only) of the session" + ::= { faIpSessEntry 4 } + +faIpSessToAddr OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Destination IP address (IPv4 only) of the session" + ::= { faIpSessEntry 5 } + +faIpSessToPort OBJECT-TYPE + SYNTAX InetPortNumber + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Destination Port number (UDP and TCP only) of the session" + ::= { faIpSessEntry 6 } + +faIpSessExp OBJECT-TYPE + SYNTAX Counter32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of seconds remaining before the session expires (if idle)" + ::= { faIpSessEntry 7 } + +fa300Compat OBJECT IDENTIFIER + ::= { fnFortiAnalyzerMib 99 } + +faHwSensors OBJECT IDENTIFIER + ::= { fa300Compat 1 } + +faHwSensorCount OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS deprecated + DESCRIPTION + "The number of entries in faHwSensorTable" + ::= { faHwSensors 1 } + +faHwSensorTable OBJECT-TYPE + SYNTAX SEQUENCE OF FaHwSensorEntry + MAX-ACCESS not-accessible + STATUS deprecated + DESCRIPTION + "A list of device specific hardware sensors and values. Because different devices have different hardware sensor capabilities, this table may or may not contain any values." + ::= { faHwSensors 2 } + +faHwSensorEntry OBJECT-TYPE + SYNTAX FaHwSensorEntry + MAX-ACCESS not-accessible + STATUS deprecated + DESCRIPTION + "An entry containing the name, value, and alarm status of a given hardware sensor" + INDEX { faHwSensorEntIndex } + ::= { faHwSensorTable 1 } + +FaHwSensorEntry ::= SEQUENCE { + faHwSensorEntIndex FnIndex, + faHwSensorEntName DisplayString, + faHwSensorEntValue DisplayString, + faHwSensorEntAlarmStatus INTEGER +} + +faHwSensorEntIndex OBJECT-TYPE + SYNTAX FnIndex + MAX-ACCESS not-accessible + STATUS deprecated + DESCRIPTION + "A unique identifier within the faHwSensorTable" + ::= { faHwSensorEntry 1 } + +faHwSensorEntName OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS deprecated + DESCRIPTION + "A string identifying the sensor by name" + ::= { faHwSensorEntry 2 } + +faHwSensorEntValue OBJECT-TYPE + SYNTAX DisplayString + MAX-ACCESS read-only + STATUS deprecated + DESCRIPTION + "A string representation of the value of the sensor. Because sensors can present data in different formats, string representation is most general format. Interpretation of the value (units of measure, for example) is dependent on the individual sensor." + ::= { faHwSensorEntry 3 } + +faHwSensorEntAlarmStatus OBJECT-TYPE + SYNTAX INTEGER { false(0), true(1) } + MAX-ACCESS read-only + STATUS deprecated + DESCRIPTION + "If the sensor has an alarm threshold and has exceeded it, this will indicate its status. Not all sensors have alarms." + ::= { faHwSensorEntry 4 } + + + +fa300System OBJECT IDENTIFIER + ::= { fa300Compat 2 } + +fa300SysSerial OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..32)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Serial number of the device" + ::= { fa300System 1 } + +fa300SysVersion OBJECT-TYPE + SYNTAX DisplayString (SIZE(0..128)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Firmware version of the device" + ::= { fa300System 2 } + +fa300SysCpuUsage OBJECT-TYPE + SYNTAX Gauge32 (0..100) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Current CPU usage (percentage)" + ::= { fa300System 3 } + +fa300SysMemUsage OBJECT-TYPE + SYNTAX Gauge32 (0..100) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Current memory utilization (percentage)" + ::= { fa300System 4 } + +fa300SysSesCount OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Number of active sessions on the device" + ::= { fa300System 5 } + +fa300SysDiskCapacity OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total hard disk capacity (MB), if disk is present" + ::= { fa300System 6 } + +fa300SysDiskUsage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Current hard disk usage (MB), if disk is present" + ::= { fa300System 7 } + +fa300SysMemCapacity OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "Total physical memory (RAM) installed (KB)" + ::= { fa300System 8 } + + + + +faMIBConformance OBJECT IDENTIFIER + ::= { fnFortiAnalyzerMib 100 } + +faTrapSystemEvent NOTIFICATION-TYPE + OBJECTS { fnSysSerial, faSystemEvent } + STATUS current + DESCRIPTION + "A system event occured. The specific type of event is indecated by the faSystemEvent parameter." + ::= { faTrapPrefix 1001 } + +faTrapRAIDStatusChange NOTIFICATION-TYPE + OBJECTS { fnSysSerial, faRAIDStatus, faRAIDDevIndex } + STATUS current + DESCRIPTION + "Trap is sent when there is a change in the status of the RAID array, if present." + ::= { faTrapPrefix 1002 } + +faTrapGenAlert NOTIFICATION-TYPE + OBJECTS { fnSysSerial, fnGenTrapMsg } + STATUS current + DESCRIPTION + "Trap sent when FortiAnalyzer event parameter + exceeds configured limit. Event description + included in trap." + ::= { faTrapPrefix 1003 } + + +faTrapLogRateThreshold NOTIFICATION-TYPE + OBJECTS { fnSysSerial, sysName } + STATUS current + DESCRIPTION + "Indicates that the incoming log rate has exceeded the configured threshold." + ::= { fnTrapsPrefix 1005 } + +faTrapDataRateThreshold NOTIFICATION-TYPE + OBJECTS { fnSysSerial, sysName } + STATUS current + DESCRIPTION + "Indicates that the incoming data rate has exceeded the configured threshold." + ::= { fnTrapsPrefix 1006 } + + + +faSystemComplianceGroup OBJECT-GROUP + OBJECTS { + fa300SysSerial, + fa300SysVersion, + fa300SysCpuUsage, + fa300SysMemUsage, + fa300SysDiskCapacity, + fa300SysDiskUsage, + fa300SysMemCapacity, + fa300SysSesCount, + faSystemEvent + } + STATUS current + DESCRIPTION "System related instrumentation" + ::= { faMIBConformance 1 } + + +faTrapsComplianceGroup NOTIFICATION-GROUP + NOTIFICATIONS { faTrapSystemEvent, faTrapRAIDStatusChange, + faTrapGenAlert, faTrapLogRateThreshold, faTrapDataRateThreshold } + STATUS current + DESCRIPTION + "Event notifications" + ::= { faMIBConformance 2 } + + +faSessionComplianceGroup OBJECT-GROUP + OBJECTS { + faIpSessProto, + faIpSessFromAddr, + faIpSessFromPort, + faIpSessToAddr, + faIpSessToPort, + faIpSessExp + } + STATUS current + DESCRIPTION "Session related instrumentation" + ::= { faMIBConformance 3 } + +faMiscComplianceGroup OBJECT-GROUP + OBJECTS { + faGenAlert + + } + STATUS current + DESCRIPTION "Miscellanious instrumentation" + ::= { faMIBConformance 4 } + +faHwSensorComplianceGroup OBJECT-GROUP + OBJECTS { + faHwSensorCount, + faHwSensorEntName, + faHwSensorEntValue, + faHwSensorEntAlarmStatus + } + STATUS deprecated + DESCRIPTION "Hardware sensor related information" + ::= { faMIBConformance 5 } + +faNotificationObjectsComplianceGroup OBJECT-GROUP + OBJECTS { faSystemEvent, faRAIDStatus, faRAIDDevIndex } + STATUS current + DESCRIPTION + "Object identifiers used in notifications" + ::= { faMIBConformance 6 } + + + + +faMIBCompliance MODULE-COMPLIANCE + STATUS current + DESCRIPTION + "The compliance statement for the application MIB." + + MODULE -- this module + + GROUP faSystemComplianceGroup + DESCRIPTION "System related instrumentation" + + GROUP faSessionComplianceGroup + DESCRIPTION + "Session related instrumentation" + + GROUP faMiscComplianceGroup + DESCRIPTION "Miscellanious instrumentation" + + GROUP faTrapsComplianceGroup + DESCRIPTION + "Traps are optional. Not all models support all traps. Consult product literature to see which traps are supported." + + GROUP faNotificationObjectsComplianceGroup + DESCRIPTION + "Object identifiers used in notifications. Objects are required if their containing trap is implemented." + + ::= { faMIBConformance 100 } + + + +faObsoleteMIBCompliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement of deprecated objects for the application MIB, they may still be used by older models." + + MODULE -- this module + + GROUP faHwSensorComplianceGroup + DESCRIPTION + "Traps are optional. Not all models support all traps. Consult product literature to see which traps are supported." + + ::= { faMIBConformance 101 } + + +END -- end of module FORTINET-FORTIANALYZER-MIB. diff --git a/mibs/avaya/AV-SME-PLATFORM-MIB.mib b/mibs/avaya/AV-SME-PLATFORM-MIB.mib new file mode 100644 index 000000000..16bb78e3e --- /dev/null +++ b/mibs/avaya/AV-SME-PLATFORM-MIB.mib @@ -0,0 +1,334 @@ +--======================================================== +-- +-- MIB : SME Platform Avaya Inc. +-- +-- Version : 0.03.00 11 January 2013 +-- +--======================================================== +-- +-- Copyright (c) 2013 Avaya Inc. +-- All Rights Reserved. +-- +--======================================================== +AV-SME-PLATFORM-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, + NOTIFICATION-TYPE + FROM SNMPv2-SMI + DateAndTime + FROM SNMPv2-TC + MODULE-COMPLIANCE, OBJECT-GROUP, + NOTIFICATION-GROUP + FROM SNMPv2-CONF + SnmpAdminString + FROM SNMP-FRAMEWORK-MIB + sysDescr + FROM SNMPv2-MIB + ItuPerceivedSeverity + FROM ITU-ALARM-TC-MIB + ifIndex + FROM IF-MIB + mibs + FROM AVAYAGEN-MIB +; + +avSMEPlatformMIB MODULE-IDENTITY + LAST-UPDATED "201301111405Z" -- 11 January 2013 + ORGANIZATION "Avaya Inc." + CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + + WWW: http://www.avaya.com" + DESCRIPTION + "Avaya IP Office MIBs OID tree. + + This MIB module defines the root items for MIBs for + use with Avaya SME Embedded Platform." + + + REVISION "201301111405Z" -- 11 January 2013 + DESCRIPTION + "Rev 0.03.00 + Added the WebManagement application value for smepGTEventAppIdentity." + REVISION "201007061347Z" -- 06 July 2010 + DESCRIPTION + "Rev 0.02.00 + Corrected base OID to one properly allocated in Avaya tree." + REVISION "201007021437Z" -- 02 July 2010 + DESCRIPTION + "Rev 0.01.00 + The first rough draft of this MIB module." + ::= { mibs 48 } + +-- sub-tree for SME Embedded Platform wide objects and events +-- irrespective of function +smepGeneric OBJECT IDENTIFIER ::= { avSMEPlatformMIB 1 } + +-- sub-tree for SME Embedded Platform functional MIBs +smepGenMibs OBJECT IDENTIFIER ::= { smepGeneric 1 } + +-- sub-tree for SME EMbedded Platform wide traps/notifications +smepGenTraps OBJECT IDENTIFIER ::= { smepGeneric 2 } + +-- sub-tree for SME Embedded Platform wide conformance information +smepGenConformance OBJECT IDENTIFIER ::= { smepGeneric 3 } + +--******************************************************************** +-- SME Embedded Platform wide traps/notifications +--******************************************************************** + +smepGTEvents OBJECT IDENTIFIER ::= { smepGenTraps 0 } +smepGTObjects OBJECT IDENTIFIER ::= { smepGenTraps 1 } + +-- +-- trap objects +-- + +smepGTEventStdSeverity OBJECT-TYPE + SYNTAX ItuPerceivedSeverity + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Severity of the event that has occurred. + + The event severity depends upon the type of + entity/notification that the operational state change event + relates to. The severity values that are normally used are + detailed below: + + The enterprise versions of standard SNMP traps all have a + severity of major (4). + + GenAppEvents: + Severity depends on event condition + crash - severity is critical (3)" + ::= { smepGTObjects 1 } + +smepGTEventDateTime OBJECT-TYPE + SYNTAX DateAndTime + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Date and time of the occurence of the event." + ::= { smepGTObjects 2 } + +smepGTEventDevID OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (10)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "A unique textual identifier of the alarming device." + ::= { smepGTObjects 3 } + +smepGTEventAppEntity OBJECT-TYPE + SYNTAX INTEGER { + voiceMailPro(1), + onex(2), + ipOffice(3), + jade(4), + webmanagement(5) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "The SME Embedded Platform application to which a + notification/trap relates." + ::= { smepGTObjects 4 } + +smepGTEventAppEvent OBJECT-TYPE + SYNTAX INTEGER { + crash(1) -- severity: Critical + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "SME Embedded Platform application event states. The + associated event severity of the notification/trap the object + is carried in varies depending upon the event condition. The + appropriate severity is detailed against event enumeration." + ::= { smepGTObjects 5 } + +-- +-- traps +-- + +smepGenColdStartEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard coldstart trap featuring + device identification information. A coldStart trap + signifies that the sending protocol entity is reinitializing + itself such that the agent's configuration or the protocol + entity implementation may be altered." + ::= { smepGTEvents 1 } + +smepGenWarmStartEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard warmstart trap featuring + device identification information. A warmStart trap + signifies that the sending protocol entity is reinitializing + that neither the agent configuration nor the protocol entity + implementation is altered." + ::= { smepGTEvents 2 } + +smepGenLinkDownEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr, + ifIndex + } + STATUS current + DESCRIPTION + "Enterprise version of standard linkDown trap featuring device + identification information. A linkDown trap signifies that + the sending protocol entity recognizes a failure in one of + the communication links represented in the agent's + configuration." + ::= { smepGTEvents 3 } + +smepGenLinkUpEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr, + ifIndex + } + STATUS current + DESCRIPTION + "Enterprise version of standard linkUp trap featuring device + identification information. A linkUp trap signifies that the + sending protocol entity recognizes that one of the + communication links represented in the agent's configuration + has come up." + ::= { smepGTEvents 4 } + +smepGenAuthFailureEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard authenticationFailure trap + featuring device identification information. An + authenticationFailure trap signifies that the sending + protocol entity is the addressee of a protocol message that + is not properly authenticated. While implementations of the + SNMP must be capable of generating this trap, they must also + be capable of suppressing the emission of such traps via an + implementation- specific mechanism." + ::= { smepGTEvents 5 } + +smepGenAppEvent NOTIFICATION-TYPE + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDateTime, + smepGTEventDevID, + sysDescr, + smepGTEventAppEntity, + smepGTEventAppEvent + } + STATUS current + DESCRIPTION + "A smepGenAppEvent notification is generated whenever a + application entity of the SME Embedded Platform experiences an + event. It signifies that the SNMP entity, acting as a proxy + for the application, has detected an event on the application + entity. + + The event severity varies dependent upon the event condition." + ::= { smepGTEvents 6 } + + +--******************************************************************** +-- SME Embedded Platform wide compliance +--******************************************************************** + +smepGenCompliances OBJECT IDENTIFIER ::= { smepGenConformance 1 } +smepGenGroups OBJECT IDENTIFIER ::= { smepGenConformance 2 } + +-- +-- compliance statements +-- + +smepGenCompliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for SME Embedded Platform agents + which implement this MIB." + MODULE -- this module + MANDATORY-GROUPS { + smepGenNotificationObjectsGroup, + smepGenEntGenNotificationsGroup, + smepGenAppNotificationsGroup + } + ::= { smepGenCompliances 1 } + +-- +-- MIB groupings +-- + +smepGenNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + smepGTEventStdSeverity, + smepGTEventDevID, + smepGTEventDateTime, + smepGTEventAppEntity, + smepGTEventAppEvent + } + STATUS current + DESCRIPTION + "Objects that are contained in SME Embedded Platform wide + notifications." + ::= { smepGenGroups 1 } + +smepGenEntGenNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + smepGenColdStartEvent, + smepGenWarmStartEvent, + smepGenLinkDownEvent, + smepGenLinkUpEvent, + smepGenAuthFailureEvent + } + STATUS current + DESCRIPTION + "SME Embedded Platform Enterpise versions of the generic traps + as defined RFC1215 that provide more identification of the entity + concerned." + ::= { smepGenGroups 2 } + +smepGenAppNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + smepGenAppEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes in + the state of Applications on the SME Embedded Platform." + ::= { smepGenGroups 3 } + +END diff --git a/mibs/avaya/AV-SME-PLATFORM-PROD-MIB.mib b/mibs/avaya/AV-SME-PLATFORM-PROD-MIB.mib new file mode 100644 index 000000000..08c053723 --- /dev/null +++ b/mibs/avaya/AV-SME-PLATFORM-PROD-MIB.mib @@ -0,0 +1,288 @@ +--======================================================== +-- +-- MIB : AV-SME-PLATFORM-PROD Avaya Inc. +-- +-- Version : 0.14.00 30 May 2014 +-- +--======================================================== +-- +-- Copyright (c) 2010 - 2012 Avaya Inc. +-- All Rights Reserved. +-- +--======================================================== +AV-SME-PLATFORM-PROD-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-IDENTITY + FROM SNMPv2-SMI + products + FROM AVAYAGEN-MIB; + +avSMEPlatformProdMIB MODULE-IDENTITY + LAST-UPDATED "201405301200Z" -- 30 May 2014 + ORGANIZATION "Avaya Inc." + CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + + WWW: http://www.avaya.com" + DESCRIPTION + "Avaya IP Office Products OID tree. + + This MIB module defines the product/sysObjectID values for + use with Avaya IP Office family of telephone switches." + + REVISION "201405301200Z" -- 30 May 2014 + DESCRIPTION + "Rev 0.14.00 + Added configuration 11, 12, 13 for IP Office Server Edition Primary, + IP Office Server Edition Secondary and + IP Office Server Edition Expansion System (L) Select Mode" + REVISION "201404031200Z" -- 03 April 2014 + DESCRIPTION + "Rev 0.13.00 + Updated service vendor values + Added Contact Recorder service" + REVISION "201301231600Z" -- 23 January 2013 + DESCRIPTION + "Rev 0.12.00 + Updated branding for configuration 1 and 10" + REVISION "201211291200Z" -- 29 November 2012 + DESCRIPTION + "Rev 0.11.00 + Updated branding for configuration 1. + Added configuration 10." + REVISION "201205101235Z" -- 10 May 2012 + DESCRIPTION + "Rev 0.10.00 + Updated branding for configurations 7, 8 and 9." + REVISION "201204091025Z" -- 09 Apr 2012 + DESCRIPTION + "Rev 0.09.00 + Updated branding for configurations 7, 8 and 9." + REVISION "201203051005Z" -- 05 Mar 2012 + DESCRIPTION + "Rev 0.08.00 + Updated configurations 7, 8 and 9." + REVISION "201112161330Z" -- 16 Dec 2011 + DESCRIPTION + "Rev 0.07.01 + Updated configuration 6." + REVISION "201112141535Z" -- 14 Dec 2011 + DESCRIPTION + "Rev 0.07.00 + Added configuration 9, updated configurations 7 and 8." + REVISION "201112071410Z" -- 07 Dec 2011 + DESCRIPTION + "Rev 0.06.00 + Added configurations 7 and 8." + REVISION "201105031330Z" -- 03 May 2011 + DESCRIPTION + "Rev 0.05.00 + Added configuration 6." + REVISION "201103300922Z" -- 30 March 2011 + DESCRIPTION + "Rev 0.04.00 + Added configuration 4 and 5." + REVISION "201007071350Z" -- 07 July 2010 + DESCRIPTION + "Rev 0.03.00 + Simplified the structure." + REVISION "201007061345Z" -- 06 July 2010 + DESCRIPTION + "Rev 0.02.00 + Corrected base OID to one properly allocated in Avaya tree." + REVISION "201007021506Z" -- 02 July 2010 + DESCRIPTION + "Rev 0.01.00 + The first rough draft of this MIB module." + ::= { products 48 } + +-- Product Groups + +smepProdVariants OBJECT IDENTIFIER ::= { avSMEPlatformProdMIB 1 } +smepProdServices OBJECT IDENTIFIER ::= { avSMEPlatformProdMIB 2 } +smepProdPorts OBJECT IDENTIFIER ::= { avSMEPlatformProdMIB 3 } +smepProdDongleModules OBJECT IDENTIFIER ::= { avSMEPlatformProdMIB 4 } + +-- Configuration 1 + +smepCfg1 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 1 + of the SME Embedded Platform. + Configuration 1 = IP Office Application Server on Linux PC" + ::= { smepProdVariants 1 } + +-- Configuration 2 + +smepCfg2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 2 + of the SME Embedded Platform. + Configuration 2 = IP Office on PC." + ::= { smepProdVariants 2 } + +-- Configuration 3 + +smepCfg3 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 3 + of the SME Embedded Platform. + Configuration 3 = IP Office on HP ProCurve" + ::= { smepProdVariants 3 } + +-- Configuration 4 + +smepCfg4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 4 + of the SME Embedded Platform. + Configuration 4 = IP Office on Dell" + ::= { smepProdVariants 4 } + +-- Configuration 5 + +smepCfg5 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 5 + of the SME Embedded Platform. + Configuration 5 = Branch installations" + ::= { smepProdVariants 5 } + +-- Configuration 6 + +smepCfg6 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 6 + of the SME Embedded Platform. + Configuration 6 = Standalone Voice Mail" + ::= { smepProdVariants 6 } + +-- Configuration 7 + +smepCfg7 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 7 + of the SME Embedded Platform. + Configuration 7 = IP Office Server Edition Primary" + ::= { smepProdVariants 7 } + +-- Configuration 8 + +smepCfg8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 8 + of the SME Embedded Platform. + Configuration 8 = IP Office Server Edition Secondary" + ::= { smepProdVariants 8 } + +-- Configuration 9 + +smepCfg9 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 9 + of the SME Embedded Platform. + Configuration 9 = IP Office Server Edition Expansion System (L)" + ::= { smepProdVariants 9 } + +-- Configuration 10 + +smepCfg10 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 10 + of the SME Embedded Platform. + Configuration 10 = IP Office Application Server on UCM" + ::= { smepProdVariants 10 } + +-- Configuration 11 + +smepCfg11 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 11 + of the SME Embedded Platform. + Configuration 11 = IP Office Server Edition Primary Select Mode" + ::= { smepProdVariants 11 } + +-- Configuration 12 + +smepCfg12 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 12 + of the SME Embedded Platform. + Configuration 12 = IP Office Server Edition Secondary Select Mode" + ::= { smepProdVariants 12 } + +-- Configuration 13 + +smepCfg13 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Configuration 13 + of the SME Embedded Platform. + Configuration 13 = IP Office Server Edition Expansion System (L) Select Mode" + ::= { smepProdVariants 13 } + +-- Application Services Groups + +smepProdServiceOneXPortal OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya one-X Portal service + resident on Avaya IP Office on Linux server." + ::= { smepProdServices 1 } + +smepProdServiceVoicemailPro OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya Voicemail Pro service + resident on Avaya IP Office on Linux server." + ::= { smepProdServices 2 } + +smepProdServiceContactRecorder OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya Contact Recorder service + resident on Avaya IP Office on Linux server." + ::= { smepProdServices 3 } + + +-- Ports + +smepProdPortLAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office LAN + (10BASE-T/100BASE-TX) Ports" + ::= { smepProdPorts 1 } + + +-- Dongle + +smepProdGenericDongle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office License + Dongle - A single representation for three dongle types, + Parallel, Serial and USB. The Parallel and USB ones not truly + connected directly to the IP Office but the managing PC." + ::= { smepProdDongleModules 1 } + + +END diff --git a/mibs/avaya/AVAYAGEN-MIB.mib b/mibs/avaya/AVAYAGEN-MIB.mib new file mode 100644 index 000000000..7e013629b --- /dev/null +++ b/mibs/avaya/AVAYAGEN-MIB.mib @@ -0,0 +1,104 @@ +--======================================================== +-- +-- MIB : AvayaGen Avaya Inc. +-- +-- Version : 1.4.0 27 January 2004 +-- ======================================================== +--- This AVAYA SNMP Management Information Base Specification (Specification) +-- embodies AVAYA confidential and Proprietary intellectual property. +-- AVAYA retains all Title and ownership in the Specification, including any +-- revisions. +-- +-- It is AVAYA's intent to encourage the widespread use of this Specification +-- in connection with the management of AVAYA products. AVAYA grants vendors, +-- end-users, and other interested parties a non-exclusive license to use this +-- Specification in connection with the management of AVAYA products. +-- +-- This Specification is supplied "as is," and AVAYA makes no warranty, either +-- express or implied, as to the use, operation, condition, or performance of +-- the Specification. +--======================================================== +AVAYAGEN-MIB DEFINITIONS ::= BEGIN + IMPORTS + enterprises,MODULE-IDENTITY + FROM SNMPv2-SMI; +avaya MODULE-IDENTITY +LAST-UPDATED "0401270900Z" -- 27 January 2004 +ORGANIZATION "Avaya Inc." +CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + WWW: http://www.avaya.com + " +DESCRIPTION + "Avaya top-level OID tree. + This MIB module deals defines the Avaya enterprise-specific tree. + Development organizations within Avaya who wish to register MIBs + under the Avaya enterprise OID, should: + a. Contact the maintainer of this module, and get an organization OID and + group OID. + b. Import the definition of their Organization OID from this MIB. + " +REVISION "0401270900Z" -- 27 January 2004 +DESCRIPTION + "Rev 1.4.0 - Meir Deutsch. + adds avGatewayProducts under avayaProducts. + adds avGatewayMibs under avayaMibs. + " +REVISION "0208150900Z" -- 15 August 2002 +DESCRIPTION + "Rev 1.3.0 - Itai Zilbershterin. + adds avayaSystemStats under lsg. + " +REVISION "0207280900Z" -- 28 July 2002 +DESCRIPTION + "Rev 1.2.0 - Itai Zilbershterin. + adds avayaEISTopology under lsg. + " +REVISION "0108091700Z" -- 09 August 2001 +DESCRIPTION + "Rev 1.1.0 - Itai Zilbershterin. + adds products OID to those defined. + " +REVISION "0106211155Z" -- 21 June 2001 +DESCRIPTION + "Rev 1.0.0 - Itai Zilbershterin. + Fixed the mibs placement error. Avaya Mibs + reside under avaya.2 and not avaya.1. + The MIB branch is called avayaMibs." + +REVISION "0010151045Z" -- 15 Oct. 2000 +DESCRIPTION + "Rev 0.9.0 - Itai Zilbershterin. + The initial version of this MIB module. + + The following Organizational top-level groups are defined: + lsg - Mibs of the LAN System Group (Concord & Israel)." +REVISION "0010151305Z" -- 15 Oct. 2000 +DESCRIPTION + "Rev 0.9.1 - Itai Zilbershterin. + Dates in Revisions changed from 'yyyymmddhhmm' to 'yymmddhhmm', to support + older development environments." +::= { enterprises 6889 } +-- **************************** +-- **************************** +-- Product OIDs +products OBJECT IDENTIFIER ::= { avaya 1 } +-- MIBs +mibs OBJECT IDENTIFIER ::= { avaya 2 } +-- Gateway +avGatewayProducts OBJECT IDENTIFIER ::= { products 6 } +avGatewayMibs OBJECT IDENTIFIER ::= { mibs 6 } +-- ********************************** +-- LAN System Group's +-- ********************************** +lsg OBJECT IDENTIFIER ::= { mibs 1 } +-- Sub branches which are NOT MIB modules (MIB modules directly under lsg +-- will define their OID in relation to lsg) +avayaEISTopology OBJECT IDENTIFIER ::= {lsg 10 } +avayaSystemStats OBJECT IDENTIFIER ::= {lsg 11 } +END diff --git a/mibs/avaya/IPO-MIB.mib b/mibs/avaya/IPO-MIB.mib new file mode 100644 index 000000000..c81143844 --- /dev/null +++ b/mibs/avaya/IPO-MIB.mib @@ -0,0 +1,2499 @@ +--======================================================== +-- +-- MIB : IPO Avaya Inc. +-- +-- Version : 2.00.25 04 July 2014 +-- +--======================================================== +-- +-- Copyright (c) 2003 - 2014 Avaya Inc. +-- All Rights Reserved. +-- +--======================================================== +IPO-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, + NOTIFICATION-TYPE, Unsigned32, Integer32, + IpAddress + FROM SNMPv2-SMI + DateAndTime + FROM SNMPv2-TC + MODULE-COMPLIANCE, OBJECT-GROUP, + NOTIFICATION-GROUP + FROM SNMPv2-CONF + SnmpAdminString + FROM SNMP-FRAMEWORK-MIB + sysDescr + FROM SNMPv2-MIB + ItuPerceivedSeverity + FROM ITU-ALARM-TC-MIB + ifIndex + FROM IF-MIB + mibs + FROM AVAYAGEN-MIB +; + +ipoMIB MODULE-IDENTITY + LAST-UPDATED "201407040000Z" -- 04 July 2014 + ORGANIZATION "Avaya Inc." + CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + + WWW: http://www.avaya.com" + DESCRIPTION + "Avaya IP Office MIBs OID tree. + + This MIB module defines the root items for MIBs for + use with Avaya IP Office family of telephone switches." + REVISION "201407040000Z" -- 04 July 2014 + DESCRIPTION + "Rev 2.00.25 + Added new value serviceAMServerNotAvailable" + REVISION "201406250000Z" -- 25 June 2014 + DESCRIPTION + "Rev 2.00.24 + Added new value serviceCCRNotSupported" + REVISION "201406250000Z" -- 25 June 2014 + DESCRIPTION + "Rev 2.00.23 + Added new value serviceNonSelectAlarm" + REVISION "201406160000Z" -- 16 June 2014 + DESCRIPTION + "Rev 2.00.22 + Added new values serviceGeneralAlarm and serviceSystemInfo" + REVISION "201406040000Z" -- 04 June 2014 + DESCRIPTION + "Rev 2.00.21 + Added new value serviceIPDECTSystemError " + REVISION "201405230000Z" -- 23 May 2014 + DESCRIPTION + "Rev 2.00.20 + Added new value monitorLogStamped " + REVISION "201405080000Z" -- 08 May 2014 + DESCRIPTION + "Rev 2.00.19 + Added new values trunkSIPDNSInvalidConfig and trunkSIPDNSTransportError " + REVISION "201401060000Z" -- 06 January 2014 + DESCRIPTION + "Rev 2.00.18 + Added oneXPortal values for ipoGTEventAppEntity" + REVISION "201310080000Z" -- 08 October 2013 + DESCRIPTION + "Rev 2.00.17 + Added new values serviceSystemHardDriveAlarm and serviceAdditionalHardDriveAlarm " + REVISION "201308060000Z" -- 06 August 2013 + DESCRIPTION + "Rev 2.00.16 + Added new values of serviceACCSAlarm for + ipoGTEventReason object" + REVISION "201304241900Z" -- 24 April 2013 + DESCRIPTION + "Rev 2.00.15 + Added new values for ipoGTEventReason object + serviceCpuAlarm, serviceCpuIOAlarm, serviceMemoryAlarm" + REVISION "201304241518Z" -- 24 April 2013 + DESCRIPTION + "Rev 2.00.14 + Added new value of serviceLocalBackup for + ipoGTEventReason object" + REVISION "201211171511Z" -- 17 November 2012 + DESCRIPTION + "Rev 2.00.13 + Added new notification: ipoGenEmergencyCallSvcEvent + Added new value of serviceEmergencyCall to the ipoGTEventReason object." + REVISION "201202281300Z" -- 28 February 2012 + DESCRIPTION + "Rev 2.00.12 + Added new values for ipoGTEventReason object from + servicePortRangeExhausted to serviceWebservicesUWSError." + REVISION "201111012200Z" -- 1 November 2011 + DESCRIPTION + "Rev 2.00.11 + Added new values for ipoGTEventReason object from + servicePlannedMaintenance to serviceSslVpnServerReportedError." + REVISION "201109271130Z" -- 27 September 2011 + DESCRIPTION + "Rev 2.00.10 + Added new value of testAlarm for ipoGTEventReason object." + REVISION "201103151517Z" -- 15 March 2011 + DESCRIPTION + "Rev 2.00.09 + Added new value of securityError for + ipoGTEventReason object" + REVISION "201010131417Z" -- 13 October 2010 + DESCRIPTION + "Rev 2.00.08 + Added new value of serviceLicenseFileInvalid for + ipoGTEventReason object" + REVISION "201007121345Z" -- 12 July 2010 + DESCRIPTION + "Rev 2.00.07 + Introduced new notifications, see ipoGenSvcMiscNotificationsGroup + and new objects, see ipoGenSvcMiscNotificationObjectsGroup" + REVISION "200910190735Z" -- 19 October 2009 + DESCRIPTION + "Rev 2.00.06 + System Running Backup, Invalid Memory Card, No Licence Key Dongle + Notifications added. Corrections to MIB syntax for System + Shutdown Notification." + REVISION "200910091347Z" -- 09 October 2009 + DESCRIPTION + "Rev 2.00.05 + System shutdown Notification added." + REVISION "200909110950Z" -- 11 September 2009 + DESCRIPTION + "Rev 2.00.04 + QOS Monitoring Notification added." + REVISION "200909071620Z" -- 07 September 2009 + DESCRIPTION + "Rev 2.00.03 + smallBusinessContactCenter(3) value for + ipoGTEventAppEntity changed to customerCallReporter." + REVISION "200804281640Z" -- 28 April 2008 + DESCRIPTION + "Rev 2.00.02 + Added smallBusinessContactCenter(3) value to + ipoGTEventAppEntity." + REVISION "200804181450Z" -- 18 April 2008 + DESCRIPTION + "Rev 2.00.01 + Added traps related to Universal PRI licensing." + REVISION "200606290000Z" -- 29 June 2006 + DESCRIPTION + "Rev 2.00.00 + Traps/notifications revised to provide more information about + the entity and device concerned." + REVISION "200410060000Z" -- 06 October 2004 + DESCRIPTION + "Rev 1.00.08 + Corrected description of event severities for physical + entities." + REVISION "200408270000Z" -- 27 August 2004 + DESCRIPTION + "Rev 1.00.07 + Corrected mandatory groups after addition of SOG event + related objects and notifications." + REVISION "200408060000Z" -- 06 August 2004 + DESCRIPTION + "Rev 1.00.06 + Added SOG event related object and notifications." + REVISION "200407100000Z" -- 10 July 2004 + DESCRIPTION + "Rev 1.00.05 + Added application event related object and notifications. + Corrected description of ipoGenLKSCommsOperationalEvent." + REVISION "200405280000Z" -- 28 May 2004 + DESCRIPTION + "Rev 1.00.04 + Revised usage description for ipoGTEventSeverity." + REVISION "200403030000Z" -- 03 March 2004 + DESCRIPTION + "Rev 1.00.03 + Revised for external publication." + REVISION "200312150000Z" -- 15 December 2003 + DESCRIPTION + "Rev 1.00.02 + Added loopback object and notification." + REVISION "200311110000Z" -- 11 November 2003 + DESCRIPTION + "Rev 1.00.01 + Corrected ipoGTEventEntity MAX-ACCESS." + REVISION "200310100000Z" -- 10 October 2003 + DESCRIPTION + "Rev 1.00.00 + The first published version of this MIB module." + ::= { mibs 2 } + +-- sub-tree for IP Office wide objects and events irrespective of function +ipoGeneric OBJECT IDENTIFIER ::= { ipoMIB 1 } + +-- sub-tree for IP Office functional MIBs +ipoGenMibs OBJECT IDENTIFIER ::= { ipoGeneric 1 } + +-- sub-tree for IP Office wide traps/notifications +ipoGenTraps OBJECT IDENTIFIER ::= { ipoGeneric 2 } + +-- sub-tree for IP Office wide conformance information +ipoGenConformance OBJECT IDENTIFIER ::= { ipoGeneric 3 } + +--******************************************************************** +-- IP Office wide traps/notifications +--******************************************************************** + +ipoGTEvents OBJECT IDENTIFIER ::= { ipoGenTraps 0 } +ipoGTObjects OBJECT IDENTIFIER ::= { ipoGenTraps 1 } + +-- +-- trap objects +-- + +ipoGTEventSeverity OBJECT-TYPE + SYNTAX INTEGER { + critical(1), + major(2), + minor(3) + } + MAX-ACCESS accessible-for-notify + STATUS deprecated + DESCRIPTION + "Severity of the event that has occurred. + + The event severity depends upon the type of + entity/notification that the operational state change event + relates to: + + GenEntityEvents: + + Type of physical Severity + entity + container critical + module major + port major + + Known transient errors for entities have a severity of minor. + + LKSCommsEvents: + Severity is major + + GenLoopbackEvent: + Severity is major + + GenAppEvents: + Severity depends on sub-event + Failure/Operational - severity is major + Event - severity depends on event condition + + ipoGenSogEvents: + Severity depends on sub-event + HostFailure - severity is Major + ModeChange: + - Mode survivable: severity is Major + - Mode subTending: severity is Minor + + PhoneChangeEvents: + Severity is minor + + **NOTE: This object is deprecated and replaced by + ipoGTEventStdSeverity." + ::= { ipoGTObjects 1 } + +ipoGTEventDateTime OBJECT-TYPE + SYNTAX DateAndTime + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Date and time of the occurence of the event." + ::= { ipoGTObjects 2 } + +ipoGTEventEntity OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "A reference, by entPhysicalIndex value, to the + EntPhysicalEntry representing the physical entity that an + event is associated with in an entity MIB instantiation within + the IP Office agent." + ::= { ipoGTObjects 3 } + +ipoGTEventLoopbackStatus OBJECT-TYPE + SYNTAX Integer32 (1..127) + MAX-ACCESS accessible-for-notify + STATUS deprecated + DESCRIPTION + "This variable represents the current state of the + loopback on the DS1 interface. It contains + information about loopbacks established by a + manager and remotely from the far end. + + The ipoGTEventLoopbackStatus is a bit map represented as + a sum, therefore is can represent multiple + loopbacks simultaneously. + + The various bit positions are: + 1 noLoopback + 2 nearEndPayloadLoopback + 4 nearEndLineLoopback + 8 nearEndOtherLoopback + 16 nearEndInwardLoopback + 32 farEndPayloadLoopback + 64 farEndLineLoopback" + ::= { ipoGTObjects 4 } + +ipoGTEventAppEntity OBJECT-TYPE + SYNTAX INTEGER { + voiceMail(1), + deltaServer(2), + customerCallReporter(3), + oneXPortal(4) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "The IP Office application to which a notification/trap + relates." + ::= { ipoGTObjects 5 } + +ipoGTEventAppEvent OBJECT-TYPE + SYNTAX INTEGER { + storageFull(1), -- severity: Critical + storageNearlyFull(2), -- severity: Major + storageOkay(3), -- severity: Minor + backupCommunicationError(4), -- severity: Major + backupFileError(5), -- severity: Major + httpFailure(6), -- severity: Major + httpSslAcceptFailure(7), -- severity: Major + httpSslConnection(8), -- severity: Major + httpSslFailure(9), -- severity: Major + httpSslPortFailure(10), -- severity: Major + ignoringRequest(11), -- severity: Major + imapInitializationFailed(12), -- severity: Major + imapInvalidMsgNr(13), -- severity: Major + imapMailboxNotExist(14), -- severity: Major + imapMessageInvalid(15), -- severity: Major + imapMessageNotExist(16), -- severity: Major + imapMessageNrNotExist(17), -- severity: Major + imapMissingConnection(18), -- severity: Major + imapMissingSettings(19), -- severity: Major + imapNoLicence(20), -- severity: Major + imapNotConfigured(21), -- severity: Major + imapShiftConnection(22), -- severity: Major + mapiInitializationFailed(23), -- severity: Major + mapiMissingSettings(24), -- severity: Major + mapiConnectionFailed(25), -- severity: Major + mapiShiftConnection(26), -- severity: Major + licence(27), -- severity: Major + licenceDistributed(28), -- severity: Major + licenceExpired(29), -- severity: Major + licenceSOG(30), -- severity: Major + loginFailure(31), -- severity: Major + loginFailureInvalidMailbox(32), -- severity: Major + mailboxNotFound(33), -- severity: Major + makeLiveFileAccess(34), -- severity: Major + makeLiveMissingFile(35), -- severity: Major + offlineMakeLive(36), -- severity: Major + onexError(37), -- severity: Major + pbxConnectionLost(38), -- severity: Major + pbxIncompatibility(39), -- severity: Major + smgrSettingsError(40), -- severity: Major + smtpConnectionFailed(41), -- severity: Major + smtpConnectionTimeout(42), -- severity: Major + smtpError(43), -- severity: Major + smtpSecureConnectionFailed(44), -- severity: Major + smtpUnexpectedData(45), -- severity: Major + smtpUnsuportedData(46), -- severity: Major + socketAbortingError(47), -- severity: Major + socketBindError(48), -- severity: Major +socketClientDisconnectedError(49), -- severity: Major + socketConnectionError(50), -- severity: Major + socketNoresponseError(51), -- severity: Major + socketOptionError(52), -- severity: Major + socketReceiveError(53), -- severity: Major + socketRecvFailedError(54), -- severity: Major + socketSendFailedError(55), -- severity: Major + socketSelectError(56), -- severity: Major + socketTimedOutError(57), -- severity: Major + switchedToPrimary(58), -- severity: Major + switchedToSecondary(59), -- severity: Major + tcpAcceptError(60), -- severity: Major + tcpListenError(61), -- severity: Major + tcpSelectError(62), -- severity: Major + tcpError(63), -- severity: Major + testTimeExpired(64), -- severity: Major + tftpConnectionError(65), -- severity: Major + tftpMonitoringError(66), -- severity: Major + tftpReadingError(67), -- severity: Major + tftpReceivingError(68), -- severity: Major + tftpWrittingError(69), -- severity: Major + tooManyClients(70), -- severity: Major + updateEerror(71), -- severity: Major + updateSuccess(72), -- severity: Major + vmScript(73) -- severity: Major + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office application event states. The associated event + severity of the notification/trap the object is carried in + varies depending upon the event condition. The appropriate + severity is detailed against event enumeration." + ::= { ipoGTObjects 6 } + +ipoGTEventHostAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Address of an IP Office Small Office Gateway Subtending Host." + ::= { ipoGTObjects 7 } + +ipoGTEventSOGMode OBJECT-TYPE + SYNTAX INTEGER { + survivable(1), -- severity: Major + subTending(2) -- severity: Minor + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office Small Office Gateway operating modes. + survivable(1) indicates the control unit has no current host, + either through confguration error or communication failure. + subTending(2) indicates normal operation to a valid Sub- + tending Host." + ::= { ipoGTObjects 8 } + +ipoGTEventStdSeverity OBJECT-TYPE + SYNTAX ItuPerceivedSeverity + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "Severity of the event that has occurred. + + The event severity depends upon the type of + entity/notification that the operational state change event + relates to. The severity values that are normally used are + detailed below: + + The enterprise versions of standard SNMP traps all have a + severity of major (4). + + Operational events which notify the transition back to an + operational state from a failure state have a severity of + cleared (1). + + + GenEntityEvents: + Operational - severity is cleared (1) + + Failure event severity levels + Type of physical Severity for failure + entity + container critical (3) + module major (4) + port major (4) + + Error + Known transient errors for entities have a severity of + warning (6). + + Change - severity is major (4) + + LKSCommsSvcEvents: + Operational - severity is cleared (1) + Failure - severity is major (4) + + GenLoopbackSvcEvent: + Severity is major (4) + + GenAppSvcEvents: + Severity depends on sub-event + Operational - severity is cleared (1) + Failure - severity is major (4) + Event - severity depends on event condition + For voicemail storage conditions the severity is as + follows: + storageOkay - severity is cleared (1) + storageNearlyFull - severity is warning (6) + (Only warning severity as it could be transitory.) + storageFull - severity is critical (3) + + GenSogSvcEvents: + Severity depends on sub-event + HostFailure - severity is Major (4) + ModeChange: + - Mode survivable: severity is Major (4) + - Mode subTending: severity is Minor (5) + + GenUPriLicSvcEvents: + Severity depends on sub-event + ChansReduced - severity is Major (4) + CallRejected - severity is Minor (5) + + GenQoSMonSvcEvent: + QoSWarning - severity is Warning (6) + + PhoneChangeSvcEvents: + Severity is minor (5) + + ipoGenSystemRunningBackupEvent: + Severity is cleared (1) + Severity is critical (3) + + ipoGenInvalidMemoryCardEvent: + Severity is cleared (1) + Severity is Major (4) + + ipoGenNoLicenceKeyDongleEvent: + Severity is cleared (1) + Severity is warning (6) + Severity is critical (3) + + ipoGenMemoryCardCapacityEvent: + Severity depends on sub-event + storageOkay - severity is cleared (1) + storageNearlyFull - severity is warning (6) + storageFull - severity is critical (3)" + ::= { ipoGTObjects 9 } + +ipoGTEventDevID OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (10)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "A unique textual identifier of the alarming device." + ::= { ipoGTObjects 10 } + +ipoGTEventEntityName OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (0..64)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "The textual name of the alarming physical entity. The + contents of this object is made of concatenated + entPhysicalName values that fully identify the object with the + overall IP Office entity. Examples values are: + + Controller, Trunk Slot B, Trunk Module, T1 PRI 2 + = T1 PRI Port 2, on a dual T1 Trunk Module, in Trunk Slot B, + on the IP Office Controller Unit + + Controller, VCM Slot 1, VCM 1 + = VCM Card, in VCM Slot 1, on the IP Office Controller Unit + + Controller, EXP 1, DS EXP 16, DS 12 + = DS Phone Port 12, on a DS16 Expansion Module, attached to + Expansion Port 1, on the IP Office Controller Unit" + ::= { ipoGTObjects 11 } + +ipoGTEventLoopbackStatusBits OBJECT-TYPE + SYNTAX BITS { + noLoopback(0), + nearEndPayloadLoopback(1), + nearEndLineLoopback(2), + nearEndOtherLoopback(3), + nearEndInwardLoopback(4), + farEndPayloadLoopback(5), + farEndLineLoopback(6) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable represents the current state of the loopback on + the DS1 interface. It contains information about loopbacks + established by a manager and remotely from the far end. + + The ipoGTEventLoopbackStatus is a bit map therefore is can + represent multiple loopbacks simultaneously." + ::= { ipoGTObjects 12 } + +ipoGTEventQoSMonJitter OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Received Jitter time in milliseconds." + ::= { ipoGTObjects 13 } + +ipoGTEventQoSMonRndTrip OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Round Trip Delay time in milliseconds." + ::= { ipoGTObjects 14 } + +ipoGTEventQoSMonPktLoss OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Received Packet Loss." + ::= { ipoGTObjects 15 } + +ipoGTEventQoSMonCallId OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Call Identifier." + ::= { ipoGTObjects 16 } + +ipoGTEventQoSMonDevType OBJECT-TYPE + SYNTAX INTEGER { + line(1), + extn(2) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Device Type." + ::= { ipoGTObjects 17 } + +ipoGTEventQoSMonDevId OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Device Identifier." + ::= { ipoGTObjects 18 } + +ipoGTEventQoSMonExtnNo OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "IP Office QoS monitoring Extension Number." + ::= { ipoGTObjects 19 } + +ipoGTEventSystemShutdownSource OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (0..255)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable represents the source from where the system + shutdown was performed. + + Possible values are: + + DTE-Port + - if the system shutdown is performed using the DTE, + AUX-Button + - if the system shutdown is performed using the AUX + button (available only for IP500v2), + Phone + - if the system shutdown is performed from a phone, + Manager + - if the system shutdown is performed from Manager, + SSA + - if the system shutdown is performed from SSA." + ::= { ipoGTObjects 20 } + +ipoGTEventSystemShutdownTimeout OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable represents the period of time the system will be in + the shutdown state for. Possible values are in the 5 to 1440 minutes + range, 0 meaning infinite." + ::= { ipoGTObjects 21 } + +ipoGTEventMemoryCardSlotId OBJECT-TYPE + SYNTAX INTEGER { + compactFlash(1), + systemSD(2), + optionalSD(3) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable indicates a memory card physical position identifier. + System(2) and Optional(3) are valid for the IP500 V2. CF(1) valid + for the IP500." + ::= { ipoGTObjects 22 } + +ipoGTEventNoValidKeyReason OBJECT-TYPE + SYNTAX INTEGER { + noReason(1), + notPresent(2), + noRegisterAccess(3), + invalidRegisters(4), + invalidWatermark(5), + invalidClusterSize(6), + invalidVolume(7), + invalidHeaderFiles(8), + nonSpecificError(9) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable indicates the reason no valid licence feature key is + assumed. This is also the order of importance and check precedence. + noReason(1) - cleared condition + notPresent(2) - license feature key no present + noRegisterAccess(3) - license feature key present, but no access + invalidRegisters(4) - invalid register values + invalidWatermark(5) - watermark invalid or not present + invalidClusterSize(6) - filesystem not as expected" + ::= { ipoGTObjects 23 } + +ipoGTEventReason OBJECT-TYPE + SYNTAX INTEGER { + configurationAgentNotTargeted(1), + configurationSCNDialPlanConflict(2), + configurationNoIncomingCallRoute(3), + configurationHWTypeFailure(4), + serviceFeatureLicenseMissing(5), + serviceAllLicensesInUse(6), + serviceClockSourceChanged(7), + serviceLogonFailed(8), + serviceNoFreeChannelsAvail(9), + serviceHoldMusicFileFailure(10), + serviceAllResourcesInUse(11), + serviceAlarm(12), + serviceNetworkInterconnectFailure(13), + trunkSeizeFailure(14), + trunkIncomingCallOutgoingTrunk(15), + trunkCLINotDelivered(16), + trunkDDIIncomplete(17), + trunkLOS(18), + trunkOOS(19), + trunkRedAlarm(20), + trunkBlueAlarm(21), + trunkYellowAlarm(22), + trunkIPConnectFail(23), + trunkSCNInvalidConnection(24), + linkDeviceChanged(25), + linkLDAPServerCommFailure(26), + linkResourceDown(27), + linkSMTPServerCommFailure(28), + linkVMProConnFailure(29), + serviceTimeServerAlarm(30), + serviceLicenseFileInvalid(31), + serviceLicenseError(32), + securityError(33), + codecError(34), + scepNoRespError(35), + configAppsProcAlarm(36), + serviceAppsProcAlarm(37), + serviceLicenseServerError(38), + testAlarm(39), + servicePlannedMaintenance(40), + serviceNetworkDisconnection(41), + serviceFailedTlsNegotiation(42), + serviceFailedTlsRenegotiation(43), + serviceLackOfResources(44), + serviceInternalError(45), + serviceTooManyMissedHeartbeats(46), + serviceFailedDnsResolution(47), + serviceDuplicateIpAddress(48), + serviceAuthenticationFailure(49), + serviceSslVpnStackProtocolError(50), + serviceSslVpnServerReportedError(51), + servicePortRangeExhausted(52), + serviceWebservicesUWSError(53), + trunkNoFreeVoIPChannel(54), + serviceEmergencyCall(55), + serviceLocationCongestion(56), + serviceCpuAlarm(57), + serviceCpuIOAlarm(58), + serviceMemoryAlarm(59), + serviceLocalBackup(60), + trunkSMConnectAsSIP(61), + trunkSIPConnectAsSM(62), + serviceSipRxPacketSizeError(63), + serviceACCSAlarm(64), + serviceSystemHardDriveAlarm(65), + serviceAdditionalHardDriveAlarm(66), + linkDialerConnFailure(67), + trunkSIPDNSInvalidConfig(68), + trunkSIPDNSTransportError(69), + monitorLogStamped(70), + trunkSCNInvalidSubOperMode(71), + serviceIPDECTSystemError(72), + serviceIPOCCAlarm(73), + serviceGeneralAlarm(74), + serviceSystemInfo(75), + serviceNonSelectAlarm(76), + serviceCCRNotSupported(77), + serviceAMServerNotAvailable(78), + trunkMediaSecuritySettingsIncompatible(79) + } + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable indicates what event took place within Configuration, Service, Trunk + or Link category alarm" + ::= { ipoGTObjects 24 } + +ipoGTEventData OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (0..255)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable contains opaque data that can be used to provide additional information + when the ipoGTEventReason value is not sufficient." + ::= { ipoGTObjects 25 } + +ipoGTEventAlarmDescription OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (0..255)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable describes the alarm" + ::= { ipoGTObjects 26 } + +ipoGTEventAlarmRemedialAction OBJECT-TYPE + SYNTAX SnmpAdminString (SIZE (0..255)) + MAX-ACCESS accessible-for-notify + STATUS current + DESCRIPTION + "This variable describes the remedial action of the alarm" + ::= { ipoGTObjects 27 } + + + +-- +-- traps +-- + +ipoGenEntityFailureEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenEntityFailureEvent notification is generated whenever a + physical entity on the IP Office fails in its operation. It + signifies that the SNMP entity, acting in an agent role, has + detected that the state of a physical entity of the system has + transitioned from the operational to the failed state + + **NOTE: This notification is deprecated and replaced by + ipoGenEntityFailureSvcEvent" + ::= { ipoGTEvents 1 } + +ipoGenEntityOperationalEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenEntityOperationalEvent notification is generated whenever + a physical entity on the IP Office becomes operational again + after having failed. It signifies that the SNMP entity, acting + in an agent role, has detected that the state of a physical + entity of the system has transitioned from the failed to the + operational state + + **NOTE: This notification is deprecated and replaced by + ipoGenEntityOperationalSvcEvent." + ::= { ipoGTEvents 2 } + +ipoGenEntityErrorEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenEntityErrorEvent notification is generated whenever a + physical entity on the IP Office experiences a temporary + error. It signifies that the SNMP entity, acting in an agent + role, has detected a transitory error on a physical entity of + the system. + + **NOTE: This notification is deprecated and replaced by + ipoGenEntityErrorSvcEvent." + ::= { ipoGTEvents 3 } + +ipoGenEntityChangeEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenEntityChangeEvent notification is generated whenever + a physical entity on the IP Office experiences a change itself + or with other entities associated with it. It signifies that + the SNMP entity, acting in an agent role, has detected a non + error/failure change for a physical entity on the system. + + **NOTE: This notification is deprecated and replaced by + ipoGenEntityChangeSvcEvent." + ::= { ipoGTEvents 4 } + +ipoGenLKSCommsFailureEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime + } + STATUS deprecated + DESCRIPTION + "A ipoGenLKSCommsFailureEvent notification is generated + whenever communication with a Licence Key Server fails. It + signifies that the SNMP entity, acting in an agent role, has + detected that the state of the communications between the + Licence Key Server has transitioned from the operational to + the failed state. + + **NOTE: This notification is deprecated and replaced by + ipoGenLKSCommsFailureSvcEvent." + ::= { ipoGTEvents 5 } + +ipoGenLKSCommsOperationalEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime + } + STATUS deprecated + DESCRIPTION + "A ipoGenLKSCommsOperationalEvent notification is generated + whenever communication with a Licence Key Server becomes + operational again after having failed. It signifies that the + SNMP entity, acting in an agent role, has detected that the + state of the communications between the Licence Key Server has + transitioned from the failed to the operational state. + + **NOTE: This notification is deprecated and replaced by + ipoGenLKSCommsOperationalSvcEvent." + ::= { ipoGTEvents 6 } + +ipoGenLKSCommsErrorEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime + } + STATUS deprecated + DESCRIPTION + "A ipoGenLKSCommsErrorEvent notification is generated whenever + a IP Office experiences a temporary error with License Key + Server communication. It signifies that the SNMP entity, + acting in an agent role, has detected a transitory error with + the communication between the License Key Server and Client + on the system. + + **NOTE: This notification is deprecated and replaced by + ipoGenLKSCommsErrorSvcEvent." + ::= { ipoGTEvents 7 } + +ipoGenLKSCommsChangeEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime + } + STATUS deprecated + DESCRIPTION + "A ipoGenLKSCommsChangeEvent notification is generated + whenever a IP Office experiences a change a non error change + License Key Server communication operation. It signifies that + the SNMP entity, acting in an agent role, has detected a non + error/failure change with the License Key Server and Client + operation on the system. + + **NOTE: This notification is deprecated and replaced by + ipoGenLKSCommsChangeSvcEvent." + ::= { ipoGTEvents 8 } + +ipoGenLoopbackEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity, + ipoGTEventLoopbackStatus + } + STATUS deprecated + DESCRIPTION + "A ipoGenLoopbackEvent notification is generated whenever a IP + Office T1 (DS1) interface operating as a CSU actions a loopback + status change. + + **NOTE: This notification is deprecated and replaced by + ipoGenLoopbackSvcEvent." + ::= { ipoGTEvents 9 } + +ipoGenAppFailureEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventAppEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenAppFailureEvent notification is generated whenever + communication between a IP Office switch and a IP Office + application fails. It signifies that the SNMP entity, acting + in an agent role, has detected that the state of the + communications between the IP Office switch and a IP Office + application has transitioned from the operational to the + failed state. The IP Office application between which + communication has been lost is identified by the value of + ipoGTEventAppEntity. + + **NOTE: This notification is deprecated and replaced by + ipoGenAppFailureSvcEvent." + ::= { ipoGTEvents 10 } + +ipoGenAppOperationalEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventAppEntity + } + STATUS deprecated + DESCRIPTION + "A ipoGenAppOperationalEvent notification is generated + whenever communication between a IP Office switch and a IP + Office application becomes operational again after having + failed. It signifies that the SNMP entity, acting in an agent + role, has detected that the state of the communications + between the IP Office switch and a IP Office application has + transitioned from the failed to the operational state. The IP + Office application between which communication has been lost + is identified by the value of ipoGTEventAppEntity. + + **NOTE: This notification is deprecated and replaced by + ipoGenAppOperationalSvcEvent." + ::= { ipoGTEvents 11 } + +ipoGenAppEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventAppEntity, + ipoGTEventAppEvent + } + STATUS deprecated + DESCRIPTION + "A ipoGenAppEvent notification is generated whenever a + application entity of the IP Office system experiences an event. + It signifies that the SNMP entity, acting as a proxy for + the application, has detected an event on the application + entity of the overall IP Office system. + The event severity varies dependent upon the event condition. + + **NOTE: This notification is deprecated and replaced by + ipoGenAppSvcEvent." + ::= { ipoGTEvents 12 } + +ipoGenSogHostFailureEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventHostAddress + } + STATUS deprecated + DESCRIPTION + "An ipoGenSogFailureEvent notification is generated whenever a + previously valid Sub-tending host fails during Small Office + Gateway operation. + The ipAddress field indicates the address of the failed host. + The event severity will always indicate Major. + + **NOTE: This notification is deprecated and replaced by + ipoGenSogHostFailureSvcEvent." + ::= { ipoGTEvents 13 } + +ipoGenSogModeChangeEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventSOGMode + } + STATUS deprecated + DESCRIPTION + "An ipoGenSogModeChangeEvent notification is generated whenever + the Small Office Gateway operating mode changes. This also + includes entry to the initial mode. + The ipoGTEventSOGMode field indicates the new operating mode. + The event severity will be major(2) for a ipoGTEventSOGMode value + of survivable(1), and minor(3) for a ipoGTEventSOGMode value of + subTending(2). + + **NOTE: This notification is deprecated and replaced by + ipoGenSogModeChangeSvcEvent." + ::= { ipoGTEvents 14 } + +ipoGenColdStartSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard coldstart trap featuring + device identification information. A coldStart trap + signifies that the sending protocol entity is reinitializing + itself such that the agent's configuration or the protocol + entity implementation may be altered." + ::= { ipoGTEvents 15 } + +ipoGenWarmStartSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard warmstart trap featuring + device identification information. A warmStart trap + signifies that the sending protocol entity is reinitializing + that neither the agent configuration nor the protocol entity + implementation is altered." + ::= { ipoGTEvents 16 } + +ipoGenLinkDownSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ifIndex + } + STATUS current + DESCRIPTION + "Enterprise version of standard linkDown trap featuring device + identification information. A linkDown trap signifies that + the sending protocol entity recognizes a failure in one of + the communication links represented in the agent's + configuration." + ::= { ipoGTEvents 17 } + +ipoGenLinkUpSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ifIndex + } + STATUS current + DESCRIPTION + "Enterprise version of standard linkUp trap featuring device + identification information. A linkUp trap signifies that the + sending protocol entity recognizes that one of the + communication links represented in the agent's configuration + has come up." + ::= { ipoGTEvents 18 } + +ipoGenAuthFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "Enterprise version of standard authenticationFailure trap + featuring device identification information. An + authenticationFailure trap signifies that the sending + protocol entity is the addressee of a protocol message that + is not properly authenticated. While implementations of the + SNMP must be capable of generating this trap, they must also + be capable of suppressing the emission of such traps via an + implementation- specific mechanism." + ::= { ipoGTEvents 19 } + +ipoGenEntityFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventEntity, + ipoGTEventEntityName + } + STATUS current + DESCRIPTION + "A ipoGenEntityFailureSvcEvent notification is generated + whenever a physical entity on the IP Office fails in its + operation. It signifies that the SNMP entity, acting in an + agent role, has detected that the state of a physical entity + of the system has transitioned from the operational to the + failed state" + ::= { ipoGTEvents 20 } + +ipoGenEntityOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventEntity, + ipoGTEventEntityName + } + STATUS current + DESCRIPTION + "A ipoGenEntityOperationalSvcEvent notification is generated + whenever a physical entity on the IP Office becomes + operational again after having failed. It signifies that the + SNMP entity, acting in an agent role, has detected that the + state of a physical entity of the system has transitioned from + the failed to the operational state" + ::= { ipoGTEvents 21 } + +ipoGenEntityErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventEntity, + ipoGTEventEntityName + } + STATUS current + DESCRIPTION + "A ipoGenEntityErrorSvcEvent notification is generated + whenever a physical entity on the IP Office experiences a + temporary error. It signifies that the SNMP entity, acting in + an agent role, has detected a transitory error on a physical + entity of the system." + ::= { ipoGTEvents 22 } + +ipoGenEntityChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventEntity, + ipoGTEventEntityName + } + STATUS current + DESCRIPTION + "A ipoGenEntityChangeSvcEvent notification is generated + whenever a physical entity on the IP Office experiences a + change itself or with other entities associated with it. It + signifies that the SNMP entity, acting in an agent role, has + detected a non error/failure change for a physical entity on + the system." + ::= { ipoGTEvents 23 } + +ipoGenLKSCommsFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenLKSCommsFailureSvcEvent notification is generated + whenever communication with a Licence Key Server fails. It + signifies that the SNMP entity, acting in an agent role, has + detected that the state of the communications between the + Licence Key Server has transitioned from the operational to + the failed state." + ::= { ipoGTEvents 24 } + +ipoGenLKSCommsOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenLKSCommsOperationalSvcEvent notification is generated + whenever communication with a Licence Key Server becomes + operational again after having failed. It signifies that the + SNMP entity, acting in an agent role, has detected that the + state of the communications between the Licence Key Server has + transitioned from the failed to the operational state." + ::= { ipoGTEvents 25 } + +ipoGenLKSCommsErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenLKSCommsErrorSvcEvent notification is generated + whenever a IP Office experiences a temporary error with + License Key Server communication. It signifies that the SNMP + entity, acting in an agent role, has detected a transitory + error with the communication between the License Key Server + and Client on the system." + ::= { ipoGTEvents 26 } + +ipoGenLKSCommsChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenLKSCommsChangeSvcEvent notification is generated + whenever a IP Office experiences a change a non error change + License Key Server communication operation. It signifies that + the SNMP entity, acting in an agent role, has detected a non + error/failure change with the License Key Server and Client + operation on the system." + ::= { ipoGTEvents 27 } + +ipoGenLoopbackSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventEntity, + ipoGTEventEntityName, + ipoGTEventLoopbackStatusBits + } + STATUS current + DESCRIPTION + "A ipoGenLoopbackSvcEvent notification is generated whenever a + IP Office T1 (DS1) interface operating as a CSU actions a + loopback status change." + ::= { ipoGTEvents 28 } + +ipoGenAppFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventAppEntity + } + STATUS current + DESCRIPTION + "A ipoGenAppFailureSvcEvent notification is generated whenever + communication between a IP Office switch and a IP Office + application fails. It signifies that the SNMP entity, acting + in an agent role, has detected that the state of the + communications between the IP Office switch and a IP Office + application has transitioned from the operational to the + failed state. The IP Office application between which + communication has been lost is identified by the value of + ipoGTEventAppEntity." + ::= { ipoGTEvents 29 } + +ipoGenAppOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventAppEntity + } + STATUS current + DESCRIPTION + "A ipoGenAppOperationalSvcEvent notification is generated + whenever communication between a IP Office switch and a IP + Office application becomes operational again after having + failed. It signifies that the SNMP entity, acting in an agent + role, has detected that the state of the communications + between the IP Office switch and a IP Office application has + transitioned from the failed to the operational state. The IP + Office application between which communication has been lost + is identified by the value of ipoGTEventAppEntity." + ::= { ipoGTEvents 30 } + +ipoGenAppSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventAppEntity, + ipoGTEventAppEvent, + ipoGTEventAlarmDescription + } + STATUS current + DESCRIPTION + "A ipoGenAppSvcEvent notification is generated whenever a + application entity of the IP Office system experiences an + event. It signifies that the SNMP entity, acting as a proxy + for the application, has detected an event on the application + entity of the overall IP Office system. + + The event severity varies dependent upon the event condition." + ::= { ipoGTEvents 31 } + +ipoGenSogHostFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventHostAddress + } + STATUS current + DESCRIPTION + "An ipoGenSogFailureSvcEvent notification is generated + whenever a previously valid Sub-tending host fails during + Small Office Gateway operation. + + The ipAddress field indicates the address of the failed host. + The event severity will always indicate major(4)." + ::= { ipoGTEvents 32 } + +ipoGenSogModeChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventSOGMode + } + STATUS current + DESCRIPTION + "An ipoGenSogModeChangeSvcEvent notification is generated + whenever the Small Office Gateway operating mode changes. This + also includes entry to the initial mode. + + The ipoGTEventSOGMode field indicates the new operating mode. + The event severity will be major(4) for a ipoGTEventSOGMode + value of survivable(1), and minor(5) for a ipoGTEventSOGMode + value of subTending(2)." + ::= { ipoGTEvents 33 } + +ipoGenUPriLicChansReducedSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenUPriLicChansReducedSvcEvent notification is generated + whenever the number of Universal PRI Licensed channels has + been reduced. It signifies that the SNMP entity, acting in an + agent role, has detected a reduction in the licensed channels + on a Univeral PRI trunk." + ::= { ipoGTEvents 34 } + +ipoGenUPriLicCallRejectedSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "A ipoGenUPriLicCallRejectedSvcEvent notification is generated + whenever a call on a Universal PRI is rejected due to a + licensed channel not being available. It signifies that the + SNMP entity, acting in an agent role, has detected a licensed + channel not available in order to make a call on a Univeral + PRI trunk." + ::= { ipoGTEvents 35 } + +ipoGenQoSMonSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventQoSMonJitter, + ipoGTEventQoSMonRndTrip, + ipoGTEventQoSMonPktLoss, + ipoGTEventQoSMonCallId, + ipoGTEventQoSMonDevType, + ipoGTEventQoSMonDevId, + ipoGTEventQoSMonExtnNo + } + STATUS current + DESCRIPTION + "A ipoGenQoSMonSvcEvent notification is generated when one of + the monitored QoS parameters (e.g. round trip delay, jitter, + packet loss, etc) exceeds its pre-selected threshold during + the duration of the call. It signifies that the SNMP entity, + acting in an agent role, has detected a state that one of the + monitored QoS parameters for the call exceeded its + pre-selected threshold. + + The ipoGTEventQOSMonExtnNo value is only valid when the device + monitored is an extension rather than a line." + ::= { ipoGTEvents 36 } + +ipoGenSystemShutdownSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventSystemShutdownSource, + ipoGTEventSystemShutdownTimeout + } + STATUS current + DESCRIPTION + "An ipoGenSystemShutdownSvcEvent notification is generated when a + system shutdown is performed. It signifies that the + SNMP entity has detected a system shutdown." + ::= { ipoGTEvents 37 } + +ipoGenSystemRunningBackupEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr + } + STATUS current + DESCRIPTION + "An ipoGenSystemRunningBackup notification is generated when a + system is running partially or wholly from alternate/backup + software and/or configuration data. + In the case of an IP500 V2, it indicates that the current boot location + is not the System SD card slot, \system\primary." + ::= { ipoGTEvents 38 } + +ipoGenInvalidMemoryCardEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventMemoryCardSlotId + } + STATUS current + DESCRIPTION + "An ipoGenInvalidMemoryCard notification is generated when a memory + card is detected present but cannot be used due to failure in the + filesystem or card type checks. + The checks are carried out on startup and whenever a memory card is + inserted." + ::= { ipoGTEvents 39 } + +ipoGenNoLicenceKeyDongleEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventNoValidKeyReason + } + STATUS current + DESCRIPTION + "A ipoGenNoLicenceKeyDongle notification is generated if a system + either does not detect presence, or fails to validate a Licence Feature + Key Dongle. + In the case of an IP500 V2, it indicates that either the System SD card + is not present, or that one of the validation checks has failed. Note + that removing the System SD card will cause this event immediately, + however the licences will remain valid for approximately 2 hours. + + ipoGTEventStdSeverity will indicate the events state: + Severity is cleared(1): license dongle OK + Severity is warning(6): license dongle not OK, in grace period + Severity is critical(3): license dongle not OK, grace period expired + + The first check to fail is contained within ipoGTEventNoKeyReason." + ::= { ipoGTEvents 40 } + +ipoGenMemoryCardCapacityEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventMemoryCardSlotId, + ipoGTEventAppEvent + } + STATUS current + DESCRIPTION + "A ipoGenMemoryCardCapacityEvent notification is generated if a memory + card passes one of the preset capacity thresholds. + In the case of an IP500 V2, the thresholds shall be + storageFull(1) - greater than 99% of nominal capacity + storageNearlyFull(2) - greater than 90% of nominal capacity + storageOkay(3) - less than 90% of nominal capacity." + ::= { ipoGTEvents 41 } + + + +ipoGenConfigFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenConfigFailureSvcEvent notification is generated + whenever a configuration component fails in its operation. It signifies + that the SNMP entity,acting in an agent role,has detected that + the state of a configuration component has transitioned from the + operational to the failed state. + + This notification event is associated with a configuration + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 42} + +ipoGenConfigOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData + } + STATUS current + DESCRIPTION + "A ipoGenConfigOperationalSvcEvent notification is generated + whenever a configuration component becomes operational again + after having failed.It signifies that the SNMP entity,acting in an + agent role,has detected that the state of a configuration component + of thesystem has transitioned from the failed to the operational state. + + This notification event is associated with a configuration + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 43} + +ipoGenConfigErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenConfigErrorSvcEvent notification is generated + whenever a configuration component experiences a + temporary error.It signifies that the SNMP entity, acting + in an agent role,has detected a transitory error on a + configuration component of the system. + + This notification event is associated with a configuration + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 44} + +ipoGenConfigChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenConfigChangeSvcEvent notification is generated + whenever a configuration component experiences a change + or a non error change event.It signifies that the SNMP entity, acting + in an agent role,has detected a non error/failure change on a + configuration component of the system. + + This notification event is associated with a configuration + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 45} + + +ipoGenServiceFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenServiceFailureSvcEvent notification is generated + whenever a Service component fails in its operation. It signifies + that the SNMP entity,acting in an agent role,has detected that + the state of a Service component has transitioned from the + operational to the failed state. + + This notification event is associated with a service + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 46} + +ipoGenServiceOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData + } + STATUS current + DESCRIPTION + "A ipoGenServiceOperationalSvcEvent notificationis generated + whenever a service component becomes operational again + after having failed.It signifiest hat the SNMP entity, acting in an + agent role, has detected that the state of a service component + of the system has transitioned from the failed to the operational state. + + This notification event is associated with a service + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 47} + +ipoGenServiceErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenServiceErrorSvcEvent notification is generated + whenever a service component experiences a + temporary error. It signifiest hat the SNMP entity, acting + in an agent role,has detected a transitory error on a + service component of the system. + + This notification event is associated with a service + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 48} + +ipoGenServiceChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenServiceChangeSvcEvent notification is generated + whenever a service component experiences a change + or a non error change event. It signifies that the SNMP entity, acting + in an agent role,has detected a non error/failure change on a + service component of the system. + + This notification event is associated with a service + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 49} + +ipoGenTrunkFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenTrunkFailureSvcEvent notification is generated + whenever a trunk component fails in its operation. It signifies + that the SNMP entity,acting in an agent role,has detected that + the state of a Trunk component has transitioned from the + operational to the failed state. + + This notification event is associated with a trunk + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 50} + +ipoGenTrunkOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData + } + STATUS current + DESCRIPTION + "A ipoGenTrunkOperationalSvcEvent notificationis generated + whenever a trunk component becomes operational again + after having failed. It signifies that the SNMP entity, acting in an + agent role,has detected that the state of a trunk component + of the system has transitioned from the failed to the operational state. + + This notification event is associated with a trunk + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 51} + +ipoGenTrunkErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenTrunkErrorSvcEvent notification is generated + whenever a trunk component experiences a + temporary error. It signifies that the SNMP entity, acting + in an agent role, has detected a transitory error on a + trunk component of the system. + + This notification event is associated with a trunk + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 52} + +ipoGenTrunkChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenTrunkChangeSvcEvent notification is generated + whenever a trunk component experiences a change + or a non error change event. It signifies that the SNMP entity, acting + in an agent role, has detected a non error/failure change on a + trunk component of the system. + + This notification event is associated with a trunk + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 53} + +ipoGenLinkFailureSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenLinkFailureSvcEvent notification is generated + whenever a Link component fails in its operation. It signifies + that the SNMP entity,acting in an agent role,has detected that + the state of a Link component has transitioned from the + operational to the failed state. + + This notification event is associated with a link + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 54} + +ipoGenLinkOperationalSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData + } + STATUS current + DESCRIPTION + "A ipoGenLinkOperationalSvcEvent notification is generated + whenever a link component becomes operational again + after having failed. It signifies that the SNMP entity, acting in an + agent role, hasdetected that the state of a link component + of the system has transitioned from the failed to the operational state. + + This notification event is associated with a link + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 55} + +ipoGenLinkErrorSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenLinkErrorSvcEvent notification is generated + whenever a link component experiences a + temporary error. It signifies that the SNMP entity, acting + in an agent role,has detected a transitory error on a + link component of thesystem. + + This notification event is associated with a link + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 56} + +ipoGenLinkChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenLinkChangeSvcEvent notification is generated + whenever a link component experiences a change + or a non error change event. It signifies that the SNMP entity, acting + in an agent role,has detected a non error/failure change on a + link component of the system. + + This notification event is associated with a link + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 57} + + ipoGenEmergencyCallSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "A ipoGenEmergencyCallSvcEvent notification is generated + whenever an emergency call is made, regardless whether successfully or not. + It signifies that the SNMP entity, acting + in an agent role, has detected an emergency call attempt on the system. + + This notification event is associated with a service + system status category alarm. Details about the alarm are + provided in the included object variables." + ::= { ipoGTEvents 58} + + +--******************************************************************** +-- IP Office wide compliance +--******************************************************************** + +ipoGenCompliances OBJECT IDENTIFIER ::= { ipoGenConformance 1 } +ipoGenGroups OBJECT IDENTIFIER ::= { ipoGenConformance 2 } + +-- +-- compliance statements +-- + +ipoGenCompliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + up to and including version 1.00.05 of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenNotificationObjectsGroup, + ipoGenNotificationsGroup + } + ::= { ipoGenCompliances 1 } + +ipoGen2Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 1.00.06 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenNotificationObjectsGroup, + ipoGenNotificationsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + ::= { ipoGenCompliances 2 } + +ipoGen3Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 1.01.01 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenv2NotificationObjectsGroup, + ipoGenEntGenNotificationsGroup, + ipoGenSvcNotificationsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSvcSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + ::= { ipoGenCompliances 3 } + +ipoGen4Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 2.00.01 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenv2NotificationObjectsGroup, + ipoGenEntGenNotificationsGroup, + ipoGenSvcNotificationsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSvcSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenUPriLicSvcNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the Universal PRI trunk module such as + the IP500." + ::= { ipoGenCompliances 4 } + +ipoGen5Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 2.00.04 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenv2NotificationObjectsGroup, + ipoGenEntGenNotificationsGroup, + ipoGenSvcNotificationsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSvcSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenUPriLicSvcNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the Universal PRI trunk module such as + the IP500." + GROUP ipoGenQosMonNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the QoS monitoring such as the IP500." + GROUP ipoGenSvcQoSMonNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the QoS monitoring such as the IP500." + ::= { ipoGenCompliances 5 } + +ipoGen6Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 2.00.03 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenv2NotificationObjectsGroup, + ipoGenEntGenNotificationsGroup, + ipoGenSvcNotificationsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSvcSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenUPriLicSvcNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the Universal PRI trunk module such as + the IP500." + GROUP ipoGenSvcQoSMonNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the QoS monitoring such as the IP500." + GROUP ipoGenSvcSystemShutdownNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the system shutdown such as the IP406v2, + IP412, IP500 and IP500v2." + GROUP ipoGenSvcSystemShutdownObjectGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the system shutdown such as the IP406v2, + IP412, IP500 and IP500v2." + GROUP ipoGenSDcardNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support an SD Card for primary operation" + GROUP ipoGenSDcardNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support an SD Card for primary operation" + ::= { ipoGenCompliances 6 } + +ipoGen7Compliance MODULE-COMPLIANCE + STATUS current + DESCRIPTION + "The compliance statement for IP Office agents which implement + version 2.00.07 and later versions of this MIB." + MODULE -- this module + MANDATORY-GROUPS { + ipoGenv2NotificationObjectsGroup, + ipoGenEntGenNotificationsGroup, + ipoGenSvcNotificationsGroup, + ipoGenSvcMiscNotificationsGroup, + ipoGenSvcMiscNotificationObjectsGroup + } + GROUP ipoGenSOGNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenSvcSOGNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + SOG devices." + GROUP ipoGenUPriLicSvcNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the Universal PRI trunk module such as + the IP500." + GROUP ipoGenSvcQoSMonNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the QoS monitoring such as the IP500." + GROUP ipoGenSvcSystemShutdownNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the system shutdown such as the IP406v2, + IP412, IP500 and IP500v2." + GROUP ipoGenSvcSystemShutdownObjectGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support the system shutdown such as the IP406v2, + IP412, IP500 and IP500v2." + GROUP ipoGenSDcardNotificationsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support an SD Card for primary operation" + GROUP ipoGenSDcardNotificationObjectsGroup + DESCRIPTION + "Implementation of this group is only mandatory for IP Office + systems that support an SD Card for primary operation" + ::= { ipoGenCompliances 7 } + +-- +-- MIB groupings +-- + +ipoGenNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoGTEventEntity, + ipoGTEventLoopbackStatus, + ipoGTEventAppEntity, + ipoGTEventAppEvent + } + STATUS deprecated + DESCRIPTION + "Objects that are contained in IP Office wide notifications. + + **NOTE: This group is deprecated and replaced by + ipoGenv2NotificationObjectsGroup." + ::= { ipoGenGroups 1 } + +ipoGenNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenEntityFailureEvent, + ipoGenEntityOperationalEvent, + ipoGenEntityErrorEvent, + ipoGenEntityChangeEvent, + ipoGenLKSCommsFailureEvent, + ipoGenLKSCommsOperationalEvent, + ipoGenLKSCommsErrorEvent, + ipoGenLKSCommsChangeEvent, + ipoGenLoopbackEvent, + ipoGenAppOperationalEvent, + ipoGenAppFailureEvent, + ipoGenAppEvent + } + STATUS deprecated + DESCRIPTION + "The notifications which indicate specific changes in the + state of the IP Office system. + + **NOTE: This group is deprecated and replaced by + ipoGenSvcNotificationsGroup." + ::= { ipoGenGroups 2 } + +ipoGenSOGNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventHostAddress, + ipoGTEventSOGMode + } + STATUS current + DESCRIPTION + "Objects that are contained in IP Office SOG notifications." + ::= { ipoGenGroups 3 } + +ipoGenSOGNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenSogHostFailureEvent, + ipoGenSogModeChangeEvent + } + STATUS deprecated + DESCRIPTION + "The notifications which indicate specific changes in the + state of the IP Office SOG system. + + **NOTE: This group is deprecated and replaced by + ipoGenSvcNotificationsGroup." + ::= { ipoGenGroups 4 } + +ipoGenv2NotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventDateTime, + ipoGTEventEntity, + ipoGTEventAppEntity, + ipoGTEventAppEvent, + ipoGTEventStdSeverity, + ipoGTEventDevID, + ipoGTEventEntityName, + ipoGTEventLoopbackStatusBits + } + STATUS current + DESCRIPTION + "Objects that are contained in IP Office wide notifications." + ::= { ipoGenGroups 5 } + +ipoGenEntGenNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenColdStartSvcEvent, + ipoGenWarmStartSvcEvent, + ipoGenLinkDownSvcEvent, + ipoGenLinkUpSvcEvent, + ipoGenAuthFailureSvcEvent + } + STATUS current + DESCRIPTION + "IP Office Enterpise versions of the generic traps as defined + RFC1215 that provide more identification of the entity + concerned." + ::= { ipoGenGroups 6 } + +ipoGenSvcNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenEntityFailureSvcEvent, + ipoGenEntityOperationalSvcEvent, + ipoGenEntityErrorSvcEvent, + ipoGenEntityChangeSvcEvent, + ipoGenLKSCommsFailureSvcEvent, + ipoGenLKSCommsOperationalSvcEvent, + ipoGenLKSCommsErrorSvcEvent, + ipoGenLKSCommsChangeSvcEvent, + ipoGenLoopbackSvcEvent, + ipoGenAppOperationalSvcEvent, + ipoGenAppFailureSvcEvent, + ipoGenAppSvcEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes in + the state of the IP Office system." + ::= { ipoGenGroups 7 } + +ipoGenSvcSOGNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenSogHostFailureSvcEvent, + ipoGenSogModeChangeSvcEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes in + the state of the IP Office SOG system." + ::= { ipoGenGroups 8 } + +ipoGenUPriLicSvcNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenUPriLicChansReducedSvcEvent, + ipoGenUPriLicCallRejectedSvcEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes + related to the state licensing and Universal PRI trunks on the + IP Office system." + ::= { ipoGenGroups 9 } + +ipoGenQosMonNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventQoSMonJitter, + ipoGTEventQoSMonRndTrip, + ipoGTEventQoSMonPktLoss, + ipoGTEventQoSMonCallId, + ipoGTEventQoSMonDevType, + ipoGTEventQoSMonDevId, + ipoGTEventQoSMonExtnNo + } + STATUS current + DESCRIPTION + "Additional objects that are contained in IP Office QOS + Monitoring notifications." + ::= { ipoGenGroups 10 } + +ipoGenSvcQoSMonNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenQoSMonSvcEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes + related to the value of QoS parameters for a call on a physical + entity on the IP Office system." + ::= { ipoGenGroups 11 } + +ipoGenSvcSystemShutdownObjectGroup OBJECT-GROUP + OBJECTS { + ipoGTEventSystemShutdownSource, + ipoGTEventSystemShutdownTimeout + } + STATUS current + DESCRIPTION + "Additional objects that are contained in the system shutdown + notification" + ::= { ipoGenGroups 12 } + +ipoGenSvcSystemShutdownNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenSystemShutdownSvcEvent + } + STATUS current + DESCRIPTION + "The service notifications which indicate specific changes + related to the system shutdown performed on the IP Office system." + ::= { ipoGenGroups 13 } + + +ipoGenSDcardNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventMemoryCardSlotId, + ipoGTEventNoValidKeyReason + } + STATUS current + DESCRIPTION + "Additional objects that are contained in IP Office SD card + notifications." + ::= { ipoGenGroups 14 } + +ipoGenSDcardNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenAppOperationalSvcEvent, + ipoGenAppFailureSvcEvent, + ipoGenAppSvcEvent, + ipoGenSystemRunningBackupEvent, + ipoGenInvalidMemoryCardEvent, + ipoGenNoLicenceKeyDongleEvent, + ipoGenMemoryCardCapacityEvent + } + STATUS current + DESCRIPTION + "The notifications associated with IP Office SD card usage." + ::= { ipoGenGroups 15 } + +ipoGenSvcMiscNotificationObjectsGroup OBJECT-GROUP + OBJECTS { + ipoGTEventReason, + ipoGTEventData, + ipoGTEventAlarmDescription, + ipoGTEventAlarmRemedialAction + } + STATUS current + DESCRIPTION + "Additional objects that are contained in IP Office + notifications to provide additional information to + end user" + ::= { ipoGenGroups 16 } + +ipoGenSvcMiscNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoGenConfigFailureSvcEvent, + ipoGenConfigOperationalSvcEvent, + ipoGenConfigErrorSvcEvent, + ipoGenConfigChangeSvcEvent, + ipoGenServiceFailureSvcEvent, + ipoGenServiceOperationalSvcEvent, + ipoGenServiceErrorSvcEvent, + ipoGenServiceChangeSvcEvent, + ipoGenTrunkFailureSvcEvent, + ipoGenTrunkOperationalSvcEvent, + ipoGenTrunkErrorSvcEvent, + ipoGenTrunkChangeSvcEvent, + ipoGenLinkFailureSvcEvent, + ipoGenLinkOperationalSvcEvent, + ipoGenLinkErrorSvcEvent, + ipoGenLinkChangeSvcEvent, + ipoGenEmergencyCallSvcEvent + } + STATUS current + DESCRIPTION + "The notifications indicating change in status + related to four areas: Configuration, Sevice, + Trunk and Link" + ::= { ipoGenGroups 17 } + + + + +END diff --git a/mibs/avaya/IPO-PHONES-MIB.mib b/mibs/avaya/IPO-PHONES-MIB.mib new file mode 100644 index 000000000..e21706bb5 --- /dev/null +++ b/mibs/avaya/IPO-PHONES-MIB.mib @@ -0,0 +1,691 @@ +--======================================================== +-- +-- MIB : IPO-PHONES Avaya Inc. +-- +-- Version : 2.00.06 9 February 2011 +-- +--======================================================== +-- +-- Copyright (c) 2003 - 2011 Avaya Inc. +-- All Rights Reserved. +-- +--======================================================== +IPO-PHONES-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-TYPE, + NOTIFICATION-TYPE, Integer32, Unsigned32, IpAddress + FROM SNMPv2-SMI + TEXTUAL-CONVENTION, DisplayString, PhysAddress + FROM SNMPv2-TC + MODULE-COMPLIANCE, OBJECT-GROUP, + NOTIFICATION-GROUP + FROM SNMPv2-CONF + sysDescr + FROM SNMPv2-MIB + IndexInteger + FROM DIFFSERV-MIB + ipoGenMibs, ipoGTEventDateTime, ipoGTEventSeverity, + ipoGTEventStdSeverity, ipoGTEventDevID, ipoGTEventEntityName + FROM IPO-MIB + ; + +ipoPhonesMIB MODULE-IDENTITY + LAST-UPDATED "201102091521Z" -- 9 February 2011 + ORGANIZATION "Avaya Inc." + CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + + WWW: http://www.avaya.com" + DESCRIPTION + "Avaya IP Office Phones MIB + + The MIB module for representing the phones present on a Avaya + IP Office stack." + + + REVISION "201102091521Z" -- 9 February 2011 + DESCRIPTION + "Rev 2.00.06 + PhoneType: adding more original Nortel phone sets." + REVISION "200902181309Z" -- 18 February 2009 + DESCRIPTION + "Rev 2.00.05 + PhoneType enumerations for a number of SIP phones, + the 1400 phones and PhoneManager IP SoftPhone added." + REVISION "200806121506Z" -- 12 June 2008 + DESCRIPTION + "Rev 2.00.04 + PhoneType enumerations for the 1700 phones added." + REVISION "200804171630Z" -- 17 April 2008 + DESCRIPTION + "Rev 2.00.03 + Added descriptions for new PhoneType enumerations + and corrected versioning." + REVISION "200703281209Z" -- 28 March 2007 + DESCRIPTION + "Rev 2.00.02 + Added the port number, module number, ip address, + and physical address, to the ipoPhonesTable" + REVISION "200702241209Z" -- 24 February 2007 + DESCRIPTION + "Rev 2.00.01 + Added descriptions for new PhoneType enumerations + and corrected versioning." + REVISION "200606290000Z" -- 29 June 2006 + DESCRIPTION + "Rev 2.00.00 + Traps/notifications revised to provide more information about + the entity and device concerned." + REVISION "200601310000Z" -- 31 January 2006 + DESCRIPTION + "Rev 1.00.08 + Corrected enumeration for 5621 IP phones." + REVISION "200511220000Z" -- 22 November 2005 + DESCRIPTION + "Rev 1.00.07 + Revised for 5621 IP phones." + REVISION "200507211050Z" -- 21 July 2005 + DESCRIPTION + "Rev 1.00.06 + Revised for 4621 IP phones." + REVISION "200507211030Z" -- 21 July 2005 + DESCRIPTION + "Rev 1.00.05 + Revised for 5601 and 5602 Phones" + REVISION "200503040000Z" -- 4 March 2005 + DESCRIPTION + "Rev 1.00.04 + Revised for IP Soft Phones" + REVISION "200501060000Z" -- 6 January 2005 + DESCRIPTION + "Rev 1.00.03 + Revised for 5610/5620 IP phones." + REVISION "200412200000Z" -- 20 December 2004 + DESCRIPTION + "Rev 1.00.02 + Revised for additional phone support." + REVISION "200403030000Z" -- 3 March 2004 + DESCRIPTION + "Rev 1.00.01 + Revised for external publication." + REVISION "200310100000Z" -- 10 October 2003 + DESCRIPTION + "Rev 1.0.0 + The first published version of this MIB module." + ::= { ipoGenMibs 1 } + +ipoPhonesMibNotifications OBJECT IDENTIFIER ::= { ipoPhonesMIB 0 } +ipoPhonesMibObjects OBJECT IDENTIFIER ::= { ipoPhonesMIB 1 } +ipoPhonesConformance OBJECT IDENTIFIER ::= { ipoPhonesMIB 2 } + +--******************************************************************** +-- IPOPhone Textual Conventions +--******************************************************************** + +PhoneType ::= TEXTUAL-CONVENTION + STATUS current + DESCRIPTION + "This data type is used as the syntax of the ipoPhoneType + object in the ipoPhonesTable." + SYNTAX INTEGER { + noPhone(1), -- no phone actually connected + genericPhone(2), -- for phone found that we can handle in + -- some way but exact type not recognised + -- may or may not be needed + potPhone(3), -- Generic Analogue/POT Phone + dtPhone(4), -- Generic DT Phone + a4406Dplus(5), -- Avaya 4406D+ DCP Phone + a4412Dplus(6), -- Avaya 4412D+ DCP Phone + a4424Dplus(7), -- Avaya 4424D+ DCP Phone + a4424LDplus(8), -- Avaya 4424LD+ DCP Phone + a9040TransTalk(9), -- Avaya 9040 TransTalk + a6408Dplus(10), -- Avaya 6408D+ DCP Phone + a6416Dplus(11), -- Avaya 6416D+ DCP Phone + a6424Dplus(12), -- Avaya 6424D+ DCP Phone + a4606ip(13), -- Avaya 4606 IP Phone + a4612ip(14), -- Avaya 4612 IP Phone + a4624ip(15), -- Avaya 4624 IP Phone + a4620ip(16), -- Avaya 4620 IP Phone + a4602ip(17), -- Avaya 4602 IP Phone + a2420(18), -- Avaya 2420 DCP Phone + a2010dt(19), -- Avaya 2010 DT Phone + a2020dt(20), -- Avaya 2020 DT Phone + a2030dt(21), -- Avaya 2030 DT Phone + a2050dt(22), -- Avaya 2050 DT Phone + act5(23), -- Avaya CT5 Phone + att3(24), -- Avaya TT3 Phone + att5(25), -- Avaya TT5 Phone + a5420(26), -- Avaya 5420 DCP Phone + a5410(27), -- Avaya 5410 DCP Phone + a4601ip(28), -- Avaya 4601 IP Phone + a4610ip(29), -- Avaya 4610 IP Phone + ablf(30), -- Avaya BLF Phone + a2402(31), -- Avaya 2402 DCP Phone + a2410(32), -- Avaya 2410 DCP Phone + a5610ip(33), -- Avaya 5610 IP Phone + a5620ip(34), -- Avaya 5620 IP Phone + softIPPhone(35), -- Avaya IP Soft Phone + a5601ip(36), -- Avaya 5601 IP Phone + a5602ip(37), -- Avaya 5602 IP Phone + a4621ip(38), -- Avaya 4621 IP Phone + a5621ip(39), -- Avaya 5621 IP Phone + a4625ip(40), -- Avaya 4625 IP Phone + a5402(41), -- Avaya 5402 DCP Phone + h323Phone(42), -- Generic H.323 Phone + sipPhone(43), -- Generic SIP Phone + t3Compact(44), -- Avaya T3 Compact Phone + t3Classic(45), -- Avaya T3 Classic Phone + t3Comfort(46), -- Avaya T3 Comfort Phone + t3Phone(47), -- Avaya T3 Generic Phone + t3compactIP(48), -- Avaya T3 Compact IP Phone + t3classicIP(49), -- Avaya T3 Classic IP Phone + t3comfortIP(50), -- Avaya T3 Comfort IP Phone + avayaSip(51), -- Avaya Generic SIP Phone + admmPhone(52), -- Avaya Generic ADMM (IP DECT) Phone + a9620ip(53), -- Avaya 9620 IP Phone + a9630ip(54), -- Avaya 9630 IP Phone + telecommuter(55), -- Telecommuting homeworker + mobiletwin(56), -- Mobile one-X phone + a9640ip(57), -- Avaya 9640 IP Phone + a9650ip(58), -- Avaya 9650 IP Phone + a9610ip(59), -- Avaya 9610 IP Phone + a1603ip(60), -- Avaya 1603 IP Phone + a1608ip(61), -- Avaya 1608 IP Phone + a1616ip(62), -- Avaya 1616 IP Phone + a1703ip(63), -- Avaya 1703 IP Phone + a1708ip(64), -- Avaya 1708 IP Phone + a1716ip(65), -- Avaya 1716 IP Phone + s60Sip(66), -- S60 SIP + sp320Sip(67), -- SP320 SIP + sp601Sip(68), -- SP601 SIP + a10ataSip(69), -- A10ATA SIP + pmataSip(70), -- Patton M-ATA SIP + ip22Sip(71), -- Innovaphone IP22 SIP + ip24Sip(72), -- Innovaphone IP24 SIP + gxp2000Sip(73), -- Grandstream GXP2000 SIP + gxp2020Sip(74), -- Grandstream GXP2000 SIP + eyebeamSip(75), -- CounterPath eyeBeam SIP + a1403(76), -- Avaya 1403 Phone + a1408(77), -- Avaya 1408 Phone + a1416(78), -- Avaya 1416 Phone + a1450(79), -- Avaya 1450 Phone + ip28Sip(80), + phoneManagerIP(81), -- Phone Manager IP + a1503(82), -- Avaya 1503 Phone + a1508(83), -- Avaya 1508 Phone + a1516(84), -- Avaya 1516 Phone + a1550(85), -- Avaya 1550 Phone + a1603Lip(86), -- Avaya 1603L IP Phone + a1608Lip(87), -- Avaya 1608L IP Phone + a1616Lip(88), -- Avaya 1616L IP Phone + softPhoneSip(89), -- SIP SoftPhone + etr34d(90), -- ETR-34D + etr18d(91), -- ETR-18D + etr6d(92), -- ETR-6D + etr34(93), -- ETR-34 + etr18(94), -- ETR-18 + etr6(95), -- ETR-6 + etrpots(96), -- ETR Pots + doorphone1(97), -- Door phone 1 + doorphone2(98), -- Door phone 2 + bstT7316e(99), -- BST 7316E + a9620Sip(100), -- Avaya 9620L/C SIP Phone + a9630Sip(101), -- Avaya 9630G SIP Phone + a9640Sip(102), -- Avaya 9640/G SIP Phone + a9650Sip(103), -- Avaya 9650/C SIP Phone + a96xxSip(104), -- Avaya 96xx SIP Phone + a1603Sip(105), -- Avaya 1603 Blaze SIP Phone + a9404(106), -- Avaya 9404 Phone + a9408(107), -- Avaya 9408 Phone + a9504(108), -- Avaya 9504 Phone + a9508(109), -- Avaya 9508 Phone + a9608ip(110), -- Avaya 9608 IP Phone + a9611ip(111), -- Avaya 9611 IP Phone + a9621ip(112), -- Avaya 9621 IP Phone + a9641ip(113), -- Avaya 9641 IP Phone + a3720Admm(114), -- Avaya 3720 ADMM (IP DECT) Phone + a3725Admm(115), -- Avaya 3725 ADMM (IP DECT) Phone + a1010Sip(116), -- Avaya 1010 SIP Video Phone + a1040Sip(117), -- Avaya 1040 SIP Video Phone + a1120ESip(118), -- Avaya 1120E SIP Phone + a1140ESip(119), -- Avaya 1140E SIP Phone + a1220Sip(120), -- Avaya 1220 SIP Phone + a1230Sip(121), -- Avaya 1230 SIP Phone + a1692Sip(122), -- Avaya 1692 SIP Phone + pvvxSip(123), -- Polycom VVX SIP + gxv3140Sip(124), -- Grandstream GXV3140 SIP + a3740Admm(125), -- Avaya 3740 ADMM (IP DECT) Phone + a3749Admm(126), -- Avaya 3749 ADMM (IP DECT) Phone + bstT7316(127), -- Original Nortel T7316 BST Phone + bstT7208(128), -- Original Nortel T7208 BST Phone + bstM7208(129), -- Original Nortel M7208 BST Phone + bstM7310(130), -- Original Nortel M7310 BST Phone + bstM7310blf(131), -- Original Nortel M7310 BST Phone with BLF Module + bstM7324(132), -- Original Nortel M7324 BST Phone with BLF Module + bstM7100(133), -- Original Nortel M7100 BST Phone with BLF Module + bstT7100(134), -- Original Nortel T7100 BST Phone with BLF Module + bstT7000(135), -- Original Nortel T7000 BST Phone with BLF Module + bstDectA(136), -- Original Nortel Dect handset model a + bstDectB(137), -- Original Nortel Dect handset model b + bstDectC(138), -- Original Nortel Dect handset model c + bstDoorphone(139), -- Original Nortel Doorphone + bstT7406(140), -- Original Nortel T7406 cordless phone + bstT7406E(141), -- Original Nortel T7406E cordless phone + bstM7310N(142), -- Original Nortel M7310N stimulus phone + bstAcu(143), -- Original Nortel Audio Conferencing Unit + bstM7100N(144), -- Original Nortel M7100N stimulus phone + bstM7324N (145), -- Original Nortel M7324N stimulus phone + bstM7208N(146), -- Original Nortel M7208N stimulus phone + aB179Sip(147), -- Avaya B179 Sip Phone (Konftel 300IP) + bstAta(148), -- Bst ATA + aA175Sip(149), -- Avaya A175 Sip Phone + aOneXSip(150), -- Avaya oneX Sip Phone + aFlareSip(151), -- Avaya Flare Sip Phone + aD100(152), -- Avaya D100 Sip Phone + aRadvisionXT1000(153), -- Avaya RadvisionXT1000 Sip Phone + aRadvisionXT1200(154), -- Avaya RadvisionXT1200 Sip Phone + aRadvisionXT4000(155), -- Avaya RadvisionXT4000 Sip Phone + aRadvisionXT4200(156), -- Avaya RadvisionXT4200 Sip Phone + aRadvisionXT5000(157), -- Avaya RadvisionXT5000 Sip Phone + aRadvisionXTPiccolo(158),-- Avaya RadvisionXTPiccolo Sip Phone + aRadvisionScopiaMCU(159),-- Avaya RadvisionScopiaMCU Sip Phone + aRadvisionScopiaVC240(160),-- Avaya RadvisionScopiaVC240 Sip Phone + aOneXSipMobile(161), -- Avaya OneX Sip Mobile Phone + aACCSServer(162), -- Avaya Contact Center ACCS + aCIEServer(163), -- Avaya Contact Center CIE + aE129SIP(164), -- Avaya E129 SIP phone (Grandstream OEM) + aE159SIP(165), -- Avaya E159 SIP phone (Invoxia OEM) + aE169SIP(166), -- Avaya E169 SIP phone (Invoxia OEM) + aOneXMsiSIP(167), -- Avaya Microsoft Lync SIP plugin + aRadvisionXT240(168), -- Avaya Radvision XT240 Scopia SIP phone + aWebRTCSIP(169), -- Avaya WebRTC Client + softPhoneSipMac(170) -- SIP Mac SoftPhone + } + +--******************************************************************** +-- IPOPhone Objects +--******************************************************************** + +-- MIB contains a single group + +ipoPhones OBJECT IDENTIFIER ::= { ipoPhonesMibObjects 1 } + +ipoPhonesNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number of phone interfaces (regardless of their current + state) present on this system." + ::= { ipoPhones 1 } + +-- the Phones table + +-- The Phones table contains information on the phones connected to a +-- IP Office stack entity. + +ipoPhonesTable OBJECT-TYPE + SYNTAX SEQUENCE OF IpoPhonesEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "A list of phone entries. The number of entries is given by + the value of ipoPhonesNumber." + ::= { ipoPhones 2 } + +ipoPhonesEntry OBJECT-TYPE + SYNTAX IpoPhonesEntry + MAX-ACCESS not-accessible + STATUS current + DESCRIPTION + "An entry containing management information applicable to a + particular IP Office phone." + INDEX { ipoPhonesIndex } + ::= { ipoPhonesTable 1 } + +IpoPhonesEntry ::= + SEQUENCE { + ipoPhonesIndex IndexInteger, + ipoPhonesExtID Integer32, + ipoPhonesExtNumber Integer32, + ipoPhonesUserShort DisplayString, + ipoPhonesUserLong DisplayString, + ipoPhonesType PhoneType, + ipoPhonesPort Unsigned32, + ipoPhonesPortNumber Unsigned32, + ipoPhonesModuleNumber Unsigned32, + ipoPhonesIPAddress IpAddress, + ipoPhonesPhysAddress PhysAddress + } + +ipoPhonesIndex OBJECT-TYPE + SYNTAX IndexInteger + MAX-ACCESS read-only -- for SMIv1 compatability rather than not-accessible + STATUS current + DESCRIPTION + "A unique value, greater than zero, for each phone. It is + recommended that values are assigned contiguously starting + from 1. The value for each phone sub-layer must remain + constant at least from one re-initialization of the entity's + network management system to the next re- initialization." + ::= { ipoPhonesEntry 1 } + +ipoPhonesExtID OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The numerical logical extension entity identifier assigned to + the phone on the IP Office entity." + ::= { ipoPhonesEntry 2 } + +ipoPhonesExtNumber OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number that should be dialed to reach this phone on the + IP Office entity." + ::= { ipoPhonesEntry 3 } + +ipoPhonesUserShort OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..15)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The short form of the name of the user of this phone which is + used in caller display. This is quite often the forename of + the user." + ::= { ipoPhonesEntry 4 } + +ipoPhonesUserLong OBJECT-TYPE + SYNTAX DisplayString (SIZE (0..31)) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The long form of the name of the user of this phone. This is + normally the full name (forename and surname) of the user." + ::= { ipoPhonesEntry 5 } + +ipoPhonesType OBJECT-TYPE + SYNTAX PhoneType + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The type of phone that is connected to this IP Office logical + phone extension." + ::= { ipoPhonesEntry 6 } + +ipoPhonesPort OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "A reference, by entPhysicalIndex value, to the + EntPhysicalEntry representing the physical port entity that + this phone entry is associated with in an entity MIB + instantiation within the IP Office agent. If no MIB + definitions specific to the particular media are available, or + the entry is for a IP phone which may not be connected to a + physical port on the IP Office, the value should be set to the + value 0." + ::= { ipoPhonesEntry 7 } + +ipoPhonesPortNumber OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The port number on the module that the operator uses to + identify the port. + + The port numbers on the expansion modules will follow standard + numbering, beginning at 1 and incrementing until the last port. + The phone ports on the base units, however, are numbered + according to how they are collected into 'banks' on the unit. + + IP Office IP500 + The entire front of the product consists of 4 plug-in modules. + Each module has its own numbering from 1..12. + So from the left: 101..112, 201..212, etc. + + IP Office IP412 + There is no way to plug phones into the unit, so only + expansion modules should be present. + + IP Office IP406v2 + The leftmost bank of ports are Digital (DS/DT) and labeled + as 1-8 on the product, and so are labelled ports 101..108 + in the mib. + + The next bank of ports are Analogue and labeled as 1-2 + on the product and so are labelled ports 201..202 in the mib. + + The next bank of phones are LAN and labeled as 1-8 on the + product. Not phones, so not in this mib. + + IP Office Small Office Edition + The leftmost bank of 4 ports are Trunk ports, and so are not + available in this mib. + + The next bank of 8 ports are Digital (DS/DT), and so are + labelled ports 101..108 in the mib. + + The next bank of 4 ports are Analogue, and so are labelled + ports 201..204 in the mib. + + The next bank of ports are LAN, and so are not available in + this mib." + ::= { ipoPhonesEntry 8 } + +ipoPhonesModuleNumber OBJECT-TYPE + SYNTAX Unsigned32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The number that the operator uses to + identify the module. + + The module numbers are assigned according to the expansion + port number that it's plugged into on the Control unit. + + Example: Module number '2' = Expansion unit plugged into + expansion port 2 on the Control unit. + + Module number '0' is reserved for the Control unit itself." + ::= { ipoPhonesEntry 9 } + +ipoPhonesIPAddress OBJECT-TYPE + SYNTAX IpAddress + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The IP Address of the phone. In network-byte order. In the usual + IP Address format - xxx.xxx.xxx.xxx. + + The IP address will only be present if the phone is an IP phone. If + it is not, it will contain zeros (0.0.0.0)." + + ::= { ipoPhonesEntry 10 } + +ipoPhonesPhysAddress OBJECT-TYPE + SYNTAX PhysAddress + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The Physical Address of the phone, such as the MAC Address. + + The physical address will only be present if the phone is an IP + phone. If it is not, it will contain zeros (00.00.00.00.00.00)." + + ::= { ipoPhonesEntry 11 } + +--******************************************************************** +-- IPOPhone Notifications +--******************************************************************** + +-- +-- Notifications +-- + +ipoPhonesChangeEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventSeverity, + ipoGTEventDateTime, + ipoPhonesExtID, + ipoPhonesType, + ipoPhonesPort + } + STATUS deprecated + DESCRIPTION + "This notification is generated whenever the type of phone + connected to a logical extension entity is detected as having + changed after completion of normal start up of the Agent + entity. + + Its purpose is to allow a management application to identify + the removal or switching of phone types on the IP Office + entity. + + **NOTE: This notification is deprecated and replaced by + ipoPhonesChangeSvcEvent." + ::= { ipoPhonesMibNotifications 1 } + +ipoPhonesChangeSvcEvent NOTIFICATION-TYPE + OBJECTS { + ipoGTEventStdSeverity, + ipoGTEventDateTime, + ipoGTEventDevID, + sysDescr, + ipoPhonesExtID, + ipoPhonesType, + ipoPhonesPort, + ipoGTEventEntityName + } + STATUS current + DESCRIPTION + "This notification is generated whenever the type of phone + connected to a logical extension entity is detected as having + changed after completion of normal start up of the Agent + entity. + + Its purpose is to allow a management application to identify + the removal or switching of phone types on the IP Office + entity. + + Newer implementations of this MIB should put in place this + event in favour of ipoPhonesChangeEvent." + ::= { ipoPhonesMibNotifications 2 } + +--******************************************************************** +-- IPO-PHONES compliance +--******************************************************************** + +ipoPhonesCompliances OBJECT IDENTIFIER ::= { ipoPhonesConformance 1 } +ipoPhonesGroups OBJECT IDENTIFIER ::= { ipoPhonesConformance 2 } + +-- +-- compliance statements +-- + +ipoPhonesCompliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for the IP Office Phones MIB" + MODULE -- this module + MANDATORY-GROUPS { + ipoPhonesGroup, + ipoPhonesNotificationsGroup + } + ::= { ipoPhonesCompliances 1 } + +ipoPhonesv2Compliance MODULE-COMPLIANCE + STATUS deprecated + DESCRIPTION + "The compliance statement for the IP Office Phones MIB" + MODULE -- this module + MANDATORY-GROUPS { + ipoPhonesGroup, + ipoPhonesv2NotificationsGroup + } + ::= { ipoPhonesCompliances 2 } + +ipoPhonesv3Compliance MODULE-COMPLIANCE + STATUS current + DESCRIPTION + "The compliance statement for the IP Office Phones MIB" + MODULE -- this module + MANDATORY-GROUPS { + ipoPhonesGroup, + ipoPhones2Group, + ipoPhonesv2NotificationsGroup + } + ::= { ipoPhonesCompliances 3 } + +-- +-- MIB groupings +-- + +ipoPhonesGroup OBJECT-GROUP + OBJECTS { + ipoPhonesNumber, + ipoPhonesIndex, + ipoPhonesExtID, + ipoPhonesExtNumber, + ipoPhonesUserShort, + ipoPhonesUserLong, + ipoPhonesType, + ipoPhonesPort + } + STATUS current + DESCRIPTION + "The collection of objects which are used to represent IP + Office phones, for which a single agent provides management + information." + ::= { ipoPhonesGroups 1 } + +ipoPhonesNotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoPhonesChangeEvent + } + STATUS deprecated + DESCRIPTION + "The notifications which indicate specific changes in the + state of IP Office phones." + ::= { ipoPhonesGroups 2 } + +ipoPhonesv2NotificationsGroup NOTIFICATION-GROUP + NOTIFICATIONS { + ipoPhonesChangeSvcEvent + } + STATUS current + DESCRIPTION + "The notifications which indicate specific changes in the + state of IP Office phones for newer implementations of this + MIB." + ::= { ipoPhonesGroups 3 } + +ipoPhones2Group OBJECT-GROUP + OBJECTS { + ipoPhonesPortNumber, + ipoPhonesModuleNumber, + ipoPhonesIPAddress, + ipoPhonesPhysAddress + } + STATUS current + DESCRIPTION + "Additional collection of objects which are used to represent + physical information about IP Office phones, for which a + single agent provides management information. These objects + provide more information on where phones are directly + connected to an IP Office and further details on IP Phones for + their identification." + ::= { ipoPhonesGroups 4 } + +END diff --git a/mibs/avaya/IPO-PROD-MIB.mib b/mibs/avaya/IPO-PROD-MIB.mib new file mode 100644 index 000000000..d4310f145 --- /dev/null +++ b/mibs/avaya/IPO-PROD-MIB.mib @@ -0,0 +1,1202 @@ +--======================================================== +-- +-- MIB : IPO-PROD Avaya Inc. +-- +-- Version : 1.0.26 06 Aug 2014 +-- +--======================================================== +-- +-- Copyright (c) 2003 - 2012 Avaya Inc. +-- All Rights Reserved. +-- +--======================================================== +IPO-PROD-MIB DEFINITIONS ::= BEGIN + +IMPORTS + MODULE-IDENTITY, OBJECT-IDENTITY + FROM SNMPv2-SMI + products + FROM AVAYAGEN-MIB; + +ipoProdMIB MODULE-IDENTITY + LAST-UPDATED "201408060000Z" -- 06 Aug 2014 + ORGANIZATION "Avaya Inc." + CONTACT-INFO + "Avaya Customer Services + Postal: Avaya, Inc. + 211 Mt Airy Rd. + Basking Ridge, NJ 07920 + USA + Tel: +1 908 953 6000 + + WWW: http://www.avaya.com" + + DESCRIPTION + "Avaya IP Office Products OID tree. + + This MIB module defines the product/sysObjectID values for + use with Avaya IP Office family of telephone switches." + + REVISION "201408060000Z" -- 06 Aug 2014 + DESCRIPTION + "Rev 1.00.26 + J Modules are now part of IP500v2." + + REVISION "201405300000Z" -- 30 May 2014 + DESCRIPTION + "Rev 1.00.25 + Additional IOD for IP500v2 Select and + IP Office Server Edition Expansion Select Mode." + REVISION "201402270000Z" -- 27 Feb 2014 + DESCRIPTION + "Rev 1.00.24 + Additional IOD for IP 500 UCM V2 module" + REVISION "201312100000Z" -- 10 Dec 2013 + DESCRIPTION + "Rev 1.00.23 + Update description for Unified Communications Module" + REVISION "201207230000Z" -- 23 July 2012 + DESCRIPTION + "Rev 1.00.22 + Additional IOD for IP 500 ATM4U V2 module." + REVISION "201203260000Z" -- 26 March 2012 + DESCRIPTION + "Rev 1.00.21 + Additional IOD for IP 500 VCM module." + REVISION "201111141128Z" -- 14 November 2011 + DESCRIPTION + "Rev 1.00.20 + Additional OID for IP Office Server Edition Expansion Mode." + REVISION "201108111658Z" -- 11 August 2011 + DESCRIPTION + "Rev 1.00.19 + Added new C110 UCP Module." + REVISION "201102101457Z" -- 10 February 2011 + DESCRIPTION + "Rev 1.00.18 + Added new OID for TCM 8 card." + REVISION "201102011457Z" -- 01 February 2011 + DESCRIPTION + "Rev 1.00.17 + Added new OID for DS30A Expansion module." + REVISION "201101111630Z" -- 11 January 2011 + DESCRIPTION + "Rev 1.00.16 + Avaya Inside OIDs removed. + Additional OIDs added for Norstar, Branch and Quick IP Office + modes." + REVISION "201006091515Z" -- 09 June 2010 + DESCRIPTION + "Rev 1.00.15 + Added new OID for Combo Card VCM sub module." + REVISION "201004281626Z" -- 28 April 2010 + DESCRIPTION + "Rev 1.00.14 + Added new OID for Avaya Inside." + REVISION "200908261713Z" -- 26 August 2009 + DESCRIPTION + "Rev 1.00.13 + Added new OIDs for IP500v2, combo card and ETR card." + REVISION "200908051048Z" -- 05 August 2009 + DESCRIPTION + "Rev 1.00.12 + Added a new OID for IP500 4 Port Expansion Module." + REVISION "200608161100Z" -- 16 August 2006 + DESCRIPTION + "Rev 1.00.11 + Corrected PRI module defined for IP500 and revised description + for Ethernet wAN link ports to make common across units." + REVISION "200608021752Z" -- 02 August 2006 + DESCRIPTION + "Rev 1.00.10 + Added a new OID for Universal PRI module and revised + descriptions for LAN ports used on IP412." + REVISION "200607132220Z" -- 13 July 2006 + DESCRIPTION + "Rev 1.00.09 + Added further OIDs for missing modules. + Replaced references to IP408 with IP500" + REVISION "200606101416Z" -- 10 June 2006 + DESCRIPTION + "Rev 1.00.08 + Added new OIDs for IP500 chassis and plug-in cards." + REVISION "200606071014Z" -- 07 June 2006 + DESCRIPTION + "Rev 1.00.07 + Added new OID for generic IP Office License dongle." + REVISION "200605241620Z" -- 24 May 2006 + DESCRIPTION + "Rev 1.00.06 + Added new OID for revised variant of ATM4U + trunk module." + REVISION "200605241615Z" -- 24 May 2006 + DESCRIPTION + "Rev 1.00.05 + Corrected descriptions of E1 R2 modules/ports." + REVISION "200604040000Z" -- 04 April 2006 + DESCRIPTION + "Rev 1.00.04 + Added new OIDs for revised (v2) variants of DS and POTS + expansion modules." + REVISION "200408060000Z" -- 06 August 2004 + DESCRIPTION + "Rev 1.00.03 + Added SOG family products." + REVISION "200403030000Z" -- 03 March 2004 + DESCRIPTION + "Rev 1.00.02 + Revised for external publication." + REVISION "200401060000Z" -- 06 January 2004 + DESCRIPTION + "Rev 1.0.1 + New OIDs added for revised 403 and 406 variants." + REVISION "200310100000Z" -- 10 October 2003 + DESCRIPTION + "Rev 1.0.0 + The first published version of this MIB module." + ::= { products 2 } + +-- Product Groups + +ipoProdControllers OBJECT IDENTIFIER ::= { ipoProdMIB 1 } +ipoProdExpModules OBJECT IDENTIFIER ::= { ipoProdMIB 2 } +ipoProdSlots OBJECT IDENTIFIER ::= { ipoProdMIB 3 } +ipoProdSlotModules OBJECT IDENTIFIER ::= { ipoProdMIB 4 } +ipoProdPorts OBJECT IDENTIFIER ::= { ipoProdMIB 5 } +ipoProdDongleModules OBJECT IDENTIFIER ::= { ipoProdMIB 6 } +ipoProdSubModules OBJECT IDENTIFIER ::= { ipoProdMIB 7 } +ipoProdUCModules OBJECT IDENTIFIER ::= { ipoProdMIB 8 } + +-- Controller Product families + +ipoProd401Family OBJECT IDENTIFIER ::= { ipoProdControllers 1 } +ipoProd403Family OBJECT IDENTIFIER ::= { ipoProdControllers 2 } +ipoProd406Family OBJECT IDENTIFIER ::= { ipoProdControllers 3 } +ipoProd412Family OBJECT IDENTIFIER ::= { ipoProdControllers 4 } +ipoProdSmallOfficeEditionFamily OBJECT IDENTIFIER ::= { ipoProdControllers 5 } +ipoProdR403Family OBJECT IDENTIFIER ::= { ipoProdControllers 6 } +ipoProdR406Family OBJECT IDENTIFIER ::= { ipoProdControllers 7 } +ipoProdSogFamily OBJECT IDENTIFIER ::= { ipoProdControllers 8 } +ipoProd500Family OBJECT IDENTIFIER ::= { ipoProdControllers 9 } +ipoProd500v2Family OBJECT IDENTIFIER ::= { ipoProdControllers 10 } + +-- IP Office 401 Family units + +ipoProd401DT2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 + Compact Office DT 2 Telephone Switch" + ::= { ipoProd401Family 1 } + +ipoProd401DT4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 + Compact Office DT 4 Telephone Switch" + ::= { ipoProd401Family 2 } + +ipoProd401DS2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 + Compact Office DS 2 Telephone Switch" + ::= { ipoProd401Family 3 } + +ipoProd401DS4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 + Compact Office DS 4 Telephone Switch" + ::= { ipoProd401Family 4 } + +-- IP Office 403 Family units + +ipoProd403DT OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP403 DT + Office Platform Telephone Switch Controller Unit" + ::= { ipoProd403Family 1 } + +ipoProd403DS OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP403 DS + Office Platform Telephone Switch Controller Unit" + ::= { ipoProd403Family 2 } + +-- IP Office 406 Family units + +ipoProd406 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP406 + Office Platform Telephone Switch Controller Unit" + ::= { ipoProd406Family 1 } + +-- IP Office 412 Family units + +ipoProd412 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP412 + Office Platform Telephone Switch Controller Unit" + ::= { ipoProd412Family 1 } + +-- IP Office - Small Office Edition Family units + +ipoProdSmallOfficeEditionPOTS4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch POTS 4" + ::= { ipoProdSmallOfficeEditionFamily 1 } + +ipoProdSmallOfficeEditionPOTS8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch POTS 8" + ::= { ipoProdSmallOfficeEditionFamily 2 } + +ipoProdSmallOfficeEditionDT8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch DT 8" + ::= { ipoProdSmallOfficeEditionFamily 3 } + +ipoProdSmallOfficeEditionDS8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch DS 8" + ::= { ipoProdSmallOfficeEditionFamily 4 } + +-- IP Office Revised 403 Family units + +ipoProdR403DT OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP403 DT + Office Platform Telephone Switch Controller Unit" + ::= { ipoProdR403Family 1 } + +ipoProdR403DS OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP403 DS + Office Platform Telephone Switch Controller Unit" + ::= { ipoProdR403Family 2 } + +-- IP Office Revised 406 Family units + +ipoProdR406 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP406 + Office Platform Telephone Switch Controller Unit (2 POTs, no DS)" + ::= { ipoProdR406Family 1 } + +ipoProdR406DT OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP406 + Office Platform Telephone Switch Controller Unit (2 POTs, 8 DT)" + ::= { ipoProdR406Family 2 } + +ipoProdR406DS OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP406 + Office Platform Telephone Switch Controller Unit (2 POTs, 8 DS)" + ::= { ipoProdR406Family 3 } + +ipoProdR406Full OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised IP406 + Office Platform Telephone Switch Controller Unit (Full version)" + ::= { ipoProdR406Family 4 } + +-- IP Office - SOG Family units + +ipoProdSogSOEPOTS4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch POTS 4" + ::= { ipoProdSogFamily 1 } + +ipoProdSogSOEPOTS8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch POTS 8" + ::= { ipoProdSogFamily 2 } + +ipoProdSogSOEDT8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch DT 8" + ::= { ipoProdSogFamily 3 } + +ipoProdSogSOEDS8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - + Small Office Edition Telephone Switch DS 8" + ::= { ipoProdSogFamily 4 } + +-- IP Office 500 Family units + +ipoProd500Slot4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Office Platform Telephone Switch 4 Slot Controller Unit" + ::= { ipoProd500Family 1 } + +ipoProd500Slot8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Office Platform Telephone Switch 8 Slot Controller Unit" + ::= { ipoProd500Family 2 } + +-- IP Office 500v2 Family units + +ipoProd500v2IPOffice OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in IP Office Mode" + ::= { ipoProd500v2Family 1 } + +ipoProd500v2Partner OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Partner Mode" + ::= { ipoProd500v2Family 2 } + +ipoProd500v2Norstar OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Norstar Mode" + ::= { ipoProd500v2Family 3 } + +ipoProd500v2Branch OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Branch Gateway Mode" + ::= { ipoProd500v2Family 4 } + +ipoProd500v2Quick OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Quick Mode" + ::= { ipoProd500v2Family 5 } + +ipoProd500v2SEditionExpansion OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Server Edition Expansion Mode" + ::= { ipoProd500v2Family 6 } + +ipoProd500v2IPOfficeSelect OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in IP Office Select Mode" + ::= { ipoProd500v2Family 7 } + +ipoProd500v2SEditionExpansionSelect OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500v2 + Office Platform Telephone Switch in Server Edition Expansion Select Mode" + ::= { ipoProd500v2Family 8 } + +-- Expansion Modules + +ipoProdExpModDT OBJECT IDENTIFIER ::= { ipoProdExpModules 1 } +ipoProdExpModDS OBJECT IDENTIFIER ::= { ipoProdExpModules 2 } +ipoProdExpModPhone OBJECT IDENTIFIER ::= { ipoProdExpModules 3 } +ipoProdExpModS0 OBJECT IDENTIFIER ::= { ipoProdExpModules 4 } +ipoProdExpModAnalog OBJECT IDENTIFIER ::= { ipoProdExpModules 5 } +ipoProdExpModWAN OBJECT IDENTIFIER ::= { ipoProdExpModules 6 } +ipoProdExpModRDS OBJECT IDENTIFIER ::= { ipoProdExpModules 7 } +ipoProdExpModRPhone OBJECT IDENTIFIER ::= { ipoProdExpModules 8 } +ipoProdExpModDSA OBJECT IDENTIFIER ::= { ipoProdExpModules 9 } + +ipoProdExpModDT16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Digital + Terminal 16" + ::= { ipoProdExpModDT 1 } + +ipoProdExpModDT30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Digital + Terminal 30" + ::= { ipoProdExpModDT 2 } + +ipoProdExpModDS16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Digital + Station 16" + ::= { ipoProdExpModDS 1 } + +ipoProdExpModDS30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Digital + Station 30" + ::= { ipoProdExpModDS 2 } + +ipoProdExpModPhone8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Phone 8" + ::= { ipoProdExpModPhone 1 } + +ipoProdExpModPhone16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Phone 16" + ::= { ipoProdExpModPhone 2 } + +ipoProdExpModPhone30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Phone 30" + ::= { ipoProdExpModPhone 3 } + +ipoProdExpModS08 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office S0 8" + ::= { ipoProdExpModS0 1 } + +ipoProdExpModS016 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office S0 16" + ::= { ipoProdExpModS0 2 } + +ipoProdExpModATM8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Analog Trunk 16" + ::= { ipoProdExpModAnalog 1 } + +ipoProdExpModATM16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Analog Trunk 16" + ::= { ipoProdExpModAnalog 2 } + +ipoProdExpModWAN3 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office WAN 3" + ::= { ipoProdExpModWAN 1 } + +ipoProdExpModRDS16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (V2) Digital Station 16" + ::= { ipoProdExpModRDS 1 } + +ipoProdExpModRDS30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (V2) Digital Station 30" + ::= { ipoProdExpModRDS 2 } + +ipoProdExpModRPhone8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (V2) Phone 8" + ::= { ipoProdExpModRPhone 1 } + +ipoProdExpModRPhone16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (V2) Phone 16" + ::= { ipoProdExpModRPhone 2 } + +ipoProdExpModRPhone30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (V2) Phone 30" + ::= { ipoProdExpModRPhone 3 } + +ipoProdExpModDSA16RJ21 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (Adaptive) Digital Station 16 RJ21" + ::= { ipoProdExpModDSA 1 } + +ipoProdExpModDSA30RJ21 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (Adaptive) Digital Station 30 RJ21" + ::= { ipoProdExpModDSA 2 } + +ipoProdExpModDSA16RJ45 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (Adaptive) Digital Station 16 RJ45" + ::= { ipoProdExpModDSA 3 } + +ipoProdExpModDSA30RJ45 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Revised + (Adaptive) Digital Station 30 RJ45" + ::= { ipoProdExpModDSA 4 } + +-- Slots + +ipoProdSlotVCM OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office VCM Slot" + ::= { ipoProdSlots 1 } + +ipoProdSlotModems OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Modem Slot" + ::= { ipoProdSlots 2 } + +ipoProdSlotVmailMemory OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 + Voicemail Memory Slot" + ::= { ipoProdSlots 3 } + +ipoProdSlotWAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP401 WAN + Slot" + ::= { ipoProdSlots 4 } + +ipoProdSlotPCCard OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office PC-Card + Slot" + ::= { ipoProdSlots 5 } + +ipoProdSlotTrunks OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Trunk + Slot" + ::= { ipoProdSlots 6 } + +ipoProdSlotExpansion OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Expansion + Slot" + ::= { ipoProdSlots 7 } + +ipoProdSlot500Generic OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Generic Expansion Slot" + ::= { ipoProdSlots 8 } + +ipoProdSlotMezzanine OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Mezzanine Slot" + ::= { ipoProdSlots 9 } + +ipoProdSlotCarrierVCM OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Carrier Module VCM Slot" + ::= { ipoProdSlots 10 } + +ipoProdSlotCarrierTrunk OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office IP500 + Carrier Module Trunk Slot" + ::= { ipoProdSlots 11 } + + +-- Slot Module Groups + +ipoProdIntegralModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 1 } +ipoProdTrunkModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 2 } +ipoProdPCCardModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 3 } +ipoProdCarrierModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 4 } +ipoProdPhonePortModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 5 } +ipoProdVCMModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 6 } +ipoProdExpansionModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 7 } +ipoProdUCPModules OBJECT IDENTIFIER ::= { ipoProdSlotModules 8 } + +-- Integral Modules + +ipoProdIntModVCM OBJECT IDENTIFIER ::= { ipoProdIntegralModules 1 } +ipoProdIntModModem OBJECT IDENTIFIER ::= { ipoProdIntegralModules 2 } +ipoProdIntModWAN OBJECT IDENTIFIER ::= { ipoProdIntegralModules 3 } +ipoProdIntModMem OBJECT IDENTIFIER ::= { ipoProdIntegralModules 4 } + +ipoProdIntModVCM3 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 3 Module" + ::= { ipoProdIntModVCM 1 } + +ipoProdIntModVCM5 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 5 Module" + ::= { ipoProdIntModVCM 2 } + +ipoProdIntModVCM6 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 6 Module" + ::= { ipoProdIntModVCM 3 } + +ipoProdIntModVCM8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 8 + Module." + ::= { ipoProdIntModVCM 4 } + +ipoProdIntModVCM10 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 10 Module" + ::= { ipoProdIntModVCM 5 } + +ipoProdIntModVCM12 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 12 Module" + ::= { ipoProdIntModVCM 6 } + +ipoProdIntModVCM16 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 16 + Module." + ::= { ipoProdIntModVCM 7 } + +ipoProdIntModVCM20 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 20 Module" + ::= { ipoProdIntModVCM 8 } + +ipoProdIntModVCM30 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 30 + Module." + ::= { ipoProdIntModVCM 9 } + +ipoProdIntModVCM24 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 24 + Module." + ::= { ipoProdIntModVCM 10 } + +ipoProdIntModVCM4 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office VCM 4 + Module." + ::= { ipoProdIntModVCM 11 } + +ipoProdIntModModemDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Dual Modem Module" + ::= { ipoProdIntModModem 1 } + +ipoProdIntModModemMulti OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Multi Modem Module" + ::= { ipoProdIntModModem 2 } + +ipoProdIntModWANModule OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office WAN Module" + ::= { ipoProdIntModWAN 1 } + +ipoProdIntModMemVmail OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Voicemail + Memory Module" + ::= { ipoProdIntModMem 1 } + + +-- Trunk Modules + +ipoProdTrunkAnalogQuad OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Quad Analog + Trunk Module" + ::= { ipoProdTrunkModules 1 } + +ipoProdTrunkBRIQuad OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Quad BRI + Trunk Module" + ::= { ipoProdTrunkModules 2 } + +ipoProdTrunkE1PRISingle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Single PRI 30 + E1 Trunk Module" + ::= { ipoProdTrunkModules 3 } + +ipoProdTrunkE1PRIDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Dual PRI 60 + E1 Trunk Module" + ::= { ipoProdTrunkModules 4 } + +ipoProdTrunkJ1PRISingle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Single PRI 24J Trunk Module" + ::= { ipoProdTrunkModules 5 } + +ipoProdTrunkJ1PRIDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Dual PRI 48J Trunk Module" + ::= { ipoProdTrunkModules 6 } + +ipoProdTrunkT1PRISingle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Single PRI 24 + T1 Trunk Module" + ::= { ipoProdTrunkModules 7 } + +ipoProdTrunkT1PRIDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Dual PRI 48 + T1 Trunk Module" + ::= { ipoProdTrunkModules 8 } + +ipoProdTrunkIndex OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Index Module" + ::= { ipoProdTrunkModules 9 } + +ipoProdTrunkR2Single OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Single E1 R2 30 + Trunk Module" + ::= { ipoProdTrunkModules 10 } + +ipoProdTrunkR2Dual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Dual E1 R2 60 + Trunk Module" + ::= { ipoProdTrunkModules 11 } + +ipoProdTrunkR2CoAxSingle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Single E1 R2 + CO-AX 30 Trunk Module" + ::= { ipoProdTrunkModules 12 } + +ipoProdTrunkR2CoAxDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Single E1 R2 + CO-AX 30 Trunk Module" + ::= { ipoProdTrunkModules 13 } + +ipoProdTrunkRAnalogQuad OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Revised Quad + Analog Trunk Module" + ::= { ipoProdTrunkModules 14 } + +ipoProdTrunk500AnalogQuad OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Quad Analog Trunk Module" + ::= { ipoProdTrunkModules 15 } + +ipoProdTrunk500BRIDual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Dual BRI Trunk Module" + ::= { ipoProdTrunkModules 16 } + +ipoProdTrunk500BRIQuad OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Quad BRI Trunk Module" + ::= { ipoProdTrunkModules 17 } + +ipoProdTrunkUniversalPRIDS0Single OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Single Universal PRI (DS0) Trunk Module + 24 Channels in T1 configuration + 30 Channels in E1 configuration" + ::= { ipoProdTrunkModules 18 } + +ipoProdTrunkUniversalPRIDS0Dual OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Single Universal PRI (DS0) Trunk Module + 48 Channels across two ports in T1 configuration + 60 Channels across two ports in E1 configuration" + ::= { ipoProdTrunkModules 19 } + +ipoProdTrunk500AnalogQuadV2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Quad Analog Trunk Module V2" + ::= { ipoProdTrunkModules 20 } + + +-- PC-Card Modules + +ipoProdPCCardMemVmail OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office PC-Card + Voicemail Memory Module" + ::= { ipoProdPCCardModules 1 } + +ipoProdPCCardWLAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office PC-Card + WLAN Module" + ::= { ipoProdPCCardModules 2 } + +-- Carrier Modules + +ipoProdCarrier OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Carrier Module for older IP Office plug-in modules" + ::= { ipoProdCarrierModules 1 } + +-- Phone Port Modules + +ipoProdPhonePortPOT8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + POT 8 Phone Port Module" + ::= { ipoProdPhonePortModules 1 } + +ipoProdPhonePortDS8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + Digital Station 8 Phone Port Module" + ::= { ipoProdPhonePortModules 2 } + +ipoProdPhonePortPOT2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500 + POT 2 Phone Port Module" + ::= { ipoProdPhonePortModules 3 } + +ipoProdPhonePortCombo OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500v2 Combo + Phone Port and trunk Module which provides a 10 channel VCM, 6 + Digital Station Phone Ports, 2 POT Phone Ports and either a 4 + port ATM trunk module or a 4 port BRI module." + ::= { ipoProdPhonePortModules 4 } + +ipoProdPhonePortETR6 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500v2 + ETR 6 Phone Port Module" + ::= { ipoProdPhonePortModules 5 } + +ipoProdPhonePortTCM8 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office IP500v2 + TCM 8 Phone Port Module" + ::= { ipoProdPhonePortModules 6 } + +-- VCM Modules + +ipoProdVCMMod32 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DSP based + VCM 32 Module." + ::= { ipoProdVCMModules 1 } + +ipoProdVCMMod64 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DSP based + VCM 64 Module." + ::= { ipoProdVCMModules 2 } + +ipoProdVCMMod32V2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DSP based + VCM 32 V2 Module." + ::= { ipoProdVCMModules 3 } + +ipoProdVCMMod64V2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DSP based + VCM 64 V2 Module." + ::= { ipoProdVCMModules 4 } + +-- Expansion Modules + +ipoProdExpMod4Port OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office 4 Port + Expansion Module." + ::= { ipoProdExpansionModules 1 } + +-- Ports + +ipoProdPortBRI OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office BRI Ports" + ::= { ipoProdPorts 1 } + +ipoProdPortE1PRI OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office E1 PRI Ports" + ::= { ipoProdPorts 2 } + +ipoProdPortJ1PRI OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office J1 PRI Ports" + ::= { ipoProdPorts 3 } + +ipoProdPortT1PRI OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office T1 PRI Ports" + ::= { ipoProdPorts 4 } + +ipoProdPortR2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office E1 R2 Ports" + ::= { ipoProdPorts 5 } + +ipoProdPortR2CoAx OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office E1 R2 CO-AX + Ports" + ::= { ipoProdPorts 6 } + +ipoProdPortWAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office WAN Ports" + ::= { ipoProdPorts 7 } + +ipoProdPortAnalog OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Analog Ports" + ::= { ipoProdPorts 8 } + +ipoProdPortPower OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office Power Port" + ::= { ipoProdPorts 9 } + +ipoProdPortDT OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DT Phone Ports" + ::= { ipoProdPorts 10 } + +ipoProdPortDS OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office DS Phone Ports" + ::= { ipoProdPorts 11 } + +ipoProdPortPOT OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office POT Ports" + ::= { ipoProdPorts 12 } + +ipoProdPortS0 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office ISDN BRI S-Bus Ports" + ::= { ipoProdPorts 13 } + +ipoProdPortLAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office LAN + (10BASE-T/100BASE-TX) Ports" + ::= { ipoProdPorts 14 } + +ipoProdPortWLAN OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office LAN + WLAN (802.11) Ports" + ::= { ipoProdPorts 15 } + +ipoProdPortDTE OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office DTE Port" + ::= { ipoProdPorts 16 } + +ipoProdPortUSB OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office USB Port" + ::= { ipoProdPorts 17 } + +ipoProdPortAudio OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Audio I/P Port" + ::= { ipoProdPorts 18 } + +ipoProdPortEtherWANLink OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office Fast + Ethernet (10BASE-T/100BASE-TX) WAN Link Port" + ::= { ipoProdPorts 19 } + +ipoProdPortExtOP OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office - Small + Office Edition Telephone Switch Ethernet Ext O/P Port" + ::= { ipoProdPorts 20 } + +ipoProdPortNet1 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office + Fast Ethernet (10BASE-T/100BASE-TX) Network 1 Port" + ::= { ipoProdPorts 21 } + +ipoProdPortNet2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office + Fast Ethernet (10BASE-T/100BASE-TX) Network 2 Port" + ::= { ipoProdPorts 22 } + +ipoProdGenericDongle OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the Avaya IP Office License + Dongle - A single representation for three dongle types, + Parallel, Serial and USB. The Parallel and USB ones not truly + connected directly to the IP Office but the managing PC." + ::= { ipoProdDongleModules 1 } + +ipoProdSubModVCM10 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for the 10 channel VCM sub module + resident on the Avaya IP Office IP500v2 Combo Phone Port and + trunk Module." + ::= { ipoProdSubModules 1 } + + + -- Unified Communications Module + +ipoProdC110UCM OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office + Unified Communications Module. model C110" + ::= { ipoProdUCModules 1 } + +ipoProdC110UCMV2 OBJECT-IDENTITY + STATUS current + DESCRIPTION + "The authoritative reference for Avaya IP Office + Unified Communications Module V2. model C110" + ::= { ipoProdUCModules 2 } + +END diff --git a/poller-service.conf b/poller-service.conf new file mode 100644 index 000000000..918ba53a2 --- /dev/null +++ b/poller-service.conf @@ -0,0 +1,26 @@ +# poller-service - SNMP polling service for LibreNMS + +description "SNMP polling service for LibreNMS" +author "Clint Armstrong " + +# When to start the service +start on runlevel [2345] + +# When to stop the service +stop on runlevel [016] + +# Automatically restart process if crashed +respawn + +# Restart an unlimited amount of times +respawn limit unlimited + +chdir /opt/librenms +setuid librenms +setgid librenms + +# Start the process +exec /opt/librenms/poller-service.py + +# Wait 60 seconds before restart +post-stop exec sleep 60 diff --git a/poller-service.init b/poller-service.init new file mode 100755 index 000000000..6e870a6db --- /dev/null +++ b/poller-service.init @@ -0,0 +1,79 @@ +### BEGIN INIT INFO +# Provides: poller-service +# Required-Start: networking +# Required-Stop: networking +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: The LibreNMS poller-service daemon +# Description: The LibreNMS poller-service daemon +# This polls devices monitored by LibreNMS +### END INIT INFO + +. /lib/lsb/init-functions + +NAME=poller-service + +DAEMON=/opt/librenms/poller-service.py + +USER=librenms + +PIDFILE=/var/run/poller-service.pid + +test -x $DAEMON || exit 5 + +case $1 in + + start) + # Checked the PID file exists and check the actual status of process + if [ -e $PIDFILE ]; then + status_of_proc -p $PIDFILE $DAEMON "$NAME process" && status="0" || status="$?" + # If the status is SUCCESS then don't need to start again. + if [ $status = "0" ]; then + exit # Exit + fi + fi + # Start the daemon. + log_daemon_msg "Starting the process" "$NAME" + # Start the daemon with the help of start-stop-daemon + # Log the message appropriately + if start-stop-daemon --start --quiet --oknodo --make-pidfile --pidfile $PIDFILE --exec $DAEMON --chuid $USER --background; then + log_end_msg 0 + else + log_end_msg 1 + fi + ;; + + stop) + # Stop the daemon. + if [ -e $PIDFILE ]; then + status_of_proc -p $PIDFILE $DAEMON "Stoppping the $NAME process" && status="0" || status="$?" + if [ "$status" = 0 ]; then + start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE + /bin/rm -rf $PIDFILE + fi + else + log_daemon_msg "$NAME process is not running" + log_end_msg 0 + fi + ;; + restart) + # Restart the daemon. + $0 stop && sleep 2 && $0 start + ;; + + status) + # Check the status of the process. + if [ -e $PIDFILE ]; then + status_of_proc -p $PIDFILE $DAEMON "$NAME process" && exit 0 || exit $? + else + log_daemon_msg "$NAME Process is not running" + log_end_msg 0 + fi + ;; + + *) + # For invalid arguments, print the usage message. + echo "Usage: $0 {start|stop|restart|reload|status}" + exit 2 + ;; +esac diff --git a/poller-service.py b/poller-service.py new file mode 100755 index 000000000..099bf7213 --- /dev/null +++ b/poller-service.py @@ -0,0 +1,306 @@ +#! /usr/bin/env python +""" + poller-service A service to wrap SNMP polling. It will poll up to $threads devices at a time, and will not re-poll + devices that have been polled within the last $poll_frequency seconds. It will prioritize devices based + on the last time polled. If resources are sufficient, this service should poll every device every + $poll_frequency seconds, but should gracefully degrade if resources are inefficient, polling devices as + frequently as possible. This service is based on Job Snijders' poller-wrapper.py. + + Author: Clint Armstrong + Date: July 2015 + + License: BSD 2-Clause + +Copyright (c) 2015, Clint Armstrong +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +""" + +import json +import os +import subprocess +import sys +import threading +import time +import MySQLdb +import logging +import logging.handlers +from datetime import datetime, timedelta + +log = logging.getLogger('poller-service') +log.setLevel(logging.DEBUG) + +formatter = logging.Formatter('poller-service: %(message)s') +handler = logging.handlers.SysLogHandler(address='/dev/log') +handler.setFormatter(formatter) +log.addHandler(handler) + +install_dir = os.path.dirname(os.path.realpath(__file__)) +config_file = install_dir + '/config.php' + +log.info('INFO: Starting poller-service') + + +def get_config_data(): + config_cmd = ['/usr/bin/env', 'php', '%s/config_to_json.php' % install_dir] + try: + proc = subprocess.Popen(config_cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE) + except: + log.critical("ERROR: Could not execute: %s" % config_cmd) + sys.exit(2) + return proc.communicate()[0].decode() + +try: + with open(config_file) as f: + pass +except IOError as e: + log.critical("ERROR: Oh dear... %s does not seem readable" % config_file) + sys.exit(2) + +try: + config = json.loads(get_config_data()) +except: + log.critical("ERROR: Could not load or parse configuration, are PATHs correct?") + sys.exit(2) + +try: + loglevel = int(config['poller_service_loglevel']) +except KeyError: + loglevel = 20 +except ValueError: + loglevel = logging.getLevelName(config['poller_service_loglevel']) + +try: + log.setLevel(loglevel) +except ValueError: + log.warning('ERROR: {0} is not a valid log level. If using python 3.4.0-3.4.1 you must specify loglevel by number'.format(str(loglevel))) + log.setLevel(20) + +poller_path = config['install_dir'] + '/poller.php' +discover_path = config['install_dir'] + '/discovery.php' +db_username = config['db_user'] +db_password = config['db_pass'] + +if config['db_host'][:5].lower() == 'unix:': + db_server = config['db_host'] + db_port = 0 +elif ':' in config['db_host']: + db_server = config['db_host'].rsplit(':')[0] + db_port = int(config['db_host'].rsplit(':')[1]) +else: + db_server = config['db_host'] + db_port = 0 + +db_dbname = config['db_name'] + + +try: + amount_of_workers = int(config['poller_service_workers']) + if amount_of_workers == 0: + amount_of_workers = 16 +except KeyError: + amount_of_workers = 16 + +try: + poll_frequency = int(config['poller_service_poll_frequency']) + if poll_frequency == 0: + poll_frequency = 300 +except KeyError: + poll_frequency = 300 + +try: + discover_frequency = int(config['poller_service_discover_frequency']) + if discover_frequency == 0: + discover_frequency = 21600 +except KeyError: + discover_frequency = 21600 + +try: + down_retry = int(config['poller_service_down_retry']) + if down_retry == 0: + down_retry = 60 +except KeyError: + down_retry = 60 + +try: + if db_port == 0: + db = MySQLdb.connect(host=db_server, user=db_username, passwd=db_password, db=db_dbname) + else: + db = MySQLdb.connect(host=db_server, port=db_port, user=db_username, passwd=db_password, db=db_dbname) + db.autocommit(True) + cursor = db.cursor() +except: + log.critical("ERROR: Could not connect to MySQL database!") + sys.exit(2) + + +def poll_worker(device_id, action): + try: + start_time = time.time() + path = poller_path + if action == 'discovery': + path = discover_path + command = "/usr/bin/env php %s -h %s >> /dev/null 2>&1" % (path, device_id) + subprocess.check_call(command, shell=True) + elapsed_time = int(time.time() - start_time) + if elapsed_time < 300: + log.debug("DEBUG: worker finished %s of device %s in %s seconds" % (action, device_id, elapsed_time)) + else: + log.warning("WARNING: worker finished %s of device %s in %s seconds" % (action, device_id, elapsed_time)) + except (KeyboardInterrupt, SystemExit): + raise + except: + pass + + +def lockFree(lock): + global cursor + query = "SELECT IS_FREE_LOCK('{0}')".format(lock) + cursor.execute(query) + return cursor.fetchall()[0][0] == 1 + + +def getLock(lock): + global cursor + query = "SELECT GET_LOCK('{0}', 0)".format(lock) + cursor.execute(query) + return cursor.fetchall()[0][0] == 1 + + +def releaseLock(lock): + global cursor + query = "SELECT RELEASE_LOCK('{0}')".format(lock) + cursor.execute(query) + return cursor.fetchall()[0][0] == 1 + + +def sleep_until(timestamp): + now = datetime.now() + if timestamp > now: + sleeptime = (timestamp - now).seconds + else: + sleeptime = 0 + time.sleep(sleeptime) + +poller_group = ('and poller_group IN({0}) ' + .format(str(config['distributed_poller_group'])) if 'distributed_poller_group' in config else '') + +# Add last_polled and last_polled_timetaken so we can sort by the time the last poll started, with the goal +# of having each device complete a poll within the given time range. +dev_query = ('SELECT device_id, status, ' + 'CAST( ' + ' DATE_ADD( ' + ' DATE_SUB( ' + ' last_polled, ' + ' INTERVAL last_polled_timetaken SECOND ' + ' ), ' + ' INTERVAL {0} SECOND) ' + ' AS DATETIME(0) ' + ') AS next_poll, ' + 'CAST( ' + ' DATE_ADD( ' + ' DATE_SUB( ' + ' last_discovered, ' + ' INTERVAL last_discovered_timetaken SECOND ' + ' ), ' + ' INTERVAL {1} SECOND) ' + ' AS DATETIME(0) ' + ') as next_discovery ' + 'FROM devices WHERE ' + 'disabled = 0 ' + 'AND IS_FREE_LOCK(CONCAT("polling.", device_id)) ' + 'AND IS_FREE_LOCK(CONCAT("queued.", device_id)) ' + 'AND ( last_poll_attempted < DATE_SUB(NOW(), INTERVAL {2} SECOND ) ' + ' OR last_poll_attempted IS NULL ) ' + '{3} ' + 'ORDER BY next_poll asc ' + 'LIMIT 5 ').format(poll_frequency, + discover_frequency, + down_retry, + poller_group) + +threads = 0 +next_update = datetime.now() + timedelta(minutes=1) +devices_scanned = 0 + +while True: + cur_threads = threading.active_count() + if cur_threads != threads: + threads = cur_threads + log.debug('DEBUG: {0} threads currently active'.format(threads)) + + if next_update < datetime.now(): + seconds_taken = (datetime.now() - (next_update - timedelta(minutes=1))).seconds + update_query = ('INSERT INTO pollers(poller_name, ' + ' last_polled, ' + ' devices, ' + ' time_taken) ' + ' values("{0}", NOW(), "{1}", "{2}") ' + 'ON DUPLICATE KEY UPDATE ' + ' last_polled=values(last_polled), ' + ' devices=values(devices), ' + ' time_taken=values(time_taken) ').format(config['distributed_poller_name'].strip(), + devices_scanned, + seconds_taken) + try: + cursor.execute(update_query) + except: + log.critical('ERROR: MySQL query error. Is your schema up to date?') + sys.exit(2) + cursor.fetchall() + log.info('INFO: {0} devices scanned in the last minute'.format(devices_scanned)) + devices_scanned = 0 + next_update = datetime.now() + timedelta(minutes=1) + + while threading.active_count() >= amount_of_workers or not lockFree('schema_update'): + time.sleep(.5) + + try: + cursor.execute(dev_query) + except: + log.critical('ERROR: MySQL query error. Is your schema up to date?') + sys.exit(2) + + devices = cursor.fetchall() + for device_id, status, next_poll, next_discovery in devices: + # add queue lock, so we lock the next device against any other pollers + # if this fails, the device is locked by another poller already + if not getLock('queued.{0}'.format(device_id)): + continue + if not lockFree('polling.{0}'.format(device_id)): + releaseLock('queued.{0}'.format(device_id)) + continue + + if next_poll and next_poll > datetime.now(): + log.debug('DEBUG: Sleeping until {0} before polling {1}'.format(next_poll, device_id)) + sleep_until(next_poll) + + action = 'poll' + if (not next_discovery or next_discovery < datetime.now()) and status == 1: + action = 'discovery' + + log.debug('DEBUG: Starting {0} of device {1}'.format(action, device_id)) + devices_scanned += 1 + + cursor.execute('UPDATE devices SET last_poll_attempted = NOW() WHERE device_id = {0}'.format(device_id)) + cursor.fetchall() + + t = threading.Thread(target=poll_worker, args=[device_id, action]) + t.start() + + # If we made it this far, break out of the loop and query again. + break + + # This point is only reached if the query is empty, so sleep half a second before querying again. + time.sleep(.5) + + # Make sure we're not holding any device queue locks in this connection before querying again + # by locking a different string. + getLock('unlock.{0}'.format(config['distributed_poller_name'])) diff --git a/poller.php b/poller.php index 62bb94cd7..6412c37be 100755 --- a/poller.php +++ b/poller.php @@ -22,7 +22,8 @@ require 'includes/polling/functions.inc.php'; require 'includes/alerts.inc.php'; $poller_start = utime(); -echo $config['project_name_version']." Poller\n\n"; +echo $config['project_name_version']." Poller\n"; +echo get_last_commit()."\n"; $options = getopt('h:m:i:n:r::d::a::'); diff --git a/sql-schema/064.sql b/sql-schema/064.sql new file mode 100644 index 000000000..13ebbb243 --- /dev/null +++ b/sql-schema/064.sql @@ -0,0 +1 @@ +insert into config (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) values ('alert.transports.pushbullet','','','Pushbullet access token','alerting',0,'transports',0,'0','0'); diff --git a/sql-schema/065.sql b/sql-schema/065.sql new file mode 100644 index 000000000..4fb76d358 --- /dev/null +++ b/sql-schema/065.sql @@ -0,0 +1,5 @@ +DELETE n1 FROM pollers n1, pollers n2 WHERE n1.last_polled < n2.last_polled and n1.poller_name = n2.poller_name; +ALTER TABLE pollers ADD PRIMARY KEY (poller_name); +ALTER TABLE `devices` ADD `last_poll_attempted` timestamp NULL DEFAULT NULL AFTER `last_polled`; +ALTER TABLE `devices` ADD INDEX `last_polled` (`last_polled`); +ALTER TABLE `devices` ADD INDEX `last_poll_attempted` (`last_poll_attempted`); diff --git a/sql-schema/066.sql b/sql-schema/066.sql new file mode 100644 index 000000000..37b4dc6ed --- /dev/null +++ b/sql-schema/066.sql @@ -0,0 +1,2 @@ +ALTER TABLE `alert_templates` ADD `title` VARCHAR(255) NULL DEFAULT NULL; +ALTER TABLE `alert_templates` ADD `title_rec` VARCHAR(255) NULL DEFAULT NULL; diff --git a/sql-schema/067.sql b/sql-schema/067.sql new file mode 100644 index 000000000..5ad0781bd --- /dev/null +++ b/sql-schema/067.sql @@ -0,0 +1,3 @@ +CREATE TABLE `proxmox` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_id` int(11) NOT NULL DEFAULT '0', `vmid` int(11) NOT NULL, `cluster` varchar(255) NOT NULL, `description` varchar(255) DEFAULT NULL, `last_seen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `cluster_vm` (`cluster`,`vmid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +CREATE TABLE `proxmox_ports` ( `id` int(11) NOT NULL AUTO_INCREMENT, `vm_id` int(11) NOT NULL, `port` varchar(10) NOT NULL, `last_seen` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `vm_port` (`vm_id`,`port`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +ALTER TABLE `applications` ADD COLUMN `app_instance` varchar(255) NOT NULL; diff --git a/sql-schema/068.sql b/sql-schema/068.sql new file mode 100644 index 000000000..d0bbda576 --- /dev/null +++ b/sql-schema/068.sql @@ -0,0 +1,2 @@ +alter table users_widgets add column `settings` text not null; +insert into widgets values(null,'Graph','generic-graph','6,2'); diff --git a/sql-schema/069.sql b/sql-schema/069.sql new file mode 100644 index 000000000..a629aae3d --- /dev/null +++ b/sql-schema/069.sql @@ -0,0 +1,2 @@ +CREATE TABLE `dashboards` ( `dashboard_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL DEFAULT 0, `dashboard_name` varchar(255) NOT NULL, `access` int(1) NOT NULL DEFAULT 0, PRIMARY KEY (`dashboard_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; +ALTER TABLE `users_widgets` ADD COLUMN `dashboard_id` int(11) NOT NULL; diff --git a/sql-schema/070.sql b/sql-schema/070.sql new file mode 100644 index 000000000..2503e7f74 --- /dev/null +++ b/sql-schema/070.sql @@ -0,0 +1,4 @@ +UPDATE widgets SET widget_title = 'World map' WHERE widget = 'worldmap'; +UPDATE widgets SET widget_title = 'Globe map' WHERE widget = 'globe'; +UPDATE users_widgets SET title = 'World Map' WHERE widget_id = (SELECT widget_id FROM widgets WHERE widget = 'worldmap'); +UPDATE users_widgets SET title = 'Globe Map' WHERE widget_id = (SELECT widget_id FROM widgets WHERE widget = 'globe'); diff --git a/sql-schema/071.sql b/sql-schema/071.sql new file mode 100644 index 000000000..1b44ca4f4 --- /dev/null +++ b/sql-schema/071.sql @@ -0,0 +1,2 @@ +INSERT INTO widgets VALUES (NULL, 'Top Devices', 'top-devices', '5,4'); +INSERT INTO widgets VALUES (NULL, 'Top Interfaces', 'top-interfaces', '5,4'); diff --git a/sql-schema/072.sql b/sql-schema/072.sql new file mode 100644 index 000000000..6748b6eb4 --- /dev/null +++ b/sql-schema/072.sql @@ -0,0 +1 @@ +ALTER TABLE `devices` ADD COLUMN `notes` text;