chiark / gitweb /
Overlap works now.
authorijackson <ijackson>
Wed, 8 Sep 1999 17:13:58 +0000 (17:13 +0000)
committerijackson <ijackson>
Wed, 8 Sep 1999 17:13:58 +0000 (17:13 +0000)
bcp5-registry.pl
listdb.pl
networks.pl
template.html

index b22f3003eebb09469b52f3b7055389893ef7d9d3..ab1e3f5eefe0de7d11d6878ef10c74fa599218b0 100755 (executable)
@@ -381,16 +381,16 @@ sub pick_net () {
 
     $_= $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 "$_ ?";
     }
@@ -398,27 +398,27 @@ sub pick_net () {
     $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');
 }
index 91eee9c48898ccb1ba06043c1d742f297ce24420..de389fe464b57d40af8a588147fa309510bb3081 100644 (file)
--- a/listdb.pl
+++ b/listdb.pl
@@ -28,6 +28,8 @@ print DEBUG "ldb 1 $v @kl\n";
     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;
     }
@@ -52,32 +54,18 @@ sub dblist_prep_all { }
 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; }
@@ -87,13 +75,18 @@ sub foreach_setvars_db {
     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'};
index 7d64551a0cc9deb57d1837920a3fb0b3c46cd828..e1dc49c5c8c6e482519c75e84c549dbbe79ea982 100644 (file)
@@ -52,6 +52,17 @@ sub net_subset ($$$$) {
     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);
index ff8b4adea14ed0c7972510b6d2d0b3fe1b2ab853..293e9cd5c4587ae866692f312f853896e5ce612d 100644 (file)
@@ -501,6 +501,8 @@ Database for entries allocated from @@@listarea@@@
 
 @@@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>
 
@@ -522,7 +524,15 @@ range; this can also be used to modify it.
 
 @@@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@@@