Use Q-BRIDGE-MIB as default with fallback to BRIDGE-MIB across all classes for the fw_mac, fw_port, and fw_status methods

This commit is contained in:
Eric A. Miller
2014-01-10 19:26:38 -05:00
parent a4e7c3a61a
commit 985b4aab3f
12 changed files with 34 additions and 268 deletions

View File

@@ -2,6 +2,11 @@ SNMP::Info - Friendly OO-style interface to Network devices using SNMP.
version 3.11 version 3.11
[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
[BUG FIXES] [BUG FIXES]
* Modify cdp_cap() to handle devices which return space delimited strings * Modify cdp_cap() to handle devices which return space delimited strings

View File

@@ -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;

View File

@@ -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.

View File

@@ -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

View File

@@ -104,22 +104,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 {
@@ -245,14 +229,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>

View File

@@ -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

View File

@@ -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

View File

@@ -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();
} }
@@ -301,9 +298,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();
} }

View File

@@ -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>

View File

@@ -113,22 +113,6 @@ sub i_ignore {
return \%i_ignore; return \%i_ignore;
} }
# 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__
@@ -235,14 +219,6 @@ Returns reference to hash. Increments value of IID if port is to be ignored.
Ignores loopback Ignores loopback
=item $h3c->fw_mac()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=item $h3c->fw_port()
Use the F<Q-BRIDGE-MIB> instead of F<BRIDGE-MIB>
=back =back
=head2 Table Methods imported from SNMP::Info::Layer3 =head2 Table Methods imported from SNMP::Info::Layer3

View File

@@ -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

View File

@@ -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.