diff -Nru pf-1.8.3/sbin/pfmon pf-1.8.3-new/sbin/pfmon
--- pf-1.8.3/sbin/pfmon	2009-04-04 04:01:38.000000000 +0800
+++ pf-1.8.3-new/sbin/pfmon	2009-06-20 11:08:27.000000000 +0800
@@ -19,6 +19,8 @@
 use strict;
 use Getopt::Std;
 use Net::Pcap 0.16;
+use Net::RawIP;
+use Net::PcapUtils;
 use File::Basename qw(basename);
 use threads;
 use threads::shared;
@@ -129,7 +131,8 @@
 if ( $Config{'network'}{'mode'} =~ /^arp$/i ) {
     foreach my $dev (@listen_ints) {
         $logger->info("ARP detector on $dev enabled");
-        push @kids, threads->create( \&arp_detector, $dev );
+        push @kids, threads->create( \&arp_detector_new, $dev );
+#        push @kids, threads->create( \&arp_detector, $dev );
     }
 }
 
@@ -158,6 +161,27 @@
 
 exit(0);
 
+sub arp_detector_new {
+	my ($eth) = @_;
+    my $logger = Log::Log4perl::get_logger('pfmon::arp_detector_new');
+    Log::Log4perl::MDC->put( 'tid', threads->self->tid() );
+
+	$logger->error("Starting arp detector for $eth");
+	my ($next_packet, %next_header);
+	my $filter = arp_filter();
+
+	my $pkt_descriptor = Net::PcapUtils::open(
+		FILTER => $filter,
+		PROMISC => 1,
+		DEV   => $eth,
+		#DEV   => 'eth0'
+	);
+	
+	while(($next_packet, %next_header) = Net::PcapUtils::next($pkt_descriptor)) {
+		listen_arp($next_packet) if ($next_packet);
+	}
+}
+
 sub arp_detector {
     my ($eth) = @_;
     my $logger = Log::Log4perl::get_logger('pfmon::arp_detector');
