add reset after messing with snmp context or community index
This commit is contained in:
@@ -172,6 +172,7 @@ sub snmp_comm_reindex {
|
||||
if ($ver == 3) {
|
||||
my $prefix = '';
|
||||
my @comms = _build_communities($device, 'read');
|
||||
# find a context prefix configured by the user
|
||||
foreach my $c (@comms) {
|
||||
next unless $c->{tag}
|
||||
and $c->{tag} eq (eval { $device->community->snmp_auth_tag_read } || '');
|
||||
@@ -182,14 +183,16 @@ sub snmp_comm_reindex {
|
||||
debug
|
||||
sprintf '[%s] reindexing to "%s%s" (ver: %s, class: %s)',
|
||||
$device->ip, $prefix, $vlan, $ver, $snmp->class;
|
||||
$snmp->update(Context => ($prefix . $vlan));
|
||||
$vlan ? $snmp->update(Context => ($prefix . $vlan))
|
||||
: $snmp->update(Context => '');
|
||||
}
|
||||
else {
|
||||
my $comm = $snmp->snmp_comm;
|
||||
|
||||
debug sprintf '[%s] reindexing to vlan %s (ver: %s, class: %s)',
|
||||
$device->ip, $vlan, $ver, $snmp->class;
|
||||
$snmp->update(Community => $comm . '@' . $vlan);
|
||||
$vlan ? $snmp->update(Community => $comm . '@' . $vlan)
|
||||
: $snmp->update(Community => $comm);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,9 +27,6 @@ register_worker({ stage => 'check', driver => 'snmp' }, sub {
|
||||
my $now = 'to_timestamp('. (join '.', gettimeofday) .')';
|
||||
my $total_nodes = 0;
|
||||
|
||||
# do this before we start messing with the snmp community string
|
||||
my $guard = guard { }; # FIXME TODO reset snmp community
|
||||
|
||||
# cache the device ports to save hitting the database for many single rows
|
||||
my $device_ports = {map {($_->port => $_)}
|
||||
$device->ports(undef, {prefetch => {neighbor_alias => 'device'}})->all};
|
||||
@@ -41,11 +38,15 @@ register_worker({ stage => 'check', driver => 'snmp' }, sub {
|
||||
|
||||
# ...then per-vlan if supported
|
||||
my @vlan_list = get_vlan_list($device);
|
||||
{
|
||||
my $guard = guard { snmp_comm_reindex($snmp, $device, 0) };
|
||||
foreach my $vlan (@vlan_list) {
|
||||
snmp_comm_reindex($snmp, $device, $vlan);
|
||||
my $pv_fwtable = walk_fwtable($device, $interfaces, $port_macs, $device_ports, $vlan);
|
||||
my $pv_fwtable =
|
||||
walk_fwtable($device, $interfaces, $port_macs, $device_ports, $vlan);
|
||||
$fwtable = {%$fwtable, %$pv_fwtable};
|
||||
}
|
||||
}
|
||||
|
||||
# now it's time to call store_node for every node discovered
|
||||
# on every port on every vlan on this device.
|
||||
|
||||
Reference in New Issue
Block a user