}
sub _used_addresses {
+ my ($class, $block, $exclude_svc) = @_;
- # Returns all addresses in use. Does not filter with $block. ref:f197bdbaa1
-
- my ($class, $block, $exclude) = @_;
- my $ip_field = $class->table_info->{'ip_field'}
- or return ();
- # if the service doesn't have an ip_field, then it has no IP addresses
- # in use, yes?
-
- my %hash = ( $ip_field => { op => '!=', value => '' } );
- #$hash{'blocknum'} = $block->blocknum if $block;
- $hash{'svcnum'} = { op => '!=', value => $exclude->svcnum } if ref $exclude;
- map { my $na = $_->NetAddr; $na ? $na->addr : () }
- qsearch({
- table => $class->table,
- hashref => \%hash,
- extra_sql => " AND $ip_field != '0e0'",
- });
-}
-
-sub _used_addresses_in_block {
- my ($class, $block) = @_;
-
- croak "_used_addresses_in_block() requires an FS::addr_block parameter"
+ croak "_used_addresses() requires an FS::addr_block parameter"
unless ref $block && $block->isa('FS::addr_block');
my $ip_field = $class->table_info->{'ip_field'};
if ( !$ip_field ) {
- carp "_used_addresses_in_block() skipped, no ip_field";
+ carp "_used_addresses() skipped, no ip_field";
return;
}
+ my %qsearch = ( $ip_field => { op => '!=', value => '' });
+ $qsearch{svcnum} = { op => '!=', value => $exclude_svc->svcnum }
+ if ref $exclude_svc && $exclude_svc->svcnum;
+
my $block_na = $block->NetAddr;
my $octets;
# parameter to bypass FS::Record objects creation and just
# return hashrefs from DBI. 200,000 hashrefs are many seconds faster
# than 200,000 FS::Record objects
- my %qsearch = (
+ my %qsearch_param = (
table => $class->table,
select => $ip_field,
- hashref => { $ip_field => { op => '!=', value => '' }},
+ hashref => \%qsearch,
extra_sql => " AND $ip_field != '0e0' ",
);
if ( $octets ) {
my $block_str = join('.', (split(/\D/, $block_na->first))[0..$octets-1]);
- $qsearch{extra_sql} .= " AND $ip_field LIKE ".dbh->quote("${block_str}.%");
+ $qsearch_param{extra_sql}
+ .= " AND $ip_field LIKE ".dbh->quote("${block_str}.%");
}
if ( $block->ip_netmask % 8 ) {
return
map { $_->$ip_field }
- qsearch( \%qsearch );
+ qsearch( \%qsearch_param );
}
sub _is_used {