Changeset 190
- Timestamp:
- 03/08/05 17:40:12 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/cgi-bin/consistency-check.pl
r167 r190 19 19 initIPDBGlobals($dbh); 20 20 21 print " First check: All blocks must be within one of the master blocks\n";21 print "Checking master containment...\n"; 22 22 23 23 # First check - make sure ALL routes and allocated blocks are part 24 24 # of one of the master blocks. 25 print " Checking routed blocks:";25 print " Checking routed blocks:"; 26 26 $sth = $dbh->prepare("select cidr from routed"); 27 # union select cidr from allocations union select cidr from freeblocks");28 $ sth->execute;27 $sth->execute; 28 $flag = ''; 29 29 ROUTED: while (@data = $sth->fetchrow_array) { 30 30 $cidr = new NetAddr::IP $data[0]; … … 32 32 if ($master->contains($cidr)) { next ROUTED; } 33 33 } 34 print " $cidr not mastered\n";35 } 36 print " done.\n";34 print "\n $cidr not mastered"; 35 } 36 print "$flag done.\n"; 37 37 38 38 # Next test: All allocations must be part of a master. 39 print " Checking allocations:";39 print " Checking allocations:"; 40 40 $sth = $dbh->prepare("select cidr from allocations"); 41 41 $sth->execute; 42 $flag = ''; 42 43 ALLOCATED: while (@data = $sth->fetchrow_array) { 43 44 $cidr = new NetAddr::IP $data[0]; … … 45 46 if ($master->contains($cidr)) { next ALLOCATED; } 46 47 } 47 print "$cidr not mastered\n"; 48 } 49 print " done.\n"; 48 print "\n $cidr not mastered"; 49 $flag = "\n "; 50 } 51 print "$flag done.\n"; 50 52 51 53 # Next: free blocks 52 print " Checking freeblocks:";54 print " Checking freeblocks:"; 53 55 $sth = $dbh->prepare("select cidr from freeblocks order by cidr"); 54 56 $sth->execute; 57 $flag = ''; 55 58 FREEBLOCK: while (@data = $sth->fetchrow_array) { 56 59 $cidr = new NetAddr::IP $data[0]; … … 58 61 if ($master->contains($cidr)) { next FREEBLOCK; } 59 62 } 60 print "$cidr not mastered\n"; 61 } 62 print " done.\n"; 63 64 print "Done checking master containment.\n\nChecking pool containment...\n"; 63 print "\n $cidr not mastered"; 64 $flag = "\n "; 65 } 66 print "$flag done.\n"; 67 68 print "Done checking master containment.\n\n"; 69 70 print "Checking pool containment...\n"; 65 71 66 72 $sth = $dbh->prepare("select pool,ip from poolips order by ip"); … … 69 75 $pool = new NetAddr::IP $data[0]; 70 76 $ip = new NetAddr::IP $data[1]; 71 print " IP $ip listed with incorrect pool $pool\n"77 print " IP $ip listed with incorrect pool $pool\n" 72 78 if !$pool->contains($ip); 73 79 } … … 77 83 $sth2 = $dbh->prepare("select cidr from allocations where cidr='$data[0]'"); 78 84 $sth2->execute; 79 print " Pool $data[0] does not exist in allocations table\n"85 print " Pool $data[0] does not exist in allocations table\n" 80 86 if (($sth2->fetchrow_array)[0] eq ''); 81 87 } 82 88 83 print "Done checking pool containment.\n\nChecking block-alignment consistency:\n"; 89 print "Done checking pool containment.\n\n"; 90 91 print "Checking block-alignment consistency...\n"; 84 92 85 93 # Block alignment consistency: All allocated+free blocks within a master … … 97 105 98 106 foreach $master (@masterblocks) { 99 print " Master $master:\n";107 print " Master $master:\n"; 100 108 $prev = $master; 101 109 $sth = $dbh->prepare("(select network(cidr) as net, broadcast(cidr) as bcast ". 102 " from allocations where cidr <<= '$master') union".103 " (select network(cidr) as net, broadcast(cidr) as bcast ".104 "from freeblocks where cidr <<= '$master' ) order by net");110 "from allocations where cidr <<= '$master' and type not like '_c') ". 111 "union (select network(cidr) as net, broadcast(cidr) as bcast ". 112 "from freeblocks where cidr <<= '$master' and not (routed='c')) order by net"); 105 113 $sth->execute; 106 114 … … 111 119 # check if cur starts with master 112 120 if ($cur->numeric > $prev->numeric) { 113 print " Gap from start of master $master to first block $cur\n";121 print " Gap from start of master $master to first block $cur\n"; 114 122 } elsif ($cur->numeric < $prev->numeric) { 115 print " BIG problem! Current block $cur begins before master $master!\n";123 print " BIG problem! Current block $cur begins before master $master!\n"; 116 124 } 117 125 } else { 118 126 if ($cur->numeric < ($prev->numeric + 1)) { 119 print " Block ".$prev->network." overlaps block $cur\n";127 print " Block ".$prev->network." overlaps block $cur\n"; 120 128 } elsif ($cur->numeric > ($prev->numeric + 1)) { 121 print " Gap between end of block ".$prev->network." and block $cur\n";129 print " Gap between end of block ".$prev->network." and block $cur\n"; 122 130 } 123 131 } … … 131 139 $master--; 132 140 if ($cur->numeric ne $master->numeric) { 133 print " Gap from $cur to end of master at $master\n"; 134 } 135 print "done $master.\n"; 136 } 137 138 print "Done checking block alignment.\n\nChecking for correctness on 'defined' CustIDs:\n"; 141 print " Gap from $cur to end of master at $master\n"; 142 } 143 print " done $master.\n"; 144 } 145 146 print "Done checking block alignment.\n\n"; 147 148 print "Checking containment on container blocks...\n"; 149 # First, we need a list of containers. 150 # Then, we check all of the contained blocks to see if they're within 151 # the proper container. 152 $sth = $dbh->prepare("select cidr from allocations where type like '_c' order by cidr"); 153 $sth->execute; 154 $i=0; 155 while (@data = $sth->fetchrow_array) { 156 $containers[$i++] = new NetAddr::IP $data[0]; 157 } 158 print " Checking general containment:"; 159 $sth = $dbh->prepare("select cidr from allocations where type like '_r' order by cidr"); 160 $sth->execute; 161 $flag = ''; 162 CONTAINED: while (@data = $sth->fetchrow_array) { 163 $cidr = new NetAddr::IP $data[0]; 164 foreach $container (@containers) { 165 next CONTAINED if $container->contains($cidr); 166 } 167 print "\n $cidr not contained"; 168 $flag = "\n "; 169 } 170 print "$flag done.\n"; 171 print " Checking alignment:\n"; 172 foreach $container (@containers) { 173 print " Container $container:\n"; 174 $prev = $container; 175 $sth = $dbh->prepare("(select network(cidr) as net, broadcast(cidr) as bcast ". 176 "from allocations where cidr <<= '$container' and type like '_r') ". 177 "union (select network(cidr) as net, broadcast(cidr) as bcast ". 178 "from freeblocks where cidr <<= '$container' and routed='w') order by net"); 179 $sth->execute; 180 181 while (@data = $sth->fetchrow_array) { 182 $cur = new NetAddr::IP $data[0]; 183 184 if ($container->numeric == $prev->numeric) { 185 # check if cur starts with master 186 if ($cur->numeric > $prev->numeric) { 187 print " Gap from start of container $container to first block $cur\n"; 188 } elsif ($cur->numeric < $prev->numeric) { 189 print " BIG problem! Current block $cur begins before container $container!\n"; 190 } 191 } else { 192 if ($cur->numeric < ($prev->numeric + 1)) { 193 print " Block ".$prev->network." overlaps block $cur\n"; 194 } elsif ($cur->numeric > ($prev->numeric + 1)) { 195 print " Gap between end of block ".$prev->network." and block $cur\n"; 196 } 197 } 198 199 $prev = $cur; 200 $prev--; 201 202 } # while (@data...) 203 204 $cur--; 205 $container--; 206 if ($cur->numeric ne $container->numeric) { 207 print " Gap from $cur to end of container at $container\n"; 208 } 209 print " done $container.\n"; 210 211 } 212 print " done container alignment.\n"; 213 print "Done checking container containment.\n\n"; 214 215 print "Checking for correctness on 'defined' CustIDs:\n"; 139 216 # New check: Make sure "defined" CustIDs are correct. 140 217 $sth = $dbh->prepare("select cidr,type,custid from allocations where not type='cn' order by cidr");
Note:
See TracChangeset
for help on using the changeset viewer.