1
MANIFEST
1
MANIFEST
@@ -83,6 +83,7 @@ lib/SNMP/Info/Layer3/C3550.pm
|
||||
lib/SNMP/Info/Layer3/C4000.pm
|
||||
lib/SNMP/Info/Layer3/C6500.pm
|
||||
lib/SNMP/Info/Layer3/CheckPoint.pm
|
||||
lib/SNMP/Info/Layer3/Ciena.pm
|
||||
lib/SNMP/Info/Layer3/Cisco.pm
|
||||
lib/SNMP/Info/Layer3/CiscoASA.pm
|
||||
lib/SNMP/Info/Layer3/CiscoFWSM.pm
|
||||
|
||||
@@ -774,6 +774,12 @@ Subclass for CheckPoint devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::CheckPoint> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Ciena
|
||||
|
||||
Subclass for Ciena devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Ciena> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Cisco
|
||||
|
||||
This is a simple wrapper around layer 3 for IOS devices and the base layer 3
|
||||
@@ -1677,6 +1683,7 @@ sub device_type {
|
||||
4874 => 'SNMP::Info::Layer3::ERX',
|
||||
5624 => 'SNMP::Info::Layer3::Enterasys',
|
||||
6027 => 'SNMP::Info::Layer3::Force10',
|
||||
6141 => 'SNMP::Info::Layer3::Ciena',
|
||||
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
|
||||
6527 => 'SNMP::Info::Layer3::Timetra',
|
||||
6876 => 'SNMP::Info::Layer3::VMware',
|
||||
@@ -1727,6 +1734,7 @@ sub device_type {
|
||||
3375 => 'SNMP::Info::Layer3::F5',
|
||||
4526 => 'SNMP::Info::Layer2::Netgear',
|
||||
5624 => 'SNMP::Info::Layer3::Enterasys',
|
||||
6141 => 'SNMP::Info::Layer3::Ciena',
|
||||
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
|
||||
9303 => 'SNMP::Info::Layer3::PacketFront',
|
||||
10418 => 'SNMP::Info::Layer1::Cyclades',
|
||||
|
||||
325
lib/SNMP/Info/Layer3/Ciena.pm
Normal file
325
lib/SNMP/Info/Layer3/Ciena.pm
Normal file
@@ -0,0 +1,325 @@
|
||||
# SNMP::Info::Layer3::Ciena - SNMP Interface to Ciena Devices
|
||||
#
|
||||
# Copyright (c) 2019 by The Netdisco Developer Team.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# * 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.
|
||||
# * Neither the name of the University of California, Santa Cruz nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# 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 OWNER 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.
|
||||
|
||||
|
||||
package SNMP::Info::Layer3::Ciena;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
|
||||
@SNMP::Info::Layer3::Ciena::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::Ciena::EXPORT_OK = qw//;
|
||||
|
||||
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||
|
||||
$VERSION = '3.68';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
'WWP-LEOS-SW-XGRADE-MIB' => 'wwpLeosBladeRunPackageVer',
|
||||
'WWP-LEOS-BLADE-MIB' => 'wwpLeosBladeId',
|
||||
'WWP-LEOS-CHASSIS-MIB' => 'wwpLeosChassisDeviceId',
|
||||
'WWP-LEOS-FLOW-MIB' => 'wwpLeosFlowLearnType',
|
||||
'WWP-LEOS-PORT-MIB' => 'wwpLeosEtherIngressPvid',
|
||||
'WWP-LEOS-VLAN-TAG-MIB' => 'wwpLeosNumVlans',
|
||||
'WWP-PRODUCTS-MIB' => 'wwpProductsMIB'
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
'ciena_serial' => 'wwpLeosSystemSerialNumber',
|
||||
'mac' => 'dot1dBaseBridgeAddress'
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
'v_name' => 'wwpLeosVlanName',
|
||||
'ps_type' => 'wwpLeosChassisPowerSupplyType',
|
||||
'ps_status' => 'wwpLeosChassisPowerSupplyState',
|
||||
'ps_name' => 'wwpLeosChassisPowerSupplyModuleLabel',
|
||||
'fan_type' => 'wwpLeosChassisFanModuleType',
|
||||
'fan_status' => 'wwpLeosChassisFanModuleStatus',
|
||||
'fan_name' => 'wwpLeosChassisFanModuleNum'
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
%SNMP::Info::Layer3::MUNGE
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
return 'ciena';
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'saos';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $ciena = shift;
|
||||
my $version = $ciena->wwpLeosBladeRunPackageVer || {};
|
||||
return values(%$version);
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $ciena = shift;
|
||||
return $ciena->ciena_serial();
|
||||
}
|
||||
|
||||
# Override lldp_if function to translate the port with bp_index
|
||||
sub lldp_if {
|
||||
my $ciena = shift;
|
||||
my $lldp = $ciena->SUPER::lldp_if;
|
||||
my $bp_index = $ciena->bp_index;
|
||||
foreach my $iface (keys %$lldp) {
|
||||
my $orig_iface = $lldp->{$iface};
|
||||
$lldp->{$iface} = $bp_index->{$orig_iface};
|
||||
}
|
||||
return $lldp;
|
||||
}
|
||||
|
||||
sub i_vlan {
|
||||
my $ciena = shift;
|
||||
my $i_vlan = {};
|
||||
my $pvid = $ciena->wwpLeosEtherIngressPvid() || undef;
|
||||
|
||||
# bp_index needed to resolve correct port id
|
||||
my $bp_index = $ciena->bp_index;
|
||||
if (defined $pvid) {
|
||||
foreach my $i (keys %$pvid) {
|
||||
$i_vlan->{$bp_index->{$i}} = $pvid->{$i};
|
||||
}
|
||||
}
|
||||
return $i_vlan;
|
||||
}
|
||||
|
||||
sub i_vlan_membership {
|
||||
my $ciena = shift;
|
||||
my $i_vlan_membership = {};
|
||||
|
||||
my $vlans = $ciena->wwpLeosVlanMemberPortId();
|
||||
# bp_index needed to resolve correct port id
|
||||
my $bp_index = $ciena->bp_index;
|
||||
foreach my $vlan (keys %$vlans) {
|
||||
push @{$i_vlan_membership->{$bp_index->{$vlans->{$vlan}}}} , (split(/\./,$vlan))[0];
|
||||
}
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
sub qb_fw_vlan {
|
||||
my $ciena = shift;
|
||||
my $qb_fw_vlan = {};
|
||||
my $learn_entries = $ciena->wwpLeosFlowLearnType();
|
||||
foreach my $entry (keys %$learn_entries) {
|
||||
my @params = (split(/\./, $entry));
|
||||
$qb_fw_vlan->{join('.', @params[1..6])} = $params[8];
|
||||
}
|
||||
return $qb_fw_vlan;
|
||||
}
|
||||
|
||||
sub fan {
|
||||
my $ciena = shift;
|
||||
|
||||
my $fan_status = $ciena->fan_status || {};
|
||||
my $fan_type = $ciena->fan_type;
|
||||
my $fan_name = $ciena->fan_name;
|
||||
my @messages;
|
||||
|
||||
foreach my $fan (keys %$fan_status) {
|
||||
if ($fan_status->{$fan} ne "ok") {
|
||||
push @messages, sprintf("%s fan %s failed.", $fan_type->{$fan}, $fan_name->{$fan});
|
||||
}
|
||||
}
|
||||
return sprintf("%s fans OK", scalar keys %$fan_status) if scalar @messages == 0;
|
||||
|
||||
return join(", ", @messages);
|
||||
}
|
||||
sub ps1_type {
|
||||
my $ciena = shift;
|
||||
my $ps_type = $ciena->ps_type;
|
||||
return $ps_type->{'1'} if defined $ps_type->{'1'};
|
||||
}
|
||||
|
||||
sub ps1_status {
|
||||
my $ciena = shift;
|
||||
my $ps_status = $ciena->ps_status;
|
||||
return $ps_status->{'1'} if defined $ps_status->{'1'};
|
||||
}
|
||||
sub ps2_type {
|
||||
my $ciena = shift;
|
||||
my $ps_type = $ciena->ps_type;
|
||||
return $ps_type->{'2'} if defined $ps_type->{'2'};
|
||||
}
|
||||
|
||||
sub ps2_status {
|
||||
my $ciena = shift;
|
||||
my $ps_status = $ciena->ps_status;
|
||||
return $ps_status->{'2'} if defined $ps_status->{'2'};
|
||||
}
|
||||
=head1 DESCRIPTION
|
||||
Subclass for Ciena Devices running SAOS
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<WWP-LEOS-SW-XGRADE-MIB>
|
||||
|
||||
=item F<WWP-LEOS-BLADE-MIB>
|
||||
|
||||
=item F<WWP-LEOS-CHASSIS-MIB>
|
||||
|
||||
=item F<WWP-LEOS-FLOW-MIB>
|
||||
|
||||
=item F<WWP-LEOS-PORT-MIB>
|
||||
|
||||
=item F<WWP-LEOS-VLAN-TAG-MIB>
|
||||
|
||||
=item F<WWP-PRODUCTS-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $ciena->vendor()
|
||||
|
||||
Returns 'ciena'
|
||||
|
||||
=item $ciena->os()
|
||||
|
||||
Returns 'saos'
|
||||
|
||||
=item $ciena->os_ver()
|
||||
|
||||
Returns the running software package extracted with C<wwpLeosBladeRunPackageVer>
|
||||
|
||||
=item $ciena->serial()
|
||||
|
||||
Returns serial number
|
||||
(C<wwpLeosSystemSerialNumber>)
|
||||
|
||||
=item $ciena->mac()
|
||||
|
||||
Returns the MAC address used by this bridge when it must be referred
|
||||
to in a unique fashion.
|
||||
|
||||
(C<dot1dBaseBridgeAddress>)
|
||||
|
||||
=item $huawei->fan()
|
||||
|
||||
Return the status of all fans. Returns a string indicating the number of fans 'OK' or
|
||||
identification of any fan without a 'normal' operating status.
|
||||
|
||||
=item $ciena->ps1_status()
|
||||
|
||||
Return the status of the first power supply
|
||||
|
||||
=item $ciena->ps1_type()
|
||||
|
||||
Return the type of the first power supply
|
||||
|
||||
=item $ciena->ps2_status()
|
||||
|
||||
Return the status of the second power supply
|
||||
|
||||
=item $ciena->ps2_type()
|
||||
|
||||
Return the type of the second power supply
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $ciena->lldp_if()
|
||||
|
||||
Returns the mapping to the SNMP Interface Table. Overridden to translate to correct ethernet port with bp_index
|
||||
|
||||
=item $ciena->i_vlan()
|
||||
|
||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||
|
||||
=item $ciena->i_vlan_membership()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs.
|
||||
|
||||
=item $ciena->qb_fw_vlan()
|
||||
|
||||
Returns reference to hash of forwarding table entries VLAN ID, using C<wwpLeosFlowLearnType>
|
||||
|
||||
=item $ciena->ps_name()
|
||||
|
||||
Returns reference to hash of the power supplies and their names.
|
||||
|
||||
=item $ciena->ps_type()
|
||||
|
||||
Returns reference to hash of the power supplies and their type (ex. AC, DC, etc.)
|
||||
|
||||
=item $ciena->ps_status()
|
||||
|
||||
Returns reference to hash of the power supplies and their status.
|
||||
|
||||
=item $ciena->fan_name()
|
||||
|
||||
Returns reference to hash of fans and their names. In this case, it is simply a number.
|
||||
|
||||
=item $ciena->fan_type()
|
||||
|
||||
Returns reference to hash of fans and their types (ex. fixed, modular, etc.)
|
||||
|
||||
=item $ciena->fan_status)
|
||||
|
||||
Returns reference to hash of fans and their status
|
||||
|
||||
=back
|
||||
Reference in New Issue
Block a user