Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14bf6b84d3 | ||
|
|
5c22a29e40 | ||
|
|
f1806f227b | ||
|
|
025e7b72b5 | ||
|
|
97b398051f | ||
|
|
e21d8516fb | ||
|
|
2972c70177 | ||
|
|
50b4274f68 | ||
|
|
75dc93f2c0 | ||
|
|
73fd627815 | ||
|
|
9e84141983 | ||
|
|
bd6591db7b | ||
|
|
515e876491 | ||
|
|
6105046ae9 | ||
|
|
f0eb0a9ded | ||
|
|
a227db586b | ||
|
|
04eafd3e61 | ||
|
|
3b25711e1f | ||
|
|
63687b5f8f | ||
|
|
cac2224fa1 | ||
|
|
44da7544b7 | ||
|
|
13478343cd | ||
|
|
a7aeae0aa2 | ||
|
|
876fb9946b | ||
|
|
e5853962b5 | ||
|
|
3eaa2ae230 | ||
|
|
cd1acd023e | ||
|
|
e2a314b553 | ||
|
|
102a2a03e8 | ||
|
|
8be0f9e06f | ||
|
|
40239ea078 | ||
|
|
47032cbb4a | ||
|
|
11dbeb2741 | ||
|
|
5242d16e02 | ||
|
|
428c007543 | ||
|
|
d0fbfdea86 | ||
|
|
b3fb18eee6 | ||
|
|
7d470fd0e8 | ||
|
|
295e6fb283 | ||
|
|
9e545e8cf8 | ||
|
|
182589745f | ||
|
|
bdfc430564 | ||
|
|
2da37f06ea | ||
|
|
eb5a492eb9 | ||
|
|
e79f031cb7 | ||
|
|
86909ae236 | ||
|
|
69861e7660 | ||
|
|
5054b1b5b5 | ||
|
|
a2496a536d | ||
|
|
f4ebe6a102 | ||
|
|
b10b922aa0 | ||
|
|
a8673cc076 | ||
|
|
2dd1cdc281 | ||
|
|
ccd03ae6d2 | ||
|
|
7e0771e065 | ||
|
|
e9fd3731a9 | ||
|
|
a5f242c28f | ||
|
|
feffa6d47e | ||
|
|
3bb33fa8d4 | ||
|
|
30a73c035a |
43
ChangeLog
43
ChangeLog
@@ -1,5 +1,48 @@
|
||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
||||
|
||||
version 2.08 (2012-07-15)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
* Basic support for APC UPS devices
|
||||
* [2993691] Support for SonicWALL devices in new class L3::SonicWALL (phishphreek)
|
||||
* [2996795] Support for Kentrox devices in new class L2::Kentrox (phishphreek)
|
||||
* [] Basic support for Blue Coat proxy devices in new class L3::BlueCoatSG (jeroenvi)
|
||||
* [] Support Cisco 6500 / Sup2T in L3::C6500 class (jeroenvi)
|
||||
|
||||
[ENHANCEMENTS]
|
||||
|
||||
* Pseudo ENTITY-MIB methods added to L3::Juniper for hardware information
|
||||
* Add method to report current transmit power of the radio interface,
|
||||
dot11_cur_tx_pwr_mw(), in Airespace class
|
||||
* [3085411] Activate L3 properties for Netgear GSM7224v2 (phishphreek)
|
||||
* [3085413] SNMP OIDs for Netgear Serial and OS Ver (phishphreek)
|
||||
* [3286549] Dell LLDP Support (Nico Giefing)
|
||||
* [3469527] Netgear LLDP Support (Nic Bernstein)
|
||||
* [3472052] moduleSerialNumber support for Cisco Stack (Slava)
|
||||
* [3523320] Better VLAN support in Juniper class (Web Bulley)
|
||||
* [3532261] LLDP support in C6500 and related (Carlos Vicente)
|
||||
* [3538949] Updated switch models in L2::HP (jeroenvi)
|
||||
|
||||
[BUG FIXES]
|
||||
|
||||
* Get OS version for Juniper devices not reporting in sysDescr
|
||||
* Correct base MAC reporting for Juniper devices
|
||||
* Correct reporting of SSID broadcast status in Airespace class
|
||||
* [3541442] Change L2::Catalyst port names to what is reported in CDP
|
||||
* [2132349] Add an additional check to get Foundry OS version
|
||||
* [2929883] [3413999] LLDP interface mapping issue
|
||||
* [3297786] LLDP TimeMark component defaults to zero (David Baldwin)
|
||||
* [2988163] Detect Juniper SSG firewalls as Layer3::Netscreen (R. Kerr)
|
||||
* [3317739] Fix for Baystack without POE on stack member 1 (David Baldwin)
|
||||
* [2037444] os_ver fails on some Extreme versions (Robert Kerr)
|
||||
* [2980789] Fix root_ip to try OSPF RouterID first (Brian De Wolf)
|
||||
* [2986858] Fix the patch from this ticket (Oliver Gorwits)
|
||||
* [3136084] Rename Allied Telesyn to Allied Telesis (Oliver Gorwits)
|
||||
* [3268104] CiscoVTP.pm i_vlan_membership() array bounds (Michael Sanderson)
|
||||
* [3497004] Clarify POD description of default values (a2w)
|
||||
* [3502533] Layer2/Baystack interface indexes > 513 (Robert Nyqvist)
|
||||
|
||||
version 2.06 (2011-09-28)
|
||||
|
||||
[NEW FEATURES]
|
||||
|
||||
@@ -45,7 +45,7 @@ device: All
|
||||
#
|
||||
# Allied
|
||||
#
|
||||
device-vendor: Allied Telesyn
|
||||
device-vendor: Allied Telesis
|
||||
cdp:no
|
||||
class: Layer1::Allied
|
||||
ver: 1
|
||||
@@ -637,6 +637,14 @@ device: Linux routers
|
||||
device-family: BSD
|
||||
device: BSD routers
|
||||
|
||||
#
|
||||
# Kentrox
|
||||
#
|
||||
device-vendor: Kentrox
|
||||
note: MIB not yet shipped
|
||||
|
||||
device: Kentrox DataSMART DSU/CSU
|
||||
|
||||
#
|
||||
# NORTEL
|
||||
#
|
||||
@@ -837,6 +845,12 @@ device: AP-1000,AP-2000,AP-4000
|
||||
|
||||
device: WavePOINT-II
|
||||
|
||||
#
|
||||
# SonicWALL
|
||||
#
|
||||
device-vendor: SonicWALL
|
||||
class: Layer3::SonicWALL
|
||||
|
||||
#
|
||||
# Sun
|
||||
#
|
||||
|
||||
88
Info.pm
88
Info.pm
@@ -1,6 +1,6 @@
|
||||
# SNMP::Info
|
||||
#
|
||||
# Copyright (c) 2003-2010 Max Baker and SNMP::Info Developers
|
||||
# Copyright (c) 2003-2012 Max Baker and SNMP::Info Developers
|
||||
# All rights reserved.
|
||||
#
|
||||
# Portions Copyright (c) 2002-2003, Regents of the University of California
|
||||
@@ -23,7 +23,7 @@ use vars
|
||||
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
|
||||
$NOSUCH $BIGINT $REPEATERS/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
=head1 NAME
|
||||
|
||||
@@ -31,7 +31,7 @@ SNMP::Info - Object Oriented Perl5 Interface to Network devices and MIBs through
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
SNMP::Info - Version 2.06
|
||||
SNMP::Info - Version 2.08
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -417,7 +417,7 @@ See documentation in L<SNMP::Info::Layer1> for details.
|
||||
|
||||
=item SNMP::Info::Layer1::Allied
|
||||
|
||||
Subclass for Allied Telesys Repeaters / Hubs.
|
||||
Subclass for Allied Telesis Repeaters / Hubs.
|
||||
|
||||
Requires F<ATI-MIB>
|
||||
|
||||
@@ -476,7 +476,7 @@ See documentation in L<SNMP::Info::Layer2::Aironet> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::Allied
|
||||
|
||||
Allied Telesys switches.
|
||||
Allied Telesis switches.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::Allied> for details.
|
||||
|
||||
@@ -493,6 +493,10 @@ and probably others.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2::Baystack> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::Kentrox
|
||||
|
||||
Class for Kentrox DataSMART DSU/CSU. See L<SNMP::Info::Layer2::Kentrox> for details.
|
||||
|
||||
=item SNMP::Info::Layer2::C1900
|
||||
|
||||
Subclass for Cisco Catalyst 1900 and 1900c Devices running CatOS.
|
||||
@@ -637,6 +641,12 @@ ARN, AN, 2430, and 5430 routers.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::BayRS> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::BlueCoatSG
|
||||
|
||||
Subclass for Blue Coat SG series proxy devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::BlueCoatSG> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::C3550
|
||||
|
||||
Subclass for Cisco Catalyst 3550,3540,3560 2/3 switches running IOS.
|
||||
@@ -762,6 +772,11 @@ Subclass for FreeBSD-Based Firewalls using Pf /Pf Sense
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3::Pf> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::SonicWALL
|
||||
|
||||
Subclass for generic SonicWALL devices. See documentation in
|
||||
L<SNMP::Info::Layer3::SonicWALL> for details.
|
||||
|
||||
=item SNMP::Info::Layer3::Sun
|
||||
|
||||
Subclass for Generic Sun Routers running SunOS.
|
||||
@@ -778,6 +793,26 @@ See documentation in L<SNMP::Info::Layer3::Timetra> for details.
|
||||
|
||||
=back
|
||||
|
||||
=over 4
|
||||
|
||||
=item SNMP::Info::Layer7
|
||||
|
||||
Generic Layer7 Devices.
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7> for details.
|
||||
|
||||
=over 4
|
||||
|
||||
=item SNMP::Info::Layer7::APC
|
||||
|
||||
SNMP Interface to APC UPS devices
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7::APC> for details.
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
|
||||
=head1 Thanks
|
||||
|
||||
Thanks for testing and coding help (in no particular order) to :
|
||||
@@ -819,14 +854,14 @@ SNMP::Info Specific Arguments :
|
||||
|
||||
Returns an object of a more specific device class
|
||||
|
||||
(default on)
|
||||
(default 0, which means "off")
|
||||
|
||||
=item BigInt
|
||||
|
||||
Return Math::BigInt objects for 64 bit counters. Sets on a global scope,
|
||||
not object.
|
||||
|
||||
(default off)
|
||||
(default 0, which means "off")
|
||||
|
||||
=item BulkWalk
|
||||
|
||||
@@ -834,7 +869,7 @@ Set to C<0> to turn off BULKWALK commands for SNMPv2 connections.
|
||||
|
||||
Note that BULKWALK is turned off for Net-SNMP versions 5.1.x because of a bug.
|
||||
|
||||
(default on)
|
||||
(default 1, which means "on")
|
||||
|
||||
=item BulkRepeaters
|
||||
|
||||
@@ -852,14 +887,14 @@ operation, Net-SNMP's internal bulkwalk function must detect the loop.
|
||||
|
||||
Set to C<0> to turn off loop detection.
|
||||
|
||||
(default on)
|
||||
(default 1, which measn "on")
|
||||
|
||||
=item Debug
|
||||
|
||||
Prints Lots of debugging messages.
|
||||
Pass 2 to print even more debugging messages.
|
||||
|
||||
(default off)
|
||||
(default 0, which means "off")
|
||||
|
||||
=item DebugSNMP
|
||||
|
||||
@@ -881,7 +916,7 @@ such variable in this MIB". Set to false if so desired. This feature lets
|
||||
you read SNMPv2 data from an SNMP version 1 connection, and should probably
|
||||
be left on.
|
||||
|
||||
(default true)
|
||||
(default 1, which means "on")
|
||||
|
||||
=item Session
|
||||
|
||||
@@ -1216,7 +1251,7 @@ sub device_type {
|
||||
carp("Device doesn't implement sysServices but did return sysDescr. Might give unexpected results.\n") if $info->debug();
|
||||
} else {
|
||||
# No sysServices, no sysDescr
|
||||
return undef;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1239,6 +1274,8 @@ sub device_type {
|
||||
2636 => 'SNMP::Info::Layer3::Juniper',
|
||||
2925 => 'SNMP::Info::Layer1::Cyclades',
|
||||
3076 => 'SNMP::Info::Layer3::Altiga',
|
||||
3417 => 'SNMP::Info::Layer3::BlueCoatSG',
|
||||
4526 => 'SNMP::Info::Layer2::Netgear',
|
||||
5624 => 'SNMP::Info::Layer3::Enterasys',
|
||||
6486 => 'SNMP::Info::Layer3::AlcatelLucent',
|
||||
6527 => 'SNMP::Info::Layer3::Timetra',
|
||||
@@ -1266,6 +1303,10 @@ sub device_type {
|
||||
14823 => 'SNMP::Info::Layer3::Aruba',
|
||||
);
|
||||
|
||||
my %l7sysoidmap = (
|
||||
318 => 'SNMP::Info::Layer7::APC',
|
||||
);
|
||||
|
||||
# Get just the enterprise number for generic mapping
|
||||
$id = $1 if ( defined($id) && $id =~ /^\.1\.3\.6\.1\.4\.1\.(\d+)/ );
|
||||
|
||||
@@ -1293,13 +1334,17 @@ sub device_type {
|
||||
and $desc =~ /\D(CAP340|AP340|CAP350|350|1200)\D/ );
|
||||
$objtype = 'SNMP::Info::Layer3::Aironet'
|
||||
if ( $desc =~ /Aironet/ and $desc =~ /\D(AP4800)\D/ );
|
||||
|
||||
# Cat6k with older SUPs (hybrid CatOS/IOS?)
|
||||
$objtype = 'SNMP::Info::Layer3::C6500' if $desc =~ /(c6sup2|c6sup1)/;
|
||||
|
||||
# Cat6k with Sup720, Sup720 or Sup2T (and Sup2 running native IOS?)
|
||||
$objtype = 'SNMP::Info::Layer3::C6500'
|
||||
if $desc =~ /(s72033_rp|s3223_rp|s32p3_rp|s222_rp|s2t54)/;
|
||||
|
||||
# Next one untested. Reported working by DA
|
||||
$objtype = 'SNMP::Info::Layer3::C6500'
|
||||
if ( $desc =~ /cisco/i and $desc =~ /3750/ );
|
||||
$objtype = 'SNMP::Info::Layer3::C6500'
|
||||
if $desc =~ /(s72033_rp|s3223_rp|s32p3_rp|s222_rp)/;
|
||||
|
||||
# Cisco 2970
|
||||
$objtype = 'SNMP::Info::Layer3::C6500'
|
||||
@@ -1337,7 +1382,10 @@ sub device_type {
|
||||
# Nortel Contivity
|
||||
$objtype = 'SNMP::Info::Layer3::Contivity' if $desc =~ /(\bCES\b|\bNVR\sV\d)/;
|
||||
|
||||
# Allied Telesyn Layer2 managed switches. They report they have L3 support
|
||||
# SonicWALL
|
||||
$objtype = 'SNMP::Info::Layer3::SonicWALL' if $desc =~ /SonicWALL/i;
|
||||
|
||||
# Allied Telesis Layer2 managed switches. They report they have L3 support
|
||||
$objtype = 'SNMP::Info::Layer2::Allied'
|
||||
if ( $desc =~ /Allied.*AT-80\d{2}\S*/i );
|
||||
|
||||
@@ -1420,6 +1468,10 @@ sub device_type {
|
||||
=~ /^(BayStack|Ethernet\s+(Routing\s+)??Switch)\s[2345](\d){2,3}/i
|
||||
);
|
||||
|
||||
# Kentrox DataSMART DSU/CSU
|
||||
$objtype = 'SNMP::Info::Layer2::Kentrox'
|
||||
if ( $desc =~ /^DataSMART/i );
|
||||
|
||||
# Nortel Business Ethernet Switch
|
||||
$objtype = 'SNMP::Info::Layer2::Baystack'
|
||||
if ( $desc =~ /^Business Ethernet Switch\s[12]\d\d/i );
|
||||
@@ -1497,7 +1549,7 @@ sub device_type {
|
||||
|
||||
#Juniper NetScreen
|
||||
$objtype = 'SNMP::Info::Layer3::Netscreen'
|
||||
if ( $desc =~ /NetScreen/i );
|
||||
if ( $desc =~ /NetScreen|SSG/i );
|
||||
|
||||
# Cisco PIX
|
||||
$objtype = 'SNMP::Info::Layer3::Cisco'
|
||||
@@ -1517,6 +1569,10 @@ sub device_type {
|
||||
$objtype = $l3sysoidmap{$id};
|
||||
} elsif ( defined $l2sysoidmap{$id}) {
|
||||
$objtype = $l2sysoidmap{$id};
|
||||
} elsif ( defined $l7sysoidmap{$id}) {
|
||||
$objtype = $l7sysoidmap{$id};
|
||||
} elsif ($info->has_layer(7)) {
|
||||
$objtype = 'SNMP::Info::Layer7'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -83,7 +83,8 @@ $VERSION = '2.06';
|
||||
'airespace_ess_qos' => 'bsnDot11EssQualityOfService',
|
||||
'airespace_ess_ifname' => 'bsnDot11EssInterfaceName',
|
||||
'airespace_ess_aclname' => 'bsnDot11EssAclName',
|
||||
|
||||
'airespace_ess_bcast' => 'bsnDot11EssBroadcastSsid',
|
||||
|
||||
# AIRESPACE-WIRELESS-MIB::bsnAPTable
|
||||
'airespace_ap_mac' => 'bsnAPDot3MacAddress',
|
||||
'airespace_ap_name' => 'bsnAPName',
|
||||
@@ -105,6 +106,7 @@ $VERSION = '2.06';
|
||||
'airespace_apif' => 'bsnAPIfOperStatus',
|
||||
'airespace_apif_oride' => 'bsnAPIfWlanOverride',
|
||||
'airespace_apif_admin' => 'bsnAPIfAdminStatus',
|
||||
'airespace_apif_a_pwr' => 'bsnAPIfAbsolutePowerList',
|
||||
|
||||
# AIRESPACE-WIRELESS-MIB::bsnMobileStationTable
|
||||
'airespace_sta_mac' => 'bsnMobileStationAPMacAddr',
|
||||
@@ -631,15 +633,27 @@ sub i_ssidbcast {
|
||||
my $airespace = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $ssidlist = $airespace->i_ssidlist($partial) || {};
|
||||
my $bc_mode = $airespace->airespace_bssid_mode() || 'enable';
|
||||
my $ssidlist = $airespace->i_ssidlist($partial) || {};
|
||||
my $bc_mode = $airespace->airespace_bssid_mode() || 'enable';
|
||||
my $ess_bc_mode = $airespace->airespace_ess_bcast() || {};
|
||||
my $ssids = $airespace->airespace_ess_ssid() || {};
|
||||
my %ssid_index = reverse %$ssids;
|
||||
|
||||
my %bcmap = qw/enable 1 disable 0/;
|
||||
my $broadcast = $bcmap{$bc_mode};
|
||||
|
||||
my %i_ssidbcast;
|
||||
foreach my $iid ( keys %$ssidlist ) {
|
||||
$i_ssidbcast{$iid} = $broadcast;
|
||||
if (!$broadcast) {
|
||||
$i_ssidbcast{$iid} = $broadcast;
|
||||
next;
|
||||
}
|
||||
else {
|
||||
my $ssid = $ssidlist->{$iid};
|
||||
my $ssid_idx = $ssid_index{$ssid};
|
||||
my $bc = $ess_bc_mode->{$ssid_idx};
|
||||
$i_ssidbcast{$iid} = $bcmap{$bc};
|
||||
}
|
||||
}
|
||||
|
||||
return \%i_ssidbcast;
|
||||
@@ -661,6 +675,28 @@ sub i_80211channel {
|
||||
return \%i_80211channel;
|
||||
}
|
||||
|
||||
sub dot11_cur_tx_pwr_mw {
|
||||
my $airespace = shift;
|
||||
my $partial = shift;
|
||||
my $cur = $airespace->airespace_apif_power($partial);
|
||||
my $pwr_abs = $airespace->airespace_apif_a_pwr($partial);
|
||||
|
||||
my $dot11_cur_tx_pwr_mw = {};
|
||||
foreach my $idx ( keys %$cur ) {
|
||||
my $pwr = $cur->{$idx};
|
||||
if ( $pwr >= 1 && $pwr <= 8 ) {
|
||||
|
||||
my @pwr_list = split(/,/, $pwr_abs->{$idx} );
|
||||
$dot11_cur_tx_pwr_mw->{$idx} = $pwr_list[$pwr-1];
|
||||
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
}
|
||||
return $dot11_cur_tx_pwr_mw;
|
||||
}
|
||||
|
||||
# Pseudo ENTITY-MIB methods
|
||||
|
||||
sub e_index {
|
||||
@@ -1147,6 +1183,11 @@ Returns reference to hash. Indicates whether the SSID is broadcast.
|
||||
Returns reference to hash. Current operating frequency channel of the radio
|
||||
interface.
|
||||
|
||||
=item $dot11->dot11_cur_tx_pwr_mw()
|
||||
|
||||
Returns reference to hash. Current transmit power, in milliwatts, of the
|
||||
radio interface.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Dot11 Ess Table (C<bsnDot11EssTable>)
|
||||
@@ -1214,6 +1255,12 @@ enabled.
|
||||
|
||||
(C<bsnDot11EssAclName>)
|
||||
|
||||
=item $airespace->airespace_ess_bcast()
|
||||
|
||||
This attribute when enabled allows the switch to broadcast this SSID.
|
||||
|
||||
(C<bsnDot11EssBroadcastSsid>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 AP Table (C<bsnAPTable>)
|
||||
@@ -1317,6 +1364,12 @@ However, if this is enabled, then only those WLANs that appear in the
|
||||
|
||||
(C<bsnAPIfAdminStatus>)
|
||||
|
||||
=item $airespace->airespace_apif_a_pwr()
|
||||
|
||||
List of comma separated absolute power levels supported by the radio.
|
||||
|
||||
(C<bsnAPIfAbsolutePowerList>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Mobile Station Table (C<bsnMobileStationTable>)
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# Five data structures required by SNMP::Info
|
||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||
|
||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
||||
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||
|
||||
@@ -65,6 +65,7 @@ $VERSION = '2.06';
|
||||
'm_type' => 'moduleType',
|
||||
'm_model' => 'moduleModel',
|
||||
'm_serial' => 'moduleSerialNumber',
|
||||
'm_serial_string' => 'moduleSerialNumberString',
|
||||
'm_status' => 'moduleStatus',
|
||||
'm_name' => 'moduleName',
|
||||
'm_ports' => 'moduleNumPorts',
|
||||
@@ -159,7 +160,7 @@ sub i_duplex {
|
||||
next if ( defined $partial and $iid !~ /^$partial$/ );
|
||||
|
||||
# Test for gigabit
|
||||
if ( $p_duplex_cap->{$port} && $p_duplex_cap->{$port} == 0 ) {
|
||||
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 0 ) {
|
||||
$i_duplex->{$iid} = 'full';
|
||||
}
|
||||
|
||||
@@ -194,7 +195,7 @@ sub i_duplex_admin {
|
||||
next if ( defined $partial and $iid !~ /^$partial$/ );
|
||||
|
||||
# Test for gigabit
|
||||
if ( $p_duplex_cap->{$port} && $p_duplex_cap->{$port} == 1 ) {
|
||||
if ( defined $p_duplex_cap->{$port} and $p_duplex_cap->{$port} == 1 ) {
|
||||
$i_duplex_admin->{$iid} = 'full';
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'SNMPv2-MIB' => 'sysDescr',
|
||||
|
||||
@@ -35,7 +35,7 @@ use SNMP::Info;
|
||||
use SNMP::Info::Bridge;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||
@@ -244,6 +244,7 @@ sub i_vlan_membership {
|
||||
next unless $list;
|
||||
my $vlanlist = [ split( //, unpack( "B*", $list ) ) ];
|
||||
foreach my $vlan ( keys %oper_vlans ) {
|
||||
next if (($vlan < $offset) or ($vlan - $offset > 1024));
|
||||
push( @{ $i_vlan_membership->{$port} }, $vlan )
|
||||
if ( @$vlanlist[ $vlan - $offset ] );
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||
|
||||
@@ -207,7 +207,7 @@ Human Friendly
|
||||
|
||||
=item $entity->e_fru()
|
||||
|
||||
BOOLEAN. Field Replaceable unit?
|
||||
BOOLEAN. Is a Field Replaceable unit?
|
||||
|
||||
(C<entPhysicalFRU>)
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ use Exporter;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ use constant {
|
||||
IPV6MIB => 3,
|
||||
};
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
|
||||
|
||||
|
||||
57
Info/LLDP.pm
57
Info/LLDP.pm
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||
@@ -95,14 +95,26 @@ sub hasLLDP {
|
||||
|
||||
sub lldp_if {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $addr = $lldp->lldp_rem_pid($partial) || {};
|
||||
my $partial = shift || 0;
|
||||
|
||||
my $addr = $lldp->lldp_rem_pid($partial) || {};
|
||||
my $i_descr = $lldp->i_description() || {};
|
||||
my %r_i_descr = reverse %$i_descr;
|
||||
|
||||
my %lldp_if;
|
||||
foreach my $key ( keys %$addr ) {
|
||||
my @aOID = split( '\.', $key );
|
||||
my $port = $aOID[1];
|
||||
next unless $port;
|
||||
# Local LLDP port may not equate to ifIndex
|
||||
# Cross reference lldpLocPortDesc with ifDescr to get ifIndex
|
||||
my $lldp_desc = $lldp->lldpLocPortDesc($port);
|
||||
my $desc = $lldp_desc->{$port};
|
||||
# If cross reference is successful use it, otherwise stick with lldpRemLocalPortNum
|
||||
if ( exists $r_i_descr{$desc} ) {
|
||||
$port = $r_i_descr{$desc};
|
||||
}
|
||||
|
||||
$lldp_if{$key} = $port;
|
||||
}
|
||||
return \%lldp_if;
|
||||
@@ -110,7 +122,7 @@ sub lldp_if {
|
||||
|
||||
sub lldp_ip {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
my $partial = shift || 0;
|
||||
|
||||
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||
|
||||
@@ -126,7 +138,7 @@ sub lldp_ip {
|
||||
|
||||
sub lldp_addr {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
my $partial = shift || 0;
|
||||
|
||||
my $rman_addr = $lldp->lldp_rman_addr($partial) || {};
|
||||
|
||||
@@ -141,7 +153,7 @@ sub lldp_addr {
|
||||
|
||||
sub lldp_port {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
my $partial = shift || 0;
|
||||
|
||||
my $pdesc = $lldp->lldp_rem_desc($partial) || {};
|
||||
my $pid = $lldp->lldp_rem_pid($partial) || {};
|
||||
@@ -176,7 +188,7 @@ sub lldp_port {
|
||||
|
||||
sub lldp_id {
|
||||
my $lldp = shift;
|
||||
my $partial = shift;
|
||||
my $partial = shift || 0;
|
||||
|
||||
my $ch_type = $lldp->lldp_rem_id_type($partial) || {};
|
||||
my $ch = $lldp->lldp_rem_id($partial) || {};
|
||||
@@ -191,13 +203,14 @@ sub lldp_id {
|
||||
# May need to format other types in the future
|
||||
if ( $type =~ /mac/ ) {
|
||||
$id = join( ':', map { sprintf "%02x", $_ } unpack( 'C*', $id ) );
|
||||
}elsif ($type eq 'networkAddress'){
|
||||
if ( length(unpack('H*', $id)) == 10 ){
|
||||
# IP address (first octet is sign, I guess)
|
||||
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
|
||||
$id = join '.', map { hex($_) } @octets;
|
||||
}
|
||||
}
|
||||
}
|
||||
elsif ($type eq 'networkAddress') {
|
||||
if ( length(unpack('H*', $id)) == 10 ) {
|
||||
# IP address (first octet is sign, I guess)
|
||||
my @octets = (map { sprintf "%02x",$_ } unpack('C*', $id))[1..4];
|
||||
$id = join '.', map { hex($_) } @octets;
|
||||
}
|
||||
}
|
||||
$lldp_id{$key} = $id;
|
||||
}
|
||||
return \%lldp_id;
|
||||
@@ -343,7 +356,7 @@ Nulls are removed before the value is returned.
|
||||
The string value used to identify the system description of the local system.
|
||||
If the local agent supports IETF RFC 3418, C<lldpLocSysDesc> object should
|
||||
have the same value of C<sysDesc> object.
|
||||
|
||||
|
||||
Nulls are removed before the value is returned.
|
||||
|
||||
(C<lldpLocSysDesc>)
|
||||
@@ -387,18 +400,24 @@ capability and nothing else."
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
Methods accessing the (C<lldpRemTable>) table use a partial value of zero if
|
||||
not provided to set the (C<lldpRemTimeMark>) TimeMark instance to a known value
|
||||
as per RFC 2021.
|
||||
|
||||
=over
|
||||
|
||||
=item $lldp->lldp_id()
|
||||
|
||||
Returns the string value used to identify the chassis component associated
|
||||
Returns the string value used to identify the chassis component associated
|
||||
with the remote system.
|
||||
|
||||
(C<lldpRemChassisId>)
|
||||
|
||||
=item $lldp->lldp_if()
|
||||
|
||||
Returns the mapping to the SNMP Interface Table.
|
||||
Returns the mapping to the SNMP Interface Table. Trys to cross reference
|
||||
(C<lldpLocPortDesc>) with (C<ifDescr>) to get (C<ifIndex>), if unable
|
||||
defaults to (C<lldpRemLocalPortNum>).
|
||||
|
||||
=item $lldp->lldp_ip()
|
||||
|
||||
@@ -429,7 +448,7 @@ the remote system.
|
||||
|
||||
=item $lldp->lldp_rem_id()
|
||||
|
||||
Returns the string value used to identify the chassis component associated
|
||||
Returns the string value used to identify the chassis component associated
|
||||
with the remote system.
|
||||
|
||||
(C<lldpRemChassisId>)
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer1::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -45,7 +45,7 @@ use SNMP::Info::PowerEthernet;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
|
||||
@@ -129,7 +129,7 @@ __END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Allied - SNMP Interface to Allied Telesyn switches
|
||||
SNMP::Info::Layer2::Allied - SNMP Interface to Allied Telesis switches
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = (
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||
@@ -162,7 +162,7 @@ sub interfaces {
|
||||
next unless defined $index;
|
||||
|
||||
# Ignore cascade ports
|
||||
next if $index > 513;
|
||||
next if $index > $index_factor * 8;
|
||||
|
||||
my $port = ( $index % $index_factor );
|
||||
my $slot = ( int( $index / $index_factor ) ) + $slot_offset;
|
||||
@@ -452,6 +452,23 @@ sub e_vendor {
|
||||
return $stack->SUPER::e_vendor($partial) || $stack->ns_e_vendor($partial);
|
||||
}
|
||||
|
||||
# fix for stack of switches without POE on module 1
|
||||
# https://sourceforge.net/tracker/?func=detail&aid=3317739&group_id=70362&atid=527529
|
||||
sub peth_port_ifindex {
|
||||
my $stack = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my %peth_port_ifindex = ();
|
||||
my $poe_port_st = $stack->peth_port_status($partial);
|
||||
my $if_index = $stack->interfaces($partial);
|
||||
|
||||
foreach my $i (keys %$if_index) {
|
||||
next unless defined $poe_port_st->{$if_index->{$i}};
|
||||
$peth_port_ifindex{$if_index->{$i}} = $i;
|
||||
}
|
||||
return \%peth_port_ifindex;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -628,6 +645,10 @@ revisions of Baystack firmware report all zeros for each port mac.
|
||||
Crosses C<ifName> with C<ifAlias> and returns the human set port name if
|
||||
exists.
|
||||
|
||||
=item $poe->peth_port_ifindex()
|
||||
|
||||
Maps the C<pethPsePortTable> to C<ifIndex> by way of the F<ENTITY-MIB>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 F<ENTITY-MIB> Information
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
|
||||
@@ -47,7 +47,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::GLOBALS,
|
||||
|
||||
@@ -49,7 +49,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
||||
@@ -148,7 +148,9 @@ sub interfaces {
|
||||
foreach my $iid ( keys %$i_index ) {
|
||||
next unless defined $iid;
|
||||
my $if = $i_index->{$iid};
|
||||
$if =~ s/\./\// if $if;
|
||||
my $port = $portmap{$iid};
|
||||
$port =~ s/\./\// if $port;
|
||||
$interfaces{$iid} = $port || $if;
|
||||
}
|
||||
return \%interfaces;
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
|
||||
@@ -50,7 +50,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::MAU;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::FDP::MIBS,
|
||||
|
||||
@@ -46,7 +46,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -148,6 +148,15 @@ $VERSION = '2.06';
|
||||
'J8771A' => '4202vl-48G',
|
||||
'J4865A' => '4108GL',
|
||||
'J4887A' => '4104GL',
|
||||
'J9588A' => '3800-48G-PoE+-4XG',
|
||||
'J9574A' => '3800-48G-PoE+-4SFP+',
|
||||
'J9586A' => '3800-48G-4XG',
|
||||
'J9576A' => '3800-48G-4SFP+',
|
||||
'J9584A' => '3800-24SFP-2SFP+',
|
||||
'J9587A' => '3800-24G-PoE+-2XG',
|
||||
'J9573A' => '3800-24G-PoE+-2SFP+',
|
||||
'J9585A' => '3800-24G-2XG',
|
||||
'J9575A' => '3800-24G-2SFP+',
|
||||
'J8693A' => '3500yl-48G-PWR',
|
||||
'J8692A' => '3500yl-24G-PWR',
|
||||
'J9473A' => '3500-48-PoE',
|
||||
@@ -177,6 +186,11 @@ $VERSION = '2.06';
|
||||
'J4900B' => '2626-CR',
|
||||
'J4900C' => '2626C',
|
||||
'J4900A' => '2626',
|
||||
'J9627A' => '2620-48-PoE+',
|
||||
'J9624A' => '2620-48',
|
||||
'J9624A' => '2620-24-PPoE+',
|
||||
'J9625A' => '2620-24-PoE+',
|
||||
'J9623A' => '2620-24',
|
||||
'J9565A' => '2615-8-PoE',
|
||||
'J9089A' => '2610-48-PWR',
|
||||
'J9088A' => '2610-48',
|
||||
@@ -185,10 +199,10 @@ $VERSION = '2.06';
|
||||
'J9085A' => '2610-24',
|
||||
'J8762A' => '2600-8-PWR',
|
||||
'J4813A' => '2524',
|
||||
'J9137A' => '2520-8-PoE',
|
||||
'J9138A' => '2520-24-PoE',
|
||||
'J9298A' => '2520G-8-PoE',
|
||||
'J9299A' => '2520G-24-PoE',
|
||||
'J9137A' => '2520-8-PoE',
|
||||
'J9138A' => '2520-24-PoE',
|
||||
'J4812A' => '2512',
|
||||
'J9280A' => '2510G-48',
|
||||
'J9279A' => '2510G-24',
|
||||
@@ -625,6 +639,7 @@ sub set_i_vlan_tagged {
|
||||
$hp->error_throw(sprintf("Requested VLAN %s doesn't seem to exist on device...", $vlan));
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -774,6 +789,15 @@ number and the common model number with this map :
|
||||
'J8771A' => '4202vl-48G',
|
||||
'J4865A' => '4108GL',
|
||||
'J4887A' => '4104GL',
|
||||
'J9588A' => '3800-48G-PoE+-4XG',
|
||||
'J9574A' => '3800-48G-PoE+-4SFP+',
|
||||
'J9586A' => '3800-48G-4XG',
|
||||
'J9576A' => '3800-48G-4SFP+',
|
||||
'J9584A' => '3800-24SFP-2SFP+',
|
||||
'J9587A' => '3800-24G-PoE+-2XG',
|
||||
'J9573A' => '3800-24G-PoE+-2SFP+',
|
||||
'J9585A' => '3800-24G-2XG',
|
||||
'J9575A' => '3800-24G-2SFP+',
|
||||
'J8693A' => '3500yl-48G-PWR',
|
||||
'J8692A' => '3500yl-24G-PWR',
|
||||
'J9473A' => '3500-48-PoE',
|
||||
@@ -784,6 +808,7 @@ number and the common model number with this map :
|
||||
'J4905A' => '3400cl-24G',
|
||||
'J4815A' => '3324XL',
|
||||
'J4851A' => '3124',
|
||||
'J9562A' => '2915-8G-PoE',
|
||||
'J9148A' => '2910al-48G-PoE+',
|
||||
'J9147A' => '2910al-48G',
|
||||
'J9146A' => '2910al-24G-PoE+',
|
||||
@@ -802,6 +827,12 @@ number and the common model number with this map :
|
||||
'J4900B' => '2626-CR',
|
||||
'J4900C' => '2626C',
|
||||
'J4900A' => '2626',
|
||||
'J9627A' => '2620-48-PoE+',
|
||||
'J9624A' => '2620-48',
|
||||
'J9624A' => '2620-24-PPoE+',
|
||||
'J9625A' => '2620-24-PoE+',
|
||||
'J9623A' => '2620-24',
|
||||
'J9565A' => '2615-8-PoE',
|
||||
'J9089A' => '2610-48-PWR',
|
||||
'J9088A' => '2610-48',
|
||||
'J9087A' => '2610-24-PWR',
|
||||
@@ -809,6 +840,8 @@ number and the common model number with this map :
|
||||
'J9085A' => '2610-24',
|
||||
'J8762A' => '2600-8-PWR',
|
||||
'J4813A' => '2524',
|
||||
'J9298A' => '2520G-8-PoE',
|
||||
'J9299A' => '2520G-24-PoE',
|
||||
'J9137A' => '2520-8-PoE',
|
||||
'J9138A' => '2520-24-PoE',
|
||||
'J4812A' => '2512',
|
||||
@@ -819,6 +852,8 @@ number and the common model number with this map :
|
||||
'J9019A' => '2510-24A',
|
||||
'J4818A' => '2324',
|
||||
'J4817A' => '2312',
|
||||
'J9449A' => '1810G-8',
|
||||
'J9450A' => '1810G-24',
|
||||
'J9029A' => '1800-8G',
|
||||
'J9028A' => '1800-24G',
|
||||
);
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
180
Info/Layer2/Kentrox.pm
Normal file
180
Info/Layer2/Kentrox.pm
Normal file
@@ -0,0 +1,180 @@
|
||||
package SNMP::Info::Layer2::Kentrox;
|
||||
|
||||
# Copyright (c) 2011 Netdisco Project
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer2;
|
||||
|
||||
@SNMP::Info::Layer2::Kentrox::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Kentrox::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS,
|
||||
#from DATASMART-MIB
|
||||
# MIB isn't yet in netdisco-mibs (not clear permission)
|
||||
# ... when it is, this can change to dsScWyv
|
||||
'ds_sysinfo' => '.1.3.6.1.4.1.181.2.2.12.15.0',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer2::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||
|
||||
sub os {
|
||||
return 'Kentrox';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $dsver = shift;
|
||||
my $descr = $dsver->description();
|
||||
if ( $descr =~ /^\S+\s\S+\s\S+\s(\S+)/){
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $dsserial = shift;
|
||||
my $serial = $dsserial->ds_sysinfo();
|
||||
if ( $serial =~ /SERIAL\s(\S+)/){
|
||||
my $str = substr($1,8,10);
|
||||
return $str;
|
||||
}
|
||||
|
||||
}
|
||||
sub vendor {
|
||||
return 'Kentrox';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $dsmodel = shift;
|
||||
my $descr = $dsmodel->description();
|
||||
if ( $descr =~ /^(\S+\s\S+)/){
|
||||
return $1;
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer2::Kentrox - SNMP Interface to L2 Kentrox DataSMART DSU/CSU
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
phishphreek@gmail.com
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $router = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 1
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $router->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Kentrox DataSMART DSU/CSU
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $router->vendor()
|
||||
|
||||
=item $router->os()
|
||||
|
||||
=item $router->os_ver()
|
||||
|
||||
=item $router->model()
|
||||
|
||||
=item $router->serial()
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
||||
|
||||
@@ -33,21 +33,26 @@ package SNMP::Info::Layer2::Netgear;
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer2;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Netgear::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer2 Exporter/;
|
||||
@SNMP::Info::Layer2::Netgear::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||
%MIBS = ( %SNMP::Info::Layer2::MIBS, %SNMP::Info::LLDP::MIBS, );
|
||||
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS, );
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::LLDP::GLOBALS,
|
||||
ng_serial => '.1.3.6.1.4.1.4526.10.1.1.1.4.0',
|
||||
ng_osver => '.1.3.6.1.4.1.4526.10.1.1.1.13.0',
|
||||
);
|
||||
|
||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::LLDP::FUNCS, );
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||
|
||||
sub vendor {
|
||||
return 'netgear';
|
||||
@@ -86,6 +91,63 @@ sub fw_port {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
# these seem to work for GSM models but not GS
|
||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
||||
sub os_ver {
|
||||
my $self = shift;
|
||||
return if $self->model and $self->model =~ m/GS\d/i;
|
||||
return $self->ng_osver();
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $self = shift;
|
||||
return if $self->model and $self->model =~ m/GS\d/i;
|
||||
return $self->ng_serial();
|
||||
}
|
||||
|
||||
# Use LLDP
|
||||
|
||||
sub hasCDP {
|
||||
my $netgear = shift;
|
||||
return $netgear->hasLLDP();
|
||||
}
|
||||
|
||||
sub c_ip {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $netgear->lldp_ip($partial);
|
||||
}
|
||||
|
||||
sub c_if {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $netgear->lldp_if($partial);
|
||||
}
|
||||
|
||||
sub c_port {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $netgear->lldp_port($partial);
|
||||
}
|
||||
|
||||
sub c_id {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $netgear->lldp_id($partial);
|
||||
}
|
||||
|
||||
sub c_platform {
|
||||
my $netgear = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $netgear->lldp_rem_sysdesc($partial);
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -96,7 +158,9 @@ SNMP::Info::Layer2::Netgear - SNMP Interface to Netgear switches
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Bill Fenner and Zoltan Erszenyi
|
||||
Bill Fenner and Zoltan Erszenyi,
|
||||
Hacked in LLDP support from Baystack.pm by
|
||||
Nic Bernstein <nic@onlight.com>
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
@@ -124,6 +188,7 @@ inherited methods.
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer2
|
||||
=item SNMP::Info::LLDP
|
||||
|
||||
=back
|
||||
|
||||
@@ -136,6 +201,8 @@ inherited methods.
|
||||
MIBs listed in L<SNMP::Info::Layer2/"Required MIBs"> and its inherited
|
||||
classes.
|
||||
|
||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
=back
|
||||
|
||||
=head1 GLOBALS
|
||||
@@ -158,12 +225,24 @@ Returns 'netgear'
|
||||
|
||||
Returns description()
|
||||
|
||||
=item $netgear->os_ver()
|
||||
|
||||
Returns OS Version.
|
||||
|
||||
=item $netgear->serial()
|
||||
|
||||
Returns Serial Number.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"GLOBALS"> for details.
|
||||
|
||||
=head2 Globals imported from SNMP::Info::LLDP
|
||||
|
||||
See documentation in L<SNMP::Info::LLDP/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of
|
||||
@@ -192,6 +271,49 @@ C<Q-BRIDGE-MIB> doesn't return anything.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Topology information
|
||||
|
||||
Based upon the software version devices may support Link Layer Discovery
|
||||
Protocol (LLDP).
|
||||
|
||||
=over
|
||||
|
||||
=item $netgear->hasCDP()
|
||||
|
||||
Returns true if the device is running LLDP.
|
||||
|
||||
=item $netgear->c_if()
|
||||
|
||||
Returns reference to hash. Key: iid Value: local device port (interfaces)
|
||||
|
||||
=item $netgear->c_ip()
|
||||
|
||||
Returns reference to hash. Key: iid Value: remote IPv4 address
|
||||
|
||||
If multiple entries exist with the same local port, c_if(), with the same IPv4
|
||||
address, c_ip(), it may be a duplicate entry.
|
||||
|
||||
If multiple entries exist with the same local port, c_if(), with different
|
||||
IPv4 addresses, c_ip(), there is either a non-LLDP device in between two or
|
||||
more devices or multiple devices which are not directly connected.
|
||||
|
||||
Use the data from the Layer2 Topology Table below to dig deeper.
|
||||
|
||||
=item $netgear->c_port()
|
||||
|
||||
Returns reference to hash. Key: iid Value: remote port (interfaces)
|
||||
|
||||
=item $netgear->c_id()
|
||||
|
||||
Returns reference to hash. Key: iid Value: string value used to identify the
|
||||
chassis component associated with the remote system.
|
||||
|
||||
=item $netgear->c_platform()
|
||||
|
||||
Returns reference to hash. Key: iid Value: Remote Device Type
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||
|
||||
See documentation in L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# Set for No CDP
|
||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||
|
||||
@@ -51,7 +51,7 @@ use SNMP::Info::AdslLine;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
@@ -163,6 +163,14 @@ sub root_ip {
|
||||
my $router_ip = $l3->router_ip();
|
||||
my $ospf_ip = $l3->ospf_ip();
|
||||
|
||||
# if the router ip exists and is a route advertised by the device we prefer
|
||||
# it over the others
|
||||
return $router_ip
|
||||
if (( defined $router_ip )
|
||||
and ( $router_ip ne '0.0.0.0' )
|
||||
and ( grep { $ospf_ip->{$_} eq $router_ip } (keys %$ospf_ip))
|
||||
and ( $l3->snmp_connect_ip($router_ip) ) );
|
||||
|
||||
# return the first one found here (should be only one)
|
||||
if ( defined $ospf_ip and scalar( keys %$ospf_ip ) ) {
|
||||
foreach my $key ( keys %$ospf_ip ) {
|
||||
@@ -174,10 +182,6 @@ sub root_ip {
|
||||
}
|
||||
}
|
||||
|
||||
return $router_ip
|
||||
if (( defined $router_ip )
|
||||
and ( $router_ip ne '0.0.0.0' )
|
||||
and ( $l3->snmp_connect_ip($router_ip) ) );
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
||||
$int_include_vpn $fake_idx $type_class/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
||||
%MODID_MAP %PROCID_MAP/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
|
||||
168
Info/Layer3/BlueCoatSG.pm
Normal file
168
Info/Layer3/BlueCoatSG.pm
Normal file
@@ -0,0 +1,168 @@
|
||||
package SNMP::Info::Layer3::BlueCoatSG;
|
||||
|
||||
# Copyright (c) 2011 Netdisco Project
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
|
||||
@SNMP::Info::Layer3::BlueCoatSG::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::BlueCoatSG::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||
'BLUECOAT-SG-PROXY-MIB' => 'sgProxyAdmin',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::Layer3::GLOBALS,
|
||||
#From BLUECOAT-SG-PROXY-MIB
|
||||
'serial1'=> 'sgProxySerialNumber',
|
||||
'sw_ver' => 'sgProxyVersion',
|
||||
);
|
||||
|
||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::Layer3::FUNCS, );
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Layer3::MUNGE, );
|
||||
|
||||
sub vendor {
|
||||
return 'Blue Coat';
|
||||
}
|
||||
|
||||
sub os {
|
||||
return 'sgos';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $sg = shift;
|
||||
my $os_string = $sg->sw_ver();
|
||||
if ($os_string =~ /^Version:\s(\w+)\s([\d\.]+)/) {
|
||||
return $2;
|
||||
} else {
|
||||
return ''; # perhaps we can try sysDescr or some other object...
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::BlueCoatSG - SNMP Interface to Blue Coat SG Series proxy devices
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jeroen van Ingen
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $router = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 1
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $router->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Blue Coat SG Series proxy devices
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
BLUECOAT-SG-PROXY-MIB
|
||||
|
||||
=over
|
||||
|
||||
=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
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $router->vendor()
|
||||
|
||||
Returns C<'Blue Coat'>
|
||||
|
||||
=item $router->os()
|
||||
|
||||
Returns C<'sgos'>
|
||||
|
||||
=item $router->os_ver()
|
||||
|
||||
Tries to resolve version string from "sgProxyVersion"
|
||||
|
||||
=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.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -64,7 +64,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
|
||||
@@ -50,7 +50,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -33,6 +33,7 @@ package SNMP::Info::Layer3::C6500;
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::CiscoStack;
|
||||
use SNMP::Info::LLDP;
|
||||
use SNMP::Info::CDP;
|
||||
use SNMP::Info::CiscoStats;
|
||||
use SNMP::Info::CiscoImage;
|
||||
@@ -50,6 +51,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
SNMP::Info::CiscoVTP
|
||||
SNMP::Info::CiscoStpExtensions
|
||||
SNMP::Info::CiscoStack
|
||||
SNMP::Info::LLDP
|
||||
SNMP::Info::CDP
|
||||
SNMP::Info::CiscoImage
|
||||
SNMP::Info::CiscoStats
|
||||
@@ -64,7 +66,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
# NOTE: Order creates precedence
|
||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||
@@ -76,8 +78,9 @@ $VERSION = '2.06';
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS,
|
||||
%SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
||||
%SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS,
|
||||
%SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS,
|
||||
%SNMP::Info::CiscoStpExtensions::MIBS, %SNMP::Info::CiscoVTP::MIBS,
|
||||
%SNMP::Info::CDP::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||
%SNMP::Info::CiscoStack::MIBS, %SNMP::Info::CiscoStpExtensions::MIBS,
|
||||
%SNMP::Info::CiscoVTP::MIBS,
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
@@ -88,6 +91,7 @@ $VERSION = '2.06';
|
||||
%SNMP::Info::CiscoImage::GLOBALS,
|
||||
%SNMP::Info::CiscoStats::GLOBALS,
|
||||
%SNMP::Info::CDP::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
%SNMP::Info::CiscoStack::GLOBALS,
|
||||
%SNMP::Info::CiscoStpExtensions::GLOBALS,
|
||||
%SNMP::Info::CiscoVTP::GLOBALS,
|
||||
@@ -97,8 +101,9 @@ $VERSION = '2.06';
|
||||
%SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS,
|
||||
%SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS,
|
||||
%SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS,
|
||||
%SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS,
|
||||
%SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS,
|
||||
%SNMP::Info::CDP::FUNCS, %SNMP::Info::LLDP::FUNCS,
|
||||
%SNMP::Info::CiscoStack::FUNCS, %SNMP::Info::CiscoStpExtensions::FUNCS,
|
||||
%SNMP::Info::CiscoVTP::FUNCS,
|
||||
);
|
||||
|
||||
|
||||
@@ -106,8 +111,9 @@ $VERSION = '2.06';
|
||||
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE,
|
||||
%SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE,
|
||||
%SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE,
|
||||
%SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE,
|
||||
%SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE,
|
||||
%SNMP::Info::CDP::MUNGE, %SNMP::Info::LLDP::MUNGE,
|
||||
%SNMP::Info::CiscoStack::MUNGE, %SNMP::Info::CiscoStpExtensions::MUNGE,
|
||||
%SNMP::Info::CiscoVTP::MUNGE,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
@@ -201,6 +207,132 @@ sub set_i_duplex_admin {
|
||||
}
|
||||
}
|
||||
|
||||
# Use CDP and/or LLDP
|
||||
sub hasCDP {
|
||||
my $c6500 = shift;
|
||||
|
||||
return $c6500->hasLLDP() || $c6500->SUPER::hasCDP();
|
||||
}
|
||||
|
||||
sub c_ip {
|
||||
my $c6500 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $cdp = $c6500->SUPER::c_ip($partial) || {};
|
||||
my $lldp = $c6500->lldp_ip($partial) || {};
|
||||
|
||||
my %c_ip;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
my $ip = $cdp->{$iid};
|
||||
next unless defined $ip;
|
||||
|
||||
$c_ip{$iid} = $ip;
|
||||
}
|
||||
|
||||
foreach my $iid ( keys %$lldp ) {
|
||||
my $ip = $lldp->{$iid};
|
||||
next unless defined $ip;
|
||||
|
||||
$c_ip{$iid} = $ip;
|
||||
}
|
||||
return \%c_ip;
|
||||
}
|
||||
|
||||
sub c_if {
|
||||
my $c6500 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $c6500->lldp_if($partial) || {};
|
||||
my $cdp = $c6500->SUPER::c_if($partial) || {};
|
||||
|
||||
my %c_if;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
my $if = $cdp->{$iid};
|
||||
next unless defined $if;
|
||||
|
||||
$c_if{$iid} = $if;
|
||||
}
|
||||
|
||||
foreach my $iid ( keys %$lldp ) {
|
||||
my $if = $lldp->{$iid};
|
||||
next unless defined $if;
|
||||
|
||||
$c_if{$iid} = $if;
|
||||
}
|
||||
return \%c_if;
|
||||
}
|
||||
|
||||
sub c_port {
|
||||
my $c6500 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $c6500->lldp_port($partial) || {};
|
||||
my $cdp = $c6500->SUPER::c_port($partial) || {};
|
||||
|
||||
my %c_port;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
my $port = $cdp->{$iid};
|
||||
next unless defined $port;
|
||||
|
||||
$c_port{$iid} = $port;
|
||||
}
|
||||
|
||||
foreach my $iid ( keys %$lldp ) {
|
||||
my $port = $lldp->{$iid};
|
||||
next unless defined $port;
|
||||
$c_port{$iid} = $port;
|
||||
}
|
||||
return \%c_port;
|
||||
}
|
||||
|
||||
sub c_id {
|
||||
my $c6500 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $c6500->lldp_id($partial) || {};
|
||||
my $cdp = $c6500->SUPER::c_id($partial) || {};
|
||||
|
||||
my %c_id;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
my $id = $cdp->{$iid};
|
||||
next unless defined $id;
|
||||
|
||||
$c_id{$iid} = $id;
|
||||
}
|
||||
|
||||
foreach my $iid ( keys %$lldp ) {
|
||||
my $id = $lldp->{$iid};
|
||||
next unless defined $id;
|
||||
|
||||
$c_id{$iid} = $id;
|
||||
}
|
||||
return \%c_id;
|
||||
}
|
||||
|
||||
sub c_platform {
|
||||
my $c6500 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $c6500->lldp_rem_sysdesc($partial) || {};
|
||||
my $cdp = $c6500->SUPER::c_platform($partial) || {};
|
||||
|
||||
my %c_platform;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
my $platform = $cdp->{$iid};
|
||||
next unless defined $platform;
|
||||
|
||||
$c_platform{$iid} = $platform;
|
||||
}
|
||||
|
||||
foreach my $iid ( keys %$lldp ) {
|
||||
my $platform = $lldp->{$iid};
|
||||
next unless defined $platform;
|
||||
|
||||
$c_platform{$iid} = $platform;
|
||||
}
|
||||
return \%c_platform;
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
__END__
|
||||
@@ -399,6 +531,53 @@ Crosses $c6500->p_port() with $c6500->p_duplex() to utilize port C<ifIndex>.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Topology information
|
||||
|
||||
Based upon the firmware version Cisco devices may support Link Layer Discover
|
||||
Protocol (LLDP) in addition to the Cisco-proprietary CDP. These methods
|
||||
will query both and return the combination of all information. As a result,
|
||||
there may be identical topology information returned from the two protocols
|
||||
causing duplicate entries. It is the calling program's responsibility to
|
||||
identify any duplicate entries and remove duplicates if necessary.
|
||||
|
||||
=over
|
||||
|
||||
=item $c6500->hasCDP()
|
||||
|
||||
Returns true if the device is running either CDP or LLDP.
|
||||
|
||||
=item $c6500->c_if()
|
||||
|
||||
Returns reference to hash. Key: iid Value: local device port (interfaces)
|
||||
|
||||
=item $c6500->c_ip()
|
||||
|
||||
Returns reference to hash. Key: iid Value: remote IPv4 address
|
||||
|
||||
If multiple entries exist with the same local port, c_if(), with the same IPv4
|
||||
address, c_ip(), it may be a duplicate entry.
|
||||
|
||||
If multiple entries exist with the same local port, c_if(), with different
|
||||
IPv4 addresses, c_ip(), there is either a non-CDP/LLDP device in between two
|
||||
or more devices or multiple devices which are not directly connected.
|
||||
|
||||
Use the data from the Layer2 Topology Table below to dig deeper.
|
||||
|
||||
=item $c6500->c_port()
|
||||
|
||||
Returns reference to hash. Key: iid Value: remote port (interfaces)
|
||||
|
||||
=item $c6500->c_id()
|
||||
|
||||
Returns reference to hash. Key: iid Value: string value used to identify the
|
||||
chassis component associated with the remote system.
|
||||
|
||||
=item $c6500->c_platform()
|
||||
|
||||
Returns reference to hash. Key: iid Value: Remote Device Type
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::CiscoVTP
|
||||
|
||||
See documentation in L<SNMP::Info::CiscoVTP/"TABLE METHODS"> for details.
|
||||
|
||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3::Cisco;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
||||
|
||||
@@ -33,16 +33,18 @@ package SNMP::Info::Layer3::Dell;
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
use SNMP::Info::LLDP;
|
||||
|
||||
@SNMP::Info::Layer3::Dell::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::Dell::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::Dell::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'RADLAN-Physicaldescription-MIB' => 'rlPhdStackReorder',
|
||||
'RADLAN-rlInterfaces' => 'rlIfNumOfLoopbackPorts',
|
||||
'RADLAN-HWENVIROMENT' => 'rlEnvPhysicalDescription',
|
||||
@@ -51,12 +53,14 @@ $VERSION = '2.06';
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'os_ver' => 'productIdentificationVersion',
|
||||
'dell_id_name' => 'productIdentificationDisplayName',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
|
||||
# RADLAN-rlInterfaces:swIfTable
|
||||
'dell_duplex_admin' => 'swIfDuplexAdminMode',
|
||||
@@ -102,7 +106,7 @@ $VERSION = '2.06';
|
||||
'dell_fan_desc' => 'rlEnvMonFanStatusDescr',
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
|
||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||
|
||||
# Method OverRides
|
||||
|
||||
@@ -228,6 +232,47 @@ sub _vendor {
|
||||
}
|
||||
}
|
||||
|
||||
# lldp support
|
||||
sub hasCDP {
|
||||
my $dell = shift;
|
||||
return $dell->hasLLDP();
|
||||
}
|
||||
|
||||
sub c_ip {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $dell->lldp_ip($partial);
|
||||
}
|
||||
|
||||
sub c_if {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $dell->lldp_if($partial);
|
||||
}
|
||||
|
||||
sub c_port {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $dell->lldp_port($partial);
|
||||
}
|
||||
|
||||
sub c_id {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $dell->lldp_id($partial);
|
||||
}
|
||||
|
||||
sub c_platform {
|
||||
my $dell = shift;
|
||||
my $partial = shift;
|
||||
|
||||
return $dell->lldp_rem_sysdesc($partial);
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
@@ -323,6 +368,10 @@ id(). Defaults to 'dlink'.
|
||||
Returns 'dell', 'dlink', or 'ibm' based upon the IANA enterprise number in
|
||||
id(). Defaults to 'dlink'.
|
||||
|
||||
=item $dell->hasCDP()
|
||||
|
||||
Returns whether LLDP is enabled.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
@@ -415,6 +464,26 @@ Some devices don't implement the C<BRIDGE-MIB> forwarding table, so we use
|
||||
the C<Q-BRIDGE-MIB> forwarding table. Fall back to the C<BRIDGE-MIB> if
|
||||
C<Q-BRIDGE-MIB> doesn't return anything.
|
||||
|
||||
=item $dell->c_id()
|
||||
|
||||
Returns LLDP information.
|
||||
|
||||
=item $dell->c_if()
|
||||
|
||||
Returns LLDP information.
|
||||
|
||||
=item $dell->c_ip()
|
||||
|
||||
Returns LLDP information.
|
||||
|
||||
=item $dell->c_platform()
|
||||
|
||||
Returns LLDP information.
|
||||
|
||||
=item $dell->c_port()
|
||||
|
||||
Returns LLDP information.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
|
||||
@@ -166,12 +166,6 @@ sub fw_port {
|
||||
}
|
||||
|
||||
# Use CDP and/or LLDP
|
||||
#
|
||||
# LLDP table timefilter implementation continuously increments when walked
|
||||
# and we may never reach the end of the table. This behavior can be
|
||||
# modified with the "set snmp timefilter break disable" command,
|
||||
# unfortunately it is not the default. Query with a partial value of zero
|
||||
# which means no time filter.
|
||||
|
||||
sub hasCDP {
|
||||
my $enterasys = shift;
|
||||
@@ -184,7 +178,7 @@ sub c_ip {
|
||||
my $partial = shift;
|
||||
|
||||
my $cdp = $enterasys->SUPER::c_ip($partial) || {};
|
||||
my $lldp = $enterasys->lldp_ip(0) || {};
|
||||
my $lldp = $enterasys->lldp_ip($partial) || {};
|
||||
|
||||
my %c_ip;
|
||||
foreach my $iid ( keys %$cdp ) {
|
||||
@@ -207,7 +201,7 @@ sub c_if {
|
||||
my $enterasys = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $enterasys->lldp_if(0) || {};
|
||||
my $lldp = $enterasys->lldp_if($partial) || {};
|
||||
my $cdp = $enterasys->SUPER::c_if($partial) || {};
|
||||
|
||||
my %c_if;
|
||||
@@ -231,7 +225,7 @@ sub c_port {
|
||||
my $enterasys = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $enterasys->lldp_port(0) || {};
|
||||
my $lldp = $enterasys->lldp_port($partial) || {};
|
||||
my $cdp = $enterasys->SUPER::c_port($partial) || {};
|
||||
|
||||
my %c_port;
|
||||
@@ -255,7 +249,7 @@ sub c_id {
|
||||
my $enterasys = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $enterasys->lldp_id(0) || {};
|
||||
my $lldp = $enterasys->lldp_id($partial) || {};
|
||||
my $cdp = $enterasys->SUPER::c_id($partial) || {};
|
||||
|
||||
my %c_id;
|
||||
@@ -279,7 +273,7 @@ sub c_platform {
|
||||
my $enterasys = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $lldp = $enterasys->lldp_rem_sysdesc(0) || {};
|
||||
my $lldp = $enterasys->lldp_rem_sysdesc($partial) || {};
|
||||
my $cdp = $enterasys->SUPER::c_platform($partial) || {};
|
||||
|
||||
my %c_platform;
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::MAU;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -137,7 +137,7 @@ sub os_ver {
|
||||
my $descr = $extreme->description();
|
||||
return unless defined $descr;
|
||||
|
||||
if ( $descr =~ m/Version ([\d.]*)/ ) {
|
||||
if ( $descr =~ m/Version\s+([^ ]+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -192,6 +192,9 @@ sub os_ver {
|
||||
}
|
||||
}
|
||||
|
||||
# See if we report from Flash if wouldn't report from running above
|
||||
return $foundry->snAgFlashImgVer() if ( defined $foundry->snAgFlashImgVer() );
|
||||
|
||||
# Last resort
|
||||
return $foundry->SUPER::os_ver();
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -38,27 +38,46 @@ use SNMP::Info::LLDP;
|
||||
@SNMP::Info::Layer3::Juniper::ISA = qw/SNMP::Info::Layer3 SNMP::Info::LLDP Exporter/;
|
||||
@SNMP::Info::Layer3::Juniper::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
%SNMP::Info::LLDP::MIBS,
|
||||
'JUNIPER-CHASSIS-DEFINES-MIB' => 'jnxChassisDefines',
|
||||
'JUNIPER-MIB' => 'jnxBoxAnatomy',
|
||||
'JUNIPER-VIRTUALCHASSIS-MIB' => 'jnxVirtualChassisMemberTable',
|
||||
'JUNIPER-VLAN-MIB' => 'jnxVlanMIBObjects',
|
||||
);
|
||||
|
||||
%GLOBALS = ( %SNMP::Info::Layer3::GLOBALS,
|
||||
%SNMP::Info::LLDP::GLOBALS,
|
||||
'serial' => 'jnxBoxSerialNo.0', );
|
||||
'serial' => 'jnxBoxSerialNo.0',
|
||||
'mac' => 'dot1dBaseBridgeAddress',
|
||||
);
|
||||
|
||||
%FUNCS = ( %SNMP::Info::Layer3::FUNCS,
|
||||
%SNMP::Info::LLDP::FUNCS,
|
||||
|
||||
# JUNIPER-VLAN-MIB::jnxExVlanTable
|
||||
'v_index' => 'jnxExVlanTag',
|
||||
'v_type' => 'jnxExVlanType',
|
||||
'v_name' => 'jnxExVlanName',
|
||||
|
||||
# JUNIPER-VLAN-MIB::jnxExVlanPortGroupTable
|
||||
'i_trunk' => 'jnxExVlanPortAccessMode',
|
||||
|
||||
# JUNPIER-MIB
|
||||
'e_contents_type' => 'jnxContentsType',
|
||||
'e_containers_type' => 'jnxContainersType',
|
||||
'e_hwver' => 'jnxContentsRevision',
|
||||
);
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE,
|
||||
%SNMP::Info::LLDP::MUNGE,
|
||||
'e_containers_type' => \&SNMP::Info::munge_e_type,
|
||||
'e_contents_type' => \&SNMP::Info::munge_e_type,
|
||||
);
|
||||
|
||||
sub vendor {
|
||||
@@ -71,12 +90,16 @@ sub os {
|
||||
|
||||
sub os_ver {
|
||||
my $juniper = shift;
|
||||
my $descr = $juniper->description();
|
||||
return unless defined $descr;
|
||||
|
||||
my $descr = $juniper->description() || '';
|
||||
my $lldp_descr = $juniper->lldp_sysdesc() || '';
|
||||
|
||||
if ( $descr =~ m/kernel JUNOS (\S+)/ ) {
|
||||
return $1;
|
||||
}
|
||||
elsif ( $lldp_descr =~ m/version\s(\S+)\s/ ) {
|
||||
return $1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -105,22 +128,109 @@ sub serial {
|
||||
return $juniper->orig_serial();
|
||||
}
|
||||
|
||||
sub i_vlan {
|
||||
# 'i_trunk' => 'jnxExVlanPortAccessMode',
|
||||
sub i_trunk {
|
||||
my $juniper = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $access = $juniper->jnxExVlanPortAccessMode($partial);
|
||||
|
||||
my %i_trunk;
|
||||
|
||||
foreach (keys %$access)
|
||||
{
|
||||
my $old_key = $_;
|
||||
m/^\d+\.(\d+)$/o;
|
||||
my $new_key = $1;
|
||||
$i_trunk{$new_key} = $access->{$old_key};
|
||||
}
|
||||
|
||||
return \%i_trunk;
|
||||
}
|
||||
|
||||
# 'v_type' => 'jnxExVlanType',
|
||||
sub v_type {
|
||||
my $juniper = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $v_type = $juniper->jnxExVlanType($partial);
|
||||
|
||||
return $v_type;
|
||||
}
|
||||
|
||||
# 'v_index' => 'jnxExVlanTag',
|
||||
sub v_index {
|
||||
my ($juniper) = shift;
|
||||
my ($partial) = shift;
|
||||
|
||||
my ($i_type) = $juniper->i_type($partial);
|
||||
my ($i_descr) = $juniper->i_description($partial);
|
||||
my %i_vlan;
|
||||
my ($v_index) = $juniper->jnxExVlanTag($partial);
|
||||
|
||||
foreach my $idx ( keys %$i_descr ) {
|
||||
if ( $i_type->{$idx} eq 'l2vlan' || $i_type->{$idx} eq 135 ) {
|
||||
if ( $i_descr->{$idx} =~ /\.(\d+)$/ ) {
|
||||
$i_vlan{$idx} = $1;
|
||||
}
|
||||
return $v_index;
|
||||
}
|
||||
|
||||
sub i_vlan {
|
||||
my $juniper = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $index = $juniper->bp_index();
|
||||
|
||||
# If given a partial it will be an ifIndex, we need to use dot1dBasePort
|
||||
if ($partial) {
|
||||
my %r_index = reverse %$index;
|
||||
$partial = $r_index{$partial};
|
||||
}
|
||||
|
||||
my $v_index = $juniper->jnxExVlanTag();
|
||||
my $i_pvid = $juniper->qb_i_vlan($partial) || {};
|
||||
my $i_vlan = {};
|
||||
|
||||
foreach my $bport ( keys %$i_pvid ) {
|
||||
my $q_vlan = $i_pvid->{$bport};
|
||||
my $vlan = $v_index->{$q_vlan};
|
||||
my $ifindex = $index->{$bport};
|
||||
unless ( defined $ifindex ) {
|
||||
print " Port $bport has no bp_index mapping. Skipping.\n"
|
||||
if $DEBUG;
|
||||
next;
|
||||
}
|
||||
$i_vlan->{$ifindex} = $vlan;
|
||||
}
|
||||
|
||||
return $i_vlan;
|
||||
}
|
||||
|
||||
sub i_vlan_membership {
|
||||
my $juniper = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $index = $juniper->bp_index();
|
||||
my ($v_index) = $juniper->jnxExVlanTag($partial);
|
||||
|
||||
my $v_ports = $juniper->qb_v_egress() || {};
|
||||
|
||||
my $i_vlan_membership = {};
|
||||
|
||||
foreach my $idx ( sort keys %$v_ports ) {
|
||||
next unless ( defined $v_ports->{$idx} );
|
||||
my $portlist = $v_ports->{$idx}; # is an array reference
|
||||
my $ret = [];
|
||||
my $vlan_ndx = $idx;
|
||||
|
||||
# Convert portlist bit array to bp_index array
|
||||
for ( my $i = 0; $i <= $#$portlist; $i++ ) {
|
||||
push( @{$ret}, $i + 1 ) if ( @$portlist[$i] );
|
||||
}
|
||||
|
||||
#Create HoA ifIndex -> VLAN array
|
||||
foreach my $port ( @{$ret} ) {
|
||||
my $ifindex = $index->{$port};
|
||||
next unless ( defined($ifindex) ); # shouldn't happen
|
||||
next if ( defined $partial and $ifindex !~ /^$partial$/ );
|
||||
push ( @{ $i_vlan_membership->{$ifindex} }, $v_index->{$vlan_ndx} );
|
||||
}
|
||||
}
|
||||
return \%i_vlan;
|
||||
|
||||
return $i_vlan_membership;
|
||||
}
|
||||
|
||||
# Use Q-BRIDGE-MIB for bridge forwarding tables
|
||||
@@ -181,6 +291,287 @@ sub c_platform {
|
||||
return $juniper->lldp_rem_sysdesc($partial);
|
||||
}
|
||||
|
||||
# Pseudo ENTITY-MIB methods
|
||||
|
||||
# This class supports both virtual chassis (stackable) and physical chassis
|
||||
# based devices, identify if we have a virtual chassis so that we return
|
||||
# appropriate entPhysicalClass and correct ordering
|
||||
|
||||
sub _e_is_virtual {
|
||||
my $juniper = shift;
|
||||
|
||||
my $v_test = $juniper->jnxVirtualChassisMemberRole() || {};
|
||||
|
||||
#If we are functioning as a stack someone should be master
|
||||
foreach my $iid ( keys %$v_test ) {
|
||||
my $role = $v_test->{$iid};
|
||||
return 1 if ($role =~ /master/i);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub _e_virtual_index {
|
||||
my $juniper = shift;
|
||||
|
||||
my $containers = $juniper->jnxContainersWithin() || {};
|
||||
my $members = $juniper->jnxVirtualChassisMemberRole() || {};
|
||||
|
||||
my %v_index;
|
||||
foreach my $key (keys %$containers) {
|
||||
foreach my $member ( keys %$members ) {
|
||||
# Virtual chassis members start at zero
|
||||
$member++;
|
||||
# We will be duplicating and eliminating some keys,
|
||||
# but this is for the benefit of e_parent()
|
||||
my $index = sprintf ("%02d", $key) . sprintf ("%02d", $member) . "0000";
|
||||
my $iid = "$key\.$member\.0\.0";
|
||||
$v_index{$iid} = $index;
|
||||
}
|
||||
unless ($containers->{$key}) {
|
||||
my $index = sprintf ("%02d", $key) . "000000";
|
||||
$v_index{$key} = $index;
|
||||
}
|
||||
}
|
||||
return \%v_index;
|
||||
}
|
||||
|
||||
sub e_index {
|
||||
my $juniper = shift;
|
||||
|
||||
my $contents = $juniper->jnxContentsDescr() || {};
|
||||
my $containers = $juniper->jnxContainersDescr() || {};
|
||||
my $virtuals = $juniper->_e_virtual_index() || {};
|
||||
my $is_virtual = $juniper->_e_is_virtual();
|
||||
|
||||
# Format into consistent integer format so that numeric sorting works
|
||||
my %e_index;
|
||||
if ($is_virtual) {
|
||||
foreach my $key ( keys %$virtuals ) {
|
||||
$e_index{$key} = $virtuals->{$key};
|
||||
}
|
||||
}
|
||||
else {
|
||||
foreach my $key ( keys %$containers ) {
|
||||
$e_index{$key} = sprintf ("%02d", $key) . "000000";
|
||||
}
|
||||
}
|
||||
foreach my $key ( keys %$contents ) {
|
||||
$e_index{$key} = join( '', map { sprintf "%02d", $_ } split /\./, $key );
|
||||
}
|
||||
|
||||
return \%e_index;
|
||||
}
|
||||
|
||||
sub e_class {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_index = $juniper->e_index() || {};
|
||||
my $fru_type = $juniper->jnxFruType() || {};
|
||||
my $c_type = $juniper->jnxContainersDescr() || {};
|
||||
my $is_virtual = $juniper->_e_is_virtual();
|
||||
|
||||
my %e_class;
|
||||
foreach my $iid ( keys %$e_index ) {
|
||||
|
||||
my $type = $fru_type->{$iid} || 0;
|
||||
my $container = $c_type->{$iid} || 0;
|
||||
|
||||
if ( $type =~ /power/i ) {
|
||||
$e_class{$iid} = 'powerSupply';
|
||||
}
|
||||
elsif ( $type =~ /fan/i ) {
|
||||
$e_class{$iid} = 'fan';
|
||||
}
|
||||
elsif ( $type ) {
|
||||
$e_class{$iid} = 'module';
|
||||
}
|
||||
# Shouldn't get here if we have type which means
|
||||
# we only have container, chassis, and stack left
|
||||
elsif (($container =~ /chassis/i) and (!$is_virtual) ) {
|
||||
$e_class{$iid} = 'chassis';
|
||||
}
|
||||
elsif (($container =~ /chassis/i) and ($is_virtual)) {
|
||||
$e_class{$iid} = 'stack';
|
||||
}
|
||||
# Were calling the second level chassis a container in the case
|
||||
# of a virtual chassis but not sure that it really matters
|
||||
else {
|
||||
$e_class{$iid} = 'container';
|
||||
}
|
||||
}
|
||||
return \%e_class;
|
||||
}
|
||||
|
||||
sub e_descr {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_index = $juniper->e_index() || {};
|
||||
my $box_descr = $juniper->jnxBoxDescr || 0;
|
||||
my $contents = $juniper->jnxContentsDescr() || {};
|
||||
my $containers = $juniper->jnxContainersDescr() || {};
|
||||
|
||||
my %e_descr;
|
||||
foreach my $iid ( keys %$e_index ) {
|
||||
|
||||
my $content_descr = $contents->{$iid} || 0;
|
||||
my $container_descr = $containers->{$iid} || 0;
|
||||
|
||||
if ($content_descr) {
|
||||
$e_descr{$iid} = $content_descr;
|
||||
}
|
||||
elsif ($container_descr and $container_descr !~ /chassis/) {
|
||||
$e_descr{$iid} = $container_descr;
|
||||
}
|
||||
elsif ($container_descr and $container_descr =~ /chassis/) {
|
||||
$e_descr{$iid} = $box_descr;
|
||||
}
|
||||
# We should only be left with virtual entries created in
|
||||
# _e_virtual_index()
|
||||
elsif ($iid =~ /^(\d+)\.(\d+)(\.0)+?/) {
|
||||
my $descr = $containers->{$1};
|
||||
$e_descr{$iid} = $descr;
|
||||
}
|
||||
# Anything past here undef
|
||||
}
|
||||
return \%e_descr;
|
||||
}
|
||||
|
||||
sub e_serial {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_index = $juniper->e_index() || {};
|
||||
my $serials = $juniper->jnxContentsSerialNo() || {};
|
||||
my $e_class = $juniper->e_class() || {};
|
||||
my $is_virtual = $juniper->_e_is_virtual();
|
||||
my $box_serial = $juniper->serial();
|
||||
|
||||
my %e_serial;
|
||||
foreach my $iid ( keys %$e_index ) {
|
||||
my $serial = $serials->{$iid} || '';
|
||||
my $class = $e_class->{$iid} || '';
|
||||
# Chassis serial number is seperate on true chassis
|
||||
# Virtual chassis (stack) report master switch serial
|
||||
if (!$is_virtual and ($class =~ /chassis/i)){
|
||||
$e_serial{$iid} = $box_serial;
|
||||
}
|
||||
elsif (($serial !~ /^\w/) or ($serial =~ /builtin/i)) {
|
||||
next;
|
||||
}
|
||||
else {
|
||||
$e_serial{$iid} = $serial;
|
||||
}
|
||||
}
|
||||
return \%e_serial;
|
||||
}
|
||||
|
||||
sub e_fru {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_index = $juniper->e_index() || {};
|
||||
my $frus = $juniper->jnxContentsPartNo() || {};
|
||||
|
||||
my %e_fru;
|
||||
foreach my $iid ( keys %$e_index ) {
|
||||
my $fru = $frus->{$iid} || '';
|
||||
if ( ($fru !~ /^\w/) or ($fru =~ /builtin/i)) {
|
||||
$e_fru{$iid} = "false";
|
||||
}
|
||||
else {
|
||||
$e_fru{$iid} = "true";
|
||||
}
|
||||
}
|
||||
return \%e_fru;
|
||||
}
|
||||
|
||||
sub e_type {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_index = $juniper->e_index() || {};
|
||||
my $contents = $juniper->e_contents_type() || {};
|
||||
my $containers = $juniper->e_containers_type() || {};
|
||||
|
||||
my %e_type;
|
||||
foreach my $iid ( keys %$e_index ) {
|
||||
|
||||
my $content_type = $contents->{$iid} || 0;
|
||||
my $container_type = $containers->{$iid} || 0;
|
||||
|
||||
if ($content_type) {
|
||||
$content_type =~ s/\.0//;
|
||||
$e_type{$iid} = $content_type;
|
||||
}
|
||||
elsif ($container_type) {
|
||||
$container_type =~ s/\.0//;
|
||||
$e_type{$iid} = $container_type;
|
||||
}
|
||||
# We should only be left with virtual entries created in
|
||||
# _e_virtual_index()
|
||||
elsif ($iid =~ /^(\d+)\.(\d+)(\.0)+?/) {
|
||||
my $descr = $containers->{$1};
|
||||
$descr =~ s/\.0//;
|
||||
$e_type{$iid} = $descr;
|
||||
}
|
||||
# Anything past here undef
|
||||
}
|
||||
return \%e_type;
|
||||
}
|
||||
|
||||
sub e_vendor {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_idx = $juniper->e_index() || {};
|
||||
|
||||
my %e_vendor;
|
||||
foreach my $iid ( keys %$e_idx ) {
|
||||
$e_vendor{$iid} = 'juniper';
|
||||
}
|
||||
return \%e_vendor;
|
||||
}
|
||||
|
||||
sub e_pos {
|
||||
my $juniper = shift;
|
||||
|
||||
# We could look at index levels, but his will work as well
|
||||
return $juniper->e_index();
|
||||
}
|
||||
|
||||
sub e_parent {
|
||||
my $juniper = shift;
|
||||
|
||||
my $e_idx = $juniper->e_index() || {};
|
||||
my $c_within = $juniper->jnxContainersWithin() || {};
|
||||
my $e_descr = $juniper->e_descr() || {};
|
||||
my $is_virtual = $juniper->_e_is_virtual();
|
||||
|
||||
my %e_parent;
|
||||
foreach my $iid ( keys %$e_idx ) {
|
||||
next unless $iid;
|
||||
|
||||
my ($idx, $l1,$l2, $l3) = split /\./, $iid;
|
||||
my $within = $c_within->{$idx};
|
||||
my $descr = $e_descr->{$iid};
|
||||
|
||||
if ( !$is_virtual and ($iid =~ /^(\d+)\.\d+/) ) {
|
||||
$e_parent{$iid} = sprintf ("%02d", $1) . "000000";
|
||||
}
|
||||
elsif ( $is_virtual and ($descr =~ /chassis/i) and ($iid =~ /^(\d+)\.(\d+)(\.0)+?/) ) {
|
||||
$e_parent{$iid} = sprintf ("%02d", $1) . "000000";
|
||||
}
|
||||
elsif ( $is_virtual and ($iid =~ /^(\d+)\.(\d+)(\.0)+?/) ) {
|
||||
$e_parent{$iid} = sprintf ("%02d", $within) . sprintf ("%02d", $2) . "0000";
|
||||
}
|
||||
elsif ( $is_virtual and ($iid =~ /^(\d+)\.(\d+)\.[1-9]+/) ) {
|
||||
$e_parent{$iid} = sprintf ("%02d", $1) . sprintf ("%02d", $2) . "0000";
|
||||
}
|
||||
elsif ( defined $within and $iid =~ /\d+/ ) {
|
||||
$e_parent{$iid} = sprintf ("%02d", $within) . "000000";
|
||||
}
|
||||
else {
|
||||
next;
|
||||
}
|
||||
}
|
||||
return \%e_parent;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
@@ -210,7 +601,7 @@ Bill Fenner
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Generic Juniper Routers running JUNOS
|
||||
Subclass for Juniper Devices running JUNOS
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
@@ -226,14 +617,22 @@ Subclass for Generic Juniper Routers running JUNOS
|
||||
|
||||
=over
|
||||
|
||||
=item Inherited Classes' MIBs
|
||||
=item F<JUNIPER-VLAN-MIB> dated "200901090000Z" -- Fri Jan 09 00:00:00 2009 UTC or later.
|
||||
|
||||
=item F<JUNIPER-CHASSIS-DEFINES-MIB>
|
||||
|
||||
=item F<JUNIPER-MIB>
|
||||
|
||||
=item F<JUNIPER-VIRTUALCHASSIS-MIB>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Inherited Classes' MIBs
|
||||
|
||||
See L<SNMP::Info::Layer3/"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
|
||||
@@ -242,19 +641,20 @@ These are methods that return scalar value from SNMP
|
||||
|
||||
=item $juniper->vendor()
|
||||
|
||||
Returns C<'juniper'>
|
||||
Returns 'juniper'
|
||||
|
||||
=item $juniper->os()
|
||||
|
||||
Returns C<'junos'>
|
||||
Returns 'junos'
|
||||
|
||||
=item $juniper->os_ver()
|
||||
|
||||
Returns the software version extracted from C<sysDescr>.
|
||||
Returns the software version extracted first from C<sysDescr> or
|
||||
C<lldpLocSysDesc> if not available in C<sysDescr>.
|
||||
|
||||
=item $juniper->model()
|
||||
|
||||
Returns the model from C<sysObjectID>, with C<jnxProductNameremoved> from the
|
||||
Returns the model from C<sysObjectID>, with C<jnxProductName> removed from the
|
||||
beginning.
|
||||
|
||||
=item $juniper->serial()
|
||||
@@ -263,9 +663,16 @@ Returns serial number
|
||||
|
||||
(C<jnxBoxSerialNo.0>)
|
||||
|
||||
=item $juniper->serial()
|
||||
|
||||
Returns the MAC address used by this bridge when it must be referred
|
||||
to in a unique fashion.
|
||||
|
||||
(C<dot1dBaseBridgeAddress>)
|
||||
|
||||
=item $juniper->hasCDP()
|
||||
|
||||
Returns whether LLDP is enabled.
|
||||
Returns whether LLDP is enabled.
|
||||
|
||||
=back
|
||||
|
||||
@@ -284,30 +691,59 @@ to a hash.
|
||||
|
||||
=over
|
||||
|
||||
=item $juniper->v_index()
|
||||
|
||||
(C<jnxExVlanTag>)
|
||||
|
||||
=item $juniper->v_name()
|
||||
|
||||
(C<jnxExVlanName>)
|
||||
|
||||
=item $juniper->v_type()
|
||||
|
||||
(C<jnxExVlanType>)
|
||||
|
||||
=item $juniper->i_trunk()
|
||||
|
||||
(C<jnxExVlanPortAccessMode>)
|
||||
|
||||
=item $juniper->i_vlan()
|
||||
|
||||
Returns the list of interfaces whose C<ifType> is l2vlan(135), and
|
||||
the VLAN ID extracted from the interface description.
|
||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||
|
||||
=item $juniper->i_vlan_membership()
|
||||
|
||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||
IDs. These are the VLANs which are members of the egress list for the port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Topology information
|
||||
|
||||
These methods return Link Layer Discovery Protocol (LLDP) information. See
|
||||
documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||
|
||||
=over
|
||||
|
||||
=item $juniper->c_id()
|
||||
|
||||
Returns LLDP information.
|
||||
Returns C<lldp_id>
|
||||
|
||||
=item $juniper->c_if()
|
||||
|
||||
Returns LLDP information.
|
||||
Returns C<lldp_if>
|
||||
|
||||
=item $juniper->c_ip()
|
||||
|
||||
Returns LLDP information.
|
||||
Returns C<lldp_ip>
|
||||
|
||||
=item $juniper->c_platform()
|
||||
|
||||
Returns LLDP information.
|
||||
Returns C<lldp_rem_sysdesc>
|
||||
|
||||
=item $juniper->c_port()
|
||||
|
||||
Returns LLDP information.
|
||||
Returns C<lldp_port>
|
||||
|
||||
=back
|
||||
|
||||
@@ -330,6 +766,63 @@ identifier (iid)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Pseudo F<ENTITY-MIB> information
|
||||
|
||||
These methods emulate F<ENTITY-MIB> Physical Table methods using
|
||||
F<JUNIPER-MIB> and F<JUNIPER-VIRTUALCHASSIS-MIB>.
|
||||
|
||||
=over
|
||||
|
||||
=item $juniper->e_index()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Integer, Indices are combined
|
||||
into a eight digit integer, each index is two digits padded with leading zero
|
||||
if required.
|
||||
|
||||
=item $juniper->e_class()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: General hardware type.
|
||||
|
||||
=item $juniper->e_descr()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Human friendly name
|
||||
|
||||
=item $juniper->e_hwver()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Hardware version
|
||||
|
||||
=item $juniper->e_vendor()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: juniper
|
||||
|
||||
=item $juniper->e_serial()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Serial number
|
||||
|
||||
=item $juniper->e_pos()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: The relative position among all
|
||||
entities sharing the same parent.
|
||||
|
||||
=item $juniper->e_type()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: Type of component/sub-component
|
||||
as defined in F<JUNIPER-CHASSIS-DEFINES-MIB>.
|
||||
|
||||
=item $juniper->e_parent()
|
||||
|
||||
Returns reference to hash. Key: IID, Value: The value of e_index() for the
|
||||
entity which 'contains' this entity. A value of zero indicates this entity
|
||||
is not contained in any other entity.
|
||||
|
||||
=item $entity->e_fru()
|
||||
|
||||
BOOLEAN. Is a Field Replaceable unit?
|
||||
|
||||
(C<entPhysicalFRU>)
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::SONMP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
@@ -71,7 +71,7 @@ sub os {
|
||||
if ( $descr =~ /drgos/i ) {
|
||||
return 'drgos';
|
||||
} else {
|
||||
return undef;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::RapidCity::MIBS,
|
||||
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer3::MIBS,
|
||||
|
||||
189
Info/Layer3/SonicWALL.pm
Normal file
189
Info/Layer3/SonicWALL.pm
Normal file
@@ -0,0 +1,189 @@
|
||||
package SNMP::Info::Layer3::SonicWALL;
|
||||
|
||||
# Copyright (c) 2011 Netdisco Project
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer3;
|
||||
|
||||
@SNMP::Info::Layer3::SonicWALL::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||
@SNMP::Info::Layer3::SonicWALL::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||
'SNWL-COMMON-MIB' => 'snwlCommonModule',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::Layer3::GLOBALS,
|
||||
#From SNWL-COMMON-MIB
|
||||
'sw_model' => 'snwlSysModel',
|
||||
'sw_serial' => 'snwlSysSerialNumber',
|
||||
'sw_firmware' => 'snwlSysFirmwareVersion',
|
||||
);
|
||||
|
||||
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, %SNMP::Info::Layer3::FUNCS, );
|
||||
|
||||
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, %SNMP::Info::Layer3::MUNGE, );
|
||||
|
||||
sub vendor {
|
||||
return 'SonicWALL';
|
||||
}
|
||||
|
||||
sub os {
|
||||
my $sonicos = shift;
|
||||
my $swos = $sonicos->sw_firmware();
|
||||
if ($swos =~ /Enhanced/) {
|
||||
return 'SonicOS Enhanced';
|
||||
}
|
||||
return 'SonicOS Standard';
|
||||
}
|
||||
|
||||
sub os_ver {
|
||||
my $sonicosver = shift;
|
||||
my $osver = $sonicosver->sw_firmware();
|
||||
if ( $osver =~ /\S+\s\S+\s(\S+)/) {
|
||||
return $1
|
||||
}
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $sw = shift;
|
||||
my $serial = $sw->sw_serial();
|
||||
return $serial;
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $swmodel = shift;
|
||||
my $model = $swmodel->sw_model();
|
||||
return $model;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer3::SonicWALL - SNMP Interface to L3 SonicWALL Firewall
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
phishphreek@gmail.com
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $router = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myrouter',
|
||||
Community => 'public',
|
||||
Version => 1
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $router->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Subclass for Generic SonicWALL Firewalls
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer3
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=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
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $router->vendor()
|
||||
|
||||
Returns C<'SonicWALL'>
|
||||
|
||||
=item $router->os()
|
||||
|
||||
Returns C<'SonicOS'>
|
||||
|
||||
=item $router->os_ver()
|
||||
|
||||
Returns '4.2.0.0-10e'
|
||||
|
||||
=item $router->model()
|
||||
|
||||
Returns C<'PRO 3060 Enhanced'>
|
||||
|
||||
=item $router->serial()
|
||||
|
||||
Returns the MAC address of the first X0/LAN interface.
|
||||
|
||||
=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.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||
|
||||
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );
|
||||
|
||||
|
||||
215
Info/Layer7.pm
Normal file
215
Info/Layer7.pm
Normal file
@@ -0,0 +1,215 @@
|
||||
# SNMP::Info::Layer7 - SNMP Interface to Layer7 Devices
|
||||
#
|
||||
# Copyright (c) 2011 Jeroen van Ingen
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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::Layer7;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info;
|
||||
|
||||
@SNMP::Info::Layer7::ISA = qw/SNMP::Info Exporter/;
|
||||
@SNMP::Info::Layer7::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::MIBS,
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::GLOBALS,
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::FUNCS,
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
# Inherit all the built in munging
|
||||
%SNMP::Info::MUNGE,
|
||||
);
|
||||
|
||||
|
||||
# $l7->model() - Looks at sysObjectID which gives the oid of the system
|
||||
# name, contained in a propriatry MIB.
|
||||
sub model {
|
||||
my $l7 = shift;
|
||||
my $id = $l7->id();
|
||||
my $model = &SNMP::translateObj($id);
|
||||
return $model;
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
my $l7 = shift;
|
||||
my $id = $l7->id();
|
||||
my $vendor = 'unknown';
|
||||
if ( defined($id) && $id =~ /^(\.1\.3\.6\.1\.4\.1\.\d+)/ ) {
|
||||
my $enterprise = &SNMP::translateObj($1);
|
||||
$vendor = $enterprise if defined $enterprise;
|
||||
}
|
||||
return $vendor;
|
||||
}
|
||||
|
||||
# By Default we'll use the description field
|
||||
sub interfaces {
|
||||
my $l7 = shift;
|
||||
my $partial = shift;
|
||||
|
||||
my $interfaces = $l7->i_index($partial) || {};
|
||||
my $rptr_port = $l7->rptr_port($partial) || {};
|
||||
|
||||
foreach my $port ( keys %$rptr_port ) {
|
||||
$interfaces->{$port} = $port;
|
||||
}
|
||||
return $interfaces;
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer7 - SNMP Interface to network devices serving Layer7 only.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jeroen van Ingen
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $l7 = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 1
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $l7->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
# Let's get some basic Port information
|
||||
my $interfaces = $l7->interfaces();
|
||||
my $i_up = $l7->i_up();
|
||||
my $i_speed = $l7->i_speed();
|
||||
|
||||
foreach my $iid (keys %$interfaces) {
|
||||
my $port = $interfaces->{$iid};
|
||||
my $up = $i_up->{$iid};
|
||||
my $speed = $i_speed->{$iid}
|
||||
print "Port $port is $up. Port runs at $speed.\n";
|
||||
}
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This class is usually used as a superclass for more specific device classes
|
||||
listed under SNMP::Info::Layer7::* Please read all docs under SNMP::Info
|
||||
first.
|
||||
|
||||
Provides abstraction to the configuration information obtainable from a
|
||||
Layer7 device through SNMP. Information is stored in a number of MIBs.
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
|
||||
my $l7 = new SNMP::Info::Layer7(...);
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item None
|
||||
|
||||
=back
|
||||
|
||||
MIBs required for L<SNMP::Info/"Required MIBs">
|
||||
|
||||
See L<SNMP::Info/"Required MIBs"> for its MIB requirements.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $l7->model()
|
||||
|
||||
Cross references $l7->id() with product IDs.
|
||||
|
||||
=item $l7->vendor()
|
||||
|
||||
Tries to discover the vendor by looking up the enterprise number in
|
||||
C<sysObjectID>.
|
||||
|
||||
|
||||
=back
|
||||
|
||||
=head2 Global Methods imported from SNMP::Info
|
||||
|
||||
See documentation in L<SNMP::Info/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=item $l7->interfaces()
|
||||
|
||||
Returns reference to the map between IID and physical Port.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info
|
||||
|
||||
See documentation in L<SNMP::Info/"TABLE METHODS"> for details.
|
||||
|
||||
=cut
|
||||
237
Info/Layer7/APC.pm
Normal file
237
Info/Layer7/APC.pm
Normal file
@@ -0,0 +1,237 @@
|
||||
# SNMP::Info::Layer7::APC - SNMP Interface to APC UPS devices
|
||||
#
|
||||
# Copyright (c) 2011 Jeroen van Ingen
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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::Layer7::APC;
|
||||
|
||||
use strict;
|
||||
use Exporter;
|
||||
use SNMP::Info::Layer7;
|
||||
|
||||
@SNMP::Info::Layer7::APC::ISA
|
||||
= qw/SNMP::Info::Layer7 Exporter/;
|
||||
@SNMP::Info::Layer7::APC::EXPORT_OK = qw//;
|
||||
|
||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
%SNMP::Info::Layer7::MIBS,
|
||||
'PowerNet-MIB' => 'upsBasicIdentModel',
|
||||
);
|
||||
|
||||
%GLOBALS = (
|
||||
%SNMP::Info::Layer7::GLOBALS,
|
||||
'ups_serial' => 'upsAdvIdentSerialNumber.0',
|
||||
'mgmt_serial' => 'experimental.2.4.1.2.1',
|
||||
'os_ver' => 'experimental.2.4.1.4.1',
|
||||
'os_bin' => 'experimental.2.4.1.4.2',
|
||||
'ups_model' => 'upsBasicIdentModel.0',
|
||||
'ps1_status' => 'upsBasicOutputStatus.0',
|
||||
'ps2_status' => 'upsBasicBatteryStatus.0',
|
||||
);
|
||||
|
||||
%FUNCS = (
|
||||
%SNMP::Info::Layer7::FUNCS,
|
||||
|
||||
);
|
||||
|
||||
%MUNGE = (
|
||||
# Inherit all the built in munging
|
||||
%SNMP::Info::Layer7::MUNGE,
|
||||
);
|
||||
|
||||
|
||||
# Method Overrides
|
||||
|
||||
sub os {
|
||||
return 'aos';
|
||||
}
|
||||
|
||||
sub vendor {
|
||||
return 'apc';
|
||||
}
|
||||
|
||||
sub model {
|
||||
my $apc = shift;
|
||||
return $apc->ups_model();
|
||||
}
|
||||
|
||||
sub serial {
|
||||
my $apc = shift;
|
||||
my $ups = $apc->ups_serial() || 'unknown';
|
||||
my $mgmt = $apc->mgmt_serial() || 'unknown';
|
||||
return sprintf("UPS: %s, management card: %s", $ups, $mgmt);
|
||||
}
|
||||
|
||||
sub ps1_type {
|
||||
return 'UPS status';
|
||||
}
|
||||
|
||||
sub ps2_type {
|
||||
return 'Battery status';
|
||||
}
|
||||
|
||||
1;
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SNMP::Info::Layer7::APC - SNMP Interface to APC UPS devices
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Jeroen van Ingen
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
# Let SNMP::Info determine the correct subclass for you.
|
||||
my $apc = new SNMP::Info(
|
||||
AutoSpecify => 1,
|
||||
Debug => 1,
|
||||
DestHost => 'myswitch',
|
||||
Community => 'public',
|
||||
Version => 2
|
||||
)
|
||||
or die "Can't connect to DestHost.\n";
|
||||
|
||||
my $class = $apc->class();
|
||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Provides abstraction to the configuration information obtainable from a
|
||||
APC UPS via SNMP.
|
||||
|
||||
For speed or debugging purposes you can call the subclass directly, but not
|
||||
after determining a more specific class using the method above.
|
||||
|
||||
my $apc = new SNMP::Info::Layer7::APC(...);
|
||||
|
||||
=head2 Inherited Classes
|
||||
|
||||
=over
|
||||
|
||||
=item SNMP::Info::Layer7
|
||||
|
||||
=back
|
||||
|
||||
=head2 Required MIBs
|
||||
|
||||
=over
|
||||
|
||||
=item F<POWERNET-MIB>
|
||||
|
||||
=back
|
||||
|
||||
All required MIBs can be found in the netdisco-mibs package.
|
||||
|
||||
=head1 GLOBALS
|
||||
|
||||
These are methods that return scalar value from SNMP
|
||||
|
||||
=over
|
||||
|
||||
=item $apc->os()
|
||||
|
||||
Returns 'aos'
|
||||
|
||||
=item $apc->os_bin()
|
||||
|
||||
C<POWERNET-MIB::experimental.2.4.1.4.2>
|
||||
|
||||
=item $apc->os_ver()
|
||||
|
||||
C<POWERNET-MIB::experimental.2.4.1.4.1>
|
||||
|
||||
=item $apc->serial()
|
||||
|
||||
Combines the UPS serial C<upsAdvIdentSerialNumber.0> with the managment
|
||||
card serial C<POWERNET-MIB::experimental.2.4.1.2.1> into a pretty string.
|
||||
|
||||
=item $apc->vendor()
|
||||
|
||||
apc
|
||||
|
||||
=item $apc->model()
|
||||
|
||||
C<upsBasicIdentModel.0>
|
||||
|
||||
=item $apc->ps1_type()
|
||||
|
||||
Returns 'UPS status'
|
||||
|
||||
=item $apc->ps1_status()
|
||||
|
||||
Returns the main UPS status from C<upsBasicOutputStatus.0>
|
||||
|
||||
=item $apc->ps2_type()
|
||||
|
||||
Returns 'Battery status'
|
||||
|
||||
=item $apc->ps2_status()
|
||||
|
||||
Returns the battery status from C<upsBasicBatteryStatus.0>
|
||||
|
||||
=back
|
||||
|
||||
=head2 Globals imported from SNMP::Info::Layer7
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7/"GLOBALS"> for details.
|
||||
|
||||
=head1 TABLE METHODS
|
||||
|
||||
These are methods that return tables of information in the form of a reference
|
||||
to a hash.
|
||||
|
||||
=head2 Overrides
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head2 Table Methods imported from SNMP::Info::Layer7
|
||||
|
||||
See documentation in L<SNMP::Info::Layer7/"TABLE METHODS"> for details.
|
||||
|
||||
=head1 MUNGES
|
||||
|
||||
=over
|
||||
|
||||
=back
|
||||
|
||||
=head1 SET METHODS
|
||||
|
||||
These are methods that provide SNMP set functionality for overridden methods
|
||||
or provide a simpler interface to complex set operations. See
|
||||
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set
|
||||
operations.
|
||||
|
||||
=cut
|
||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'MAU-MIB' => 'mauMod' );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'POWER-ETHERNET-MIB' => 'pethPsePortDetectionStatus' );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = ( 'RAPID-CITY' => 'rapidCity', );
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
||||
|
||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||
|
||||
$VERSION = '2.06';
|
||||
$VERSION = '2.08';
|
||||
|
||||
%MIBS = (
|
||||
'SYNOPTICS-ROOT-MIB' => 'synoptics',
|
||||
|
||||
5
MANIFEST
5
MANIFEST
@@ -43,6 +43,7 @@ Info/Layer2/Foundry.pm
|
||||
Info/Layer2/HP.pm
|
||||
Info/Layer2/HP4000.pm
|
||||
Info/Layer2/HPVC.pm
|
||||
Info/Layer2/Kentrox.pm
|
||||
Info/Layer2/N2270.pm
|
||||
Info/Layer2/NAP222x.pm
|
||||
Info/Layer2/Netgear.pm
|
||||
@@ -56,6 +57,7 @@ Info/Layer3/Altiga.pm
|
||||
Info/Layer3/Arista.pm
|
||||
Info/Layer3/Aruba.pm
|
||||
Info/Layer3/BayRS.pm
|
||||
Info/Layer3/BlueCoatSG.pm
|
||||
Info/Layer3/C3550.pm
|
||||
Info/Layer3/C4000.pm
|
||||
Info/Layer3/C6500.pm
|
||||
@@ -76,8 +78,11 @@ Info/Layer3/NetSNMP.pm
|
||||
Info/Layer3/PacketFront.pm
|
||||
Info/Layer3/Passport.pm
|
||||
Info/Layer3/Pf.pm
|
||||
Info/Layer3/SonicWALL.pm
|
||||
Info/Layer3/Sun.pm
|
||||
Info/Layer3/Timetra.pm
|
||||
Info/Layer7.pm
|
||||
Info/Layer7/APC.pm
|
||||
Info/LLDP.pm
|
||||
Info/MAU.pm
|
||||
Info/NortelStack.pm
|
||||
|
||||
41
README
41
README
@@ -5,7 +5,7 @@ NAME
|
||||
|
||||
VERSION
|
||||
|
||||
SNMP::Info - Version 2.06
|
||||
SNMP::Info - Version 2.08
|
||||
|
||||
AUTHOR
|
||||
|
||||
@@ -354,7 +354,7 @@ SUBCLASSES
|
||||
See documentation in SNMP::Info::Layer1 for details.
|
||||
|
||||
SNMP::Info::Layer1::Allied
|
||||
Subclass for Allied Telesys Repeaters / Hubs.
|
||||
Subclass for Allied Telesis Repeaters / Hubs.
|
||||
|
||||
Requires ATI-MIB
|
||||
|
||||
@@ -401,7 +401,7 @@ SUBCLASSES
|
||||
See documentation in SNMP::Info::Layer2::Aironet for details.
|
||||
|
||||
SNMP::Info::Layer2::Allied
|
||||
Allied Telesys switches.
|
||||
Allied Telesis switches.
|
||||
|
||||
See documentation in SNMP::Info::Layer2::Allied for details.
|
||||
|
||||
@@ -416,6 +416,10 @@ SUBCLASSES
|
||||
|
||||
See documentation in SNMP::Info::Layer2::Baystack for details.
|
||||
|
||||
SNMP::Info::Layer2::Kentrox
|
||||
Class for Kentrox DataSMART DSU/CSU. See
|
||||
SNMP::Info::Layer2::Kentrox for details.
|
||||
|
||||
SNMP::Info::Layer2::C1900
|
||||
Subclass for Cisco Catalyst 1900 and 1900c Devices running
|
||||
CatOS.
|
||||
@@ -540,6 +544,11 @@ SUBCLASSES
|
||||
|
||||
See documentation in SNMP::Info::Layer3::BayRS for details.
|
||||
|
||||
SNMP::Info::Layer3::BlueCoatSG
|
||||
Subclass for Blue Coat SG series proxy devices.
|
||||
|
||||
See documentation in SNMP::Info::Layer3::BlueCoatSG for details.
|
||||
|
||||
SNMP::Info::Layer3::C3550
|
||||
Subclass for Cisco Catalyst 3550,3540,3560 2/3 switches running
|
||||
IOS.
|
||||
@@ -650,6 +659,10 @@ SUBCLASSES
|
||||
|
||||
See documentation in SNMP::Info::Layer3::Pf for details.
|
||||
|
||||
SNMP::Info::Layer3::SonicWALL
|
||||
Subclass for generic SonicWALL devices. See documentation in
|
||||
SNMP::Info::Layer3::SonicWALL for details.
|
||||
|
||||
SNMP::Info::Layer3::Sun
|
||||
Subclass for Generic Sun Routers running SunOS.
|
||||
|
||||
@@ -660,6 +673,16 @@ SUBCLASSES
|
||||
|
||||
See documentation in SNMP::Info::Layer3::Timetra for details.
|
||||
|
||||
SNMP::Info::Layer7
|
||||
Generic Layer7 Devices.
|
||||
|
||||
See documentation in SNMP::Info::Layer7 for details.
|
||||
|
||||
SNMP::Info::Layer7::APC
|
||||
SNMP Interface to APC UPS devices
|
||||
|
||||
See documentation in SNMP::Info::Layer7::APC for details.
|
||||
|
||||
Thanks
|
||||
|
||||
Thanks for testing and coding help (in no particular order) to :
|
||||
@@ -695,13 +718,13 @@ USAGE
|
||||
AutoSpecify
|
||||
Returns an object of a more specific device class
|
||||
|
||||
(default on)
|
||||
(default 0, which means "off")
|
||||
|
||||
BigInt
|
||||
Return Math::BigInt objects for 64 bit counters. Sets on a
|
||||
global scope, not object.
|
||||
|
||||
(default off)
|
||||
(default 0, which means "off")
|
||||
|
||||
BulkWalk
|
||||
Set to 0 to turn off BULKWALK commands for SNMPv2 connections.
|
||||
@@ -709,7 +732,7 @@ USAGE
|
||||
Note that BULKWALK is turned off for Net-SNMP versions 5.1.x
|
||||
because of a bug.
|
||||
|
||||
(default on)
|
||||
(default 1, which means "on")
|
||||
|
||||
BulkRepeaters
|
||||
Set number of MaxRepeaters for BULKWALK operation. See "perldoc
|
||||
@@ -726,13 +749,13 @@ USAGE
|
||||
|
||||
Set to 0 to turn off loop detection.
|
||||
|
||||
(default on)
|
||||
(default 1, which measn "on")
|
||||
|
||||
Debug
|
||||
Prints Lots of debugging messages. Pass 2 to print even more
|
||||
debugging messages.
|
||||
|
||||
(default off)
|
||||
(default 0, which means "off")
|
||||
|
||||
DebugSNMP
|
||||
Set $SNMP::debugging level for Net-SNMP.
|
||||
@@ -752,7 +775,7 @@ USAGE
|
||||
desired. This feature lets you read SNMPv2 data from an SNMP
|
||||
version 1 connection, and should probably be left on.
|
||||
|
||||
(default true)
|
||||
(default 1, which means "on")
|
||||
|
||||
Session
|
||||
SNMP::Session object to use instead of connecting on own.
|
||||
|
||||
@@ -5,7 +5,7 @@ use File::Glob qw/bsd_glob/;
|
||||
|
||||
my @pms = glob_rec("../Info");
|
||||
|
||||
$new_version = shift @ARGV || '2.06';
|
||||
$new_version = shift @ARGV || '2.08';
|
||||
|
||||
foreach my $p (@pms) {
|
||||
print "$p\n";
|
||||
@@ -21,6 +21,7 @@ foreach my $p (@pms) {
|
||||
|
||||
close O;
|
||||
close P or die "Can't write $p. $!\n";
|
||||
unlink("$p.orig");
|
||||
#last;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user