$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
$selfaddr->addr,
$selfaddr->network->addr,
$selfaddr->broadcast->addr,
- FS::IP_Mixin->used_addresses($self)
+ FS::IP_Mixin->used_addresses_in_block($self)
);
# just do a linear search of the block
($router ? $router->routername : '(unallocated)'). ':'. $self->NetAddr;
}
+=item router
+
+Returns the router assigned to this block.
+
+=cut
+
+# necessary, because this can't be foreign keyed
+
+sub router {
+ my $self = shift;
+ my $routernum = $self->routernum;
+ if ( $routernum ) {
+ return FS::router->by_key($routernum);
+ } else {
+ return;
+ }
+}
+
=back
=head1 BUGS
=cut
1;
-