CIDR-Assign
view release on metacpan or search on metacpan
scans the tree for a "free" block that is of the required size. If a block
isn't available then it splits the next largest block and invokes itself.
Should there be no free block available for allocation then the routing
returns "undef".
The parameters "ones" and "zeroes" are used to indicate if the allocation can
make use of an all ones or all zeros network if necessary.
The parameter "location" is optional but if present and the allocation is
smaller than a /24 it will try to choose a block in the same location as
other allocations in order to avoid too much fragmentation of the address
space.
=cut
my($self) = shift;
my($length, $customer, $ones, $zeroes, $location) = @_;
my($status, $network, $value, $bits);
my($spare, $match, $contents) = '';
my($smallest) = 0;
my($timestamp) = undef;
# The user wants us to change something that is not
# in the allocation pool, complain...
$self->{ERROR} = 'RANGE';
return undef;
}
} elsif ( $#candidates > 0 ) {
# We should check that these elements completely cover the
# entry we want to change but that's too hard for now so
# just assume they do...
#
# Remove the fragments enclosed by the new element
foreach ( @candidates ) {
$self->{DB}->del($_);
}
%hash = {};
$hash{'state'} = $state;
$hash{'date'} = $today;
$hash{'customer'} = $customer if defined $customer;
$hash{'location'} = $location
if $length > 24 && defined $location && $location ne '';
$self->{DB}->put($allocation, join($separator, %hash) );
( run in 0.993 second using v1.01-cache-2.11-cpan-364913b4093 )