Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a264bb36cb | ||
|
|
c24e63ec4c | ||
|
|
6519570839 | ||
|
|
2c88544158 | ||
|
|
d0722d3677 | ||
|
|
d2b404763b | ||
|
|
88fb9e4df3 | ||
|
|
440ec276d3 | ||
|
|
6e91b90c48 | ||
|
|
0bfc8c5ed6 | ||
|
|
63547c2ea1 | ||
|
|
efecf1bbb7 | ||
|
|
682b8c2a9c | ||
|
|
88295e8c1e | ||
|
|
6764f15fd0 | ||
|
|
8b8ee8693e | ||
|
|
fe89001166 | ||
|
|
416a18377c | ||
|
|
8fda38184c | ||
|
|
280e9260f7 | ||
|
|
22642c1095 | ||
|
|
d68b2047b0 | ||
|
|
7240f034e5 | ||
|
|
97ce41e363 | ||
|
|
31a8abc3b8 | ||
|
|
6b49bfd4c4 | ||
|
|
985b4aab3f | ||
|
|
a4e7c3a61a | ||
|
|
d82d8781c4 | ||
|
|
b4c3f92ba3 | ||
|
|
1c57d2eab8 | ||
|
|
409de77b2c | ||
|
|
3e22e24dc9 | ||
|
|
17b1bdacfe | ||
|
|
b570fdbc89 | ||
|
|
cceb0f4e5e | ||
|
|
04f8c7f7e2 | ||
|
|
37aca89af7 | ||
|
|
5445a496db | ||
|
|
0ab93b142c | ||
|
|
d39dc76949 | ||
|
|
c6abd7b62b | ||
|
|
0e572db832 | ||
|
|
602bb15b47 | ||
|
|
b4882285c4 | ||
|
|
834b27bdad | ||
|
|
7db148a5a1 | ||
|
|
9e332095a2 | ||
|
|
7bf950026b | ||
|
|
f246444d89 | ||
|
|
8e84aea1bf | ||
|
|
d6a7a944cc | ||
|
|
fb478d3c7b | ||
|
|
24f8a8fdba | ||
|
|
28bbe0ee19 | ||
|
|
c21ca2062e | ||
|
|
e3e289a27c | ||
|
|
9540f6b9d3 | ||
|
|
539943fb0f | ||
|
|
7a8ebffd40 | ||
|
|
3d48f4e210 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
*.db
|
*.db
|
||||||
|
SNMP
|
||||||
|
|||||||
117
ChangeLog
117
ChangeLog
@@ -1,5 +1,122 @@
|
|||||||
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
|
||||||
|
|
||||||
|
version 3.15 (2014-07-10)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* Offline mode and Cache export/priming.
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Return serial number for Cisco 3850 from entPhysicalSerialNum
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Cisco SB serial number probably did not work
|
||||||
|
|
||||||
|
version 3.14 (2014-06-07)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Improvements to Mikrotik module (Alex Z)
|
||||||
|
* Don't unshift length from broken lldpRemManAddrTable implementations (G. Shtern)
|
||||||
|
* 802.3ad LAG support in Layer3::H3C
|
||||||
|
* Add LLDP capabilities to Layer2::HPVC class
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Return correct VLAN info with qb_fw_table() on Layer2::HP
|
||||||
|
|
||||||
|
version 3.13 (2014-03-27)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Cisco PAgP support added to LAG method
|
||||||
|
* HP ProCurve LAG support by inheriting Info::Aggregate class
|
||||||
|
|
||||||
|
version 3.12 (2014-02-10)
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Modify L3::Passport to obtain forwarding table information from
|
||||||
|
RAPID-CITY if information is not available in either Q-BRIDGE-MIB or
|
||||||
|
BRIDGE-MIB. Needed for VSP 9000 prior to version 4.x (Tobias Gerlach)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* [#52] NETSCREEN-IP-ARP-MIB considered harmful
|
||||||
|
* Foundry/Brocade aggreate port master ifIndex resolved properly
|
||||||
|
|
||||||
|
version 3.11 (2014-01-26)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* [#31] port-channel (aggregate) support. Aggregate support added in new
|
||||||
|
agg_ports() method. Inital support added for Arista (ifStack),
|
||||||
|
Avaya (MLT), Brocade (MST), and Cisco (802.3ad).
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Use Q-BRIDGE-MIB as default with fallback to BRIDGE-MIB across all
|
||||||
|
classes for the fw_mac, fw_port, and fw_status methods
|
||||||
|
* Additional support for Avaya 8800 series in L3::Passport
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Modify cdp_cap() to handle devices which return space delimited strings
|
||||||
|
for cdpCacheCapabilities rather than hex strings
|
||||||
|
* [#51] Netdisco shows broken topology for devices with no alias entry
|
||||||
|
for primary IP - Collect nsIfMngIp when getting IP interfaces in
|
||||||
|
L3::Netscreen
|
||||||
|
* Fix Extreme XOS i_vlan_membership - Revert [28bbe0], fix bug with
|
||||||
|
untagged being added to @ret twice (Robert Kerr)
|
||||||
|
* Skip default CPU management addresses on VSP and 8800/8600 series in
|
||||||
|
L3::Passport to prevent erroneous duplicate addresses
|
||||||
|
|
||||||
|
version 3.10 (2013-12-16)
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Data values of zero are now sent to munge method instead of skipped
|
||||||
|
|
||||||
|
version 3.09 (2013-12-15)
|
||||||
|
|
||||||
|
[NEW FEATURES]
|
||||||
|
|
||||||
|
* [#45] IBM (Blade Network Technologies) Rackswitch support in new class
|
||||||
|
L3::IBMGbTor
|
||||||
|
* [] set_i_untagged combines both set_i_vlan and set_i_pvid in one method
|
||||||
|
* [#41] Riverbed Steelhead support added in new class L3::Steelhead
|
||||||
|
* New c_cap(), cdp_cap(), and lldp_cap() methods which return a hash of
|
||||||
|
arrays with each array containing the system capabilities reported as
|
||||||
|
supported by the remote system via CDP or LLDP.
|
||||||
|
|
||||||
|
[ENHANCEMENTS]
|
||||||
|
|
||||||
|
* Remove "Switch" from model name in L3::Foundry
|
||||||
|
* [#49] IOS-XR support, add identification of IOS XR and version in
|
||||||
|
CiscoStats
|
||||||
|
* Aruba POE Support
|
||||||
|
* Aruba utilizes Q-BRIDGE-MIB when available for VLAN information to
|
||||||
|
better support wired switches
|
||||||
|
* Add lldp_platform() method which uses lldp_rem_sysdesc() or
|
||||||
|
lldp_rem_sysname() to provide a clue to type of remote LLDP capable
|
||||||
|
device.
|
||||||
|
* [RT#78232] Extend cdpCacheCapabilities to show more CDP bits
|
||||||
|
|
||||||
|
[BUG FIXES]
|
||||||
|
|
||||||
|
* Modify _xos_i_vlan_membership() in L3::Extreme to only include tagged
|
||||||
|
ports
|
||||||
|
* When determining the BSSID in Airespace there is only one hexadecimal
|
||||||
|
digit available so skip if outside the range of 1-16, 17 is reserved
|
||||||
|
for 3rd party AP's
|
||||||
|
* Don't assume entity index 1 is the chassis and has serial in Layer3
|
||||||
|
* Capture serial number on newer Aruba devices
|
||||||
|
* munge_bits() correctly unpacks BITS
|
||||||
|
* Fix for single instance table leafs in test_class_mocked.pl
|
||||||
|
* Fix power module indexing
|
||||||
|
|
||||||
version 3.08 (2013-10-22)
|
version 3.08 (2013-10-22)
|
||||||
|
|
||||||
[ENHANCEMENTS]
|
[ENHANCEMENTS]
|
||||||
|
|||||||
@@ -386,7 +386,7 @@ note: The Cisco 3000 device can return duplicate interface names, while Netdisco
|
|||||||
|
|
||||||
device: ASA
|
device: ASA
|
||||||
note: The Cisco ASA is the successor of the PIX which was bought from Altiga Networks.
|
note: The Cisco ASA is the successor of the PIX which was bought from Altiga Networks.
|
||||||
Class: Layer3::CiscoASA
|
class: Layer3::CiscoASA
|
||||||
|
|
||||||
device-family: 1000
|
device-family: 1000
|
||||||
duplex: no
|
duplex: no
|
||||||
|
|||||||
175
Info.pm
175
Info.pm
@@ -24,7 +24,7 @@ use vars
|
|||||||
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
|
qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG %SPEED_MAP
|
||||||
$NOSUCH $BIGINT $REPEATERS/;
|
$NOSUCH $BIGINT $REPEATERS/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ SNMP::Info - OO Interface to Network devices and MIBs through SNMP
|
|||||||
|
|
||||||
=head1 VERSION
|
=head1 VERSION
|
||||||
|
|
||||||
SNMP::Info - Version 3.08
|
SNMP::Info - Version 3.15
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ See L<http://netdisco.org/doc/DeviceMatrix.html> or L<DeviceMatrix.txt> for more
|
|||||||
=head1 SUPPORT
|
=head1 SUPPORT
|
||||||
|
|
||||||
Please direct all support, help, and bug requests to the snmp-info-users
|
Please direct all support, help, and bug requests to the snmp-info-users
|
||||||
Mailing List at <http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
|
Mailing List at L<http://lists.sourceforge.net/lists/listinfo/snmp-info-users>.
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
@@ -235,6 +235,12 @@ Requires the F<ADSL-LINE-MIB>, down loadable from Cisco.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::AdslLine> for details.
|
See documentation in L<SNMP::Info::AdslLine> for details.
|
||||||
|
|
||||||
|
=item SNMP::Info::Aggregate
|
||||||
|
|
||||||
|
SNMP Interface to F<IF-MIB> C<ifStackTable> Aggregated Links
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Aggregate> for details.
|
||||||
|
|
||||||
=item SNMP::Info::Airespace
|
=item SNMP::Info::Airespace
|
||||||
|
|
||||||
F<AIRESPACE-WIRELESS-MIB> and F<AIRESPACE-SWITCHING-MIB>. Inherited by
|
F<AIRESPACE-WIRELESS-MIB> and F<AIRESPACE-SWITCHING-MIB>. Inherited by
|
||||||
@@ -256,6 +262,12 @@ support.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Bridge> for details.
|
See documentation in L<SNMP::Info::Bridge> for details.
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
|
SNMP Interface to Cisco Aggregated Links
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::CiscoAgg> for details.
|
||||||
|
|
||||||
=item SNMP::Info::CDP
|
=item SNMP::Info::CDP
|
||||||
|
|
||||||
F<CISCO-CDP-MIB>. Cisco Discovery Protocol (CDP) Support. Inherited by
|
F<CISCO-CDP-MIB>. Cisco Discovery Protocol (CDP) Support. Inherited by
|
||||||
@@ -369,6 +381,12 @@ standards based 802.11 wireless devices.
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::IEEE802dot11> for details.
|
See documentation in L<SNMP::Info::IEEE802dot11> for details.
|
||||||
|
|
||||||
|
=item SNMP::Info::IEEE802dot3ad
|
||||||
|
|
||||||
|
SNMP Interface to IEEE Aggregated Links. F<IEEE8023-LAG-MIB>
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::IEEE802dot3ad> for details.
|
||||||
|
|
||||||
=item SNMP::Info::LLDP
|
=item SNMP::Info::LLDP
|
||||||
|
|
||||||
F<LLDP-MIB>, F<LLDP-EXT-DOT1-MIB>, and F<LLDP-EXT-DOT3-MIB>. Link Layer
|
F<LLDP-MIB>, F<LLDP-EXT-DOT1-MIB>, and F<LLDP-EXT-DOT3-MIB>. Link Layer
|
||||||
@@ -766,6 +784,13 @@ Original Equipment Manufacturer (OEM) such as the HP ProCurve 9300 and 6300 seri
|
|||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
|
See documentation in L<SNMP::Info::Layer3::HP9300> for details.
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3::IBMGbTor
|
||||||
|
|
||||||
|
SNMP Interface to IBM Rackswitch (formerly Blade Network Technologies)
|
||||||
|
network devices.
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3::IBMGbTor> for details.
|
||||||
|
|
||||||
=item SNMP::Info::Layer3::Juniper
|
=item SNMP::Info::Layer3::Juniper
|
||||||
|
|
||||||
Subclass for Juniper devices
|
Subclass for Juniper devices
|
||||||
@@ -844,6 +869,11 @@ See documentation in L<SNMP::Info::Layer3::Pica8> for details.
|
|||||||
Subclass for generic SonicWALL devices. See documentation in
|
Subclass for generic SonicWALL devices. See documentation in
|
||||||
L<SNMP::Info::Layer3::SonicWALL> for details.
|
L<SNMP::Info::Layer3::SonicWALL> for details.
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3::Steelhead
|
||||||
|
|
||||||
|
Subclass for Riverbed Steelhead WAN optimization appliances. See
|
||||||
|
documentation in L<SNMP::Info::Layer3::Steelhead> for details.
|
||||||
|
|
||||||
=item SNMP::Info::Layer3::Sun
|
=item SNMP::Info::Layer3::Sun
|
||||||
|
|
||||||
Subclass for Generic Sun Routers running SunOS.
|
Subclass for Generic Sun Routers running SunOS.
|
||||||
@@ -1023,6 +1053,20 @@ SNMP::Session object to use instead of connecting on own.
|
|||||||
|
|
||||||
(default creates session automatically)
|
(default creates session automatically)
|
||||||
|
|
||||||
|
=item Offline
|
||||||
|
|
||||||
|
Causes SNMP::Info to avoid network activity and return data only from its
|
||||||
|
cache. If you ask for something not in the cache, an error is thrown. See
|
||||||
|
also the C<cache()> and C<offline()> methods.
|
||||||
|
|
||||||
|
(default 0, which means "online")
|
||||||
|
|
||||||
|
=item Cache
|
||||||
|
|
||||||
|
Pass in a HashRef to prime the cache of retrieved data. Useful for creating an
|
||||||
|
instance in C<Offline> mode from a previously dumped cache. See also the
|
||||||
|
C<cache()> method to retrieve a cache after running actial queries.
|
||||||
|
|
||||||
=item OTHER
|
=item OTHER
|
||||||
|
|
||||||
All other arguments are passed to SNMP::Session.
|
All other arguments are passed to SNMP::Session.
|
||||||
@@ -1112,6 +1156,16 @@ sub new {
|
|||||||
delete $sess_args{IgnoreNetSNMPConf};
|
delete $sess_args{IgnoreNetSNMPConf};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( defined $args{Offline} ) {
|
||||||
|
$new_obj->{Offline} = $args{Offline} || 0;
|
||||||
|
delete $sess_args{Offline};
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( defined $args{Cache} and ref {} eq ref $args{Cache} ) {
|
||||||
|
$new_obj->{$_} = $args{Cache}->{$_} for keys %{$args{Cache}};
|
||||||
|
delete $sess_args{Cache};
|
||||||
|
}
|
||||||
|
|
||||||
my $sess = undef;
|
my $sess = undef;
|
||||||
if ( defined $args{Session} ) {
|
if ( defined $args{Session} ) {
|
||||||
$sess = $args{Session};
|
$sess = $args{Session};
|
||||||
@@ -1236,6 +1290,9 @@ data from a method.
|
|||||||
Run $info->clear_cache() to clear the cache to allow reload of both globals
|
Run $info->clear_cache() to clear the cache to allow reload of both globals
|
||||||
and table methods.
|
and table methods.
|
||||||
|
|
||||||
|
The cache can be retreved or set using the $info->cache() method. This works
|
||||||
|
together with the C<Offline> option.
|
||||||
|
|
||||||
=head2 Object Scalar Methods
|
=head2 Object Scalar Methods
|
||||||
|
|
||||||
These are for package related data, not directly supplied
|
These are for package related data, not directly supplied
|
||||||
@@ -1284,6 +1341,50 @@ sub debug {
|
|||||||
return $self->{debug};
|
return $self->{debug};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $info->offline([1|0])
|
||||||
|
|
||||||
|
Returns if offline mode is currently turned on for this object.
|
||||||
|
|
||||||
|
Optionally sets the Offline parameter.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub offline {
|
||||||
|
my $self = shift;
|
||||||
|
my $ol = shift;
|
||||||
|
|
||||||
|
if ( defined $ol ) {
|
||||||
|
$self->{Offline} = $ol;
|
||||||
|
}
|
||||||
|
return $self->{Offline};
|
||||||
|
}
|
||||||
|
|
||||||
|
=item $info->cache([new_cache])
|
||||||
|
|
||||||
|
Returns a HashRef of all cached data in this object. There will be a C<store>
|
||||||
|
key for table data and then one key for each leaf.
|
||||||
|
|
||||||
|
Optionally sets the cache parameters if passed a HashRef.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub cache {
|
||||||
|
my $self = shift;
|
||||||
|
my $data = shift;
|
||||||
|
|
||||||
|
if ( defined $data and ref {} eq ref $data ) {
|
||||||
|
$self->{$_} = $data->{$_} for keys %$data;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $cache = { store => $self->{store} };
|
||||||
|
foreach my $key ( keys %$self ) {
|
||||||
|
next unless defined $key;
|
||||||
|
next unless $key =~ /^_/;
|
||||||
|
$cache->{$key} = $self->{$key};
|
||||||
|
}
|
||||||
|
return $cache;
|
||||||
|
}
|
||||||
|
|
||||||
=item $info->bulkwalk([1|0])
|
=item $info->bulkwalk([1|0])
|
||||||
|
|
||||||
Returns if bulkwalk is currently turned on for this object.
|
Returns if bulkwalk is currently turned on for this object.
|
||||||
@@ -1396,7 +1497,9 @@ sub device_type {
|
|||||||
12325 => 'SNMP::Info::Layer3::Pf',
|
12325 => 'SNMP::Info::Layer3::Pf',
|
||||||
14525 => 'SNMP::Info::Layer2::Trapeze',
|
14525 => 'SNMP::Info::Layer2::Trapeze',
|
||||||
14988 => 'SNMP::Info::Layer3::Mikrotik',
|
14988 => 'SNMP::Info::Layer3::Mikrotik',
|
||||||
|
17163 => 'SNMP::Info::Layer3::Steelhead',
|
||||||
25506 => 'SNMP::Info::Layer3::H3C',
|
25506 => 'SNMP::Info::Layer3::H3C',
|
||||||
|
26543 => 'SNMP::Info::Layer3::IBMGbTor',
|
||||||
30065 => 'SNMP::Info::Layer3::Arista',
|
30065 => 'SNMP::Info::Layer3::Arista',
|
||||||
35098 => 'SNMP::Info::Layer3::Pica8',
|
35098 => 'SNMP::Info::Layer3::Pica8',
|
||||||
);
|
);
|
||||||
@@ -1422,6 +1525,8 @@ sub device_type {
|
|||||||
14179 => 'SNMP::Info::Layer2::Airespace',
|
14179 => 'SNMP::Info::Layer2::Airespace',
|
||||||
14525 => 'SNMP::Info::Layer2::Trapeze',
|
14525 => 'SNMP::Info::Layer2::Trapeze',
|
||||||
14823 => 'SNMP::Info::Layer3::Aruba',
|
14823 => 'SNMP::Info::Layer3::Aruba',
|
||||||
|
17163 => 'SNMP::Info::Layer3::Steelhead',
|
||||||
|
26543 => 'SNMP::Info::Layer3::IBMGbTor',
|
||||||
);
|
);
|
||||||
|
|
||||||
my %l7sysoidmap = (
|
my %l7sysoidmap = (
|
||||||
@@ -2461,7 +2566,7 @@ sub _get_topo_data {
|
|||||||
my $topo_cap = shift;
|
my $topo_cap = shift;
|
||||||
my $method = shift;
|
my $method = shift;
|
||||||
|
|
||||||
return unless $method =~ /(ip|if|port|id|platform)/;
|
return unless $method =~ /(ip|if|port|id|platform|cap)/;
|
||||||
|
|
||||||
my %t_data;
|
my %t_data;
|
||||||
foreach my $proto (@$topo_cap) {
|
foreach my $proto (@$topo_cap) {
|
||||||
@@ -2616,7 +2721,8 @@ sub c_id {
|
|||||||
|
|
||||||
Returns reference to hash. Key: iid, Value: Remote Device Type
|
Returns reference to hash. Key: iid, Value: Remote Device Type
|
||||||
|
|
||||||
Note: LLDP and EDP do not provide this information.
|
Note: EDP does not provide this information. LLDP uses (C<lldpRemSysDesc>)
|
||||||
|
or C<lldp_rem_sysname> as the closest match.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
@@ -2638,6 +2744,34 @@ sub c_platform {
|
|||||||
return _get_topo_data ($self, $partial, $topo_cap, 'platform');
|
return _get_topo_data ($self, $partial, $topo_cap, 'platform');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
=item $info->c_cap(partial, topology_protocol_arrayref)
|
||||||
|
|
||||||
|
Returns reference to hash of arrays. Key: iid, Value: Array of capabilities
|
||||||
|
supported by the device. See the specific protocol class for string values
|
||||||
|
which could be elements within the array.
|
||||||
|
|
||||||
|
Note: Only CDP and LLDP support this method.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub c_cap {
|
||||||
|
my $self = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $topo_cap = shift;
|
||||||
|
|
||||||
|
# Default to old behavior if not called with topo_cap
|
||||||
|
if ( !$topo_cap ) {
|
||||||
|
my $topo_test = $self->has_topo();
|
||||||
|
if ($topo_test) {
|
||||||
|
$topo_cap = $topo_test;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _get_topo_data ($self, $partial, $topo_cap, 'cap');
|
||||||
|
}
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 SETTING DATA VIA SNMP
|
=head1 SETTING DATA VIA SNMP
|
||||||
@@ -3263,21 +3397,7 @@ sub munge_bits {
|
|||||||
my $bits = shift;
|
my $bits = shift;
|
||||||
return unless defined $bits;
|
return unless defined $bits;
|
||||||
|
|
||||||
return unpack( "b*", $bits );
|
return unpack( "B*", $bits );
|
||||||
}
|
|
||||||
|
|
||||||
=item munge_caps
|
|
||||||
|
|
||||||
Takes an octet string and returns an ascii binary string, 7 digits long, MSB.
|
|
||||||
|
|
||||||
=cut
|
|
||||||
|
|
||||||
sub munge_caps {
|
|
||||||
my $caps = shift;
|
|
||||||
return unless defined $caps;
|
|
||||||
|
|
||||||
my $bits = substr( unpack( "B*", $caps ), -7 );
|
|
||||||
return $bits;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
=item munge_counter64
|
=item munge_counter64
|
||||||
@@ -3600,6 +3720,12 @@ sub _global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $self->{Offline} ) {
|
||||||
|
$self->error_throw(
|
||||||
|
"SNMP::Info::_global: Offline but $attr is not in cache\n" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( $self->debug() ) {
|
if ( $self->debug() ) {
|
||||||
# Let's get the MIB Module and leaf name along with the OID
|
# Let's get the MIB Module and leaf name along with the OID
|
||||||
my $qual_leaf = SNMP::translateObj($oid,0,1) || '';
|
my $qual_leaf = SNMP::translateObj($oid,0,1) || '';
|
||||||
@@ -3924,6 +4050,12 @@ sub _load_attr {
|
|||||||
&& !$load
|
&& !$load
|
||||||
&& !defined $partial );
|
&& !defined $partial );
|
||||||
|
|
||||||
|
if ( $self->{Offline} ) {
|
||||||
|
$self->error_throw(
|
||||||
|
"SNMP::Info::_load_atrr: Offline but $attr is not in cache\n" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
# We want the qualified leaf name so that we can
|
# We want the qualified leaf name so that we can
|
||||||
# specify the Module (MIB) in the case of private leaf naming
|
# specify the Module (MIB) in the case of private leaf naming
|
||||||
# conflicts. Example: ALTEON-TIGON-SWITCH-MIB::agSoftwareVersion
|
# conflicts. Example: ALTEON-TIGON-SWITCH-MIB::agSoftwareVersion
|
||||||
@@ -4133,6 +4265,7 @@ sub snmp_connect_ip {
|
|||||||
my $ver = $self->snmp_ver();
|
my $ver = $self->snmp_ver();
|
||||||
my $comm = $self->snmp_comm();
|
my $comm = $self->snmp_comm();
|
||||||
|
|
||||||
|
return if $self->{Offline};
|
||||||
return if ( $ip eq '0.0.0.0' ) or ( $ip =~ /^127\./ );
|
return if ( $ip eq '0.0.0.0' ) or ( $ip =~ /^127\./ );
|
||||||
|
|
||||||
# Create session object
|
# Create session object
|
||||||
@@ -4236,7 +4369,7 @@ sub _munge {
|
|||||||
my %munged;
|
my %munged;
|
||||||
foreach my $key ( keys %$data ) {
|
foreach my $key ( keys %$data ) {
|
||||||
my $value = $data->{$key};
|
my $value = $data->{$key};
|
||||||
next unless $value;
|
next unless defined $value;
|
||||||
$munged{$key} = $subref->($value);
|
$munged{$key} = $subref->($value);
|
||||||
}
|
}
|
||||||
return \%munged;
|
return \%munged;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS
|
%MIBS
|
||||||
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
= ( 'ALCATEL-IND1-INTERSWITCH-PROTOCOL-MIB' => 'aipAMAPRemDeviceType', );
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
%MIBS = ( 'ADSL-LINE-MIB' => 'adslLineType' );
|
||||||
|
|
||||||
|
|||||||
130
Info/Aggregate.pm
Normal file
130
Info/Aggregate.pm
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
# SNMP::Info::Aggregate
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 SNMP::Info Developers
|
||||||
|
# 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::Aggregate;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info;
|
||||||
|
|
||||||
|
@SNMP::Info::Aggregate::ISA = qw/SNMP::Info Exporter/;
|
||||||
|
@SNMP::Info::Aggregate::EXPORT_OK = qw/agg_ports_ifstack/;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
%MIBS = (); # IF-MIB
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = ();
|
||||||
|
|
||||||
|
%MUNGE = ();
|
||||||
|
|
||||||
|
sub agg_ports_ifstack {
|
||||||
|
my $dev = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $ifStack = $dev->ifStackStatus();
|
||||||
|
# TODO: if we want to do partial, we need to use inverse status
|
||||||
|
my $ifType = $dev->ifType();
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
|
||||||
|
foreach my $idx ( keys %$ifStack ) {
|
||||||
|
my ( $higher, $lower ) = split /\./, $idx;
|
||||||
|
next if ( $higher == 0 or $lower == 0 );
|
||||||
|
if ( $ifType->{ $higher } eq 'ieee8023adLag' ) {
|
||||||
|
$ret->{ $lower } = $higher;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Aggregate - SNMP Interface to ifStackTable Aggregated Links
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
SNMP::Info Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $info = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $info->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This class provides access to Aggregated Links configuration on devices
|
||||||
|
supporting C<ifStackTable>.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
L<SNMP::Info>
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<IF-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item C<agg_ports_ifstack>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -577,6 +577,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $airespace = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $airespace->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $airespace = shift;
|
my $airespace = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -688,37 +695,47 @@ sub i_ssidmac {
|
|||||||
foreach my $oid ( keys %$ssidlist ) {
|
foreach my $oid ( keys %$ssidlist ) {
|
||||||
|
|
||||||
my @parts = split( /\./, $oid );
|
my @parts = split( /\./, $oid );
|
||||||
my $ssid_idx = pop (@parts);
|
my $ssid_idx = pop(@parts);
|
||||||
my $slot = pop (@parts);
|
my $slot = pop(@parts);
|
||||||
my $last = pop (@parts);
|
my $last = pop(@parts);
|
||||||
|
|
||||||
my $iid = $oid;
|
my $iid = $oid;
|
||||||
|
|
||||||
# Get radio band
|
# Get radio band
|
||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
my $ap_type = $apif_type->{$iid};
|
my $ap_type = $apif_type->{$iid};
|
||||||
|
|
||||||
# Determine if IOS based
|
# Determine if IOS based
|
||||||
$iid =~ s/\.\d+$//;
|
$iid =~ s/\.\d+$//;
|
||||||
my $ios = $ap_ios->{$iid} || '';
|
my $ios = $ap_ios->{$iid} || '';
|
||||||
|
|
||||||
|
# 17 can be used as index for 3rd Party AP's. We only have one
|
||||||
|
# hexadecimal digit to work with so skip if outside the range
|
||||||
|
if ( $ssid_idx > 0 and $ssid_idx < 17 ) {
|
||||||
|
|
||||||
# Four cases:
|
# Four cases:
|
||||||
# IOS and 2.4Ghz count up, starts at zero
|
# IOS and 2.4Ghz count up, starts at zero
|
||||||
if ($ios and $ap_type =~ /b$/) {
|
if ( $ios and $ap_type =~ /b$/ ) {
|
||||||
$last = $last + ($ssid_idx - 1);
|
$last = $last + ( $ssid_idx - 1 );
|
||||||
}
|
|
||||||
# IOS and 5Ghz - count down from maximum of 16
|
|
||||||
elsif ($ios and $ap_type =~ /a$/) {
|
|
||||||
$last = $last + (16 - $ssid_idx);
|
|
||||||
}
|
|
||||||
# VxWorks and 5Ghz - count up, starts at zero
|
|
||||||
elsif ($ios and $ap_type =~ /a$/) {
|
|
||||||
$last = $last + ($ssid_idx - 1);
|
|
||||||
}
|
|
||||||
# VxWorks and 2.4Ghz - count down from maximum of 16
|
|
||||||
else {
|
|
||||||
$last = $last + (16 - $ssid_idx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
push (@parts, $last);
|
# IOS and 5Ghz - count down from maximum of 16
|
||||||
|
elsif ( $ios and $ap_type =~ /a$/ ) {
|
||||||
|
$last = $last + ( 16 - $ssid_idx );
|
||||||
|
}
|
||||||
|
|
||||||
|
# VxWorks and 5Ghz - count up, starts at zero
|
||||||
|
elsif ( $ios and $ap_type =~ /a$/ ) {
|
||||||
|
$last = $last + ( $ssid_idx - 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
# VxWorks and 2.4Ghz - count down from maximum of 16
|
||||||
|
else {
|
||||||
|
$last = $last + ( 16 - $ssid_idx );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
push( @parts, $last );
|
||||||
my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
|
my $bssid = join( ':', map { sprintf( "%02x", $_ ) } @parts );
|
||||||
$i_ssidmac{$oid} = $bssid;
|
$i_ssidmac{$oid} = $bssid;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE $INIT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
'BRIDGE-MIB' => 'dot1dBaseBridgeAddress',
|
||||||
@@ -189,6 +189,35 @@ sub qb_i_vlan_t {
|
|||||||
return $i_vlan;
|
return $i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Most devices now support Q-BRIDGE-MIB, fall back to
|
||||||
|
# BRIDGE-MIB for those that don't.
|
||||||
|
sub fw_mac {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_mac();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_mac();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_port();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_port();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_status {
|
||||||
|
my $bridge = shift;
|
||||||
|
|
||||||
|
my $qb = $bridge->qb_fw_status();
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $bridge->SUPER::fw_status();
|
||||||
|
}
|
||||||
|
|
||||||
sub i_stp_state {
|
sub i_stp_state {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -308,6 +337,8 @@ sub i_vlan {
|
|||||||
return $i_vlan;
|
return $i_vlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_untagged { goto &i_vlan }
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -365,6 +396,8 @@ sub set_i_vlan {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_i_untagged { goto &set_i_vlan }
|
||||||
|
|
||||||
sub set_add_i_vlan_tagged {
|
sub set_add_i_vlan_tagged {
|
||||||
my $bridge = shift;
|
my $bridge = shift;
|
||||||
|
|
||||||
@@ -597,6 +630,10 @@ to a hash.
|
|||||||
|
|
||||||
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
Returns a mapping between C<ifIndex> and the PVID or default VLAN.
|
||||||
|
|
||||||
|
=item $vtp->i_untagged()
|
||||||
|
|
||||||
|
An alias for C<i_vlan>.
|
||||||
|
|
||||||
=item $bridge->i_vlan_membership()
|
=item $bridge->i_vlan_membership()
|
||||||
|
|
||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
@@ -893,6 +930,10 @@ operations.
|
|||||||
|
|
||||||
Currently unsupported. Throws an error and returns.
|
Currently unsupported. Throws an error and returns.
|
||||||
|
|
||||||
|
=item $bridge->set_i_untagged(vlan, ifIndex)
|
||||||
|
|
||||||
|
An alias for C<set_i_vlan>.
|
||||||
|
|
||||||
=item $bridge->set_i_pvid(pvid, ifIndex)
|
=item $bridge->set_i_pvid(pvid, ifIndex)
|
||||||
|
|
||||||
Currently unsupported. Throws an error and returns.
|
Currently unsupported. Throws an error and returns.
|
||||||
|
|||||||
85
Info/CDP.pm
85
Info/CDP.pm
@@ -40,9 +40,10 @@ use SNMP::Info;
|
|||||||
@SNMP::Info::CDP::ISA = qw/SNMP::Info Exporter/;
|
@SNMP::Info::CDP::ISA = qw/SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CDP::EXPORT_OK = qw//;
|
@SNMP::Info::CDP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
|
use vars
|
||||||
|
qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT %CDP_CAPABILITIES/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# Five data structures required by SNMP::Info
|
# Five data structures required by SNMP::Info
|
||||||
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
%MIBS = ( 'CISCO-CDP-MIB' => 'cdpGlobalRun' );
|
||||||
@@ -76,7 +77,7 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
'cdp_capabilities' => \&SNMP::Info::munge_caps,
|
'cdp_capabilities' => \&SNMP::Info::munge_bits,
|
||||||
'cdp_platform' => \&SNMP::Info::munge_null,
|
'cdp_platform' => \&SNMP::Info::munge_null,
|
||||||
'cdp_domain' => \&SNMP::Info::munge_null,
|
'cdp_domain' => \&SNMP::Info::munge_null,
|
||||||
'cdp_port' => \&SNMP::Info::munge_null,
|
'cdp_port' => \&SNMP::Info::munge_null,
|
||||||
@@ -87,6 +88,20 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
%CDP_CAPABILITIES = (
|
||||||
|
'Router' => 0x001,
|
||||||
|
'Trans-Bridge' => 0x002,
|
||||||
|
'Source-Route-Bridge' => 0x004,
|
||||||
|
'Switch' => 0x008,
|
||||||
|
'Host' => 0x010,
|
||||||
|
'IGMP' => 0x020,
|
||||||
|
'Repeater' => 0x040,
|
||||||
|
'VoIP-Phone' => 0x080,
|
||||||
|
'Remotely-Managed-Device' => 0x100,
|
||||||
|
'Supports-STP-Dispute' => 0x200,
|
||||||
|
'Two-port Mac Relay' => 0x400,
|
||||||
|
);
|
||||||
|
|
||||||
sub munge_power {
|
sub munge_power {
|
||||||
my $power = shift;
|
my $power = shift;
|
||||||
my $decimal = substr( $power, -3 );
|
my $decimal = substr( $power, -3 );
|
||||||
@@ -160,6 +175,41 @@ sub cdp_ip {
|
|||||||
return \%cdp_ip;
|
return \%cdp_ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub cdp_cap {
|
||||||
|
my $cdp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
# Some devices return a hex-string, others return a space separated
|
||||||
|
# string, we need the raw data to determine return value and
|
||||||
|
# take appropriate action
|
||||||
|
my $cdp_caps = $cdp->cdp_capabilities_raw($partial) || {};
|
||||||
|
|
||||||
|
my %cdp_cap;
|
||||||
|
foreach my $key ( keys %$cdp_caps ) {
|
||||||
|
my $cap_raw = $cdp_caps->{$key};
|
||||||
|
next unless $cap_raw;
|
||||||
|
|
||||||
|
# Simple check, smallest single string is either Host or IGMP with a
|
||||||
|
# space added on the end for a length of 5, hex string is normally
|
||||||
|
# 4 bytes, but since only one byte was traditionally needed process
|
||||||
|
# as hex for a length of 4 or less
|
||||||
|
if ( length $cap_raw < 5 ) {
|
||||||
|
my $cap_hex = join( '',
|
||||||
|
map { sprintf "%x", $_ } unpack( 'C*', $cap_raw ) );
|
||||||
|
foreach my $capability ( keys %CDP_CAPABILITIES ) {
|
||||||
|
if ( ( hex $cap_hex ) & $CDP_CAPABILITIES{$capability} ) {
|
||||||
|
push( @{ $cdp_cap{$key} }, $capability );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
my @caps = split /\s/, $cap_raw;
|
||||||
|
push( @{ $cdp_cap{$key} }, @caps );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%cdp_cap;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -283,15 +333,24 @@ to a hash.
|
|||||||
=item $cdp->cdp_capabilities()
|
=item $cdp->cdp_capabilities()
|
||||||
|
|
||||||
Returns Device Functional Capabilities. Results are munged into an ascii
|
Returns Device Functional Capabilities. Results are munged into an ascii
|
||||||
binary string, 7 digits long, MSB. Each digit represents a bit from the
|
binary string, MSB. Each digit represents a bit from the table below from
|
||||||
table below.
|
the CDP Capabilities Mapping to Smartport Type table within the
|
||||||
|
Cisco Small Business 200 Series Smart Switch Administration Guide,
|
||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
L<http://www.cisco.com/c/en/us/support/switches/small-business-200-series-smart-switches/products-maintenance-guides-list.html>:
|
||||||
|
|
||||||
(Bit) - Description
|
(Bit) - Description
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item (0x400) - Two-Port MAC Relay.
|
||||||
|
|
||||||
|
=item (0x200) - CAST Phone Port / CVTA / Supports-STP-Dispute depending
|
||||||
|
upon platform.
|
||||||
|
|
||||||
|
=item (0x100) - Remotely-Managed Device.
|
||||||
|
|
||||||
|
=item (0x80) - VoIP Phone.
|
||||||
|
|
||||||
=item (0x40) - Provides level 1 functionality.
|
=item (0x40) - Provides level 1 functionality.
|
||||||
|
|
||||||
=item (0x20) - The bridge or switch does not forward IGMP Report packets on
|
=item (0x20) - The bridge or switch does not forward IGMP Report packets on
|
||||||
@@ -314,8 +373,8 @@ protocol.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to this
|
Thanks to Martin Lorensen for a pointer to the original information and
|
||||||
information.
|
CPAN user Alex for updates.
|
||||||
|
|
||||||
(C<cdpCacheCapabilities>)
|
(C<cdpCacheCapabilities>)
|
||||||
|
|
||||||
@@ -427,6 +486,14 @@ for decimal placement.
|
|||||||
|
|
||||||
(C<cdpCachePowerConsumption>)
|
(C<cdpCachePowerConsumption>)
|
||||||
|
|
||||||
|
=item $cdp->cdp_cap()
|
||||||
|
|
||||||
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
|
supported by the remote system. Possible elements in the array are
|
||||||
|
C<Router>, C<Trans-Bridge>, C<Source-Route-Bridge>, C<Switch>, C<Host>,
|
||||||
|
C<IGMP>, C<Repeater>, C<VoIP-Phone>, C<Remotely-Managed-Device>,
|
||||||
|
C<Supports-STP-Dispute>, and C<Two-port Mac Relay>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head1 Data Munging Callback Subroutines
|
=head1 Data Munging Callback Subroutines
|
||||||
|
|||||||
150
Info/CiscoAgg.pm
Normal file
150
Info/CiscoAgg.pm
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
# SNMP::Info::CiscoAgg
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 SNMP::Info Developers
|
||||||
|
# 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::CiscoAgg;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||||
|
|
||||||
|
@SNMP::Info::CiscoAgg::ISA = qw/
|
||||||
|
SNMP::Info::IEEE802dot3ad
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::CiscoAgg::EXPORT_OK = qw/
|
||||||
|
agg_ports
|
||||||
|
/;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||||
|
'CISCO-PAGP-MIB' => 'pagpGroupIfIndex',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = ();
|
||||||
|
|
||||||
|
%MUNGE = ();
|
||||||
|
|
||||||
|
sub agg_ports_pagp {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# Note that this mapping will miss any interfaces that are down during
|
||||||
|
# polling. If one of the members is up, we could use
|
||||||
|
# pagpAdminGroupCapability to figure things out, but if they're all
|
||||||
|
# down, we're hosed. Since we could be hosed anyway, we skip the fancy
|
||||||
|
# stuff.
|
||||||
|
my $mapping = {};
|
||||||
|
my $group = $dev->pagpGroupIfIndex;
|
||||||
|
for my $slave (keys %$group) {
|
||||||
|
my $master = $group->{$slave};
|
||||||
|
next if($master == 0 || $slave == $master);
|
||||||
|
|
||||||
|
$mapping->{$slave} = $master;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
# until we have PAgP data and need to combine with LAG data
|
||||||
|
sub agg_ports {
|
||||||
|
my $ret = {%{agg_ports_pagp(@_)}, %{agg_ports_lag(@_)}};
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::CiscoAgg - SNMP Interface to Cisco Aggregated Links
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
SNMP::Info Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $info = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $info->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This class provides access to Aggregated Links configuration on Cisco devices.
|
||||||
|
It combines Cisco PAgP and IEEE 802.3ad information.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
L<SNMP::Info::IEEE802dot3ad>
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<CISCO-PAGP-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
MIBs can be found at ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=item C<agg_ports_pagp>
|
||||||
|
|
||||||
|
Implements the PAgP LAG info retrieval. Merged into C<agg_ports> data
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
'CISCO-CONFIG-COPY-MIB' => 'ccCopyTable',
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
|
%MIBS = ( 'CISCO-IMAGE-MIB' => 'ciscoImageString', );
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use Exporter;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PAECAPABILITIES/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
'CISCO-PORT-SECURITY-MIB' => 'ciscoPortSecurityMIB',
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
%MIBS = ( 'CISCO-POWER-ETHERNET-EXT-MIB' => 'cpeExtPsePortEntPhyIndex',
|
||||||
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
'CISCO-CDP-MIB' => 'cdpCachePowerConsumption' );
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
%MIBS = ( 'CISCO-CLASS-BASED-QOS-MIB' => 'cbQosIfIndex', );
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
%MIBS = ( 'CISCO-RTTMON-MIB' => 'rttMonCtrlAdminOwner', );
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
%MIBS = ( 'CISCO-STACK-MIB' => 'ciscoStackMIB', );
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'SNMPv2-MIB' => 'sysDescr',
|
'SNMPv2-MIB' => 'sysDescr',
|
||||||
@@ -103,6 +103,7 @@ sub os {
|
|||||||
# order here matters - there are Catalysts that run IOS and have catalyst
|
# order here matters - there are Catalysts that run IOS and have catalyst
|
||||||
# in their description field, as well as Catalysts that run IOS-XE.
|
# in their description field, as well as Catalysts that run IOS-XE.
|
||||||
return 'ios-xe' if ( $descr =~ /IOS-XE/ );
|
return 'ios-xe' if ( $descr =~ /IOS-XE/ );
|
||||||
|
return 'ios-xr' if ( $descr =~ /IOS XR/ );
|
||||||
return 'ios' if ( $descr =~ /IOS/ );
|
return 'ios' if ( $descr =~ /IOS/ );
|
||||||
return 'catalyst' if ( $descr =~ /catalyst/i );
|
return 'catalyst' if ( $descr =~ /catalyst/i );
|
||||||
return 'css' if ( $descr =~ /Content Switch SW/ );
|
return 'css' if ( $descr =~ /Content Switch SW/ );
|
||||||
@@ -198,6 +199,13 @@ sub os_ver {
|
|||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( defined $os
|
||||||
|
and $os eq 'ios-xr'
|
||||||
|
and defined $descr
|
||||||
|
and $descr =~ m/Version (\d+[\.\d]+)/ )
|
||||||
|
{
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
|
||||||
# Newer Catalysts and IOS devices
|
# Newer Catalysts and IOS devices
|
||||||
if ( defined $descr
|
if ( defined $descr
|
||||||
@@ -409,6 +417,7 @@ Available values:
|
|||||||
|
|
||||||
'ios' for Cisco IOS
|
'ios' for Cisco IOS
|
||||||
'ios-xe' for Cisco IOS XE
|
'ios-xe' for Cisco IOS XE
|
||||||
|
'ios-xr' for Cisco IOS XR
|
||||||
'pix' for Cisco PIX
|
'pix' for Cisco PIX
|
||||||
'asa' for Cisco ASA
|
'asa' for Cisco ASA
|
||||||
'fwsm' for Single-mode FWSM
|
'fwsm' for Single-mode FWSM
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Bridge;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
use vars qw/$VERSION $DEBUG %MIBS %FUNCS %GLOBALS %MUNGE %PORTSTAT $INIT/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
@SNMP::Info::CiscoStpExtensions::ISA = qw/SNMP::Info::Bridge SNMP::Info Exporter/;
|
||||||
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
@SNMP::Info::CiscoStpExtensions::EXPORT_OK = qw//;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'CISCO-VTP-MIB' => 'vtpVlanName',
|
'CISCO-VTP-MIB' => 'vtpVlanName',
|
||||||
@@ -191,6 +191,22 @@ sub i_vlan {
|
|||||||
return \%i_vlans;
|
return \%i_vlans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub i_untagged {
|
||||||
|
my $vtp = shift;
|
||||||
|
my ( $ifindex ) = @_;
|
||||||
|
|
||||||
|
# cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
|
||||||
|
# so we use vtp_trunk_dyn as a hint to use i_pvid
|
||||||
|
|
||||||
|
my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
|
||||||
|
if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
|
||||||
|
return $vtp->i_pvid(@_);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $vtp->i_vlan(@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $vtp = shift;
|
my $vtp = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -306,6 +322,22 @@ sub set_i_vlan {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_i_untagged {
|
||||||
|
my $vtp = shift;
|
||||||
|
my ( $vlan_id, $ifindex ) = @_;
|
||||||
|
|
||||||
|
# cannot defer to i_vlan - vtp_trunk_dyn_stat is not useful for down ports
|
||||||
|
# so we use vtp_trunk_dyn as a hint to use i_pvid
|
||||||
|
|
||||||
|
my $trunking = eval { $vtp->vtp_trunk_dyn($ifindex)->{$ifindex} };
|
||||||
|
if ($trunking and (($trunking eq 'on') or ($trunking eq 'onNoNegotiate'))) {
|
||||||
|
return $vtp->set_i_pvid(@_);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $vtp->set_i_vlan(@_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub set_add_i_vlan_tagged {
|
sub set_add_i_vlan_tagged {
|
||||||
my $vtp = shift;
|
my $vtp = shift;
|
||||||
my ( $vlan_id, $ifindex ) = @_;
|
my ( $vlan_id, $ifindex ) = @_;
|
||||||
@@ -540,6 +572,10 @@ Your device will only implement a subset of these methods.
|
|||||||
Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
|
Returns a mapping between C<ifIndex> and assigned VLAN ID for access ports
|
||||||
and the default VLAN ID for trunk ports.
|
and the default VLAN ID for trunk ports.
|
||||||
|
|
||||||
|
=item $vtp->i_untagged()
|
||||||
|
|
||||||
|
An alias for C<i_vlan>.
|
||||||
|
|
||||||
=item $vtp->i_vlan_membership()
|
=item $vtp->i_vlan_membership()
|
||||||
|
|
||||||
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
Returns reference to hash of arrays: key = C<ifIndex>, value = array of VLAN
|
||||||
@@ -835,6 +871,12 @@ port C<ifIndex>. This method should only be used on trunk ports.
|
|||||||
$vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'})
|
$vtp->set_i_pvid('2', $if_map{'FastEthernet0/1'})
|
||||||
or die "Couldn't change port default VLAN. ",$vtp->error(1);
|
or die "Couldn't change port default VLAN. ",$vtp->error(1);
|
||||||
|
|
||||||
|
=item $vtp->set_i_untagged ( vlan, ifIndex )
|
||||||
|
|
||||||
|
This method attempts to work out whether the port referenced by ifIndex is
|
||||||
|
trunking, and if so will return the value of C<set_i_pvid>. Otherwise, the
|
||||||
|
value of C<set_i_vlan> is returned.
|
||||||
|
|
||||||
=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
|
=item $vtp->set_add_i_vlan_tagged ( vlan, ifIndex )
|
||||||
|
|
||||||
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
|
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
'EXTREME-EDP-MIB' => 'extremeEdpPortIfIndex',
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
%MIBS = ( 'ENTITY-MIB' => 'entPhysicalSerialNum' );
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
%MIBS = ( 'EtherLike-MIB' => 'etherMIB' );
|
||||||
|
|
||||||
|
|||||||
10
Info/FDP.pm
10
Info/FDP.pm
@@ -42,7 +42,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
%MIBS = ( 'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snFdpGlobalRun' );
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
'fdp_capabilities' => \&SNMP::Info::munge_caps,
|
'fdp_capabilities' => \&SNMP::Info::munge_bits,
|
||||||
'fdp_ip' => \&SNMP::Info::munge_ip
|
'fdp_ip' => \&SNMP::Info::munge_ip
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -289,8 +289,7 @@ CDP compatibility
|
|||||||
=item $fdp->fdp_capabilities()
|
=item $fdp->fdp_capabilities()
|
||||||
|
|
||||||
Returns Device Functional Capabilities. Results are munged into an ascii
|
Returns Device Functional Capabilities. Results are munged into an ascii
|
||||||
binary string, 7 digits long, MSB. Each digit represents a bit from the
|
binary string, MSB. Each digit represents a bit from the table below.
|
||||||
table below.
|
|
||||||
|
|
||||||
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
From L<http://www.cisco.com/univercd/cc/td/doc/product/lan/trsrb/frames.htm#18843>:
|
||||||
|
|
||||||
@@ -320,8 +319,7 @@ protocol.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
Thanks to Martin Lorensen C<martin -at- lorensen.dk> for a pointer to
|
Thanks to Martin Lorensen for a pointer to this information.
|
||||||
this information.
|
|
||||||
|
|
||||||
(C<fdpCacheCapabilities>)
|
(C<fdpCacheCapabilities>)
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use Exporter;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
%MIBS = ( 'IEEE802dot11-MIB' => 'dot11DesiredSSID', );
|
||||||
|
|
||||||
|
|||||||
141
Info/IEEE802dot3ad.pm
Normal file
141
Info/IEEE802dot3ad.pm
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
# SNMP::Info::IEEE802dot3ad
|
||||||
|
#
|
||||||
|
# Copyright (c) 2014 SNMP::Info Developers
|
||||||
|
# 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::IEEE802dot3ad;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Aggregate;
|
||||||
|
|
||||||
|
@SNMP::Info::IEEE802dot3ad::ISA = qw/
|
||||||
|
SNMP::Info::Aggregate
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::IEEE802dot3ad::EXPORT_OK = qw/
|
||||||
|
agg_ports_lag
|
||||||
|
/;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
|
'IEEE8023-LAG-MIB' => 'dot3adAggPortSelectedAggID',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = ();
|
||||||
|
|
||||||
|
%FUNCS = ();
|
||||||
|
|
||||||
|
%MUNGE = ();
|
||||||
|
|
||||||
|
sub agg_ports_lag {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# TODO: implement partial
|
||||||
|
my $masters = $dev->dot3adAggActorOperKey;
|
||||||
|
my $slaves = $dev->dot3adAggPortActorOperKey;
|
||||||
|
|
||||||
|
return {} unless
|
||||||
|
ref {} eq ref $masters and scalar keys %$masters
|
||||||
|
and ref {} eq ref $slaves and scalar keys %$slaves;
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
foreach my $s (keys %$slaves) {
|
||||||
|
next if $slaves->{$s} == 0;
|
||||||
|
foreach my $m (keys %$masters) {
|
||||||
|
next unless $masters->{$m} == $slaves->{$s};
|
||||||
|
$ret->{$s} = $m;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::IEEE802dot3ad - SNMP Interface to IEEE Aggregated Links
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
SNMP::Info Developers
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $info = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $info->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This class provides access to Aggregated Links configuration on devices
|
||||||
|
implementing C<IEEE8023-LAG-MIB>.
|
||||||
|
|
||||||
|
Use or create in a subclass of SNMP::Info. Do not use directly.
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
L<SNMP::Info::Aggregate>
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<IEEE8023-LAG-MIB>
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item C<agg_ports_lag>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -44,7 +44,7 @@ use constant {
|
|||||||
IPV6MIB => 3,
|
IPV6MIB => 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
73
Info/LLDP.pm
73
Info/LLDP.pm
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
'LLDP-MIB' => 'lldpLocSysCapEnabled',
|
||||||
@@ -67,6 +67,7 @@ $VERSION = '3.08';
|
|||||||
'lldp_rem_sysname' => 'lldpRemSysName',
|
'lldp_rem_sysname' => 'lldpRemSysName',
|
||||||
'lldp_rem_sysdesc' => 'lldpRemSysDesc',
|
'lldp_rem_sysdesc' => 'lldpRemSysDesc',
|
||||||
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
|
'lldp_rem_sys_cap' => 'lldpRemSysCapEnabled',
|
||||||
|
'lldp_rem_cap_spt' => 'lldpRemSysCapSupported',
|
||||||
|
|
||||||
# LLDP-MIB::lldpRemManAddrTable
|
# LLDP-MIB::lldpRemManAddrTable
|
||||||
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
|
'lldp_rman_addr' => 'lldpRemManAddrIfSubtype',
|
||||||
@@ -80,6 +81,7 @@ $VERSION = '3.08';
|
|||||||
'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
|
'lldp_rem_port_desc' => \&SNMP::Info::munge_null,
|
||||||
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
|
'lldp_sys_cap' => \&SNMP::Info::munge_bits,
|
||||||
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
|
'lldp_rem_sys_cap' => \&SNMP::Info::munge_bits,
|
||||||
|
'lldp_rem_cap_spt' => \&SNMP::Info::munge_bits,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub hasLLDP {
|
sub hasLLDP {
|
||||||
@@ -88,8 +90,12 @@ sub hasLLDP {
|
|||||||
# We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
|
# We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
|
||||||
# so we could be running LLDP but not return any useful information
|
# so we could be running LLDP but not return any useful information
|
||||||
my $lldp_cap = $lldp->lldp_sys_cap();
|
my $lldp_cap = $lldp->lldp_sys_cap();
|
||||||
|
|
||||||
return 1 if defined $lldp_cap;
|
return 1 if defined $lldp_cap;
|
||||||
|
|
||||||
|
# If the device doesn't return local system capabilities, fallback by checking if it would report neighbors
|
||||||
|
my $lldp_rem = $lldp->lldp_rem_id() || {};
|
||||||
|
return 1 if scalar keys %$lldp_rem;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,6 +233,50 @@ sub lldp_id {
|
|||||||
return \%lldp_id;
|
return \%lldp_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub lldp_platform {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $rid = $lldp->lldp_rem_id($partial) || {};
|
||||||
|
my $desc = $lldp->lldp_rem_sysdesc($partial) || {};
|
||||||
|
my $name = $lldp->lldp_rem_sysname($partial) || {};
|
||||||
|
|
||||||
|
my %lldp_platform;
|
||||||
|
foreach my $key (keys %$rid) {
|
||||||
|
$lldp_platform{$key} = $desc->{$key} || $name->{$key};
|
||||||
|
}
|
||||||
|
return \%lldp_platform;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_cap {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $lldp_caps = $lldp->lldp_rem_cap_spt($partial) || {};
|
||||||
|
|
||||||
|
# Encoded as BITS which Perl Net-SNMP implementation doesn't seem to
|
||||||
|
# be able to enumerate for us, so we have to get it from the MIB
|
||||||
|
# and enumerate ourselves
|
||||||
|
my $oid = SNMP::translateObj('lldpRemSysCapEnabled',0,1) || '';
|
||||||
|
my $enums = ((ref {} eq ref $SNMP::MIB{$oid}{'enums'}) ? $SNMP::MIB{$oid}{'enums'} : {});
|
||||||
|
my %r_enums = reverse %$enums;
|
||||||
|
|
||||||
|
my %lldp_cap;
|
||||||
|
foreach my $key ( keys %$lldp_caps ) {
|
||||||
|
my $cap_bits = $lldp_caps->{$key};
|
||||||
|
next unless $cap_bits;
|
||||||
|
|
||||||
|
my $count = 0;
|
||||||
|
foreach my $bit (split //,$cap_bits) {
|
||||||
|
if ( $bit ) {
|
||||||
|
push ( @{$lldp_cap{$key}}, $r_enums{$count});
|
||||||
|
}
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%lldp_cap;
|
||||||
|
}
|
||||||
|
|
||||||
#sub root_ip {
|
#sub root_ip {
|
||||||
# my $lldp = shift;
|
# my $lldp = shift;
|
||||||
#
|
#
|
||||||
@@ -252,7 +302,7 @@ sub _lldp_addr_index {
|
|||||||
my @oids = split( /\./, $idx );
|
my @oids = split( /\./, $idx );
|
||||||
my $index = join( '.', splice( @oids, 0, 3 ) );
|
my $index = join( '.', splice( @oids, 0, 3 ) );
|
||||||
my $proto = shift(@oids);
|
my $proto = shift(@oids);
|
||||||
my $length = shift(@oids);
|
my $length = shift(@oids) if scalar @oids > 4;
|
||||||
|
|
||||||
# IPv4
|
# IPv4
|
||||||
if ( $proto == 1 ) {
|
if ( $proto == 1 ) {
|
||||||
@@ -440,6 +490,17 @@ Currently only returns IPv4 or MAC addresses.
|
|||||||
|
|
||||||
Returns remote port ID
|
Returns remote port ID
|
||||||
|
|
||||||
|
=item $lldp->lldp_platform()
|
||||||
|
|
||||||
|
Tries to return something useful from C<lldp_rem_sysdesc()> or
|
||||||
|
C<lldp_rem_sysname()>.
|
||||||
|
|
||||||
|
=item $lldp->lldp_cap()
|
||||||
|
|
||||||
|
Returns hash of arrays with each array containing the system capabilities
|
||||||
|
supported by the remote system. Possible elements in the array are
|
||||||
|
enumerated from C<LldpSystemCapabilitiesMap>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 LLDP Remote Table (C<lldpRemTable>)
|
=head2 LLDP Remote Table (C<lldpRemTable>)
|
||||||
@@ -503,9 +564,9 @@ Nulls are removed before the value is returned.
|
|||||||
|
|
||||||
=item $lldp->lldp_rem_sys_cap()
|
=item $lldp->lldp_rem_sys_cap()
|
||||||
|
|
||||||
Returns which system capabilities are enabled on the local system. Results
|
Returns which system capabilities are enabled on the remote system. Results
|
||||||
are munged into an ascii binary string, LSB. Each digit
|
are munged into an ascii binary string, LSB. Each digit represents a bit
|
||||||
represents a bit from the table below:
|
from the table below:
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
%MIBS = ( %SNMP::Info::MIBS, 'SNMP-REPEATER-MIB' => 'rptrPortGroupIndex' );
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, 'root_ip' => 'actualIPAddr', );
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
%GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, );
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -334,6 +334,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $bayhub = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $bayhub->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $bayhub = shift;
|
my $bayhub = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer1::MIBS,
|
%SNMP::Info::Layer1::MIBS,
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
@@ -324,6 +324,13 @@ sub bp_index {
|
|||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $s3000 = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $s3000->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
sub fw_port {
|
sub fw_port {
|
||||||
my $s3000 = shift;
|
my $s3000 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ use SNMP::Info::PowerEthernet;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Airespace;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ use SNMP::Info::IEEE802dot11;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::IEEE802dot11::GLOBALS,
|
%SNMP::Info::IEEE802dot11::GLOBALS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer1;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::Layer3::MIBS, %SNMP::Info::LLDP::MIBS,
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS, %SNMP::Info::CiscoConfig::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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use SNMP::Info::SONMP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -246,6 +246,20 @@ sub slot_offset {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub fw_mac {
|
||||||
|
my $centillion = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $centillion->SUPER::fw_mac($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $centillion = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $centillion->SUPER::fw_port($partial);
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::CiscoConfig::MIBS,
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ use SNMP::Info::CDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||||
# table by the serial() function.
|
# table by the serial() function.
|
||||||
@@ -98,21 +98,17 @@ sub vendor {
|
|||||||
return 'cisco';
|
return 'cisco';
|
||||||
}
|
}
|
||||||
|
|
||||||
# Walk the entPhysicalSerialNum table and return both the first serial
|
# Walk the entPhysicalSerialNum table and return the first serial found
|
||||||
# number found as well as the index of that entry.
|
|
||||||
sub serial {
|
sub serial {
|
||||||
my $ciscosb = shift;
|
my $ciscosb = shift;
|
||||||
my $serial = undef;
|
|
||||||
my $e_serial = $ciscosb->e_serial();
|
my $e_serial = $ciscosb->e_serial();
|
||||||
|
|
||||||
# Find entity table entry for this unit
|
# Find entity table entry for this unit
|
||||||
foreach my $e ( keys %$e_serial ) {
|
foreach my $e ( sort keys %$e_serial ) {
|
||||||
if (defined ($e_serial->{$e}) and $e_serial->{$e} !~ /^\s*$/) {
|
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||||
$index = $e;
|
return $e_serial->{$e};
|
||||||
last;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $e_serial->{$index} if defined $index;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
|
|||||||
@@ -38,21 +38,28 @@ use SNMP::Info::Layer3;
|
|||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
use SNMP::Info::CDP;
|
use SNMP::Info::CDP;
|
||||||
|
use SNMP::Info::Aggregate;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::HP::ISA
|
@SNMP::Info::Layer2::HP::ISA = qw/
|
||||||
= qw/SNMP::Info::Layer3 SNMP::Info::MAU SNMP::Info::LLDP
|
SNMP::Info::Aggregate
|
||||||
SNMP::Info::CDP Exporter/;
|
SNMP::Info::Layer3
|
||||||
|
SNMP::Info::MAU
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::CDP
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HP::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
%SNMP::Info::CDP::MIBS,
|
%SNMP::Info::CDP::MIBS,
|
||||||
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
'RFC1271-MIB' => 'logDescription',
|
'RFC1271-MIB' => 'logDescription',
|
||||||
'HP-ICF-OID' => 'hpSwitch4000',
|
'HP-ICF-OID' => 'hpSwitch4000',
|
||||||
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
'STATISTICS-MIB' => 'hpSwitchCpuStat',
|
||||||
@@ -69,6 +76,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::MAU::GLOBALS,
|
%SNMP::Info::MAU::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
%SNMP::Info::CDP::GLOBALS,
|
%SNMP::Info::CDP::GLOBALS,
|
||||||
|
%SNMP::Info::Aggregate::GLOBALS,
|
||||||
'serial1' => 'entPhysicalSerialNum.1',
|
'serial1' => 'entPhysicalSerialNum.1',
|
||||||
'serial2' => 'hpHttpMgSerialNumber.0',
|
'serial2' => 'hpHttpMgSerialNumber.0',
|
||||||
'hp_cpu' => 'hpSwitchCpuStat.0',
|
'hp_cpu' => 'hpSwitchCpuStat.0',
|
||||||
@@ -87,6 +95,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::MAU::FUNCS,
|
%SNMP::Info::MAU::FUNCS,
|
||||||
%SNMP::Info::LLDP::FUNCS,
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
%SNMP::Info::CDP::FUNCS,
|
%SNMP::Info::CDP::FUNCS,
|
||||||
|
%SNMP::Info::Aggregate::FUNCS,
|
||||||
'i_type2' => 'ifType',
|
'i_type2' => 'ifType',
|
||||||
|
|
||||||
# RFC1271
|
# RFC1271
|
||||||
@@ -112,6 +121,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::MAU::MUNGE,
|
%SNMP::Info::MAU::MUNGE,
|
||||||
%SNMP::Info::LLDP::MUNGE,
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
%SNMP::Info::CDP::MUNGE,
|
%SNMP::Info::CDP::MUNGE,
|
||||||
|
%SNMP::Info::Aggregate::MUNGE,
|
||||||
'c_id' => \&munge_hp_c_id,
|
'c_id' => \&munge_hp_c_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -524,6 +534,32 @@ sub set_i_vlan_tagged {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub agg_ports { return agg_ports_ifstack(@_) }
|
||||||
|
|
||||||
|
sub qb_fw_vlan {
|
||||||
|
my $hp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
my $qb_fw_vlan = $hp->SUPER::qb_fw_vlan($partial);
|
||||||
|
|
||||||
|
my $fdb_to_dot1q = {};
|
||||||
|
my $fdb_id = $hp->dot1qVlanFdbId(0);
|
||||||
|
foreach my $fdb_entry (keys %$fdb_id) {
|
||||||
|
my ($timemark, $vlan_id) = split(/\./, $fdb_entry);
|
||||||
|
$fdb_to_dot1q->{$fdb_id->{$fdb_entry}} = $vlan_id;
|
||||||
|
}
|
||||||
|
foreach my $learn (keys %$qb_fw_vlan) {
|
||||||
|
my $fdb_idx = $qb_fw_vlan->{$learn};
|
||||||
|
if (exists $fdb_to_dot1q->{$fdb_idx}) {
|
||||||
|
$qb_fw_vlan->{$learn} = $fdb_to_dot1q->{$fdb_idx};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $qb_fw_vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -791,6 +827,12 @@ Power supplied by PoE ports, in milliwatts
|
|||||||
Returns what version of STP the device is running.
|
Returns what version of STP the device is running.
|
||||||
(C<hpicfBridgeRstpForceVersion> with fallback to inherited stp_ver())
|
(C<hpicfBridgeRstpForceVersion> with fallback to inherited stp_ver())
|
||||||
|
|
||||||
|
=item $hp->qb_fw_vlan()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries VLAN ID
|
||||||
|
|
||||||
|
(C<dot1qFdbId>), (C<rcBridgeTpFdbVlanId>)
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer2
|
=head2 Globals imported from SNMP::Info::Layer2
|
||||||
@@ -812,7 +854,7 @@ to a hash.
|
|||||||
|
|
||||||
=head2 Overrides
|
=head2 Overrides
|
||||||
|
|
||||||
=over
|
=over 4
|
||||||
|
|
||||||
=item $hp->interfaces()
|
=item $hp->interfaces()
|
||||||
|
|
||||||
@@ -840,6 +882,12 @@ Crosses i_name() with $hp->e_name() using $hp->e_port() and i_alias()
|
|||||||
Returns reference to hash of power Ethernet port table entries map back to
|
Returns reference to hash of power Ethernet port table entries map back to
|
||||||
interface index (c<ifIndex>)
|
interface index (c<ifIndex>)
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer2
|
=head2 Table Methods imported from SNMP::Info::Layer2
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ use SNMP::Info::CDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %PORTSTAT %MODEL_MAP %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -33,17 +33,19 @@ package SNMP::Info::Layer2::HPVC;
|
|||||||
use strict;
|
use strict;
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer2;
|
use SNMP::Info::Layer2;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
@SNMP::Info::Layer2::HPVC::ISA
|
@SNMP::Info::Layer2::HPVC::ISA
|
||||||
= qw/SNMP::Info::Layer2 Exporter/;
|
= qw/SNMP::Info::Layer2 SNMP::Info::LLDP Exporter/;
|
||||||
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
@SNMP::Info::Layer2::HPVC::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
%SNMP::Info::LLDP::MIBS,
|
||||||
'HPVC-MIB' => 'vcDomainName',
|
'HPVC-MIB' => 'vcDomainName',
|
||||||
'CPQSINFO-MIB' => 'cpqSiSysSerialNum',
|
'CPQSINFO-MIB' => 'cpqSiSysSerialNum',
|
||||||
'HPVCMODULE-MIB' => 'vcModuleDomainName',
|
'HPVCMODULE-MIB' => 'vcModuleDomainName',
|
||||||
@@ -51,6 +53,7 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer2::GLOBALS,
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
'serial1' => 'cpqSiSysSerialNum.0',
|
'serial1' => 'cpqSiSysSerialNum.0',
|
||||||
'os_ver' => 'cpqHoSWRunningVersion.1',
|
'os_ver' => 'cpqHoSWRunningVersion.1',
|
||||||
'os_bin' => 'cpqHoFwVerVersion.1',
|
'os_bin' => 'cpqHoFwVerVersion.1',
|
||||||
@@ -59,12 +62,14 @@ $VERSION = '3.08';
|
|||||||
|
|
||||||
%FUNCS = (
|
%FUNCS = (
|
||||||
%SNMP::Info::Layer2::FUNCS,
|
%SNMP::Info::Layer2::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
# Inherit all the built in munging
|
# Inherit all the built in munging
|
||||||
%SNMP::Info::Layer2::MUNGE,
|
%SNMP::Info::Layer2::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Airespace;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Bridge::MIBS,
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::IEEE802dot11::MIBS,
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Bridge;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# This will be filled in with the device's index into the EntPhysicalEntry
|
# This will be filled in with the device's index into the EntPhysicalEntry
|
||||||
# table by the serial() function.
|
# table by the serial() function.
|
||||||
@@ -140,25 +140,6 @@ sub interfaces {
|
|||||||
return $interfaces;
|
return $interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# This is model-dependent. Some netgear brand devices don't implement
|
|
||||||
# the bridge MIB forwarding table, so we use the Q-BRIDGE-MIB forwarding
|
|
||||||
# table. Fall back to the orig functions if the qb versions don't
|
|
||||||
# return anything.
|
|
||||||
sub fw_mac {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $ret = $netgear->qb_fw_mac();
|
|
||||||
$ret = $netgear->orig_fw_mac() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $netgear = shift;
|
|
||||||
my $ret = $netgear->qb_fw_port();
|
|
||||||
$ret = $netgear->orig_fw_port() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
# these seem to work for GSM models but not GS
|
# these seem to work for GSM models but not GS
|
||||||
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
# https://sourceforge.net/tracker/?func=detail&aid=3085413&group_id=70362&atid=527529
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
@@ -299,7 +280,6 @@ sub c_platform {
|
|||||||
return \%c_platform;
|
return \%c_platform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -413,23 +393,6 @@ a reference to a hash.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $netgear->fw_mac()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table MAC Addresses.
|
|
||||||
|
|
||||||
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 $netgear->fw_port()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table entries port interface
|
|
||||||
identifier (iid)
|
|
||||||
|
|
||||||
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 $netgear->interfaces()
|
=item $netgear->interfaces()
|
||||||
|
|
||||||
Uses the i_name() field.
|
Uses the i_name() field.
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS,
|
%SNMP::Info::Layer2::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer2;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# Set for No CDP
|
# Set for No CDP
|
||||||
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
%GLOBALS = ( %SNMP::Info::Layer2::GLOBALS );
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ use SNMP::Info::AdslLine;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
@@ -206,19 +206,24 @@ sub serial {
|
|||||||
my $l3 = shift;
|
my $l3 = shift;
|
||||||
|
|
||||||
my $serial1 = $l3->serial1();
|
my $serial1 = $l3->serial1();
|
||||||
my $e_descr = $l3->e_descr() || {};
|
my $e_parent = $l3->e_parent() || {};
|
||||||
my $e_serial = $l3->e_serial() || {};
|
|
||||||
|
|
||||||
my $serial2 = $e_serial->{1} || undef;
|
foreach my $iid ( keys %$e_parent ) {
|
||||||
my $chassis = $e_descr->{1} || undef;
|
my $parent = $e_parent->{$iid};
|
||||||
|
if ( $parent eq '0' ) {
|
||||||
# precedence
|
my $serial = $l3->e_serial($iid);
|
||||||
# serial2,chassis parse,serial1
|
if ( $serial ) {
|
||||||
return $serial2 if ( defined $serial2 and $serial2 !~ /^\s*$/ );
|
return $serial->{$iid};
|
||||||
|
}
|
||||||
if ( defined $chassis and $chassis =~ /serial#?:\s*([a-z0-9]+)/i ) {
|
else {
|
||||||
|
my $descr = $l3->e_descr($iid);
|
||||||
|
if ( $descr and $descr =~ /serial#?:\s*([a-z0-9]+)/i )
|
||||||
|
{
|
||||||
return $1;
|
return $1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
return $serial1 if ( defined $serial1 and $serial1 !~ /^\s*$/ );
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
use vars qw/$VERSION %MIBS %FUNCS %GLOBALS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -198,21 +198,6 @@ sub interfaces {
|
|||||||
return $alu->orig_i_name($partial);
|
return $alu->orig_i_name($partial);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
sub fw_mac {
|
|
||||||
my $alu = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $alu->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $alu = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $alu->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
|
# Work around buggy bp_index in 6.3.1.871.R01 and 6.3.1.975.R01
|
||||||
sub bp_index {
|
sub bp_index {
|
||||||
my $alu = shift;
|
my $alu = shift;
|
||||||
@@ -445,14 +430,6 @@ to a hash.
|
|||||||
Returns interface name from C<ifName>, since the default return value
|
Returns interface name from C<ifName>, since the default return value
|
||||||
of C<ifDescr> includes the OS version.
|
of C<ifDescr> includes the OS version.
|
||||||
|
|
||||||
=item $alu->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $alu->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $alu->bp_index()
|
=item $alu->bp_index()
|
||||||
|
|
||||||
Work around various bugs in the F<BRIDGE-MIB> and
|
Work around various bugs in the F<BRIDGE-MIB> and
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
|||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE
|
||||||
$int_include_vpn $fake_idx $type_class/;
|
$int_include_vpn $fake_idx $type_class/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -36,19 +36,25 @@ use Exporter;
|
|||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::Aggregate;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Arista::ISA = qw/SNMP::Info::LLDP SNMP::Info::MAU
|
@SNMP::Info::Layer3::Arista::ISA = qw/
|
||||||
SNMP::Info::Layer3 Exporter/;
|
SNMP::Info::Aggregate
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::MAU
|
||||||
|
SNMP::Info::Layer3 Exporter
|
||||||
|
/;
|
||||||
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Arista::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::MAU::MIBS,
|
%SNMP::Info::MAU::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
%SNMP::Info::Aggregate::MIBS,
|
||||||
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
|
'ARISTA-PRODUCTS-MIB' => 'aristaProducts',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -104,22 +110,6 @@ sub model {
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
|
|
||||||
sub fw_mac {
|
|
||||||
my $arista = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $arista->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $arista = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $arista->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# The LLDP MIB leaves it up in the air what the index means.
|
# The LLDP MIB leaves it up in the air what the index means.
|
||||||
# On EOS, it's a dot1d port.
|
# On EOS, it's a dot1d port.
|
||||||
sub lldp_if {
|
sub lldp_if {
|
||||||
@@ -141,6 +131,8 @@ sub lldp_if {
|
|||||||
return $lldp_if;
|
return $lldp_if;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub agg_ports { return agg_ports_ifstack(@_) }
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -176,6 +168,8 @@ Subclass for Arista Networks EOS-based devices
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Aggregate
|
||||||
|
|
||||||
=item SNMP::Info::Layer3
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
=item SNMP::Info::MAU
|
=item SNMP::Info::MAU
|
||||||
@@ -194,6 +188,8 @@ Subclass for Arista Networks EOS-based devices
|
|||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
See L<SNMP::Info::Aggregate/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::MAU/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::LLDP/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -245,14 +241,6 @@ to a hash.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $arista->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $arista->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $arista->i_duplex_admin()
|
=item $arista->i_duplex_admin()
|
||||||
|
|
||||||
Returns info from F<MAU-MIB>
|
Returns info from F<MAU-MIB>
|
||||||
@@ -265,6 +253,12 @@ Returns info from F<MAU-MIB>
|
|||||||
|
|
||||||
Returns the mapping to the SNMP Interface Table.
|
Returns the mapping to the SNMP Interface Table.
|
||||||
|
|
||||||
|
=item C<agg_ports>
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|||||||
@@ -40,13 +40,14 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
'WLSR-AP-MIB' => 'wlsrHideSSID',
|
'WLSR-AP-MIB' => 'wlsrHideSSID',
|
||||||
'WLSX-IFEXT-MIB' => 'ifExtVlanName',
|
'WLSX-IFEXT-MIB' => 'ifExtVlanName',
|
||||||
|
'WLSX-POE-MIB' => 'wlsxPseSlotPowerAvailable',
|
||||||
'WLSX-SWITCH-MIB' => 'wlsxHostname',
|
'WLSX-SWITCH-MIB' => 'wlsxHostname',
|
||||||
'WLSX-SYSTEMEXT-MIB' => 'wlsxSysExtSwitchBaseMacaddress',
|
'WLSX-SYSTEMEXT-MIB' => 'wlsxSysExtSwitchBaseMacaddress',
|
||||||
'WLSX-USER-MIB' => 'nUserCurrentVlan',
|
'WLSX-USER-MIB' => 'nUserCurrentVlan',
|
||||||
@@ -58,7 +59,8 @@ $VERSION = '3.08';
|
|||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
'aruba_serial' => 'wlsxSwitchLicenseSerialNumber',
|
'aruba_serial_old' => 'wlsxSwitchLicenseSerialNumber',
|
||||||
|
'aruba_serial_new' => 'wlsxSysExtLicenseSerialNumber',
|
||||||
'aruba_model' => 'wlsxModelName',
|
'aruba_model' => 'wlsxModelName',
|
||||||
'mac' => 'wlsxSysExtSwitchBaseMacaddress',
|
'mac' => 'wlsxSysExtSwitchBaseMacaddress',
|
||||||
);
|
);
|
||||||
@@ -80,7 +82,7 @@ $VERSION = '3.08';
|
|||||||
'aruba_if_vlan_member' => 'ifExtVlanMemberStatus',
|
'aruba_if_vlan_member' => 'ifExtVlanMemberStatus',
|
||||||
|
|
||||||
# WLSX-IFEXT-MIB::::wlsxIfExtVlanTable
|
# WLSX-IFEXT-MIB::::wlsxIfExtVlanTable
|
||||||
'v_name' => 'ifExtVlanName',
|
'aruba_v_name' => 'ifExtVlanName',
|
||||||
|
|
||||||
# Other cd11_ methods are indexed by staPhyAddress, we need to
|
# Other cd11_ methods are indexed by staPhyAddress, we need to
|
||||||
# strip staAccessPointBSSID from the aruba_cd11_ methods.
|
# strip staAccessPointBSSID from the aruba_cd11_ methods.
|
||||||
@@ -198,7 +200,7 @@ sub model {
|
|||||||
sub serial {
|
sub serial {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
|
||||||
return $aruba->aruba_serial();
|
return $aruba->aruba_serial_old() || $aruba->aruba_serial_new();
|
||||||
}
|
}
|
||||||
|
|
||||||
# Thin APs do not support ifMIB requirement
|
# Thin APs do not support ifMIB requirement
|
||||||
@@ -457,6 +459,9 @@ sub v_index {
|
|||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::v_index($partial)
|
||||||
|
if keys %{ $aruba->SUPER::v_index($partial) };
|
||||||
|
|
||||||
my $v_name = $aruba->v_name($partial);
|
my $v_name = $aruba->v_name($partial);
|
||||||
my %v_index;
|
my %v_index;
|
||||||
foreach my $idx ( keys %$v_name ) {
|
foreach my $idx ( keys %$v_name ) {
|
||||||
@@ -465,10 +470,20 @@ sub v_index {
|
|||||||
return \%v_index;
|
return \%v_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub v_name {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::v_name() || $aruba->aruba_v_name();
|
||||||
|
}
|
||||||
|
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::i_vlan($partial)
|
||||||
|
if keys %{ $aruba->SUPER::i_vlan($partial) };
|
||||||
|
|
||||||
my $index = $aruba->aruba_if_idx();
|
my $index = $aruba->aruba_if_idx();
|
||||||
|
|
||||||
if ($partial) {
|
if ($partial) {
|
||||||
@@ -492,6 +507,10 @@ sub i_vlan {
|
|||||||
|
|
||||||
sub i_vlan_membership {
|
sub i_vlan_membership {
|
||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $aruba->SUPER::i_vlan_membership($partial)
|
||||||
|
if keys %{ $aruba->SUPER::i_vlan_membership($partial) };
|
||||||
|
|
||||||
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
|
my $essid_ssid = $aruba->aruba_ap_bssid_ssid();
|
||||||
my $ssid_vlans = $aruba->aruba_ssid_vlan();
|
my $ssid_vlans = $aruba->aruba_ssid_vlan();
|
||||||
@@ -628,22 +647,36 @@ sub bp_index {
|
|||||||
my $aruba = shift;
|
my $aruba = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_index = $aruba->orig_i_index($partial) || {};
|
my $i_index = $aruba->ifExtPortIfIndex($partial) || {};
|
||||||
my $essid_ssid = $aruba->aruba_ap_bssid_ssid($partial) || {};
|
my $essid_ssid = $aruba->aruba_ap_bssid_ssid($partial) || {};
|
||||||
|
|
||||||
# Collect standard bp_index first
|
# Collect standard bp_index first
|
||||||
my $wired_bp_index = $aruba->SUPER::bp_index($partial) || {};
|
my $wired_bp_index = $aruba->SUPER::bp_index($partial) || {};
|
||||||
my %bp_index = %$wired_bp_index;
|
my %bp_index;
|
||||||
|
my %offset;
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$wired_bp_index ) {
|
||||||
|
my $index = $wired_bp_index->{$iid};
|
||||||
|
my $delta = $iid - $index;
|
||||||
|
|
||||||
|
$offset{$delta}++;
|
||||||
|
$bp_index{$iid} = $index;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If the offset between dot1dBasePortIfIndex and ifIndex is consistent
|
||||||
|
# add potentially missing mappings
|
||||||
|
if ( keys %offset == 1 ) {
|
||||||
foreach my $iid ( keys %$i_index ) {
|
foreach my $iid ( keys %$i_index ) {
|
||||||
my $index = $i_index->{$iid};
|
my $index = $i_index->{$iid};
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
|
|
||||||
# Only augment bp_index, don't overwrite any existing mappings
|
# Only augment bp_index, don't overwrite any existing mappings
|
||||||
|
my $iid = (keys %offset)[0] + $index;
|
||||||
next if exists $bp_index{$iid};
|
next if exists $bp_index{$iid};
|
||||||
|
|
||||||
$bp_index{$iid} = $index;
|
$bp_index{$iid} = $index;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Get Attached APs as Interfaces
|
# Get Attached APs as Interfaces
|
||||||
foreach my $oid ( keys %$essid_ssid ) {
|
foreach my $oid ( keys %$essid_ssid ) {
|
||||||
@@ -999,7 +1032,7 @@ sub e_serial {
|
|||||||
my %e_serial;
|
my %e_serial;
|
||||||
|
|
||||||
# Chassis
|
# Chassis
|
||||||
$e_serial{0} = $aruba->aruba_serial();
|
$e_serial{0} = $aruba->serial() || '';
|
||||||
|
|
||||||
# Cards
|
# Cards
|
||||||
foreach my $iid ( keys %$card_serial ) {
|
foreach my $iid ( keys %$card_serial ) {
|
||||||
@@ -1123,6 +1156,175 @@ sub munge_aruba_fqln {
|
|||||||
return $loc;
|
return $loc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# The index of wlsxPsePortTable is wlsxPsePortIndex which equals
|
||||||
|
# ifIndex; however, to emulate POWER-ETHERNET-MIB we need a "module.port"
|
||||||
|
# index. If ifDescr has the format x/x/x use it to determine the module
|
||||||
|
# otherwise default to 1. Unfortunately, this means we can't map any
|
||||||
|
# wlsxPsePortTable leafs directly and partials will not be supported.
|
||||||
|
sub peth_port_ifindex {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $indexes = $aruba->wlsxPsePortAdminStatus();
|
||||||
|
my $descrs = $aruba->i_description();
|
||||||
|
|
||||||
|
my $peth_port_ifindex = {};
|
||||||
|
foreach my $i ( keys %$indexes ) {
|
||||||
|
my $descr = $descrs->{$i};
|
||||||
|
next unless $descr;
|
||||||
|
|
||||||
|
my $new_idx = "1.$i";
|
||||||
|
|
||||||
|
if ( $descr =~ /(\d+)\/\d+\/\d+/ ) {
|
||||||
|
$new_idx = "$1.$i";
|
||||||
|
}
|
||||||
|
$peth_port_ifindex->{$new_idx} = $i;
|
||||||
|
}
|
||||||
|
return $peth_port_ifindex;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_admin {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $admin_states = $aruba->wlsxPsePortAdminStatus() || {};
|
||||||
|
|
||||||
|
my $peth_port_admin = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $state = $admin_states->{$port};
|
||||||
|
|
||||||
|
if ( $state =~ /enable/ ) {
|
||||||
|
$peth_port_admin->{$i} = 'true';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$peth_port_admin->{$i} = 'false';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $peth_port_admin;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_neg_power {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_alloc = $aruba->wlsxPsePortPowerAllocated() || {};
|
||||||
|
|
||||||
|
my $peth_port_neg_power = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_alloc->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_neg_power->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_neg_power;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_power {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_consumed = $aruba->wlsxPsePortPowerConsumed() || {};
|
||||||
|
|
||||||
|
my $peth_port_power = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_consumed->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_power->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_power;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_class {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $port_class = $aruba->wlsxPsePortPdClass() || {};
|
||||||
|
|
||||||
|
my $peth_port_class = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $power = $port_class->{$port};
|
||||||
|
next unless $power;
|
||||||
|
|
||||||
|
$peth_port_class->{$i} = $power;
|
||||||
|
}
|
||||||
|
return $peth_port_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_port_status {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $p_index = $aruba->peth_port_ifindex() || {};
|
||||||
|
my $admin_states = $aruba->wlsxPsePortState() || {};
|
||||||
|
|
||||||
|
my $peth_port_status = {};
|
||||||
|
foreach my $i ( keys %$p_index ) {
|
||||||
|
my ( $module, $port ) = split( /\./, $i );
|
||||||
|
my $state = $admin_states->{$port};
|
||||||
|
|
||||||
|
if ( $state eq 'on' ) {
|
||||||
|
$peth_port_status->{$i} = 'deliveringPower';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$peth_port_status->{$i} = 'disabled';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $peth_port_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_status {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $watts = $aruba->wlsxPseSlotPowerAvailable($partial) || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_status = {};
|
||||||
|
foreach my $i ( keys %$watts ) {
|
||||||
|
$peth_power_status->{$i + $offset} = 'on';
|
||||||
|
}
|
||||||
|
return $peth_power_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_watts {
|
||||||
|
my $aruba = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $watts_total = $aruba->wlsxPseSlotPowerAvailable($partial) || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts_total->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_watts = {};
|
||||||
|
foreach my $i ( keys %$watts_total ) {
|
||||||
|
my $total = $watts_total->{$i};
|
||||||
|
next unless $total;
|
||||||
|
|
||||||
|
$peth_power_watts->{$i + $offset} = $total;
|
||||||
|
}
|
||||||
|
return $peth_power_watts;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub peth_power_consumption {
|
||||||
|
my $aruba = shift;
|
||||||
|
|
||||||
|
my $watts = $aruba->wlsxPseSlotPowerConsumption() || {};
|
||||||
|
|
||||||
|
my $offset = (exists $watts->{0}) ? 1 : 0;
|
||||||
|
|
||||||
|
my $peth_power_consumed = {};
|
||||||
|
foreach my $i ( keys %$watts ) {
|
||||||
|
my $total = $watts->{$i};
|
||||||
|
next unless $total;
|
||||||
|
|
||||||
|
$peth_power_consumed->{$i + $offset} = $total;
|
||||||
|
}
|
||||||
|
return $peth_power_consumed;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -1182,6 +1384,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item F<WLSX-IFEXT-MIB>
|
=item F<WLSX-IFEXT-MIB>
|
||||||
|
|
||||||
|
=item F<WLSX-POE-MIB>
|
||||||
|
|
||||||
=item F<WLSX-SWITCH-MIB>
|
=item F<WLSX-SWITCH-MIB>
|
||||||
|
|
||||||
=item F<WLSX-SYSTEMEXT-MIB>
|
=item F<WLSX-SYSTEMEXT-MIB>
|
||||||
@@ -1233,7 +1437,7 @@ Thin APs through proprietary MIBs.
|
|||||||
=item $aruba->serial()
|
=item $aruba->serial()
|
||||||
|
|
||||||
Returns the device serial number extracted
|
Returns the device serial number extracted
|
||||||
from C<wlsxSwitchLicenseSerialNumber>
|
from C<wlsxSwitchLicenseSerialNumber> or C<wlsxSysExtLicenseSerialNumber>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -1367,7 +1571,11 @@ only.
|
|||||||
|
|
||||||
=item $aruba->v_index()
|
=item $aruba->v_index()
|
||||||
|
|
||||||
Returns VLAN IDs
|
Returns VLAN IDs.
|
||||||
|
|
||||||
|
=item $aruba->v_name()
|
||||||
|
|
||||||
|
Human-entered name for vlans.
|
||||||
|
|
||||||
=item $aruba->i_vlan()
|
=item $aruba->i_vlan()
|
||||||
|
|
||||||
@@ -1461,6 +1669,70 @@ entity which 'contains' this entity.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Power Over Ethernet Port Table
|
||||||
|
|
||||||
|
These methods emulate the F<POWER-ETHERNET-MIB> Power Source Entity (PSE)
|
||||||
|
Port Table C<pethPsePortTable> methods using the F<WLSX-POE-MIB> Power
|
||||||
|
over Ethernet Port Table C<wlsxPsePortTable>.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aruba->peth_port_ifindex()
|
||||||
|
|
||||||
|
Creates an index of module.port to align with the indexing of the
|
||||||
|
C<wlsxPsePortTable> with a value of C<ifIndex>. The module defaults 1
|
||||||
|
if otherwise unknown.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_admin()
|
||||||
|
|
||||||
|
Administrative status: is this port permitted to deliver power?
|
||||||
|
|
||||||
|
C<wlsxPsePortAdminStatus>
|
||||||
|
|
||||||
|
=item $aruba->peth_port_status()
|
||||||
|
|
||||||
|
Current status: is this port delivering power.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_class()
|
||||||
|
|
||||||
|
Device class: if status is delivering power, this represents the 802.3af
|
||||||
|
class of the device being powered.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_neg_power()
|
||||||
|
|
||||||
|
The power, in milliwatts, that has been committed to this port.
|
||||||
|
This value is derived from the 802.3af class of the device being
|
||||||
|
powered.
|
||||||
|
|
||||||
|
=item $aruba->peth_port_power()
|
||||||
|
|
||||||
|
The power, in milliwatts, that the port is delivering.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Power Over Ethernet Module Table
|
||||||
|
|
||||||
|
These methods emulate the F<POWER-ETHERNET-MIB> Main Power Source Entity
|
||||||
|
(PSE) Table C<pethMainPseTable> methods using the F<WLSX-POE-MIB> Power
|
||||||
|
over Ethernet Port Table C<wlsxPseSlotTable>.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $aruba->peth_power_watts()
|
||||||
|
|
||||||
|
The power supply's capacity, in watts.
|
||||||
|
|
||||||
|
=item $aruba->peth_power_status()
|
||||||
|
|
||||||
|
The power supply's operational status.
|
||||||
|
|
||||||
|
=item $aruba->peth_power_consumption()
|
||||||
|
|
||||||
|
How much power, in watts, this power supply has been committed to
|
||||||
|
deliver.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Arp Cache Table Augmentation
|
=head2 Arp Cache Table Augmentation
|
||||||
|
|
||||||
The controller has knowledge of MAC->IP mappings for wireless clients.
|
The controller has knowledge of MAC->IP mappings for wireless clients.
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Bridge;
|
|||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE %MODEL_MAP
|
||||||
%MODID_MAP %PROCID_MAP/;
|
%MODID_MAP %PROCID_MAP/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::C3550::EXPORT_OK = qw//;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
# NOTE: Order creates precedence
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
# 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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -43,12 +43,14 @@ use SNMP::Info::CiscoPower;
|
|||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::CiscoStpExtensions;
|
use SNMP::Info::CiscoStpExtensions;
|
||||||
use SNMP::Info::CiscoVTP;
|
use SNMP::Info::CiscoVTP;
|
||||||
|
use SNMP::Info::CiscoAgg;
|
||||||
use SNMP::Info::MAU;
|
use SNMP::Info::MAU;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
# NOTE : Top-most items gets precedence for @ISA
|
# NOTE : Top-most items gets precedence for @ISA
|
||||||
@SNMP::Info::Layer3::C6500::ISA = qw/
|
@SNMP::Info::Layer3::C6500::ISA = qw/
|
||||||
|
SNMP::Info::CiscoAgg
|
||||||
SNMP::Info::CiscoVTP
|
SNMP::Info::CiscoVTP
|
||||||
SNMP::Info::CiscoStpExtensions
|
SNMP::Info::CiscoStpExtensions
|
||||||
SNMP::Info::CiscoStack
|
SNMP::Info::CiscoStack
|
||||||
@@ -68,7 +70,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
# NOTE: Order creates precedence
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||||
@@ -89,6 +91,7 @@ $VERSION = '3.08';
|
|||||||
%SNMP::Info::CiscoStack::MIBS,
|
%SNMP::Info::CiscoStack::MIBS,
|
||||||
%SNMP::Info::CiscoStpExtensions::MIBS,
|
%SNMP::Info::CiscoStpExtensions::MIBS,
|
||||||
%SNMP::Info::CiscoVTP::MIBS,
|
%SNMP::Info::CiscoVTP::MIBS,
|
||||||
|
%SNMP::Info::CiscoAgg::MIBS,
|
||||||
'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
|
'CISCO-VIRTUAL-SWITCH-MIB' => 'cvsSwitchMode',
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -131,6 +134,23 @@ sub vendor {
|
|||||||
|
|
||||||
sub cisco_comm_indexing { return 1; }
|
sub cisco_comm_indexing { return 1; }
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $c6500 = shift;
|
||||||
|
|
||||||
|
my $serial = $c6500->SUPER::serial();
|
||||||
|
return $serial if defined $serial and $serial;
|
||||||
|
|
||||||
|
# now grab the table only if SUPER cannot find it
|
||||||
|
my $e_serial = $c6500->e_serial();
|
||||||
|
|
||||||
|
# Find entity table entry for this unit
|
||||||
|
foreach my $e ( sort keys %$e_serial ) {
|
||||||
|
if (defined $e_serial->{$e} and $e_serial->{$e} !~ /^\s*$/) {
|
||||||
|
return $e_serial->{$e};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
# Newer versions use the ETHERLIKE-MIB to report operational duplex.
|
||||||
|
|
||||||
sub i_duplex {
|
sub i_duplex {
|
||||||
@@ -309,6 +329,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::CiscoAgg
|
||||||
|
|
||||||
=item SNMP::Info::CiscoVTP
|
=item SNMP::Info::CiscoVTP
|
||||||
|
|
||||||
=item SNMP::Info::CiscoStack
|
=item SNMP::Info::CiscoStack
|
||||||
@@ -337,6 +359,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::CiscoAgg/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoVTP/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::CiscoStack/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -382,6 +406,10 @@ Returns the Switch status: multiNode or standalone.
|
|||||||
|
|
||||||
Return 1 if the switch (C<cvsSwitchMode>) is in multimode (VSS).
|
Return 1 if the switch (C<cvsSwitchMode>) is in multimode (VSS).
|
||||||
|
|
||||||
|
=item $c6500->serial()
|
||||||
|
|
||||||
|
Returns serial number of unit (falls back to C<entPhysicalSerialNum>).
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
=head2 Global Methods imported from SNMP::Info::CiscoVTP
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ use SNMP::Info::Layer3::Cisco;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3::Cisco;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::Cisco::MIBS,
|
%SNMP::Info::Layer3::Cisco::MIBS,
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info::Entity;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
%SNMP::Info::MIBS, %SNMP::Info::Layer3::MIBS, %SNMP::Info::Entity::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -193,25 +193,6 @@ sub i_duplex_admin {
|
|||||||
return \%i_duplex_admin;
|
return \%i_duplex_admin;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use same methods as netgear. Some device didn't implement the bridge MIB
|
|
||||||
# forwarding table and some don't return MACs for VLANs other than default yet
|
|
||||||
# don't support community indexing, so we use the Q-BRIDGE-MIB forwarding
|
|
||||||
# table. Fall back to the orig functions if the qb versions don't
|
|
||||||
# return anything.
|
|
||||||
sub fw_mac {
|
|
||||||
my $dell = shift;
|
|
||||||
my $ret = $dell->qb_fw_mac();
|
|
||||||
$ret = $dell->orig_fw_mac() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $dell = shift;
|
|
||||||
my $ret = $dell->qb_fw_port();
|
|
||||||
$ret = $dell->orig_fw_port() if ( !defined($ret) );
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _vendor {
|
sub _vendor {
|
||||||
my $dell = shift;
|
my $dell = shift;
|
||||||
|
|
||||||
@@ -406,23 +387,6 @@ sometimes not unique.
|
|||||||
Returns reference to hash of iid to current link administrative duplex
|
Returns reference to hash of iid to current link administrative duplex
|
||||||
setting.
|
setting.
|
||||||
|
|
||||||
=item $dell->fw_mac()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table MAC Addresses.
|
|
||||||
|
|
||||||
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->fw_port()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table entries port interface
|
|
||||||
identifier (iid)
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=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/;
|
use vars qw/$VERSION $DEBUG %GLOBALS %FUNCS $INIT %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
|
%SNMP::Info::Layer3::MIBS, %SNMP::Info::CDP::MIBS,
|
||||||
@@ -149,22 +149,6 @@ sub i_duplex_admin {
|
|||||||
return $enterasys->mau_i_duplex_admin($partial);
|
return $enterasys->mau_i_duplex_admin($partial);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Normal BRIDGE-MIB has issues on some devices, duplicates and
|
|
||||||
# non-increasing oids, Use Q-BRIDGE-MIB for macsuck
|
|
||||||
sub fw_mac {
|
|
||||||
my $enterasys = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $enterasys->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $enterasys = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $enterasys->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# LLDP table timefilter implementation continuously increments when walked
|
# LLDP table timefilter implementation continuously increments when walked
|
||||||
# and we may never reach the end of the table. This behavior can be
|
# and we may never reach the end of the table. This behavior can be
|
||||||
# modified with the "set snmp timefilter break disable" command,
|
# modified with the "set snmp timefilter break disable" command,
|
||||||
@@ -373,17 +357,6 @@ See documentation for mau_i_duplex() in L<SNMP::Info::MAU/"TABLE METHODS">.
|
|||||||
See documentation for mau_i_duplex_admin() in
|
See documentation for mau_i_duplex_admin() in
|
||||||
L<SNMP::Info::MAU/"TABLE METHODS">.
|
L<SNMP::Info::MAU/"TABLE METHODS">.
|
||||||
|
|
||||||
=item $enterasys->fw_mac()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table MAC Addresses.
|
|
||||||
|
|
||||||
=item $enterasys->fw_port()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table entries port interface
|
|
||||||
identifier (iid).
|
|
||||||
|
|
||||||
(C<dot1qTpFdbPort>)
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Link Layer Discovery Protocol (LLDP) Overrides
|
=head2 Link Layer Discovery Protocol (LLDP) Overrides
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ use SNMP::Info::EDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -290,9 +290,6 @@ sub fw_mac {
|
|||||||
my $b = $extreme->SUPER::fw_mac();
|
my $b = $extreme->SUPER::fw_mac();
|
||||||
return $b if (keys %$b);
|
return $b if (keys %$b);
|
||||||
|
|
||||||
my $qb = $extreme->qb_fw_mac();
|
|
||||||
return $qb if (keys %$qb);
|
|
||||||
|
|
||||||
return $extreme->ex_fw_mac();
|
return $extreme->ex_fw_mac();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,9 +299,6 @@ sub fw_port {
|
|||||||
my $b = $extreme->SUPER::fw_port();
|
my $b = $extreme->SUPER::fw_port();
|
||||||
return $b if (keys %$b);
|
return $b if (keys %$b);
|
||||||
|
|
||||||
my $qb = $extreme->qb_fw_port();
|
|
||||||
return $qb if (keys %$qb);
|
|
||||||
|
|
||||||
return $extreme->ex_fw_port();
|
return $extreme->ex_fw_port();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,9 +308,6 @@ sub fw_status {
|
|||||||
my $b = $extreme->SUPER::fw_status();
|
my $b = $extreme->SUPER::fw_status();
|
||||||
return $b if (keys %$b);
|
return $b if (keys %$b);
|
||||||
|
|
||||||
my $qb = $extreme->qb_fw_status();
|
|
||||||
return $qb if (keys %$qb);
|
|
||||||
|
|
||||||
return $extreme->ex_fw_status();
|
return $extreme->ex_fw_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,6 +496,7 @@ sub _xos_i_vlan_membership {
|
|||||||
push( @{$ret}, ( $slotx * $slot + $i + 1 ) )
|
push( @{$ret}, ( $slotx * $slot + $i + 1 ) )
|
||||||
if ( @$portlist[$i] );
|
if ( @$portlist[$i] );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#Create HoA ifIndex -> VLAN array
|
#Create HoA ifIndex -> VLAN array
|
||||||
foreach my $port ( @{$ret} ) {
|
foreach my $port ( @{$ret} ) {
|
||||||
@@ -514,7 +506,6 @@ sub _xos_i_vlan_membership {
|
|||||||
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
push( @{ $i_vlan_membership->{$ifindex} }, $vlan );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -104,22 +104,6 @@ sub model {
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
|
|
||||||
sub fw_mac {
|
|
||||||
my $force10 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $force10->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $force10 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $force10->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub v_name {
|
sub v_name {
|
||||||
my $force10 = shift;
|
my $force10 = shift;
|
||||||
my $partial = shift;
|
my $partial = shift;
|
||||||
@@ -300,14 +284,6 @@ Returns reference to hash of arrays:
|
|||||||
key = C<ifIndex>, value = array of VLAN IDs.
|
key = C<ifIndex>, value = array of VLAN IDs.
|
||||||
These are the VLANs which are members of the egress list for the port.
|
These are the VLANs which are members of the egress list for the port.
|
||||||
|
|
||||||
=item $force10->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $force10->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $force10->i_duplex_admin()
|
=item $force10->i_duplex_admin()
|
||||||
|
|
||||||
Returns info from F<MAU-MIB>
|
Returns info from F<MAU-MIB>
|
||||||
|
|||||||
@@ -38,29 +38,36 @@ use SNMP::Info::Layer3;
|
|||||||
use SNMP::Info::FDP;
|
use SNMP::Info::FDP;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
@SNMP::Info::Layer3::Foundry::ISA = qw/SNMP::Info::FDP SNMP::Info::LLDP
|
@SNMP::Info::Layer3::Foundry::ISA = qw/
|
||||||
SNMP::Info::Layer3 Exporter/;
|
SNMP::Info::FDP
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::Layer3
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
@SNMP::Info::Layer3::Foundry::EXPORT_OK = qw//;
|
@SNMP::Info::Layer3::Foundry::EXPORT_OK = qw//;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
%SNMP::Info::FDP::MIBS,
|
%SNMP::Info::FDP::MIBS,
|
||||||
|
|
||||||
'FOUNDRY-SN-ROOT-MIB' => 'foundry',
|
'FOUNDRY-SN-ROOT-MIB' => 'foundry',
|
||||||
'FOUNDRY-SN-AGENT-MIB' => 'snChasPwrSupplyDescription',
|
'FOUNDRY-SN-AGENT-MIB' => 'snChasPwrSupplyDescription',
|
||||||
'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snSwGroupOperMode',
|
'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snSwGroupOperMode',
|
||||||
'FOUNDRY-SN-STACKING-MIB' => 'snStackingOperUnitRole',
|
'FOUNDRY-SN-STACKING-MIB' => 'snStackingOperUnitRole',
|
||||||
'FOUNDRY-POE-MIB' => 'snAgentPoeGblPowerCapacityTotal',
|
'FOUNDRY-POE-MIB' => 'snAgentPoeGblPowerCapacityTotal',
|
||||||
|
'FOUNDRY-SN-SWITCH-GROUP-MIB' => 'snSwGroupOperMode',
|
||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
%SNMP::Info::LLDP::GLOBALS,
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
%SNMP::Info::FDP::GLOBALS,
|
%SNMP::Info::FDP::GLOBALS,
|
||||||
|
|
||||||
'mac' => 'ifPhysAddress.1',
|
'mac' => 'ifPhysAddress.1',
|
||||||
'chassis' => 'entPhysicalDescr.1',
|
'chassis' => 'entPhysicalDescr.1',
|
||||||
'temp' => 'snChasActualTemperature',
|
'temp' => 'snChasActualTemperature',
|
||||||
@@ -93,8 +100,10 @@ $VERSION = '3.08';
|
|||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
%SNMP::Info::LLDP::MUNGE,
|
||||||
%SNMP::Info::FDP::MUNGE,
|
%SNMP::Info::FDP::MUNGE,
|
||||||
|
|
||||||
'ag_mod2_type' => \&SNMP::Info::munge_e_type,
|
'ag_mod2_type' => \&SNMP::Info::munge_e_type,
|
||||||
'ag_mod_type' => \&SNMP::Info::munge_e_type,
|
'ag_mod_type' => \&SNMP::Info::munge_e_type,
|
||||||
);
|
);
|
||||||
@@ -163,6 +172,7 @@ sub model {
|
|||||||
return $id unless defined $model;
|
return $id unless defined $model;
|
||||||
|
|
||||||
$model =~ s/^sn//;
|
$model =~ s/^sn//;
|
||||||
|
$model =~ s/Switch//;
|
||||||
|
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
@@ -784,6 +794,29 @@ sub peth_power_consumption {
|
|||||||
return $peth_power_consumed;
|
return $peth_power_consumed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub agg_ports {
|
||||||
|
my $dev = shift;
|
||||||
|
|
||||||
|
# TODO: implement partial
|
||||||
|
my $trunks = $dev->snMSTrunkPortList;
|
||||||
|
my $ports = $dev->snSwPortIfIndex; # sw_index()
|
||||||
|
|
||||||
|
return {} unless
|
||||||
|
ref {} eq ref $trunks and scalar keys %$trunks
|
||||||
|
and ref {} eq ref $ports and scalar keys %$ports;
|
||||||
|
|
||||||
|
my $ret = {};
|
||||||
|
foreach my $m (keys %$trunks) {
|
||||||
|
my $skip = 0;
|
||||||
|
while (my $s = unpack("x${skip}n2", $trunks->{$m})) {
|
||||||
|
$ret->{ $ports->{$s} } = $ports->{$m};
|
||||||
|
$skip += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -847,6 +880,8 @@ after determining a more specific class using the method above.
|
|||||||
|
|
||||||
=item F<FOUNDRY-POE-MIB>
|
=item F<FOUNDRY-POE-MIB>
|
||||||
|
|
||||||
|
=item F<FOUNDRY-SN-SWITCH-GROUP-MIB>
|
||||||
|
|
||||||
=item Inherited Classes' MIBs
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
@@ -866,7 +901,8 @@ These are methods that return scalar value from SNMP
|
|||||||
=item $foundry->model()
|
=item $foundry->model()
|
||||||
|
|
||||||
Returns model type. Checks $foundry->id() against the F<FOUNDRY-SN-ROOT-MIB>
|
Returns model type. Checks $foundry->id() against the F<FOUNDRY-SN-ROOT-MIB>
|
||||||
and removes 'C<sn>'. EdgeIron models determined through F<ENTITY-MIB>.
|
and removes 'C<sn>' and 'C<Switch>'. EdgeIron models determined
|
||||||
|
through F<ENTITY-MIB>.
|
||||||
|
|
||||||
=item $foundry->vendor()
|
=item $foundry->vendor()
|
||||||
|
|
||||||
@@ -980,6 +1016,12 @@ Skipped if device is an EdgeIron 24G due to reports of hangs.
|
|||||||
|
|
||||||
(C<dot1dStpPortState>)
|
(C<dot1dStpPortState>)
|
||||||
|
|
||||||
|
=item $foundry->agg_ports()
|
||||||
|
|
||||||
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 F<ENTITY-MIB> Information
|
=head2 F<ENTITY-MIB> Information
|
||||||
|
|||||||
@@ -33,17 +33,26 @@ use strict;
|
|||||||
use Exporter;
|
use Exporter;
|
||||||
use SNMP::Info::Layer3;
|
use SNMP::Info::Layer3;
|
||||||
use SNMP::Info::LLDP;
|
use SNMP::Info::LLDP;
|
||||||
|
use SNMP::Info::IEEE802dot3ad 'agg_ports_lag';
|
||||||
|
|
||||||
@SNMP::Info::Layer3::H3C::ISA = qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
@SNMP::Info::Layer3::H3C::ISA = qw/
|
||||||
@SNMP::Info::Layer3::H3C::EXPORT_OK = qw//;
|
SNMP::Info::IEEE802dot3ad
|
||||||
|
SNMP::Info::LLDP
|
||||||
|
SNMP::Info::Layer3
|
||||||
|
Exporter
|
||||||
|
/;
|
||||||
|
@SNMP::Info::Layer3::H3C::EXPORT_OK = qw/
|
||||||
|
agg_ports
|
||||||
|
/;
|
||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
%SNMP::Info::LLDP::MIBS,
|
%SNMP::Info::LLDP::MIBS,
|
||||||
|
%SNMP::Info::IEEE802dot3ad::MIBS,
|
||||||
'HH3C-LswDEVM-MIB' => 'hh3cDevMFanStatus',
|
'HH3C-LswDEVM-MIB' => 'hh3cDevMFanStatus',
|
||||||
'HH3C-LswINF-MIB' => 'hh3cSlotPortMax',
|
'HH3C-LswINF-MIB' => 'hh3cSlotPortMax',
|
||||||
'HH3C-LSW-DEV-ADM-MIB' => 'hh3cLswSysVersion',
|
'HH3C-LSW-DEV-ADM-MIB' => 'hh3cLswSysVersion',
|
||||||
@@ -113,21 +122,7 @@ sub i_ignore {
|
|||||||
return \%i_ignore;
|
return \%i_ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
sub agg_ports { return agg_ports_lag(@_) }
|
||||||
|
|
||||||
sub fw_mac {
|
|
||||||
my $l3 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $l3->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $l3 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $l3->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
@@ -235,13 +230,11 @@ Returns reference to hash. Increments value of IID if port is to be ignored.
|
|||||||
|
|
||||||
Ignores loopback
|
Ignores loopback
|
||||||
|
|
||||||
=item $h3c->fw_mac()
|
=item C<agg_ports>
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
Returns a HASH reference mapping from slave to master port for each member of
|
||||||
|
a port bundle on the device. Keys are ifIndex of the slave ports, Values are
|
||||||
=item $h3c->fw_port()
|
ifIndex of the corresponding master ports.
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
407
Info/Layer3/IBMGbTor.pm
Normal file
407
Info/Layer3/IBMGbTor.pm
Normal file
@@ -0,0 +1,407 @@
|
|||||||
|
# SNMP::Info::Layer3::IBMGbTor - SNMP Interface to IBM Rackswitch devices
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Eric Miller
|
||||||
|
# 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::Layer3::IBMGbTor;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
use SNMP::Info::LLDP;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::IBMGbTor::ISA
|
||||||
|
= qw/SNMP::Info::LLDP SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::IBMGbTor::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|
||||||
|
# LLDP MIBs not loaded to prevent possible unqualified namespace conflict
|
||||||
|
# with IBM definitions
|
||||||
|
'IBM-GbTOR-10G-L2L3-MIB' => 'lldpInfoRemoteDevicesLocalPort',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
%SNMP::Info::LLDP::GLOBALS,
|
||||||
|
'temp' => 'hwTempSensors',
|
||||||
|
'fan' => 'hwFanSpeed',
|
||||||
|
|
||||||
|
# Can't find the equivalent in IBM-GbTOR-10G-L2L3-MIB
|
||||||
|
# use a different strategy for lldp_sys_cap in hasLLDP()
|
||||||
|
#'lldp_sysname' => 'lldpLocSysName',
|
||||||
|
#'lldp_sysdesc' => 'lldpLocSysDesc',
|
||||||
|
#'lldp_sys_cap' => 'lldpLocSysCapEnabled',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
%SNMP::Info::LLDP::FUNCS,
|
||||||
|
|
||||||
|
# IBM-GbTOR-10G-L2L3-MIB::portInfoTable
|
||||||
|
'sw_duplex' => 'portInfoMode',
|
||||||
|
|
||||||
|
# Can't find the equivalent in IBM-GbTOR-10G-L2L3-MIB
|
||||||
|
# not currently used in LLDP class
|
||||||
|
#'lldp_lman_addr' => 'lldpLocManAddrIfId',
|
||||||
|
|
||||||
|
# IBM-GbTOR-10G-L2L3-MIB::lldpInfoPortTable
|
||||||
|
'lldp_port_status' => 'lldpInfoPortAdminStatus',
|
||||||
|
|
||||||
|
# IBM-GbTOR-10G-L2L3-MIB::lldpInfoRemoteDevicesTable
|
||||||
|
'lldp_rem_id_type' => 'lldpInfoRemoteDevicesChassisSubtype',
|
||||||
|
'lldp_rem_id' => 'lldpInfoRemoteDevicesSystemName',
|
||||||
|
'lldp_rem_pid_type' => 'lldpInfoRemoteDevicesPortSubtype',
|
||||||
|
'lldp_rem_pid' => 'lldpInfoRemoteDevicesPortId',
|
||||||
|
'lldp_rem_desc' => 'lldpInfoRemoteDevicesPortDescription',
|
||||||
|
'lldp_rem_sysname' => 'lldpInfoRemoteDevicesSystemName',
|
||||||
|
'lldp_rem_sysdesc' => 'lldpInfoRemoteDevicesSystemDescription',
|
||||||
|
'lldp_rem_sys_cap' => 'lldpInfoRemoteDevicesSystemCapEnabled',
|
||||||
|
|
||||||
|
# IBM-GbTOR-10G-L2L3-MIB::lldpInfoRemoteDevicesManAddrTable
|
||||||
|
'lldp_rman_type' => 'lldpInfoRemoteDevicesManAddrSubtype',
|
||||||
|
'lldp_rman_addr' => 'lldpInfoRemoteDevicesManAddr',
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, %SNMP::Info::LLDP::MUNGE, );
|
||||||
|
|
||||||
|
sub hasLLDP {
|
||||||
|
my $ibm = shift;
|
||||||
|
|
||||||
|
# We may be have LLDP, but nothing in lldpRemoteSystemsData Tables
|
||||||
|
# Look to see if LLDP Rx enabled on any port
|
||||||
|
my $lldp_cap = $ibm->lldp_port_status();
|
||||||
|
|
||||||
|
foreach my $if ( keys %$lldp_cap ) {
|
||||||
|
if ( $lldp_cap->{$if} =~ /enabledRx/i ) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_ip {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $rman_type = $ibm->lldp_rman_type($partial) || {};
|
||||||
|
my $rman_addr = $ibm->lldp_rman_addr($partial) || {};
|
||||||
|
|
||||||
|
my %lldp_ip;
|
||||||
|
foreach my $key ( keys %$rman_addr ) {
|
||||||
|
my $type = $rman_type->{$key};
|
||||||
|
next unless defined $type;
|
||||||
|
next unless $type eq 'ipV4';
|
||||||
|
if ( $key =~ /^(\d+)\./ ) {
|
||||||
|
$lldp_ip{$1} = $rman_addr->{$key};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%lldp_ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_if {
|
||||||
|
my $lldp = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $lldp_desc = $lldp->lldpInfoRemoteDevicesLocalPort($partial) || {};
|
||||||
|
my $i_descr = $lldp->i_description() || {};
|
||||||
|
my $i_alias = $lldp->i_alias() || {};
|
||||||
|
my %r_i_descr = reverse %$i_descr;
|
||||||
|
my %r_i_alias = reverse %$i_alias;
|
||||||
|
|
||||||
|
my %lldp_if;
|
||||||
|
foreach my $key ( keys %$lldp_desc ) {
|
||||||
|
|
||||||
|
# Cross reference lldpLocPortDesc with ifDescr and ifAlias to get ifIndex,
|
||||||
|
# prefer ifAlias over ifDescr since MIB says 'alias'.
|
||||||
|
my $desc = $lldp_desc->{$key};
|
||||||
|
next unless $desc;
|
||||||
|
my $port = $desc;
|
||||||
|
|
||||||
|
# If cross reference is successful use it, otherwise stick with
|
||||||
|
# lldpRemLocalPortNum
|
||||||
|
if ( exists $r_i_alias{$desc} ) {
|
||||||
|
$port = $r_i_alias{$desc};
|
||||||
|
}
|
||||||
|
elsif ( exists $r_i_descr{$desc} ) {
|
||||||
|
$port = $r_i_descr{$desc};
|
||||||
|
}
|
||||||
|
|
||||||
|
$lldp_if{$key} = $port;
|
||||||
|
}
|
||||||
|
return \%lldp_if;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lldp_platform {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $ibm->lldpInfoRemoteDevicesSystemDescription($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_ignore {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $interfaces = $ibm->interfaces($partial) || {};
|
||||||
|
|
||||||
|
my %i_ignore;
|
||||||
|
foreach my $if ( keys %$interfaces ) {
|
||||||
|
if ( $interfaces->{$if} =~ /(tunnel|loopback|\blo\b|lb|null)/i ) {
|
||||||
|
$i_ignore{$if}++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return \%i_ignore;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub i_duplex {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
return $ibm->sw_duplex($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $id = $ibm->id();
|
||||||
|
my $descr = $ibm->description();
|
||||||
|
my $model = &SNMP::translateObj($id);
|
||||||
|
|
||||||
|
if ( $descr =~ /RackSwitch\s(.*)/ ) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $model || $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'ibm';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'ibm';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $ibm = shift;
|
||||||
|
|
||||||
|
return $ibm->agSoftwareVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub interfaces {
|
||||||
|
my $ibm = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $i_descr = $ibm->i_description($partial) || {};
|
||||||
|
my $i_name = $ibm->i_name($partial) || {};
|
||||||
|
|
||||||
|
foreach my $iid ( keys %$i_name ) {
|
||||||
|
my $name = $i_name->{$iid};
|
||||||
|
next unless defined $name;
|
||||||
|
$i_descr->{$iid} = $name
|
||||||
|
if $name =~ /^port\d+/i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $i_descr;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::IBMGbTor - SNMP Interface to IBM Rackswitch devices
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $ibm = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 1
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $ibm->class();
|
||||||
|
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Abstraction subclass for IBM Rackswitch (formerly Blade Network Technologies)
|
||||||
|
network devices.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $ibm = new SNMP::Info::Layer3::IBMGbTor(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
=item SNMP::Info::LLDP;
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item F<IBM-GbTOR-10G-L2L3-MIB>
|
||||||
|
|
||||||
|
=item Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ibm->model()
|
||||||
|
|
||||||
|
Returns model type. Attempts to pull model from device description.
|
||||||
|
Otherwise checks $ibm->id() against the F<IBM-GbTOR-10G-L2L3-MIB>.
|
||||||
|
|
||||||
|
=item $ibm->vendor()
|
||||||
|
|
||||||
|
Returns 'ibm'
|
||||||
|
|
||||||
|
=item $ibm->os()
|
||||||
|
|
||||||
|
Returns 'ibm'
|
||||||
|
|
||||||
|
=item $ibm->os_ver()
|
||||||
|
|
||||||
|
Returns the software version
|
||||||
|
|
||||||
|
(C<agSoftwareVersion>)
|
||||||
|
|
||||||
|
=item $ibm->temp()
|
||||||
|
|
||||||
|
(C<hwTempSensors>)
|
||||||
|
|
||||||
|
=item $ibm->fan()
|
||||||
|
|
||||||
|
(C<hwFanSpeed>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ibm->hasLLDP()
|
||||||
|
|
||||||
|
Is LLDP is active in this device?
|
||||||
|
|
||||||
|
Note: LLDP may be active, but nothing in C<lldpRemoteSystemsData> Tables so
|
||||||
|
the device would not return any useful topology information.
|
||||||
|
|
||||||
|
Checks to see if at least one interface is enabled to receive LLDP packets.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"GLOBALS"> for details.
|
||||||
|
|
||||||
|
=head2 Global Methods imported from SNMP::Info::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 a reference
|
||||||
|
to a hash.
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $ibm->interfaces()
|
||||||
|
|
||||||
|
Returns reference to hash of interface names to iids.
|
||||||
|
|
||||||
|
=item $ibm->i_ignore()
|
||||||
|
|
||||||
|
Returns reference to hash of interfaces to be ignored.
|
||||||
|
|
||||||
|
Ignores interfaces with descriptions of tunnel, loopback, and null.
|
||||||
|
|
||||||
|
=item $ibm->i_duplex()
|
||||||
|
|
||||||
|
Returns reference to hash of interface link duplex status.
|
||||||
|
|
||||||
|
(C<portInfoMode>)
|
||||||
|
|
||||||
|
=item $ibm->lldp_if()
|
||||||
|
|
||||||
|
Returns the mapping to the SNMP Interface Table. Tries to cross reference
|
||||||
|
(C<lldpInfoRemoteDevicesLocalPort>) with (C<ifDescr>) and (C<ifAlias>)
|
||||||
|
to get (C<ifIndex>).
|
||||||
|
|
||||||
|
=item $ibm->lldp_ip()
|
||||||
|
|
||||||
|
Returns remote IPv4 address. Returns for all other address types, use
|
||||||
|
lldp_addr if you want any return address type.
|
||||||
|
|
||||||
|
=item $ibm->lldp_platform()
|
||||||
|
|
||||||
|
Returns remote device system description.
|
||||||
|
|
||||||
|
(C<lldpInfoRemoteDevicesSystemDescription>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::Layer3/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=head2 Table Methods imported from SNMP::Info::LLDP
|
||||||
|
|
||||||
|
See documentation in L<SNMP::Info::LLDP/"TABLE METHODS"> for details.
|
||||||
|
|
||||||
|
=cut
|
||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION $DEBUG %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -234,21 +234,6 @@ sub i_vlan_membership {
|
|||||||
return $i_vlan_membership;
|
return $i_vlan_membership;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB for bridge forwarding tables
|
|
||||||
sub fw_mac {
|
|
||||||
my $juniper = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $juniper->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $juniper = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $juniper->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Pseudo ENTITY-MIB methods
|
# Pseudo ENTITY-MIB methods
|
||||||
|
|
||||||
# This class supports both virtual chassis (stackable) and physical chassis
|
# This class supports both virtual chassis (stackable) and physical chassis
|
||||||
@@ -678,25 +663,6 @@ IDs. These are the VLANs which are members of the egress list for the port.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Forwarding Table (C<dot1dTpFdbEntry>)
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $juniper->fw_mac()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table MAC Addresses
|
|
||||||
|
|
||||||
(C<dot1dTpFdbAddress>)
|
|
||||||
|
|
||||||
=item $juniper->fw_port()
|
|
||||||
|
|
||||||
Returns reference to hash of forwarding table entries port interface
|
|
||||||
identifier (iid)
|
|
||||||
|
|
||||||
(C<dot1dTpFdbPort>)
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Pseudo F<ENTITY-MIB> information
|
=head2 Pseudo F<ENTITY-MIB> information
|
||||||
|
|
||||||
These methods emulate F<ENTITY-MIB> Physical Table methods using
|
These methods emulate F<ENTITY-MIB> Physical Table methods using
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -50,17 +50,30 @@ $VERSION = '3.08';
|
|||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
'hrSystemUptime' => 'hrSystemUptime',
|
'hrSystemUptime' => 'hrSystemUptime',
|
||||||
|
'os_level' => 'mtxrLicLevel',
|
||||||
'os_ver' => 'mtxrLicVersion',
|
'os_ver' => 'mtxrLicVersion',
|
||||||
|
'serial1' => 'mtxrSystem.3.0',
|
||||||
|
'firmware' => 'mtxrSystem.4.0',
|
||||||
|
'fan_type' => 'mtxrHlActiveFan',
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'mikrotik';
|
return 'mikrotik';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $mikrotik = shift;
|
||||||
|
return $mikrotik->serial1;
|
||||||
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
my $mikrotik = shift;
|
my $mikrotik = shift;
|
||||||
my $descr = $mikrotik->description() || '';
|
my $descr = $mikrotik->description() || '';
|
||||||
@@ -73,6 +86,18 @@ sub os {
|
|||||||
return 'routeros';
|
return 'routeros';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub board_temp {
|
||||||
|
my $mikrotik = shift;
|
||||||
|
my $temp = $mikrotik->mtxrHlTemperature;
|
||||||
|
return $temp / 10.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub cpu_temp {
|
||||||
|
my $mikrotik = shift;
|
||||||
|
my $temp = $mikrotik->mtxrHlProcessorTemperature;
|
||||||
|
return $temp / 10.0;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -148,6 +173,23 @@ Tries to extract the device model from C<sysDescr>.
|
|||||||
|
|
||||||
Returns the value of C<mtxrLicVersion>.
|
Returns the value of C<mtxrLicVersion>.
|
||||||
|
|
||||||
|
=item $mikrotik->os_level()
|
||||||
|
|
||||||
|
Returns the value of RouterOS level C<mtxrLicLevel>
|
||||||
|
|
||||||
|
=item $mikrotik->board_temp()
|
||||||
|
=item $mikrotik->cpu_temp()
|
||||||
|
|
||||||
|
Returns the appropriate temperature values
|
||||||
|
|
||||||
|
=item $mikrotik->serial()
|
||||||
|
|
||||||
|
Returns the device serial.
|
||||||
|
|
||||||
|
=item $mikrotik->firmware()
|
||||||
|
|
||||||
|
Returns the firmware version of hardware.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=head2 Globals imported from SNMP::Info::Layer3
|
=head2 Globals imported from SNMP::Info::Layer3
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::SONMP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::IEEE802dot11;
|
|||||||
|
|
||||||
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -69,17 +69,17 @@ $VERSION = '3.08';
|
|||||||
ns_i_up => 'nsIfStatus',
|
ns_i_up => 'nsIfStatus',
|
||||||
ns_ip_table => 'nsIfIp',
|
ns_ip_table => 'nsIfIp',
|
||||||
ns_ip_netmask => 'nsIfNetmask',
|
ns_ip_netmask => 'nsIfNetmask',
|
||||||
at_index => 'nsIpArpIfIdx',
|
|
||||||
at_paddr => 'nsIpArpMac',
|
|
||||||
at_netaddr => 'nsIpArpIp',
|
|
||||||
bp_index => 'nsIfInfo',
|
bp_index => 'nsIfInfo',
|
||||||
|
std_at_paddr => 'ipNetToMediaPhysAddress',
|
||||||
|
ns_at_paddr => 'nsIpArpMac',
|
||||||
);
|
);
|
||||||
|
|
||||||
%MUNGE = (
|
%MUNGE = (
|
||||||
%SNMP::Info::Layer3::MUNGE,
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
%SNMP::Info::IEEE802dot11::MUNGE,
|
%SNMP::Info::IEEE802dot11::MUNGE,
|
||||||
'ns_i_mac' => \&SNMP::Info::munge_mac,
|
'ns_i_mac' => \&SNMP::Info::munge_mac,
|
||||||
'at_paddr' => \&SNMP::Info::munge_mac,
|
'ns_at_paddr' => \&SNMP::Info::munge_mac,
|
||||||
|
'std_at_paddr' => \&SNMP::Info::munge_mac,
|
||||||
);
|
);
|
||||||
|
|
||||||
sub layers {
|
sub layers {
|
||||||
@@ -345,15 +345,22 @@ sub _mac_map {
|
|||||||
return \%mac_map;
|
return \%mac_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Interfaces can have two addresses, we want to capture both the network
|
||||||
|
# address and the management address
|
||||||
sub ip_index {
|
sub ip_index {
|
||||||
my $netscreen = shift;
|
my $netscreen = shift;
|
||||||
|
|
||||||
my $ns_ip = $netscreen->ns_ip_table() || {};
|
my $ns_ip = $netscreen->ns_ip_table() || {};
|
||||||
|
my $if_mng_ip = $netscreen->nsIfMngIp() || {};
|
||||||
|
|
||||||
my %ip_index = ();
|
my %ip_index = ();
|
||||||
foreach my $iid ( keys %$ns_ip ) {
|
foreach my $iid ( keys %$ns_ip ) {
|
||||||
$ip_index{ $ns_ip->{$iid} } = $iid if $ns_ip->{$iid} ne "0.0.0.0";
|
$ip_index{ $ns_ip->{$iid} } = $iid if $ns_ip->{$iid} ne "0.0.0.0";
|
||||||
}
|
}
|
||||||
|
foreach my $iid ( keys %$if_mng_ip ) {
|
||||||
|
$ip_index{ $if_mng_ip->{$iid} } = $iid
|
||||||
|
if $if_mng_ip->{$iid} ne "0.0.0.0";
|
||||||
|
}
|
||||||
return \%ip_index;
|
return \%ip_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,14 +368,24 @@ sub ip_table {
|
|||||||
my $netscreen = shift;
|
my $netscreen = shift;
|
||||||
|
|
||||||
my $ip_index = $netscreen->ip_index() || {};
|
my $ip_index = $netscreen->ip_index() || {};
|
||||||
|
my $if_mng_ip = $netscreen->nsIfMngIp() || {};
|
||||||
|
|
||||||
my %ip_table = ();
|
my %ip_table = ();
|
||||||
foreach my $iid ( keys %$ip_index ) {
|
foreach my $iid ( keys %$ip_index ) {
|
||||||
|
my $mgmt_ip = $if_mng_ip->{$iid};
|
||||||
|
|
||||||
|
if ( defined $mgmt_ip && $mgmt_ip ne '0.0.0.0' ) {
|
||||||
|
$ip_table{$iid} = $mgmt_ip;
|
||||||
|
}
|
||||||
|
else {
|
||||||
$ip_table{$iid} = $iid;
|
$ip_table{$iid} = $iid;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return \%ip_table;
|
return \%ip_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# There is only one netmask for the interface both network and management
|
||||||
|
# addresses should have the same netmask
|
||||||
sub ip_netmask {
|
sub ip_netmask {
|
||||||
my $netscreen = shift;
|
my $netscreen = shift;
|
||||||
|
|
||||||
@@ -461,6 +478,33 @@ sub i_80211channel {
|
|||||||
return \%i_80211channel;
|
return \%i_80211channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub at_index {
|
||||||
|
my $netscreen = shift;
|
||||||
|
|
||||||
|
my $std = $netscreen->ipNetToMediaIfIndex();
|
||||||
|
return $std if (ref {} eq ref $std and scalar keys %$std);
|
||||||
|
|
||||||
|
return $netscreen->nsIpArpIfIdx();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub at_paddr {
|
||||||
|
my $netscreen = shift;
|
||||||
|
|
||||||
|
my $std = $netscreen->std_at_paddr();
|
||||||
|
return $std if (ref {} eq ref $std and scalar keys %$std);
|
||||||
|
|
||||||
|
return $netscreen->ns_at_paddr();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub at_netaddr {
|
||||||
|
my $netscreen = shift;
|
||||||
|
|
||||||
|
my $std = $netscreen->ipNetToMediaNetAddress();
|
||||||
|
return $std if (ref {} eq ref $std and scalar keys %$std);
|
||||||
|
|
||||||
|
return $netscreen->nsIpArpIp();
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -710,6 +754,33 @@ identifier (IID).
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Arp Cache Table
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $netscreen->at_index()
|
||||||
|
|
||||||
|
Returns reference to hash. Maps ARP table entries to Interface IIDs
|
||||||
|
|
||||||
|
If the device doesn't support C<ipNetToMediaIfIndex>, this will try
|
||||||
|
the proprietary C<nsIpArpIfIdx>.
|
||||||
|
|
||||||
|
=item $netscreen->at_paddr()
|
||||||
|
|
||||||
|
Returns reference to hash. Maps ARP table entries to MAC addresses.
|
||||||
|
|
||||||
|
If the device doesn't support C<ipNetToMediaPhysAddress>, this will try
|
||||||
|
the proprietary C<nsIpArpMac>.
|
||||||
|
|
||||||
|
=item $netscreen->at_netaddr()
|
||||||
|
|
||||||
|
Returns reference to hash. Maps ARP table entries to IP addresses.
|
||||||
|
|
||||||
|
If the device doesn't support C<ipNetToMediaNetAddress>, this will try
|
||||||
|
the proprietary C<nsIpArpIp>.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head3 Wireless Information
|
=head3 Wireless Information
|
||||||
|
|
||||||
=over
|
=over
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
# NOTE: Order creates precedence
|
# NOTE: Order creates precedence
|
||||||
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
# Example: v_name exists in Bridge.pm and CiscoVTP.pm
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS, %SNMP::Info::RapidCity::MIBS,
|
%SNMP::Info::Layer3::MIBS, %SNMP::Info::RapidCity::MIBS,
|
||||||
@@ -127,8 +127,8 @@ sub i_index {
|
|||||||
# Get VLAN Virtual Router Interfaces
|
# Get VLAN Virtual Router Interfaces
|
||||||
if (!defined $partial
|
if (!defined $partial
|
||||||
|| (defined $model
|
|| (defined $model
|
||||||
&& ( ( $partial > 2000 && $model =~ /(86|83|81|16|VSP)/ )
|
&& ( ( $partial > 2000 && $model =~ /^8[8631]|16|VSP/ )
|
||||||
|| ( $partial > 256 && $model =~ /(105|11[05]0|12[05])/ ) )
|
|| ( $partial > 256 && $model =~ /^1[012][05]0/ ) )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -145,7 +145,7 @@ sub i_index {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( defined $model and $model =~ /(86)/ ) {
|
if ( defined $model and $model =~ /^8[86]/ ) {
|
||||||
|
|
||||||
my $cpu_index = $passport->rc_cpu_ifindex($partial) || {};
|
my $cpu_index = $passport->rc_cpu_ifindex($partial) || {};
|
||||||
my $virt_ip = $passport->rc_virt_ip();
|
my $virt_ip = $passport->rc_virt_ip();
|
||||||
@@ -183,8 +183,8 @@ sub interfaces {
|
|||||||
|
|
||||||
if (!defined $partial
|
if (!defined $partial
|
||||||
|| (defined $model
|
|| (defined $model
|
||||||
&& ( ( $partial > 2000 && $model =~ /(86|83|81|16|VSP)/ )
|
&& ( ( $partial > 2000 && $model =~ /^8[8631]|16|VSP/ )
|
||||||
|| ( $partial > 256 && $model =~ /(105|11[05]0|12[05])/ ) )
|
|| ( $partial > 256 && $model =~ /^1[012][05]0/ ) )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -198,24 +198,24 @@ sub interfaces {
|
|||||||
my $index = $i_index->{$iid};
|
my $index = $i_index->{$iid};
|
||||||
next unless defined $index;
|
next unless defined $index;
|
||||||
|
|
||||||
if ( ( $index == 1 ) and ( $model =~ /(86)/ ) ) {
|
if ( ( $index == 1 ) and ( $model =~ /^8[86]/ ) ) {
|
||||||
$if{$index} = 'Cpu.Virtual';
|
$if{$index} = 'Cpu.Virtual';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $index == 192 ) and ( $model eq '8603' ) ) {
|
elsif ( ( $index == 192 ) and ( $model =~ /^8[86]03/ ) ) {
|
||||||
$if{$index} = 'Cpu.3';
|
$if{$index} = 'Cpu.3';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $index == 320 ) and ( $model =~ /(8606|8610|8610co)/ ) ) {
|
elsif ( ( $index == 320 ) and ( $model =~ /^8[86][10][06]/ ) ) {
|
||||||
$if{$index} = 'Cpu.5';
|
$if{$index} = 'Cpu.5';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $index == 384 ) and ( $model =~ /(8606|8610|8610co)/ ) ) {
|
elsif ( ( $index == 384 ) and ( $model =~ /^8[86][10][06]/ ) ) {
|
||||||
$if{$index} = 'Cpu.6';
|
$if{$index} = 'Cpu.6';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif (( $index > 2000 and $model =~ /(86|83|81|16|VSP)/ )
|
elsif (( $index > 2000 and $model =~ /^8[8631]|16|VSP/ )
|
||||||
or ( $index > 256 and $model =~ /(105|11[05]0|12[05])/ ) )
|
or ( $index > 256 and $model =~ /^1[012][05]0/ ) )
|
||||||
{
|
{
|
||||||
|
|
||||||
my $v_index = $reverse_vlan{$iid};
|
my $v_index = $reverse_vlan{$iid};
|
||||||
@@ -256,8 +256,8 @@ sub i_mac {
|
|||||||
# Get VLAN Virtual Router Interfaces
|
# Get VLAN Virtual Router Interfaces
|
||||||
if (!defined $partial
|
if (!defined $partial
|
||||||
|| (defined $model
|
|| (defined $model
|
||||||
&& ( ( $partial > 2000 && $model =~ /(86|83|81|16|VSP)/ )
|
&& ( ( $partial > 2000 && $model =~ /^8[8631]|16|VSP/ )
|
||||||
|| ( $partial > 256 && $model =~ /(105|11[05]0|12[05])/ ) )
|
|| ( $partial > 256 && $model =~ /^1[012][05]0/ ) )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -276,7 +276,7 @@ sub i_mac {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( defined $model and $model =~ /(86)/ ) {
|
if ( defined $model and $model =~ /^8[86]/ ) {
|
||||||
|
|
||||||
my $cpu_mac = $passport->rc_cpu_mac($partial) || {};
|
my $cpu_mac = $passport->rc_cpu_mac($partial) || {};
|
||||||
my $virt_ip = $passport->rc_virt_ip() || '0.0.0.0';
|
my $virt_ip = $passport->rc_virt_ip() || '0.0.0.0';
|
||||||
@@ -330,8 +330,8 @@ sub i_description {
|
|||||||
# Get VLAN Virtual Router Interfaces
|
# Get VLAN Virtual Router Interfaces
|
||||||
if (!defined $partial
|
if (!defined $partial
|
||||||
|| (defined $model
|
|| (defined $model
|
||||||
&& ( ( $partial > 2000 && $model =~ /(86|83|81|16|VSP)/ )
|
&& ( ( $partial > 2000 && $model =~ /^8[8631]|16|VSP/ )
|
||||||
|| ( $partial > 256 && $model =~ /(105|11[05]0|12[05])/ ) )
|
|| ( $partial > 256 && $model =~ /^1[012][05]0/ ) )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -366,8 +366,8 @@ sub i_name {
|
|||||||
|
|
||||||
if (!defined $partial
|
if (!defined $partial
|
||||||
|| (defined $model
|
|| (defined $model
|
||||||
&& ( ( $partial > 2000 && $model =~ /(86|83|81|16|VSP)/ )
|
&& ( ( $partial > 2000 && $model =~ /^8[8631]|16|VSP/ )
|
||||||
|| ( $partial > 256 && $model =~ /(105|11[05]0|12[05])/ ) )
|
|| ( $partial > 256 && $model =~ /^1[012][05]0/ ) )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -379,27 +379,27 @@ sub i_name {
|
|||||||
my %i_name;
|
my %i_name;
|
||||||
foreach my $iid ( keys %$i_index ) {
|
foreach my $iid ( keys %$i_index ) {
|
||||||
|
|
||||||
if ( ( $iid == 1 ) and ( $model =~ /(86)/ ) ) {
|
if ( ( $iid == 1 ) and ( $model =~ /^8[86]/ ) ) {
|
||||||
$i_name{$iid} = 'CPU Virtual Management IP';
|
$i_name{$iid} = 'CPU Virtual Management IP';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $iid == 192 ) and ( $model eq '8603' ) ) {
|
elsif ( ( $iid == 192 ) and ( $model =~ /^8[86]03/ ) ) {
|
||||||
$i_name{$iid} = 'CPU 3 Ethernet Port';
|
$i_name{$iid} = 'CPU 3 Ethernet Port';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $iid == 320 ) and ( $model =~ /(8606|8610|8610co)/ ) ) {
|
elsif ( ( $iid == 320 ) and ( $model =~ /^8[86][10][06]/ ) ) {
|
||||||
$i_name{$iid} = 'CPU 5 Ethernet Port';
|
$i_name{$iid} = 'CPU 5 Ethernet Port';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif ( ( $iid == 384 ) and ( $model =~ /(8606|8610|8610co)/ ) ) {
|
elsif ( ( $iid == 384 ) and ( $model =~ /^8[86][10][06]/ ) ) {
|
||||||
$i_name{$iid} = 'CPU 6 Ethernet Port';
|
$i_name{$iid} = 'CPU 6 Ethernet Port';
|
||||||
}
|
}
|
||||||
|
|
||||||
elsif (
|
elsif (
|
||||||
( $iid > 2000 and defined $model and $model =~ /(86|83|81|16)/ )
|
( $iid > 2000 and defined $model and $model =~ /^8[8631]|16|VSP/ )
|
||||||
or ( $iid > 256
|
or ( $iid > 256
|
||||||
and defined $model
|
and defined $model
|
||||||
and $model =~ /(105|11[05]0|12[05])/ )
|
and $model =~ /^1[012][05]0/ )
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
my $vlan_idx = $reverse_vlan{$iid};
|
my $vlan_idx = $reverse_vlan{$iid};
|
||||||
@@ -433,12 +433,16 @@ sub ip_index {
|
|||||||
foreach my $ip ( keys %$ip_index ) {
|
foreach my $ip ( keys %$ip_index ) {
|
||||||
my $iid = $ip_index->{$ip};
|
my $iid = $ip_index->{$ip};
|
||||||
next unless defined $iid;
|
next unless defined $iid;
|
||||||
|
# Skip VSP default CPU addresses
|
||||||
|
next if ($ip =~ /^192\.168\.1\.1/);
|
||||||
|
# Skip default CPU addresses
|
||||||
|
next if ($ip =~ /^192\.168\.168\.16[89]/);
|
||||||
|
|
||||||
$ip_index{$ip} = $iid;
|
$ip_index{$ip} = $iid;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Only 8600 has CPU and Virtual Management IP
|
# Only 8600 has CPU and Virtual Management IP
|
||||||
if ( defined $model and $model =~ /(86)/ ) {
|
if ( defined $model and $model =~ /^8[86]/ ) {
|
||||||
|
|
||||||
my $cpu_ip = $passport->rc_cpu_ip($partial) || {};
|
my $cpu_ip = $passport->rc_cpu_ip($partial) || {};
|
||||||
my $virt_ip = $passport->rc_virt_ip($partial);
|
my $virt_ip = $passport->rc_virt_ip($partial);
|
||||||
@@ -447,6 +451,8 @@ sub ip_index {
|
|||||||
foreach my $cid ( keys %$cpu_ip ) {
|
foreach my $cid ( keys %$cpu_ip ) {
|
||||||
my $c_ip = $cpu_ip->{$cid};
|
my $c_ip = $cpu_ip->{$cid};
|
||||||
next unless defined $c_ip;
|
next unless defined $c_ip;
|
||||||
|
# Skip default CPU addresses
|
||||||
|
next if ($c_ip =~ /192\.168\.168\.16[89]/);
|
||||||
|
|
||||||
$ip_index{$c_ip} = $cid;
|
$ip_index{$c_ip} = $cid;
|
||||||
}
|
}
|
||||||
@@ -467,6 +473,10 @@ sub ip_netmask {
|
|||||||
|
|
||||||
my %ip_index;
|
my %ip_index;
|
||||||
foreach my $iid ( keys %$ip_mask ) {
|
foreach my $iid ( keys %$ip_mask ) {
|
||||||
|
# Skip VSP default CPU addresses
|
||||||
|
next if ($iid =~ /^192\.168\.1\./);
|
||||||
|
# Skip default CPU addresses
|
||||||
|
next if ($iid =~ /^192\.168\.168\.16[89]/);
|
||||||
my $mask = $ip_mask->{$iid};
|
my $mask = $ip_mask->{$iid};
|
||||||
next unless defined $mask;
|
next unless defined $mask;
|
||||||
|
|
||||||
@@ -474,7 +484,7 @@ sub ip_netmask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Only 8600 has CPU and Virtual Management IP
|
# Only 8600 has CPU and Virtual Management IP
|
||||||
if ( defined $model and $model =~ /(86)/ ) {
|
if ( defined $model and $model =~ /^8[86]/ ) {
|
||||||
|
|
||||||
my $cpu_ip = $passport->rc_cpu_ip($partial) || {};
|
my $cpu_ip = $passport->rc_cpu_ip($partial) || {};
|
||||||
my $cpu_mask = $passport->rc_cpu_mask($partial) || {};
|
my $cpu_mask = $passport->rc_cpu_mask($partial) || {};
|
||||||
@@ -485,6 +495,8 @@ sub ip_netmask {
|
|||||||
foreach my $iid ( keys %$cpu_mask ) {
|
foreach my $iid ( keys %$cpu_mask ) {
|
||||||
my $c_ip = $cpu_ip->{$iid};
|
my $c_ip = $cpu_ip->{$iid};
|
||||||
next unless defined $c_ip;
|
next unless defined $c_ip;
|
||||||
|
# Skip default CPU addresses
|
||||||
|
next if ($c_ip =~ /192\.168\.168\.16[89]/);
|
||||||
my $c_mask = $cpu_mask->{$iid};
|
my $c_mask = $cpu_mask->{$iid};
|
||||||
next unless defined $c_mask;
|
next unless defined $c_mask;
|
||||||
|
|
||||||
@@ -510,7 +522,7 @@ sub root_ip {
|
|||||||
my $sonmp_topo_ip = $passport->sonmp_topo_ip();
|
my $sonmp_topo_ip = $passport->sonmp_topo_ip();
|
||||||
|
|
||||||
# Only 8600 and 1600 have CLIP or Management Virtual IP
|
# Only 8600 and 1600 have CLIP or Management Virtual IP
|
||||||
if ( defined $model and $model =~ /(86|16|VSP)/ ) {
|
if ( defined $model and $model =~ /^8[86]|16|VSP/ ) {
|
||||||
|
|
||||||
# Return CLIP (CircuitLess IP)
|
# Return CLIP (CircuitLess IP)
|
||||||
foreach my $iid ( keys %$rc_ip_type ) {
|
foreach my $iid ( keys %$rc_ip_type ) {
|
||||||
@@ -560,7 +572,7 @@ sub index_factor {
|
|||||||
|
|
||||||
# Older Accelar models use base 16 instead of 64
|
# Older Accelar models use base 16 instead of 64
|
||||||
$index_factor = 16
|
$index_factor = 16
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ );
|
if ( defined $model and $model =~ /^1[012][05]0/ );
|
||||||
return $index_factor;
|
return $index_factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -583,9 +595,86 @@ sub bp_index {
|
|||||||
foreach my $iid ( keys %$if_index ) {
|
foreach my $iid ( keys %$if_index ) {
|
||||||
$bp_index{$iid} = $iid;
|
$bp_index{$iid} = $iid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# If we have MLT's map them to the designated port
|
||||||
|
my $trunks = $passport->rc_mlt_index;
|
||||||
|
my $dps = $passport->rc_mlt_dp || {};
|
||||||
|
|
||||||
|
if ( ref {} eq ref $trunks and scalar keys %$trunks ) {
|
||||||
|
foreach my $m ( keys %$trunks ) {
|
||||||
|
my $m_idx = $trunks->{$m};
|
||||||
|
next unless $m_idx;
|
||||||
|
my $i_idx = $dps->{$m} ? $dps->{$m} : $m_idx;
|
||||||
|
$bp_index{$m_idx} = $i_idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return \%bp_index;
|
return \%bp_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# We have devices which support BRIDGE-MIB, Q-BRIDGE-MIB, and RAPID-CITY
|
||||||
|
# exclusively. Use standards-based first and fall back to RAPID-CITY.
|
||||||
|
sub fw_mac {
|
||||||
|
my $passport = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $qb = $passport->SUPER::fw_mac($partial);
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
my $qb_fw_port = $passport->rcBridgeTpFdbPort($partial);
|
||||||
|
my $qb_fw_mac = {};
|
||||||
|
foreach my $idx ( keys %$qb_fw_port ) {
|
||||||
|
my ( $fdb_id, $mac ) = _rc_fdbtable_index($idx);
|
||||||
|
$qb_fw_mac->{$idx} = $mac;
|
||||||
|
}
|
||||||
|
return $qb_fw_mac;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_port {
|
||||||
|
my $passport = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $qb = $passport->SUPER::fw_port($partial);
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $passport->rcBridgeTpFdbPort($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub fw_status {
|
||||||
|
my $passport = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $qb = $passport->SUPER::fw_status($partial);
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
return $passport->rcBridgeTpFdbStatus($partial);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub qb_fw_vlan {
|
||||||
|
my $passport = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
|
my $qb = $passport->SUPER::qb_fw_vlan($partial);
|
||||||
|
return $qb if (ref {} eq ref $qb and scalar keys %$qb);
|
||||||
|
|
||||||
|
my $qb_fw_port = $passport->rcBridgeTpFdbPort($partial);
|
||||||
|
my $qb_fw_vlan = {};
|
||||||
|
foreach my $idx ( keys %$qb_fw_port ) {
|
||||||
|
my ( $fdb_id, $mac ) = _rc_fdbtable_index($idx);
|
||||||
|
$qb_fw_vlan->{$idx} = $fdb_id;
|
||||||
|
}
|
||||||
|
return $qb_fw_vlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
# break up the rcBridgeTpFdbEntry INDEX into FDB ID and MAC Address.
|
||||||
|
sub _rc_fdbtable_index {
|
||||||
|
my $idx = shift;
|
||||||
|
my @values = split( /\./, $idx );
|
||||||
|
my $fdb_id = shift(@values);
|
||||||
|
return ( $fdb_id, join( ':', map { sprintf "%02x", $_ } @values ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Pseudo ENTITY-MIB methods
|
# Pseudo ENTITY-MIB methods
|
||||||
|
|
||||||
sub e_index {
|
sub e_index {
|
||||||
@@ -613,7 +702,7 @@ sub e_index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Older Accelars use RAPID-CITY::rcCardTable
|
# Older Accelars use RAPID-CITY::rcCardTable
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ ) {
|
if ( defined $model and $model =~ /^1[012][05]0/ ) {
|
||||||
my $rc_c_t = $passport->rc_c_type() || {};
|
my $rc_c_t = $passport->rc_c_type() || {};
|
||||||
foreach my $idx ( keys %$rc_c_t ) {
|
foreach my $idx ( keys %$rc_c_t ) {
|
||||||
next unless $idx;
|
next unless $idx;
|
||||||
@@ -701,7 +790,7 @@ sub e_descr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Older Accelars use RAPID-CITY::rcCardTable
|
# Older Accelars use RAPID-CITY::rcCardTable
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ ) {
|
if ( defined $model and $model =~ /^1[012][05]0/ ) {
|
||||||
my $rc_c_t = $passport->rc_c_type() || {};
|
my $rc_c_t = $passport->rc_c_type() || {};
|
||||||
foreach my $idx ( keys %$rc_c_t ) {
|
foreach my $idx ( keys %$rc_c_t ) {
|
||||||
next unless $idx;
|
next unless $idx;
|
||||||
@@ -769,7 +858,7 @@ sub e_type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Older Accelars use RAPID-CITY::rcCardTable
|
# Older Accelars use RAPID-CITY::rcCardTable
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ ) {
|
if ( defined $model and $model =~ /^1[012][05]0/ ) {
|
||||||
my $rc_c_t = $passport->rc_c_type() || {};
|
my $rc_c_t = $passport->rc_c_type() || {};
|
||||||
foreach my $idx ( keys %$rc_c_t ) {
|
foreach my $idx ( keys %$rc_c_t ) {
|
||||||
next unless $idx;
|
next unless $idx;
|
||||||
@@ -842,7 +931,7 @@ sub e_name {
|
|||||||
$rc_e_name{$iid} = "Card $slot, MDA $mod";
|
$rc_e_name{$iid} = "Card $slot, MDA $mod";
|
||||||
}
|
}
|
||||||
elsif ( defined $model
|
elsif ( defined $model
|
||||||
and $model =~ /(105|11[05]0|12[05])/
|
and $model =~ /^1[012][05]0/
|
||||||
and $iid =~ /1$/ )
|
and $iid =~ /1$/ )
|
||||||
{
|
{
|
||||||
$rc_e_name{$iid} = "Card $slot";
|
$rc_e_name{$iid} = "Card $slot";
|
||||||
@@ -878,7 +967,7 @@ sub e_hwver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Older Accelars use RAPID-CITY::rcCardTable
|
# Older Accelars use RAPID-CITY::rcCardTable
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ ) {
|
if ( defined $model and $model =~ /^1[012][05]0/ ) {
|
||||||
my $rc_c_t = $passport->rc_c_rev() || {};
|
my $rc_c_t = $passport->rc_c_rev() || {};
|
||||||
foreach my $idx ( keys %$rc_c_t ) {
|
foreach my $idx ( keys %$rc_c_t ) {
|
||||||
next unless $idx;
|
next unless $idx;
|
||||||
@@ -953,7 +1042,7 @@ sub e_serial {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Older Accelars use RAPID-CITY::rcCardTable
|
# Older Accelars use RAPID-CITY::rcCardTable
|
||||||
if ( defined $model and $model =~ /(105|11[05]0|12[05])/ ) {
|
if ( defined $model and $model =~ /^1[012][05]0/ ) {
|
||||||
my $rc_c_t = $passport->rc_c_serial() || {};
|
my $rc_c_t = $passport->rc_c_serial() || {};
|
||||||
foreach my $idx ( keys %$rc_c_t ) {
|
foreach my $idx ( keys %$rc_c_t ) {
|
||||||
next unless $idx;
|
next unless $idx;
|
||||||
@@ -1240,6 +1329,40 @@ problems with F<BRIDGE-MIB>
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Forwarding Table
|
||||||
|
|
||||||
|
These methods utilize, in order; F<Q-BRIDGE-MIB>, F<BRIDGE-MIB>, and
|
||||||
|
F<RAPID-CITY> to obtain the forwarding table information.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $passport->fw_mac()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table MAC Addresses
|
||||||
|
|
||||||
|
(C<dot1qTpFdbAddress>), (C<dot1dTpFdbAddress>), (C<rcBridgeTpFdbAddress>)
|
||||||
|
|
||||||
|
=item $passport->fw_port()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries port interface
|
||||||
|
identifier (iid)
|
||||||
|
|
||||||
|
(C<dot1qTpFdbPort>), (C<dot1dTpFdbPort>), (C<rcBridgeTpFdbPort>)
|
||||||
|
|
||||||
|
=item $passport->fw_status()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries status
|
||||||
|
|
||||||
|
(C<dot1qTpFdbStatus>), (C<dot1dTpFdbStatus>), (C<rcBridgeTpFdbStatus>)
|
||||||
|
|
||||||
|
=item $passport->qb_fw_vlan()
|
||||||
|
|
||||||
|
Returns reference to hash of forwarding table entries VLAN ID
|
||||||
|
|
||||||
|
(C<dot1qFdbId>), (C<rcBridgeTpFdbVlanId>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head2 Pseudo F<ENTITY-MIB> information
|
=head2 Pseudo F<ENTITY-MIB> information
|
||||||
|
|
||||||
These devices do not support F<ENTITY-MIB>. These methods emulate Physical
|
These devices do not support F<ENTITY-MIB>. These methods emulate Physical
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info::LLDP;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
@@ -89,22 +89,6 @@ sub model {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Use Q-BRIDGE-MIB
|
|
||||||
|
|
||||||
sub fw_mac {
|
|
||||||
my $l3 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $l3->qb_fw_mac($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub fw_port {
|
|
||||||
my $l3 = shift;
|
|
||||||
my $partial = shift;
|
|
||||||
|
|
||||||
return $l3->qb_fw_port($partial);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -196,20 +180,6 @@ See documentation in L<SNMP::Info::LLDP> for details.
|
|||||||
These are methods that return tables of information in the form of a reference
|
These are methods that return tables of information in the form of a reference
|
||||||
to a hash.
|
to a hash.
|
||||||
|
|
||||||
=head2 Overrides
|
|
||||||
|
|
||||||
=over
|
|
||||||
|
|
||||||
=item $pica8->fw_mac()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=item $pica8->fw_port()
|
|
||||||
|
|
||||||
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
|
|
||||||
|
|
||||||
=back
|
|
||||||
|
|
||||||
=head2 Table Methods imported from SNMP::Info::Layer3
|
=head2 Table Methods imported from SNMP::Info::Layer3
|
||||||
|
|
||||||
See documentation in L<SNMP::Info::Layer3> for details.
|
See documentation in L<SNMP::Info::Layer3> for details.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer2::MIBS, %SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
216
Info/Layer3/Steelhead.pm
Normal file
216
Info/Layer3/Steelhead.pm
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
# SNMP::Info::Layer3::Steelhead
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013 Eric Miller
|
||||||
|
# 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::Layer3::Steelhead;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::Steelhead::ISA
|
||||||
|
= qw/SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::Steelhead::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
|
||||||
|
|
||||||
|
$VERSION = '3.15';
|
||||||
|
|
||||||
|
%MIBS = (
|
||||||
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
'STEELHEAD-MIB' => 'serialNumber',
|
||||||
|
);
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
# Fully qualified to remove ambiguity of 'model'
|
||||||
|
'rb_model' => 'STEELHEAD-MIB::model',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = (
|
||||||
|
%SNMP::Info::Layer3::FUNCS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%MUNGE = (
|
||||||
|
%SNMP::Info::Layer3::MUNGE,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub layers {
|
||||||
|
return '01001100';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'riverbed';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $riverbed = shift;
|
||||||
|
|
||||||
|
my $model = $riverbed->rb_model() || '';
|
||||||
|
|
||||||
|
if ($model =~ /^(\d+)/) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'steelhead';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $riverbed = shift;
|
||||||
|
|
||||||
|
my $ver = $riverbed->systemVersion() || '';
|
||||||
|
|
||||||
|
if ( $ver =~ /(\d+[\.\d]+)/ ) {
|
||||||
|
return $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $riverbed = shift;
|
||||||
|
|
||||||
|
return $riverbed->serialNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Steelhead - SNMP Interface to Riverbed Steelhead WAN
|
||||||
|
optimization appliances.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Eric Miller
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $riverbed = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myswitch',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $riverbed->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Abstraction subclass for Riverbed Steelhead WAN optimization appliances.
|
||||||
|
|
||||||
|
For speed or debugging purposes you can call the subclass directly, but not
|
||||||
|
after determining a more specific class using the method above.
|
||||||
|
|
||||||
|
my $riverbed = new SNMP::Info::Layer3::Steelhead(...);
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Required MIBs
|
||||||
|
|
||||||
|
F<STEELHEAD-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
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $riverbed->vendor()
|
||||||
|
|
||||||
|
Returns 'riverbed'
|
||||||
|
|
||||||
|
=item $riverbed->model()
|
||||||
|
|
||||||
|
Returns the chassis model.
|
||||||
|
|
||||||
|
(C<STEELHEAD-MIB::model>)
|
||||||
|
|
||||||
|
=item $riverbed->os()
|
||||||
|
|
||||||
|
Returns 'steelhead'
|
||||||
|
|
||||||
|
=item $riverbed->os_ver()
|
||||||
|
|
||||||
|
Returns the software version extracted from (C<systemVersion>).
|
||||||
|
|
||||||
|
=item $riverbed->serial()
|
||||||
|
|
||||||
|
Returns the chassis serial number.
|
||||||
|
|
||||||
|
(C<serialNumber>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $riverbed->layers()
|
||||||
|
|
||||||
|
Returns 01001100. Steelhead does not support bridge MIB, so override reported
|
||||||
|
layers.
|
||||||
|
|
||||||
|
=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 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/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ use SNMP::Info::MAU;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::Layer3::MIBS,
|
%SNMP::Info::Layer3::MIBS,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ use SNMP::Info::Layer3;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, 'TIMETRA-GLOBAL-MIB' => 'timetraReg', );
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ use SNMP::Info;
|
|||||||
|
|
||||||
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/;
|
||||||
|
|
||||||
$VERSION = '3.08';
|
$VERSION = '3.15';
|
||||||
|
|
||||||
%MIBS = (
|
%MIBS = (
|
||||||
%SNMP::Info::MIBS,
|
%SNMP::Info::MIBS,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user