use vars qw( @ISA );
use FS::Record qw( qsearchs qsearch dbh );
use FS::router;
+use FS::addr_range;
use FS::svc_broadband;
+use FS::svc_acct;
use FS::Conf;
use FS::IP_Mixin;
use NetAddr::IP;
return qsearch('svc_broadband', { blocknum => $self->blocknum });
}
+=item svc_acct
+
+Returns a list of FS::svc_broadband objects associated
+with this object.
+
+=cut
+
+sub svc_acct {
+ my $self = shift;
+ return qsearch('svc_acct', { blocknum => $self->blocknum });
+}
+
=item NetAddr
Returns a NetAddr::IP object for this block's address and netmask.
$self->NetAddr->cidr;
}
+=item free_addrs
+
+Returns a sorted list of free addresses in the block.
+
+=cut
+
+sub free_addrs {
+ my $self = shift;
+
+ my %used_addr_map =
+ map {$_ => 1}
+ FS::IP_Mixin->used_addresses_in_block($self),
+ FS::Conf->new()->config('exclude_ip_addr');
+
+ grep { !exists $used_addr_map{$_} } map { $_->addr } $self->NetAddr->hostenum;
+}
+
=item next_free_addr
Returns a NetAddr::IP object corresponding to the first unassigned address
# also make sure it's not blocked from assignment by an address range
if ( !$used{$freeaddr->addr } ) {
my ($range) = grep { !$_->allow_use }
- FS::addr_range->any_contains($freeaddr);
+ FS::addr_range->any_contains($freeaddr->addr);
if ( !$range ) {
# then we've found a free address
return $freeaddr;
($router ? $router->routername : '(unallocated)'). ':'. $self->NetAddr;
}
-=back
-
=head1 BUGS
Minimum block size should be a config option. It's hardcoded at /30 right
=cut
1;
-