sub vm_tcp_dump { my $macaddress = $_[0]; my $dns_name = $_[1]; my $good_dns_name = undef;; eval{ local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm 15; my $ping_thread = threads->new(\&vm_ping, $dns_name); print ("CMD: tcpdump -q -i eth0 'ether dst host $macaddress and proto ICMP and src host $hostname' -c 1\n"); my $dumpdata = undef; my $dump_thread = threads->new(sub {my $ipaddress = undef; $dumpdata = `tcpdump -q -i eth0 'ether dst host $macaddress and proto ICMP and src host $hostname' -c 1`; return $dumpdata; }); $dumpdata = $dump_thread->join(); print "\nTEST\n\n"; print "\n".$dumpdata."\n\n"; $good_dns_name = $ping_thread->join(); alarm 0; }; print "tcpdump done\n"; return $good_dns_name; } sub vm_ping { my $dns_name = $_[0]; my $good_dns_name; print("DNS: $dns_name\n"); eval{ local $SIG{ALRM} = sub {die "alarm\n" }; alarm 15; my $data = `ping $dns_name -c 10 -s 256`; if(!($data =~ m/Destination Host Unreachable/g)){ $data =~ m/PING (.*).et.byu.edu/g; $good_dns_name = $1; print($data."\n"); } alarm 0; }; print "\nDONE\n\n"; return $good_dns_name; }