$_= $in{'specsize'};
if (m/\d+/) {
- $specsize= $&+0;
- $vn= "pick${specsize}check"; $$vn= 'checked';
+ $pick_prefix= $&+0;
+ $vn= "pick${pick_prefix}check"; $$vn= 'checked';
} elsif (m/prefix|subnet/) {
$which= $&;
$vn= "pickvar${which}check"; $$vn= 'checked';
- $specsize= $in{"pickvar${which}"};
- $specsize =~ m/\d+/ or finish_error('badsize');
- $specsize= $&+0;
- ($specsize >= 0 && $specsize <= 32) or finish_error('badsize');
- $specsize= 32-$specsize if $which eq 'subnet';
+ $pick_prefix= $in{"pickvar${which}"};
+ $pick_prefix =~ m/\d+/ or finish_error('badsize');
+ $pick_prefix= $&+0;
+ ($pick_prefix >= 0 && $pick_prefix <= 32) or finish_error('badsize');
+ $pick_prefix= 32-$pick_prefix if $which eq 'subnet';
} else {
die "$_ ?";
}
$network= $area_networks[$ai];
$prefix= $area_prefixes[$ai];
$net= display_net($network,$prefix);
- ($specsize >= $prefix) or finish_error('wrongsize');
+ ($pick_prefix >= $prefix) or finish_error('wrongsize');
$fixmask= get_mask($prefix);
- $mask= get_mask($specsize);
+ $mask= get_mask($pick_prefix);
$rnybs= randnybs(8);
$rand= hex($rnybs);
$value= hex($network) | ($rand & ($mask & ~$fixmask));
- $vhex= sprintf '%08x',$value;
+ $pick_network= sprintf '%08x',$value;
- $net= display_net($vhex,$specsize);
+ $net= display_net($pick_network,$pick_prefix);
$displayemail= 1;
-printf DEBUG "picking network=$network prefix=$prefix net=$net specsize=$specsize\n";
+printf DEBUG "picking network=$network prefix=$prefix net=$net pick_prefix=$pick_prefix\n";
printf DEBUG "picking rnybs=%s fixmask=%08x mask=%08x rand=%08x ".
- "value=%08x vhex=%s net=%s\n",
- $rnybs,$fixmask,$mask,$rand,$value,$vhex,$net;
+ "value=%08x pick_network=%s net=%s\n",
+ $rnybs,$fixmask,$mask,$rand,$value,$pick_network,$net;
$ent= { };
$db{'picked'}= $ent;
- $ent->{'network'}= $vhex;
- $ent->{'prefix'}= $specsize;
+ $ent->{'network'}= $pick_network;
+ $ent->{'prefix'}= $pick_prefix;
$list_areai= $ai;
list_database('area');
}
foreach $k (keys %db) {
print DEBUG "ldb q $k\n";
$ent= $db{$k};
+ $dblt_network= $ent->{'network'};
+ $dblt_prefix= $ent->{'prefix'};
next unless &{"dblist_cond_$listing"};
push @kl,$k;
}
sub dblist_cond_all { 1; }
sub dblist_prep_area {
- my ($network,$prefix);
- $network= $area_networks[$list_areai];
- $prefix= $area_prefixes[$list_areai];
- $listarea= display_net($network,$prefix);
- $dbl_mask= get_mask($prefix);
- $dbl_value= hex($network);
-}
-sub dblist_cond_area {
- my ($v, $r);
- $v= hex($ent->{'network'});
- $r= 1 if ($v & $dbl_mask) == $dbl_value;
-print DEBUG "dblist_cond_area $k $v $r\n";
- return $r;
+ $dblo_network= $area_networks[$list_areai];
+ $dblo_prefix= $area_prefixes[$list_areai];
+ $listarea= display_net($dblo_network,$dblo_prefix);
}
+sub dblist_cond_area { dblist_cond_overlap(); }
sub dblist_prep_overlap {
- my ($network,$prefix);
- ($network,$prefix,$dbl_mask,$dbl_value) = parse_netrange($in{'with'});
- $listoverlap= display_net($network,$prefix);
+ ($dblo_network,$dblo_prefix) = parse_netrange($in{'with'});
+ $listoverlap= display_net($dblo_network,$dblo_prefix);
}
sub dblist_cond_overlap {
- my ($v, $m);
- $v= hex($ent->{'network'});
- $m= get_mask($ent->{'prefix'});
- $m &= $dbl_mask;
- return ($v & $m) == ($dbl_value & $m);
+ return net_overlap($dblt_network,$dblt_prefix, $dblo_network,$dblo_prefix);
}
sub foreach_start_db { $db_i=0; }
my ($k, $ent);
$k= $kl[$db_i];
$ent= $db{$k};
+ $dblt_network= $ent->{'network'};
+ $dblt_prefix= $ent->{'prefix'};
$db_picked= $k eq 'picked';
if ($db_picked) {
undef $db_id;
} else {
$db_id= $k;
}
- $db_net= display_net($ent->{'network'}, $ent->{'prefix'});
+ $db_net= display_net($dblt_network,$dblt_prefix);
+ $db_pickoverlap= (exists $db{'picked'} &&
+ net_overlap($dblt_network, $dblt_prefix,
+ $pick_network, $pick_prefix)) ? 1 : 0;
$db_name= html_sani($ent->{'name'});
$db_contact= html_sani($ent->{'contact'});
$db_hiddenemail= $ent->{'hiddenemail'};
return 1;
}
+sub net_overlap ($$$$) {
+ my ($an,$ap, $bn,$bp) = @_;
+ my ($av,$am,$bv,$bm, $tm,$r);
+ ($av,$am) = net_valuemask($an,$ap);
+ ($bv,$bm) = net_valuemask($bn,$bp);
+ $tm= $am & $bm;
+ $r= (($av & $tm) == ($bv & $tm)) ? 1 : 0;
+printf DEBUG "overlap %s/%s %s/%s %d\n", $an,$ap, $bn,$bp, $r;
+ return $r;
+}
+
sub get_mask ($) {
my ($prefix) = @_;
my ($m, $sh);
@@@if:picked@@@
The range picked for you has been <strong>emphasized</strong> below.
+Any existing registrations that overlap with it are also emphasized,
+and marked with an asterisk <strong>*</strong>.
@@@endif:@@@
<p>
@@@ifnot:db_picked@@@
-<tr><td><A href="@@@cgi@@@?id=@@@db_id@@@">@@@db_net@@@</A>
+<tr>
+<td>
+@@@if:db_pickoverlap@@@
+<strong>
+@@@endif:@@@
+<A href="@@@cgi@@@?id=@@@db_id@@@">@@@db_net@@@</A>
+@@@if:db_pickoverlap@@@
+*</strong>
+@@@endif:@@@
<td>@@@db_name@@@
<td>@@@db_contact@@@