Compare commits

...

10 Commits

Author SHA1 Message Date
Eric Miller
2ac1cc2308 update for Alcatel-Lucent additions 2008-08-02 03:31:20 +00:00
Eric Miller
0eebef47b0 Prep 2.00 2008-08-02 03:22:04 +00:00
Bill Fenner
29ef1301fb Mention Alcatel-Lucent in ChangeLog. 2008-08-01 09:28:56 +00:00
Bill Fenner
cfd5c5d9d7 perltidy 2008-08-01 08:10:47 +00:00
Bill Fenner
347e1f9f59 Add classes for Alcatel OmniSwitch and Service Router, update
Info.pm for Alcatel
2008-07-31 18:36:52 +00:00
Bill Fenner
2575320ec5 Add some spelling words. Make local_versionsync fail gracefully (instead of
planning twice) if File::Slurp isn't found.  Make spelling skip all tests
if Test::Spelling isn't found.
2008-07-31 18:35:20 +00:00
Bill Fenner
6c8ec356ec Missed a MIB when I merged my changes.
Add a commented-out reference to the Alcatel MIB that results in
 Alcatel model names getting translated.
Return the alcatel-lucent model name and OS based on sysObjectID
2008-07-31 16:57:41 +00:00
Bill Fenner
6e0712b189 Update i_name to return wlanAPFQLN if it's available.
Add i_mac to map BSSID to port.
2008-07-31 15:56:04 +00:00
Eric Miller
906b1cb52f [ 2031292 ] HP POE support - port to ifIndex mapping (Jeroen van Ingen) 2008-07-30 02:05:54 +00:00
Eric Miller
1eff8f8224 Silence warnings/errors from uninitialized variables 2008-07-29 03:23:35 +00:00
76 changed files with 991 additions and 101 deletions

View File

@@ -1,7 +1,14 @@
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
ChangeLog $Id$
version 1.09 (07/22/08) - Beta/developer release
version 2.00 (08/01/08)
+ Support for Alcatel-Lucent OmniSwitch via L3::AlcatelLucent
+ Support for Alcatel-Lucent Service Router via L3::Timetra
+ Support for Alcatel-Lucent OmniAccess via L2::Aruba
* Silence warnings in MAU due to uninitialized variables
version 1.09 (07/22/08) - Beta/developer release
+ Added support for HP ProCurve Foundry OEM switches, such as the 9300
series, in new class L3::HP9300 (contributions from Douglas McKeown and
Ivan Auger)

13
Info.pm
View File

@@ -23,7 +23,7 @@ use vars
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
$NOSUCH $BIGINT $REPEATERS/;
$VERSION = '1.09';
$VERSION = '2.00';
=head1 NAME
@@ -31,7 +31,7 @@ SNMP::Info - Object Oriented Perl5 Interface to Network devices and MIBs through
=head1 VERSION
SNMP::Info - Version 1.09
SNMP::Info - Version 2.00
=head1 AUTHOR
@@ -1102,6 +1102,8 @@ Algorithm for Subclass Detection:
Layer3 Support -> SNMP::Info::Layer3
Aironet (BR500,AP340,350,1200) -> SNMP::Info::Layer3::Aironet
AP4800... All Non IOS
Alcatel-Lucent OmniSwitch -> SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent Service Router -> SNMP::Info::Layer3::Timetra
Catalyst 3550,3548,3560 -> SNMP::Info::Layer3::C3550
Catalyst 4000,4500 -> SNMP::Info::Layer3::C4000
Catalyst 6500,3750 -> SNMP::Info::Layer3::C6500
@@ -1158,6 +1160,7 @@ Algorithm for Subclass Detection:
Else -> SNMP::Info
ZyXEL_DSLAM -> SNMP::Info::Layer2::ZyXEL_DSLAM
Aruba wireless -> SNMP::Info::Layer2::Aruba
Alcatel OmniAccess -> SNMP::Info::Layer2::Aruba
Juniper NetScreen -> SNMP::Info::Layer3::Netscreen
=cut
@@ -1197,6 +1200,8 @@ sub device_type {
2636 => 'SNMP::Info::Layer3::Juniper',
2925 => 'SNMP::Info::Layer1::Cyclades',
5624 => 'SNMP::Info::Layer3::Enterasys',
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
6527 => 'SNMP::Info::Layer3::Timetra',
8072 => 'SNMP::Info::Layer3::NetSNMP',
);
@@ -1396,6 +1401,10 @@ sub device_type {
$objtype = 'SNMP::Info::Layer2::Aruba'
if ( $desc =~ /(ArubaOS|AirOS)/ );
# Alcatel-Lucent branded Aruba
$objtype = 'SNMP::Info::Layer2::Aruba'
if ( $desc =~ /^AOS-W/ );
#Juniper NetScreen
$objtype = 'SNMP::Info::Layer3::Netscreen'
if ( $desc =~ /NetScreen/i );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
$VERSION = '1.09';
$VERSION = '2.00';
# Five data structures required by SNMP::Info
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',

View File

@@ -38,7 +38,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );

View File

@@ -38,7 +38,7 @@ use Exporter;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
@@ -214,7 +214,7 @@ sub i_speed_admin {
my $partial = shift;
my %i_speed_admin;
my $p_port = $stack->p_port();
my $p_port = $stack->p_port() || {};
my %mapping = reverse %$p_port;
my $p_speed = $stack->p_speed( $mapping{$partial} );

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'SNMPv2-MIB' => 'sysDescr',

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'CISCO-VTP-MIB' => 'vtpVlanName',

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'ETHERLIKE-MIB' => 'etherMIB' );

View File

@@ -42,7 +42,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );

View File

@@ -38,7 +38,7 @@ use Exporter;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'LLDP-MIB' => 'lldpLocSysCapEnabled',

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
@@ -284,7 +284,7 @@ sub set_i_up_admin {
my $bayhub = shift;
my ( $setting, $iid ) = @_;
my $i_index = $bayhub->i_index();
my $i_index = $bayhub->i_index() || {};
my %reverse_i_index = reverse %$i_index;
$setting = lc($setting);

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer1::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -45,7 +45,7 @@ use SNMP::Info::PowerEthernet;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -48,7 +48,7 @@ use SNMP::Info::IEEE802dot11;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%GLOBALS = (
%SNMP::Info::IEEE802dot11::GLOBALS,

View File

@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -39,12 +39,14 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS,
'WLSX-SWITCH-MIB' => 'wlsxHostname',
'WLSR-AP-MIB' => 'wlsrHideSSID',
'WLSX-SWITCH-MIB' => 'wlsxHostname',
'WLSX-WLAN-MIB' => 'wlanAPFQLN',
'WLSR-AP-MIB' => 'wlsrHideSSID',
#'ALCATEL-IND1-TP-DEVICES' => 'familyOmniAccessWireless',
);
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS, );
@@ -61,6 +63,9 @@ $VERSION = '1.09';
'aruba_ap_essid' => 'apESSID',
'aruba_ap_ssidbcast' => 'wlsrHideSSID',
# WLSX-WLAN-MIB::wlsxWlanAPTable
'aruba_perap_fqln' => 'wlanAPFQLN',
# WLSR-AP-MIB::wlsrConfigTable
'aruba_ap_channel' => 'apCurrentChannel',
@@ -81,11 +86,27 @@ sub layers {
}
sub os {
return 'airos';
my $aruba = shift;
my %osmap = (
'alcatel-lucent' => 'aos-w',
);
return $osmap{$aruba->vendor()} || 'airos';
}
sub vendor {
return 'aruba';
my $aruba = shift;
my $id = $aruba->id() || 'undef';
my %oidmap = (
6486 => 'alcatel-lucent',
);
$id = $1 if (defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/);
if (defined($id) and exists($oidmap{$id})) {
return $oidmap{$id};
}
else {
return 'aruba';
}
}
sub os_ver {
@@ -111,6 +132,8 @@ sub model {
}
# Thin APs do not support ifMIB requirement
#
# We return all BSSIDs as pseudo-ports on the controller.
sub i_index {
my $aruba = shift;
@@ -170,6 +193,29 @@ sub interfaces {
return \%if;
}
# Most items are indexed by BSSID.
# aruba_perap_fqln is indexed by AP, so we use the
# [haven't decided yet] index to figure out all of the
# BSSIDs served by a given radio.
sub aruba_ap_fqln {
my $aruba = shift;
# I don't think $partial is meaningful in this context
my $perap_fqln = $aruba->aruba_perap_fqln();
my $channel = $aruba->wlanAPBssidChannel();
my $aruba_ap_fqln = {};
# Channel index is: AP, radio, BSSID
foreach my $idx (keys %$channel) {
my @oid = split(/\./, $idx );
my $ap = join(".", @oid[0..5]);
my $bssid = join(".", @oid[7..12]);
$aruba_ap_fqln->{$bssid} = $perap_fqln->{$ap};
}
return $aruba_ap_fqln;
}
sub i_name {
my $aruba = shift;
my $partial = shift;
@@ -177,6 +223,7 @@ sub i_name {
my $i_index = $aruba->i_index($partial) || {};
my $i_name2 = $aruba->orig_i_name($partial) || {};
my $ap_name = $aruba->aruba_ap_name($partial) || {};
my $ap_fqln = $aruba->aruba_ap_fqln($partial) || {};
my %i_name;
foreach my $iid ( keys %$i_index ) {
@@ -190,7 +237,7 @@ sub i_name {
}
elsif ( $index =~ /(?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/ ) {
my $name = $ap_name->{$iid};
my $name = $ap_fqln->{$iid} || $ap_name->{$iid};
next unless defined $name;
$i_name{$index} = $name;
}
@@ -348,6 +395,26 @@ sub fw_mac {
return \%fw_mac;
}
# Return the BSSID in i_mac.
sub i_mac {
my $aruba = shift;
my $partial = shift;
# Start with the i_mac entries for the physical ports.
my $i_mac = $aruba->orig_i_mac($partial) || {};
# Add in all the BSSID entries.
my $i_index = $aruba->i_index($partial) || {};
foreach my $iid (keys %$i_index) {
my $index = $i_index->{$iid};
if ($index =~ /:/) {
$i_mac->{$index} = $index;
}
}
return $i_mac;
}
1;
__END__
@@ -471,12 +538,17 @@ Extends C<ifIndex> to support thin APs as device interfaces.
=item $aruba->interfaces()
Returns reference to map of IIDs to ports. Thin APs are implemented as device
interfaces. The thin AP MAC address is used as the port identifier.
interfaces. The thin AP BSSID is used as the port identifier.
=item $aruba->i_name()
Interface name. Returns (C<ifName>) for Ethernet interfaces and
(C<apLocation>) for thin AP interfaces.
(C<wlanAPFQLN> or C<apLocation>) for thin AP interfaces.
=item $aruba->i_mac()
Interface MAC address. Returns interface MAC address for Ethernet
interfaces and BSSID for thin AP interfaces.
=item $aruba->bp_index()
@@ -511,6 +583,10 @@ interface.
(C<apCurrentChannel>)
=item $aruba->aruba_ap_fqln()
Returns F<aruba_perap_fqln> indexed by BSSID instead of by AP.
=back
=head2 Aruba Switch AP Table (C<wlsxSwitchAccessPointTable>)
@@ -535,6 +611,16 @@ interface.
=back
=head2 Aruba AP Table (C<wlsxWlanAPTable>)
=over
=item $aruba->aruba_perap_fqln()
(C<wlanAPFQLN>)
=back
=head2 Aruba Switch Station Management Table (C<wlsxSwitchStationMgmtTable>)
=over

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
# Set for No CDP
%GLOBALS = (

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,

View File

@@ -46,7 +46,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,

View File

@@ -47,7 +47,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
@@ -95,7 +95,7 @@ sub i_duplex {
my $partial = shift;
my $interfaces = $c2900->interfaces($partial);
my $c2900_p_index = $c2900->c2900_p_index();
my $c2900_p_index = $c2900->c2900_p_index() || {};
my $c2900_p_duplex = $c2900->c2900_p_duplex();
my %reverse_2900 = reverse %$c2900_p_index;
@@ -119,7 +119,7 @@ sub i_duplex_admin {
my $partial = shift;
my $interfaces = $c2900->interfaces($partial);
my $c2900_p_index = $c2900->c2900_p_index();
my $c2900_p_index = $c2900->c2900_p_index() || {};
my $c2900_p_admin = $c2900->c2900_p_duplex_admin();
my %reverse_2900 = reverse %$c2900_p_index;
@@ -146,8 +146,8 @@ sub set_i_speed_admin {
# map speeds to those the switch will understand
my %speeds = qw/auto 1 10 10000000 100 100000000/;
my $c2900_p_index = $c2900->c2900_p_index();
my %reverse_2900 = reverse %$c2900_p_index;
my $c2900_p_index = $c2900->c2900_p_index() || {};
my %reverse_2900 = reverse %$c2900_p_index;
$speed = lc($speed);
@@ -166,8 +166,8 @@ sub set_i_duplex_admin {
# map a textual duplex to an integer one the switch understands
my %duplexes = qw/full 1 half 2 auto 3/;
my $c2900_p_index = $c2900->c2900_p_index();
my %reverse_2900 = reverse %$c2900_p_index;
my $c2900_p_index = $c2900->c2900_p_index() || {};
my %reverse_2900 = reverse %$c2900_p_index;
$duplex = lc($duplex);

View File

@@ -49,7 +49,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -50,7 +50,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,

View File

@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::FDP::MIBS,

View File

@@ -46,7 +46,7 @@ use SNMP::Info::CDP;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
@@ -607,6 +607,26 @@ sub c_platform {
return \%c_platform;
}
# POWER-ETHERNET-MIB doesn't define a mapping of its
# "module"/"port" index to ifIndex. Different vendors
# do this in different ways.
# HP switches use the ifIndex as port index, so we can
# ignore the module information and map the index directly
# onto an ifIndex.
sub peth_port_ifindex {
my $peth = shift;
my $partial = shift;
my $peth_port_status = $peth->peth_port_status($partial);
my $peth_port_ifindex;
foreach my $i ( keys %$peth_port_status ) {
my ( $module, $port ) = split( /\./, $i );
$peth_port_ifindex->{$i} = $port;
}
return $peth_port_ifindex;
}
1;
__END__
@@ -906,6 +926,11 @@ identifier (iid)
Returns (C<ifIndex>) for both key and value for 1600, 2424, 4000, and 8000
models since they seem to have problems with F<BRIDGE-MIB>
=item $hp->peth_port_ifindex()
Returns reference to hash of power Ethernet port table entries map back to
interface index (c<ifIndex>)
=back
=head2 Topology information

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( %SNMP::Info::Layer2::MIBS, );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer2::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
# Set for No CDP
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );

View File

@@ -47,7 +47,7 @@ use SNMP::Info::PowerEthernet;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -0,0 +1,552 @@
# SNMP::Info::Layer3::AlcatelLucent
# $Id$
#
# Copyright (c) 2008 Bill Fenner
#
# 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::AlcatelLucent;
use strict;
use Exporter;
use SNMP::Info::Layer3;
use SNMP::Info::MAU;
use SNMP::Info::LLDP;
@SNMP::Info::Layer3::AlcatelLucent::ISA = qw/SNMP::Info::LLDP SNMP::Info::MAU
SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::AlcatelLucent::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,
%SNMP::Info::MAU::MIBS,
%SNMP::Info::LLDP::MIBS,
'ALCATEL-IND1-DEVICES' => 'familyOmniSwitch7000',
'ALCATEL-IND1-CHASSIS-MIB' => 'chasEntPhysOperStatus',
'ALU-POWER-ETHERNET-MIB' => 'pethPsePortDetectionStatus',
);
# Alcatel provides their own version of the POWER-ETHERNET-MIB,
# off in vendor-space, without renaming any of the objects.
# This means we have to *not* load the POWER-ETHERNET-MIB
# but can then still use the standard PowerEthernet module,
# but cannot try both so we hope Alcatel doesn't stop supporting
# their private version even if they get around to supporting the
# standard.
delete $MIBS{'POWER-ETHERNET-MIB'};
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS, %SNMP::Info::MAU::GLOBALS,
%SNMP::Info::LLDP::GLOBALS,
);
%FUNCS = (
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::MAU::FUNCS,
%SNMP::Info::LLDP::FUNCS,
);
%MUNGE = (
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::MAU::MUNGE,
%SNMP::Info::LLDP::MUNGE,
);
# use MAU-MIB for admin. duplex and admin. speed
*SNMP::Info::Layer3::AlcatelLucent::i_duplex_admin
= \&SNMP::Info::MAU::mau_i_duplex_admin;
*SNMP::Info::Layer3::AlcatelLucent::i_speed_admin
= \&SNMP::Info::MAU::mau_i_speed_admin;
sub model {
my $alu = shift;
my $id = $alu->id();
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
$model =~ s/^device//;
return $model;
}
sub os {
return 'AOS';
}
sub vendor {
return 'alcatel-lucent';
}
sub os_ver {
my $alu = shift;
my $descr = $alu->description();
if ( $descr =~ m/^(\S+)/ ) {
return $1;
}
# No clue what this will try but hey
return $alu->SUPER::os_ver();
}
# ps1_type, ps1_status, ps2_type, ps2_status:
# Find the list of power supplies in the ENTITY-MIB
# e_class = powerSupply
# e_descr = ps_type
# chasEntPhysOperStatus = ps_status
sub _power_supplies {
my $alu = shift;
my $e_class = $alu->e_class();
my @supplies = ();
foreach my $key ( sort { int($a) cmp int($b) } keys %$e_class ) {
if ( $e_class->{$key} eq 'powerSupply' ) {
push( @supplies, int($key) );
}
}
return @supplies;
}
sub _ps_type {
my $alu = shift;
my $psnum = shift;
my @ps = $alu->_power_supplies();
if ( $psnum > $#ps ) {
return "none";
}
my $supply = $ps[$psnum];
my $descr = $alu->e_descr($supply);
return $descr->{$supply};
}
sub _ps_status {
my $alu = shift;
my $psnum = shift;
my @ps = $alu->_power_supplies();
if ( $psnum > $#ps ) {
return "not present";
}
my $supply = $ps[$psnum];
my $status = $alu->chasEntPhysOperStatus($supply);
return $status->{$supply};
}
sub ps1_type {
my $alu = shift;
return $alu->_ps_type(0);
}
sub ps2_type {
my $alu = shift;
return $alu->_ps_type(1);
}
sub ps1_status {
my $alu = shift;
return $alu->_ps_status(0);
}
sub ps2_status {
my $alu = shift;
return $alu->_ps_status(1);
}
# The interface description contains the software version, so
# to avoid losing historical information through a software upgrade
# we use interface name instead.
sub interfaces {
my $alu = shift;
my $partial = shift;
return $alu->orig_i_name($partial);
}
# Use Q-BRIDGE-MIB
sub fw_mac {
my $alu = shift;
my $partial = shift;
return $alu->qb_fw_mac($partial);
}
sub fw_port {
my $alu = shift;
my $partial = shift;
return $alu->qb_fw_port($partial);
}
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
sub bp_index {
my $alu = shift;
my $partial = shift;
my $bp_index = $alu->SUPER::bp_index($partial);
#
# This device sometimes reports an ifIndex and sometimes reports
# dot1dBasePort for the dot1d port values - e.g.,
# in 6.3.1.871.R01 both dot1dTpFdbPort and dot1qTpFdbPort report
# the ifIndex; in 6.3.1.975.R01 dot1dTpFdbPort has been updated
# to report the dot1dBasePort but dot1qTpFdbPort still returns an
# ifIndex. For this reason, we augment the dot1dBasePort
# mapping with ifIndex->ifIndex mappings -- we can do this because
# the ifIndex and dot1dBasePort spaces don't overlap, at least for
# the ports we care about.
my @keys = keys %$bp_index;
foreach my $idx (@keys) {
my $ifIndex = $bp_index->{$idx};
$bp_index->{$ifIndex} = $ifIndex;
}
#
# In addition, aggregates aren't reported at all in bp_index.
# We grab them from i_index.
my $i_index = $alu->i_index();
foreach my $idx ( keys %$i_index ) {
my $ifIndex = $i_index->{$idx};
if ( int($ifIndex) > 40000001 ) {
$bp_index->{$ifIndex} = $ifIndex;
# dot1dTpFdbPort seems to use 4098, 4099, 4100 for
# 40000001, 40000002, 40000003. I guess this is
# 4096 + 1 + aggregate number.
my $tmp = sprintf( "%d", int($ifIndex) - 39995903 );
$bp_index->{$tmp} = $ifIndex;
}
}
return $bp_index;
}
# Workaround for unimplemented Q-BRIDGE-MIB::dot1qPvid
# If there is only one VLAN on which a given port is output
# untagged, then call that one the PVID. This is a guess that
# works in obvious configurations but may be wrong in
# subtle cases (like there's one output VLAN but a different
# input one - the only way to know that is via the dot1qPvid
# object)
#
# Newer versions have implemented dot1qPvid (but wrong, but
# that's just life)
#sub i_vlan {
# my $alu = shift;
#
# my $qb_v_untagged = $alu->qb_v_untagged();
# my $bp_index = $alu->bp_index();
# my $vlan_list = {};
# foreach my $vlan (keys %$qb_v_untagged) {
# my $portlist = $qb_v_untagged->{$vlan};
# my $port;
# for ($port = 0; $port <= $#$portlist; $port++) {
# if ($portlist->[$port]) {
# my $ifindex = $bp_index->{$port + 1};
# if ($ifindex) {
# push(@{$vlan_list->{$ifindex}}, int($vlan));
# }
# }
# }
# }
#
# my $i_vlan = {};
# foreach my $ifindex (keys %$vlan_list) {
# if ($#{$vlan_list->{$ifindex}} == 0) {
# $i_vlan->{$ifindex} = ${$vlan_list->{$ifindex}}[0];
# }
# }
# return $i_vlan;
#}
# Use LLDP
# (or at least try. The versions I've seen have two problems:
# 1. they report ifIndex values as 'local'; we don't support ifIndex
# but *could*
# 2. They report 0.0.0.0 as the management address
# )
sub hasCDP {
my $alu = shift;
return $alu->hasLLDP();
}
sub c_ip {
my $alu = shift;
my $partial = shift;
return $alu->lldp_ip($partial);
}
sub c_if {
my $alu = shift;
my $partial = shift;
return $alu->lldp_if($partial);
}
sub c_port {
my $alu = shift;
my $partial = shift;
return $alu->lldp_port($partial);
}
sub c_id {
my $alu = shift;
my $partial = shift;
return $alu->lldp_id($partial);
}
sub c_platform {
my $alu = shift;
my $partial = shift;
return $alu->lldp_rem_sysdesc($partial);
}
# Power-Ethernet ifIndex mapping. I've only seen this from a
# fixed-config single-module system, so this is only a plausible
# guess as to the mapping on a stack or modular system.
sub peth_port_ifindex {
my $alu = shift;
my $partial = shift;
my $peth_port_status = $alu->peth_port_status($partial);
my $peth_port_ifindex = {};
foreach my $key ( keys %$peth_port_status ) {
my @oid = split( m/\./, $key );
$peth_port_ifindex->{$key} = int( $oid[0] ) * 1000 + int( $oid[1] );
}
return $peth_port_ifindex;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::AlcatelLucent - SNMP Interface to Alcatel-Lucent OmniSwitch
=head1 AUTHOR
Bill Fenner
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $alu = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $alu->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Alcatel-Lucent OmniSwitch devices
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=item SNMP::Info::MAU
=item SNMP::Info::LLDP
=back
=head2 Required MIBs
=over
=item F<ALCATEL-IND1-DEVICES>
=item F<ALCATEL-IND1-CHASSIS-MIB>
=item F<ALU-POWER-ETHERNET-MIB>
Note that Alcatel-Lucent distributes their own proprietary version of the
F<POWER-ETHERNET-MIB>, but the MIB module name that they distribute is
simply F<POWER-ETHERNET-MIB>. This module must be hand-edited to change the
module name to F<ALU-POWER-ETHERNET-MIB> so that it can be used simultaneously
with the standard F<POWER-ETHERNET-MIB>.
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $alu->vendor()
Returns 'alcatel-lucent'
=item $alu->hasCDP()
Returns whether LLDP is enabled.
=item $alu->model()
Tries to reference $alu->id() to one of the product MIBs listed above
Removes 'device' from the name for readability.
=item $alu->os()
Returns 'AOS'
=item $alu->os_ver()
Grabs the os version from C<sysDescr>
=item $alu->ps1_type()
Return the type of the first power supply from the F<ENTITY-MIB>
=item $alu->ps2_type()
Return the type of the second power supply from the F<ENTITY-MIB>
=item $alu->ps1_status()
Return the status of the first power supply from the F<ALCATEL-IND1-CHASSIS-MIB>
=item $alu->ps2_status()
Return the status of the second power supply from the F<ALCATEL-IND1-CHASSIS-MIB>
=back
=head2 Global Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
=head2 Global Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"GLOBALS"> for details.
=head2 Global Methods 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 $alu->interfaces()
Returns interface name from C<ifName>, since the default return value
of C<ifDescr> includes the OS version.
=item $alu->fw_mac()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=item $alu->fw_port()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=item $alu->bp_index()
Work around various bugs in the F<BRIDGE-MIB> and
F<Q-BRIDGE-MIB> implementations, by returning both
C<ifIndex> and C<dot1dBasePort> mappings to C<ifIndex> values.
=item $alu->c_id()
Returns LLDP information.
=item $alu->c_if()
Returns LLDP information.
=item $alu->c_ip()
Returns LLDP information.
=item $alu->c_platform()
Returns LLDP information.
=item $alu->c_port()
Returns LLDP information.
=item $alu->i_duplex_admin()
Returns info from F<MAU-MIB>
=item $alu->i_speed_admin()
Returns info from F<MAU-MIB>
=item $alu->peth_port_ifindex()
Returns the C<ifIndex> value for power-ethernet ports
using the OmniSwitch algorithm.
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::MAU
See documentation in L<SNMP::Info::MAU/"TABLE METHODS"> for details.
=head2 Table Methods imported from SNMP::Info::LLDP
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
=cut

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
%MODID_MAP %PROCID_MAP/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS,

View File

@@ -53,7 +53,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,

View File

@@ -50,7 +50,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -55,7 +55,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,

View File

@@ -52,7 +52,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::MAU;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -44,7 +44,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( %SNMP::Info::Layer3::MIBS, );

View File

@@ -41,7 +41,7 @@ use SNMP::Info::SONMP;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS,

View File

@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
%SNMP::Info::Layer3::MIBS, %SNMP::Info::RapidCity::MIBS,
@@ -188,7 +188,7 @@ sub interfaces {
)
)
{
$vlan_index = $passport->rc_vlan_if();
$vlan_index = $passport->rc_vlan_if() || {};
%reverse_vlan = reverse %$vlan_index;
$vlan_id = $passport->rc_vlan_id();
}

View File

@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( %SNMP::Info::Layer3::MIBS, );

194
Info/Layer3/Timetra.pm Normal file
View File

@@ -0,0 +1,194 @@
# SNMP::Info::Layer3::Timetra
# $Id$
#
# Copyright (c) 2008 Bill Fenner
#
# 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::Timetra;
use strict;
use Exporter;
use SNMP::Info::Layer3;
@SNMP::Info::Layer3::Timetra::ISA = qw/SNMP::Info::Layer3
Exporter/;
@SNMP::Info::Layer3::Timetra::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
$VERSION = '2.00';
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, );
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
sub model {
my $timetra = shift;
my $id = $timetra->id();
my $model = &SNMP::translateObj($id);
return $id unless defined $model;
$model =~ s/^tmnxModel//;
return $model;
}
sub os {
return 'TiMOS';
}
sub vendor {
return 'alcatel-lucent';
}
sub os_ver {
my $timetra = shift;
my $descr = $timetra->description();
if ( $descr =~ m/^TiMOS-(\S+)/ ) {
return $1;
}
# No clue what this will try but hey
return $timetra->SUPER::os_ver();
}
# The interface description contains the SFP type, so
# to avoid losing historical information through a configuration change
# we use interface name instead.
sub interfaces {
my $alu = shift;
my $partial = shift;
return $alu->orig_i_name($partial);
}
1;
__END__
=head1 NAME
SNMP::Info::Layer3::Timetra - SNMP Interface to Alcatel-Lucent SR
=head1 AUTHOR
Bill Fenner
=head1 SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $alu = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
# These arguments are passed directly to SNMP::Session
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $alu->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
=head1 DESCRIPTION
Subclass for Alcatel-Lucent Service Routers
=head2 Inherited Classes
=over
=item SNMP::Info::Layer3
=back
=head2 Required MIBs
=over
=item F<TIMETRA-GLOBAL-MIB>
=item Inherited Classes' MIBs
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
=back
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $alu->vendor()
Returns 'alcatel-lucent'
=item $alu->os()
Returns 'TiMOS'
=item $alu->os_ver()
Grabs the version string from C<sysDescr>.
=item $alu->model()
Tries to reference $alu->id() to one of the product MIBs listed above
Removes 'tmnxModel' from the name for readability.
=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 $alu->interfaces()
Returns C<ifName>, since the default Layer3 C<ifDescr> varies based
upon the transceiver inserted.
=back
=head2 Table Methods imported from SNMP::Info::Layer3
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
=cut

View File

@@ -41,7 +41,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'MAU-MIB' => 'mauMod' );
@@ -170,16 +170,15 @@ sub mau_i_duplex_admin {
my $mau = shift;
my $partial = shift;
my $mau_index = $mau->mau_index();
my %rev_mau_index = reverse %$mau_index;
my $mau_autostat
= defined $partial
? $mau->mau_autostat( $rev_mau_index{$partial} )
: $mau->mau_autostat();
my $mau_type_admin
= defined $partial
? $mau->mau_type_admin( $rev_mau_index{$partial} )
: $mau->mau_type_admin();
my $mau_index = $mau->mau_index() || {};
if ($partial) {
my %rev_mau_index = reverse %$mau_index;
$partial = $rev_mau_index{$partial};
}
my $mau_autostat = $mau->mau_autostat($partial) || {};
my $mau_type_admin = $mau->mau_type_admin($partial) || {};
# Older HP4000's don't implement ifMauDefaultType, but we can
# figure out from ifMauAutoNegCapAdvertised what we'd like.

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'POWER-ETHERNET-MIB' => 'pethPsePortDetectionStatus' );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = ( 'RAPID-CITY' => 'rapidCity', );

View File

@@ -39,7 +39,7 @@ use SNMP::Info;
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
$VERSION = '1.09';
$VERSION = '2.00';
%MIBS = (
'SYNOPTICS-ROOT-MIB' => 'synoptics',

View File

@@ -45,6 +45,7 @@ Info/Layer2/Orinoco.pm
Info/Layer2/ZyXEL_DSLAM.pm
Info/Layer3.pm
Info/Layer3/Aironet.pm
Info/Layer3/AlcatelLucent.pm
Info/Layer3/AlteonAD.pm
Info/Layer3/BayRS.pm
Info/Layer3/C3550.pm
@@ -64,6 +65,7 @@ Info/Layer3/Netscreen.pm
Info/Layer3/NetSNMP.pm
Info/Layer3/Passport.pm
Info/Layer3/Sun.pm
Info/Layer3/Timetra.pm
Info/LLDP.pm
Info/MAU.pm
Info/NortelStack.pm

5
README
View File

@@ -5,7 +5,7 @@ NAME
VERSION
SNMP::Info - Version 1.09
SNMP::Info - Version 2.00
AUTHOR
@@ -759,6 +759,8 @@ USAGE
Layer3 Support -> SNMP::Info::Layer3
Aironet (BR500,AP340,350,1200) -> SNMP::Info::Layer3::Aironet
AP4800... All Non IOS
Alcatel-Lucent OmniSwitch -> SNMP::Info::Layer3::AlcatelLucent
Alcatel-Lucent Service Router -> SNMP::Info::Layer3::Timetra
Catalyst 3550,3548,3560 -> SNMP::Info::Layer3::C3550
Catalyst 4000,4500 -> SNMP::Info::Layer3::C4000
Catalyst 6500,3750 -> SNMP::Info::Layer3::C6500
@@ -815,6 +817,7 @@ USAGE
Else -> SNMP::Info
ZyXEL_DSLAM -> SNMP::Info::Layer2::ZyXEL_DSLAM
Aruba wireless -> SNMP::Info::Layer2::Aruba
Alcatel OmniAccess -> SNMP::Info::Layer2::Aruba
Juniper NetScreen -> SNMP::Info::Layer3::Netscreen
$info->error(no_clear)

View File

@@ -5,7 +5,10 @@
use warnings;
use strict;
use Test::More;
use Test::Spelling;
eval "use Test::Spelling";
plan skip_all => "Test::Spelling required for checking spelling"
if $@;
set_spell_cmd('aspell list');
add_stopwords(<DATA>);
@@ -22,7 +25,9 @@ alteon
airespace
aironet
airos
Alcatel
alcatel
AOS
ap
APs
arn
@@ -49,6 +54,7 @@ bitmask
bladecenter
bln
bpdus
BSSID
bulkrepeaters
bulkwalk
cabletron
@@ -84,6 +90,7 @@ eigrp
erszenyi
ess
etherlike
ethernet
enterasys
extranet
fastiron
@@ -122,6 +129,7 @@ loopback
loopdetect
lorensen
lsb
Lucent
lucent
luiggi
lwapp
@@ -155,6 +163,7 @@ oem
ofdm
oid
oids
OmniSwitch
os
osi
ospf
@@ -210,6 +219,8 @@ telesys
tftp
tftpfilename
tftpserver
TiMOS
tmnxModel
tuttle
ucsc
uninstall
@@ -223,4 +234,4 @@ wlan
wlans
WS
zoltan
zyxel
zyxel

View File

@@ -5,12 +5,14 @@
use warnings;
use strict;
use File::Find;
use Test::More qw(no_plan);
use Test::More;
eval "use File::Slurp";
plan skip_all => "File::Slurp required for testing version sync"
if $@;
plan qw(no_plan);
my $last_version = undef;
find({wanted => \&check_version, no_chdir => 1}, 'blib');
if (! defined $last_version) {