Support partial table fetches on overridden table methods.
Optimize i_duplex_admin() and i_duplex(). Override serial() as required since overridden in L3. Document new set methods and other doc updates.
This commit is contained in:
@@ -44,7 +44,7 @@ use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
|
|||||||
);
|
);
|
||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
'serial' => 'rcChasSerialNumber',
|
'rc_serial' => 'rcChasSerialNumber',
|
||||||
'chassis' => 'rcChasType',
|
'chassis' => 'rcChasType',
|
||||||
'slots' => 'rcChasNumSlots',
|
'slots' => 'rcChasNumSlots',
|
||||||
'tftp_host' => 'rcTftpHost',
|
'tftp_host' => 'rcTftpHost',
|
||||||
@@ -143,17 +143,25 @@ use vars qw/$VERSION $DEBUG %FUNCS %GLOBALS %MIBS %MUNGE $INIT/;
|
|||||||
'rc_cpu_mac' => \&SNMP::Info::munge_mac,
|
'rc_cpu_mac' => \&SNMP::Info::munge_mac,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# Need to override here since overridden in Layer2 and Layer3 classes
|
||||||
|
sub serial {
|
||||||
|
my $rapidcity = shift;
|
||||||
|
|
||||||
|
my $ver = $rapidcity->rc_serial();
|
||||||
|
return $ver unless !defined $ver;
|
||||||
|
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
sub i_duplex {
|
sub i_duplex {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
my $interfaces = $rapidcity->interfaces();
|
my $rc_duplex = $rapidcity->rc_duplex($partial) || {};
|
||||||
my $rc_index = $rapidcity->rc_index();
|
my $rc_cpu_duplex = $rapidcity->rc_cpu_duplex($partial) || {};
|
||||||
my $rc_duplex = $rapidcity->rc_duplex();
|
|
||||||
my $rc_cpu_duplex = $rapidcity->rc_cpu_duplex();
|
|
||||||
|
|
||||||
my %i_duplex;
|
my %i_duplex;
|
||||||
foreach my $if (keys %$interfaces){
|
foreach my $if (keys %$rc_duplex){
|
||||||
my $duplex = $rc_duplex->{$if};
|
my $duplex = $rc_duplex->{$if};
|
||||||
next unless defined $duplex;
|
next unless defined $duplex;
|
||||||
|
|
||||||
@@ -175,16 +183,15 @@ sub i_duplex {
|
|||||||
|
|
||||||
sub i_duplex_admin {
|
sub i_duplex_admin {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
my $interfaces = $rapidcity->interfaces();
|
my $rc_duplex_admin = $rapidcity->rc_duplex_admin() || {};
|
||||||
my $rc_index = $rapidcity->rc_index();
|
my $rc_auto = $rapidcity->rc_auto($partial) || {};
|
||||||
my $rc_duplex_admin = $rapidcity->rc_duplex_admin();
|
my $rc_cpu_auto = $rapidcity->rc_cpu_auto($partial) || {};
|
||||||
my $rc_auto = $rapidcity->rc_auto();
|
my $rc_cpu_duplex_admin = $rapidcity->rc_cpu_duplex_admin($partial) || {};
|
||||||
my $rc_cpu_auto = $rapidcity->rc_cpu_auto();
|
|
||||||
my $rc_cpu_duplex_admin = $rapidcity->rc_cpu_duplex_admin();
|
|
||||||
|
|
||||||
my %i_duplex_admin;
|
my %i_duplex_admin;
|
||||||
foreach my $if (keys %$interfaces){
|
foreach my $if (keys %$rc_duplex_admin){
|
||||||
my $duplex = $rc_duplex_admin->{$if};
|
my $duplex = $rc_duplex_admin->{$if};
|
||||||
next unless defined $duplex;
|
next unless defined $duplex;
|
||||||
my $auto = $rc_auto->{$if}||'false';
|
my $auto = $rc_auto->{$if}||'false';
|
||||||
@@ -263,8 +270,9 @@ sub set_i_speed_admin {
|
|||||||
|
|
||||||
sub i_vlan {
|
sub i_vlan {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
|
my $partial = shift;
|
||||||
|
|
||||||
my $i_pvid = $rapidcity->rc_i_vlan_pvid() || {};
|
my $i_pvid = $rapidcity->rc_i_vlan_pvid($partial) || {};
|
||||||
|
|
||||||
return $i_pvid;
|
return $i_pvid;
|
||||||
}
|
}
|
||||||
@@ -404,6 +412,9 @@ sub set_delete_vlan {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# These are internal methods and are not documented. Do not use directly.
|
||||||
|
#
|
||||||
sub check_forbidden_ports {
|
sub check_forbidden_ports {
|
||||||
my $rapidcity = shift;
|
my $rapidcity = shift;
|
||||||
my ($vlan_id, $ifindex) = @_;
|
my ($vlan_id, $ifindex) = @_;
|
||||||
@@ -495,7 +506,7 @@ Eric Miller
|
|||||||
)
|
)
|
||||||
or die "Can't connect to DestHost.\n";
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
my $class = $rapidcity->class();
|
my $class = $rapidcity->class();
|
||||||
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
@@ -525,11 +536,11 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
=item $rapidcity->chassis_base_mac()
|
=item $rapidcity->rc_base_mac()
|
||||||
|
|
||||||
(B<rc2kChassisBaseMacAddr>)
|
(B<rc2kChassisBaseMacAddr>)
|
||||||
|
|
||||||
=item $rapidcity->ch_serial()
|
=item $rapidcity->rc_serial()
|
||||||
|
|
||||||
(B<rcChasSerialNumber>)
|
(B<rcChasSerialNumber>)
|
||||||
|
|
||||||
@@ -567,6 +578,16 @@ These are methods that return scalar values from SNMP
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head2 Overrides
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $rapidcity->serial()
|
||||||
|
|
||||||
|
Returns serial number of the chassis
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
=head1 TABLE METHODS
|
=head1 TABLE METHODS
|
||||||
|
|
||||||
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
|
||||||
@@ -584,7 +605,22 @@ Returns reference to hash of IIDs to admin duplex setting.
|
|||||||
|
|
||||||
=item $rapidcity->i_vlan()
|
=item $rapidcity->i_vlan()
|
||||||
|
|
||||||
Returns a mapping between ifIndex and the VLAN.
|
Returns a mapping between ifIndex and the PVID or default VLAN.
|
||||||
|
|
||||||
|
=item $rapidcity->i_vlan_membership()
|
||||||
|
|
||||||
|
Returns reference to hash of arrays: key = ifIndex, value = array of VLAN IDs.
|
||||||
|
These are the VLANs which are members of the egress list for the port.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my $interfaces = $rapidcity->interfaces();
|
||||||
|
my $vlans = $rapidcity->i_vlan_membership();
|
||||||
|
|
||||||
|
foreach my $iid (sort keys %$interfaces) {
|
||||||
|
my $port = $interfaces->{$iid};
|
||||||
|
my $vlan = join(',', sort(@{$vlans->{$iid}}));
|
||||||
|
print "Port: $port VLAN: $vlan\n";
|
||||||
|
}
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -912,4 +948,80 @@ Returns a mapping between ifIndex and the VLAN.
|
|||||||
|
|
||||||
(B<rc2kMdaCardDeviations>)
|
(B<rc2kMdaCardDeviations>)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 SET METHODS
|
||||||
|
|
||||||
|
These are methods that provide SNMP set functionality for overridden methods or
|
||||||
|
provide a simpler interface to complex set operations. See
|
||||||
|
L<SNMP::Info/"SETTING DATA VIA SNMP"> for general information on set operations.
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $rapidcity->set_i_speed_admin(speed, ifIndex)
|
||||||
|
|
||||||
|
Sets port speed, must be supplied with speed and port ifIndex. Speed choices
|
||||||
|
are 'auto', '10', '100', '1000'.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_i_speed_admin('auto', $if_map{'1.1'})
|
||||||
|
or die "Couldn't change port speed. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_i_duplex_admin(duplex, ifIndex)
|
||||||
|
|
||||||
|
Sets port duplex, must be supplied with duplex and port ifIndex. Speed choices
|
||||||
|
are 'auto', 'half', 'full'.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_i_duplex_admin('auto', $if_map{'1.1'})
|
||||||
|
or die "Couldn't change port duplex. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_i_vlan(vlan, ifIndex)
|
||||||
|
|
||||||
|
Changes an access (untagged) port VLAN, must be supplied with the numeric VLAN ID
|
||||||
|
and port ifIndex. This method will modify the port's VLAN membership and PVID
|
||||||
|
(default VLAN). This method should only be used on end station (non-trunk) ports.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_i_vlan('2', $if_map{'1.1'})
|
||||||
|
or die "Couldn't change port VLAN. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_i_pvid(pvid, ifIndex)
|
||||||
|
|
||||||
|
Sets port PVID or default VLAN, must be supplied with the numeric VLAN ID and
|
||||||
|
port ifIndex. This method only changes the PVID, to modify an access (untagged)
|
||||||
|
port use set_i_vlan() instead.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_i_pvid('2', $if_map{'1.1'})
|
||||||
|
or die "Couldn't change port PVID. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_add_i_vlan_tagged(vlan, ifIndex)
|
||||||
|
|
||||||
|
Adds the port to the egress list of the VLAN, must be supplied with the numeric
|
||||||
|
VLAN ID and port ifIndex.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_add_i_vlan_tagged('2', $if_map{'1.1'})
|
||||||
|
or die "Couldn't add port to egress list. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_remove_i_vlan_tagged(vlan, ifIndex)
|
||||||
|
|
||||||
|
Removes the port from the egress list of the VLAN, must be supplied with the
|
||||||
|
numeric VLAN ID and port ifIndex.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
my %if_map = reverse %{$rapidcity->interfaces()};
|
||||||
|
$rapidcity->set_remove_i_vlan_tagged('2', $if_map{'1.1'})
|
||||||
|
or die "Couldn't add port to egress list. ",$rapidcity->error(1);
|
||||||
|
|
||||||
|
=item $rapidcity->set_delete_vlan(vlan)
|
||||||
|
|
||||||
|
Deletes the specified VLAN from the device.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
Reference in New Issue
Block a user