]> git.sesse.net Git - nms/commitdiff
Add a cache to MBD.
authorroot <root@sysrq>
Wed, 4 Apr 2007 11:09:03 +0000 (13:09 +0200)
committerroot <root@sysrq>
Wed, 4 Apr 2007 11:09:03 +0000 (13:09 +0200)
mbd/mbd.pl

index 7fcc8d8100a3a67e6e2f41bd763d797c684e4a06..fe89d49edfcfa0810f0a8c3abc6770698d4bd812 100644 (file)
@@ -16,6 +16,28 @@ sub fhbits {
        return $bits;
 }
 
+my %cidrcache = ();
+sub cache_cidrlookup {
+       my ($addr, $net) = @_;
+       my $key = $addr . " " . $net;
+
+       if (!exists($cidrcache{$key})) {
+               $cidrcache{$key} = Net::CIDR::cidrlookup($addr, $net);
+       }
+       return $cidrcache{$key};
+}
+
+my %rangecache = ();
+sub cache_cidrrange {
+       my ($net) = @_;
+
+       if (!exists($rangecache{$net})) {
+               ($rangecache{$net}) = Net::CIDR::cidr2range($net);
+       }
+
+       return $rangecache{$net};
+}
+
 open LOG, ">>", "mbd.log";
 
 my @ports = mbd::find_all_ports();
@@ -73,9 +95,9 @@ while (1) {
                next unless $pass;
 
                for my $net (@Config::networks) {
-                       next if (Net::CIDR::cidrlookup(inet_ntoa($saddr), $net));
+                       next if (cache_cidrlookup(inet_ntoa($saddr), $net));
 
-                       my ($range) = Net::CIDR::cidr2range($net);
+                       my ($range) = cache_cidrrange($net);
                        $range =~ /-(.*?)$/;
                        my $broadcast = $1;