diff --git a/storage/emc/DataDomain/mode/components/fan.pm b/storage/emc/DataDomain/mode/components/fan.pm new file mode 100644 index 000000000..902292b41 --- /dev/null +++ b/storage/emc/DataDomain/mode/components/fan.pm @@ -0,0 +1,87 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::mode::components::fan; + +use strict; +use warnings; +use centreon::plugins::misc; + +my %conditions = ( + 0 => ['not found', 'UNKNOWN'], + 1 => ['ok', 'OK'], + 2 => ['failed', 'CRITICAL'], +); +my %level_map = ( + 0 => 'unknown', + 1 => 'low', + 2 => 'normal', + 3 => 'high', +); + +sub check { + my ($self) = @_; + + $self->{components}->{fans} = {name => 'fans', total => 0}; + $self->{output}->output_add(long_msg => "Checking fans"); + return if ($self->check_exclude('fans')); + + my $oid_fanPropertiesEntry = '.1.3.6.1.4.1.19746.1.1.3.1.1.1'; + my $oid_fanDescription = '.1.3.6.1.4.1.19746.1.1.3.1.1.1.3'; + my $oid_fanLevel = '.1.3.6.1.4.1.19746.1.1.3.1.1.1.4'; + my $oid_fanStatus = '.1.3.6.1.4.1.19746.1.1.3.1.1.1.5'; + + my $result = $self->{snmp}->get_table(oid => $oid_fanPropertiesEntry); + return if (scalar(keys %$result) <= 0); + + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /^$oid_fanStatus\.(\d+)\.(\d+)$/); + my ($enclosure_id, $fan_index) = ($1, $2); + + my $fan_descr = centreon::plugins::misc::trim($result->{$oid_fanDescription . '.' . $enclosure_id . '.' . $fan_index}); + my $fan_level = $result->{$oid_fanLevel . '.' . $enclosure_id . '.' . $fan_index}; + my $fan_status = $result->{$oid_fanStatus . '.' . $enclosure_id . '.' . $fan_index}; + + $self->{components}->{fans}->{total}++; + $self->{output}->output_add(long_msg => sprintf("Fan '%s' status is %s [enclosure = %d, index = %d, level = %s].", + $fan_descr, ${$conditions{$fan_status}}[0], $enclosure_id, $fan_index, $level_map{$fan_level})); + if (!$self->{output}->is_status(litteral => 1, value => ${$conditions{$fan_status}}[1], compare => 'ok')) { + $self->{output}->output_add(severity => ${$conditions{$fan_status}}[1], + short_msg => sprintf("Fan '%s' status is %s", $fan_descr, ${$conditions{$fan_status}}[0])); + } + } +} + +1; \ No newline at end of file diff --git a/storage/emc/DataDomain/mode/components/psu.pm b/storage/emc/DataDomain/mode/components/psu.pm new file mode 100644 index 000000000..a7aa34828 --- /dev/null +++ b/storage/emc/DataDomain/mode/components/psu.pm @@ -0,0 +1,76 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::mode::components::psu; + +use strict; +use warnings; + +my %conditions = ( + 1 => ['ok', 'OK'], + 2 => ['unknown', 'UNKNOWN'], + 3 => ['fail', 'CRITICAL'], +); + +sub check { + my ($self) = @_; + + $self->{components}->{psus} = {name => 'power supplies', total => 0}; + $self->{output}->output_add(long_msg => "Checking power supplies"); + return if ($self->check_exclude('psu')); + + my $oid_powerModuleEntry = '.1.3.6.1.4.1.19746.1.1.1.1.1.1'; + my $oid_powerModuleStatus = '.1.3.6.1.4.1.19746.1.1.1.1.1.1.3'; + + my $result = $self->{snmp}->get_table(oid => $oid_powerModuleEntry); + return if (scalar(keys %$result) <= 0); + + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /^$oid_powerModuleStatus\.(\d+)\.(\d+)$/); + my ($enclosure_id, $module_index) = ($1, $2); + + my $psu_status = $result->{$oid_powerModuleStatus . '.' . $enclosure_id . '.' . $module_index}; + + $self->{components}->{psus}->{total}++; + $self->{output}->output_add(long_msg => sprintf("Power Supply '%s' status is %s.", + $enclosure_id . '/' . $module_index, ${$conditions{$psu_status}}[0])); + if (!$self->{output}->is_status(litteral => 1, value => ${$conditions{$psu_status}}[1], compare => 'ok')) { + $self->{output}->output_add(severity => ${$conditions{$psu_status}}[1], + short_msg => sprintf("Power Supply '%s' status is %s", $enclosure_id . '/' . $module_index, ${$conditions{$psu_status}}[0])); + } + } +} + +1; \ No newline at end of file diff --git a/storage/emc/DataDomain/mode/components/temperature.pm b/storage/emc/DataDomain/mode/components/temperature.pm new file mode 100644 index 000000000..aea8dacd6 --- /dev/null +++ b/storage/emc/DataDomain/mode/components/temperature.pm @@ -0,0 +1,85 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::mode::components::temperature; + +use strict; +use warnings; +use centreon::plugins::misc; + +my %conditions = ( + 0 => ['absent', 'CRITICAL'], + 1 => ['ok', 'OK'], + 2 => ['not found', 'UNKNOWN'], +); + +sub check { + my ($self) = @_; + + $self->{components}->{temperatures} = {name => 'temperatures', total => 0}; + $self->{output}->output_add(long_msg => "Checking temperatures"); + return if ($self->check_exclude('temperatures')); + + my $oid_temperatureSensorEntry = '.1.3.6.1.4.1.19746.1.1.2.1.1.1'; + my $oid_tempSensorDescription = '.1.3.6.1.4.1.19746.1.1.2.1.1.1.3'; + my $oid_tempSensorCurrentValue = '.1.3.6.1.4.1.19746.1.1.2.1.1.1.4'; + my $oid_tempSensorStatus = '.1.3.6.1.4.1.19746.1.1.2.1.1.1.5'; + + my $result = $self->{snmp}->get_table(oid => $oid_temperatureSensorEntry); + return if (scalar(keys %$result) <= 0); + + foreach my $key ($self->{snmp}->oid_lex_sort(keys %$result)) { + next if ($key !~ /^$oid_tempSensorCurrentValue\.(\d+)\.(\d+)$/); + my ($enclosure_id, $sensor_index) = ($1, $2); + + my $temp_descr = centreon::plugins::misc::trim($result->{$oid_tempSensorDescription . '.' . $enclosure_id . '.' . $sensor_index}); + my $temp_value = $result->{$oid_tempSensorCurrentValue . '.' . $enclosure_id . '.' . $sensor_index}; + my $temp_status = $result->{$oid_tempSensorStatus . '.' . $enclosure_id . '.' . $sensor_index}; + + $self->{components}->{temperatures}->{total}++; + $self->{output}->output_add(long_msg => sprintf("Temperature '%s' status is %s [enclosure = %d, sensor = %d, current_value = %s].", + $temp_descr, ${$conditions{$temp_status}}[0], $enclosure_id, $sensor_index, $temp_value)); + if (!$self->{output}->is_status(litteral => 1, value => ${$conditions{$temp_status}}[1], compare => 'ok')) { + $self->{output}->output_add(severity => ${$conditions{$temp_status}}[1], + short_msg => sprintf("Temperature '%s' status is %s", $temp_descr, ${$conditions{$temp_status}}[0])); + } + + $self->{output}->perfdata_add(label => 'temp_' . $enclosure_id . '_' . $sensor_index, unit => 'C', + value => $temp_value, + ); + } +} + +1; \ No newline at end of file diff --git a/storage/emc/DataDomain/mode/environment.pm b/storage/emc/DataDomain/mode/environment.pm new file mode 100644 index 000000000..7451ed33e --- /dev/null +++ b/storage/emc/DataDomain/mode/environment.pm @@ -0,0 +1,147 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::mode::environment; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +use storage::emc::DataDomain::mode::components::psu; +use storage::emc::DataDomain::mode::components::temperature; +use storage::emc::DataDomain::mode::components::fan; + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{version} = '1.0'; + $options{options}->add_options(arguments => + { + "exclude:s" => { name => 'exclude' }, + "component:s" => { name => 'component', default => 'all' }, + }); + $self->{components} = {}; + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); +} + +sub global { + my ($self, %options) = @_; + + storage::emc::DataDomain::mode::components::psu::check($self); + storage::emc::DataDomain::mode::components::temperature::check($self); + storage::emc::DataDomain::mode::components::fan::check($self); +} + +sub run { + my ($self, %options) = @_; + # $options{snmp} = snmp object + $self->{snmp} = $options{snmp}; + + if ($self->{option_results}->{component} eq 'all') { + $self->global(); + } elsif ($self->{option_results}->{component} eq 'psu') { + storage::emc::DataDomain::mode::components::psu::check($self); + } elsif ($self->{option_results}->{component} eq 'temperature') { + storage::emc::DataDomain::mode::components::temperature::check($self); + } elsif ($self->{option_results}->{component} eq 'fan') { + storage::emc::DataDomain::mode::components::fan::check($self); + } else { + $self->{output}->add_option_msg(short_msg => "Wrong option. Cannot find component '" . $self->{option_results}->{component} . "'."); + $self->{output}->option_exit(); + } + + my $total_components = 0; + my $display_by_component = ''; + my $display_by_component_append = ''; + foreach my $comp (sort(keys %{$self->{components}})) { + # Skipping short msg when no components + next if ($self->{components}->{$comp}->{total} == 0); + $total_components += $self->{components}->{$comp}->{total}; + $display_by_component .= $display_by_component_append . $self->{components}->{$comp}->{total} . ' ' . $self->{components}->{$comp}->{name}; + $display_by_component_append = ', '; + } + + $self->{output}->output_add(severity => 'OK', + short_msg => sprintf("All %s components [%s] are ok.", + $total_components, + $display_by_component + ) + ); + + $self->{output}->display(); + $self->{output}->exit(); +} + +sub check_exclude { + my ($self, $section) = @_; + + if (defined($self->{option_results}->{exclude}) && $self->{option_results}->{exclude} =~ /(^|\s|,)$section(\s|,|$)/) { + $self->{output}->output_add(long_msg => sprintf("Skipping $section section.")); + return 1; + } + return 0; +} + +1; + +__END__ + +=head1 MODE + +Check environments (Fans, Temperatures, Power Supplies) (DATA-DOMAIN-MIB). + +=over 8 + +=item B<--component> + +Which component to check (Default: 'all'). +Can be: 'fan', 'temperature', 'psu'. + +=item B<--exclude> + +Exclude some parts (comma seperated list) (Example: --exclude=temperatures,fans). + +=back + +=cut + \ No newline at end of file diff --git a/storage/emc/DataDomain/mode/nvrambattery.pm b/storage/emc/DataDomain/mode/nvrambattery.pm new file mode 100644 index 000000000..7eae94745 --- /dev/null +++ b/storage/emc/DataDomain/mode/nvrambattery.pm @@ -0,0 +1,153 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::mode::nvrambattery; + +use base qw(centreon::plugins::mode); + +use strict; +use warnings; + +my %conditions = ( + 1 => ['ok', 'OK'], + 2 => ['disabled', 'OK'], + 3 => ['discharged', 'WARNING'], + 4 => ['unknown', 'UNKNOWN'], + 5 => ['soft disabled', 'OK'], +); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + + $self->{version} = '1.0'; + $options{options}->add_options(arguments => + { + "warning:s" => { name => 'warning', }, + "critical:s" => { name => 'critical', }, + }); + + return $self; +} + +sub check_options { + my ($self, %options) = @_; + $self->SUPER::init(%options); + + if (($self->{perfdata}->threshold_validate(label => 'warning', value => $self->{option_results}->{warning})) == 0) { + $self->{output}->add_option_msg(short_msg => "Wrong warning (5sec) threshold '" . $self->{option_results}->{warning} . "'."); + $self->{output}->option_exit(); + } + if (($self->{perfdata}->threshold_validate(label => 'critical', value => $self->{option_results}->{critical})) == 0) { + $self->{output}->add_option_msg(short_msg => "Wrong critical (5sec) threshold '" . $self->{option_results}->{critical} . "'."); + $self->{output}->option_exit(); + } +} + +sub run { + my ($self, %options) = @_; + # $options{snmp} = snmp object + $self->{snmp} = $options{snmp}; + + my $oid_nvramBatteryEntry = '.1.3.6.1.4.1.19746.1.2.3.1.1'; + my $oid_nvramBatteryStatus = '.1.3.6.1.4.1.19746.1.2.3.1.1.2'; + my $oid_nvramBatteryCharge = '.1.3.6.1.4.1.19746.1.2.3.1.1.3'; + my $result = $self->{snmp}->get_table(oid => $oid_nvramBatteryEntry, nothing_quit => 1); + + $self->{output}->output_add(severity => 'OK', + short_msg => 'All nvram batteries are ok.'); + + foreach my $oid (keys %$result) { + next if ($oid !~ /^$oid_nvramBatteryStatus/); + $oid =~ /\.([0-9]+)$/; + my $instance = $1; + + my $status = $result->{$oid_nvramBatteryStatus . '.' . $instance}; + my $charge = $result->{$oid_nvramBatteryCharge . '.' . $instance}; + + $self->{output}->output_add(long_msg => sprintf("nvram battery '%s' status is %s.", + $instance, ${$conditions{$status}}[0])); + if (!$self->{output}->is_status(litteral => 1, value => ${$conditions{$status}}[1], compare => 'ok')) { + $self->{output}->output_add(severity => ${$conditions{$status}}[1], + short_msg => sprintf("nvram battery '%s' status is %s", $instance, ${$conditions{$status}}[0])); + } + + # Check only if ok + if ($status == 1) { + my $exit = $self->{perfdata}->threshold_check(value => $charge, + threshold => [ { label => 'critical', 'exit_litteral' => 'critical' }, { label => 'warning', exit_litteral => 'warning' } ]); + $self->{output}->output_add(long_msg => sprintf("nvram battery '%s' charge is %s %%", $instance, + $charge)); + if (!$self->{output}->is_status(value => $exit, compare => 'ok', litteral => 1)) { + $self->{output}->output_add(severity => $exit, + short_msg => sprintf("nvram battery '%s' charge is %s %%", $instance, + $charge)); + } + + $self->{output}->perfdata_add(label => 'nvram_battery_' . $instance, unit => '%', + value => $charge, + warning => $self->{perfdata}->get_perfdata_for_output(label => 'warning'), + critical => $self->{perfdata}->get_perfdata_for_output(label => 'critical'), + min => 0, max => 100); + } + } + + $self->{output}->display(); + $self->{output}->exit(); +} + +1; + +__END__ + +=head1 MODE + +Check nvram Batteries status and charge percentage (DATA-DOMAIN-MIB). + +=over 8 + +=item B<--warning> + +Threshold warning in percent (for charge). + +=item B<--critical> + +Threshold critical in percent (for charge). + +=back + +=cut + \ No newline at end of file diff --git a/storage/emc/DataDomain/plugin.pm b/storage/emc/DataDomain/plugin.pm new file mode 100644 index 000000000..857a969f0 --- /dev/null +++ b/storage/emc/DataDomain/plugin.pm @@ -0,0 +1,65 @@ +################################################################################ +# Copyright 2005-2013 MERETHIS +# Centreon is developped by : Julien Mathis and Romain Le Merlus under +# GPL Licence 2.0. +# +# 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 2 of the License. +# +# 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 . +# +# Linking this program statically or dynamically with other modules is making a +# combined work based on this program. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this program give MERETHIS +# permission to link this program with independent modules to produce an executable, +# regardless of the license terms of these independent modules, and to copy and +# distribute the resulting executable under terms of MERETHIS choice, provided that +# MERETHIS also meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module which is not +# derived from this program. If you modify this program, you may extend this +# exception to your version of the program, but you are not obliged to do so. If you +# do not wish to do so, delete this exception statement from your version. +# +# For more information : contact@centreon.com +# Authors : Quentin Garnier +# +#################################################################################### + +package storage::emc::DataDomain::plugin; + +use strict; +use warnings; +use base qw(centreon::plugins::script_snmp); + +sub new { + my ($class, %options) = @_; + my $self = $class->SUPER::new(package => __PACKAGE__, %options); + bless $self, $class; + # $options->{options} = options object + + $self->{version} = '1.0'; + %{$self->{modes}} = ( + 'environment' => 'storage::emc::DataDomain::mode::environment', + 'nvram-battery' => 'storage::emc::DataDomain::mode::nvrambattery', + ); + + return $self; +} + +1; + +__END__ + +=head1 PLUGIN DESCRIPTION + +Check EMC DataDomain in SNMP. + +=cut