Reduce macsuck bandwidth usage to database (#680)
* Reduce macsuck bandwidth usage to database get_port_macs transfers a full list of all device_port.(mac,ip) in every macsuck. With 8k devices and 40k interfaces it takes up around 15MB. Transferring them 8k times during an 1h macsuck cycle requires bandwidth in the 300 to 400 mbit/s range. This patch changes get_port_macs to be called inside walk_fwtable and only transfer the macs found in the current target device/vlan.
This commit is contained in:
committed by
Oliver Gorwits
parent
b211c7c7e2
commit
26d3fbdd40
@@ -24,19 +24,18 @@ subroutines.
|
||||
=head2 get_port_macs
|
||||
|
||||
Returns a Hash reference of C<< { MAC => IP } >> for all interface MAC
|
||||
addresses on all devices.
|
||||
|
||||
If you need to filter for a given device, simply compare the IP (hash value)
|
||||
to your device's IP.
|
||||
addresses supplied as array reference
|
||||
|
||||
=cut
|
||||
|
||||
sub get_port_macs {
|
||||
|
||||
my ($fw_mac_list) = @_;
|
||||
my $port_macs = {};
|
||||
|
||||
my $dp_macs
|
||||
= schema('netdisco')->resultset('DevicePort')
|
||||
->search( { mac => { '!=' => [ -and => (undef, '00:00:00:00:00:00') ] } },
|
||||
->search( { mac => { '-in' => $fw_mac_list } },
|
||||
{ select => [ 'mac', 'ip' ],
|
||||
group_by => [ 'mac', 'ip' ] } );
|
||||
my $dp_cursor = $dp_macs->cursor;
|
||||
@@ -46,7 +45,7 @@ sub get_port_macs {
|
||||
|
||||
my $d_macs
|
||||
= schema('netdisco')->resultset('Device')
|
||||
->search( { mac => { '!=' => undef } },
|
||||
->search( { mac => { '-in' => $fw_mac_list } },
|
||||
{ select => [ 'mac', 'ip' ] } );
|
||||
my $d_cursor = $d_macs->cursor;
|
||||
while ( my @vals = $d_cursor->next ) {
|
||||
|
||||
Reference in New Issue
Block a user