ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-FastPing/bin/net-fping
Revision: 1.1
Committed: Fri May 4 15:16:14 2007 UTC (19 years, 4 months ago) by root
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2    
3     use Socket;
4     use Getopt::Long;
5     use Net::FPing;
6     use AnyEvent;
7    
8     my $ipv6 = eval { require Socket6; 1 };
9    
10     Getopt::Long::Configure ("bundling", "no_ignore_case");
11    
12     my $count = 1;
13     my $rate = 0;
14     my $wait = 1;
15    
16     GetOptions (
17     "count|c=i" => \$count,
18     "rate|p=n" => \$kbps,
19     "wait|w=n" => \$wait,
20     ) or exit 1;
21    
22     my @ranges;
23    
24     for (@ARGV) {
25     my ($lo, $hi, $kbps) = split /,/;
26     my $pktsz;
27    
28     $hi = $lo unless $hi;
29    
30     if ($lo =~ /:/) {
31     # ipv6
32     $ipv6 or die "Socket6 module missing, no ipv6 support available.\n";
33     $lo = inet_pton (AF_INET6, $lo);
34     $hi = inet_pton (AF_INET6, $hi);
35     $pktsz = Net::FPing::icmp6_pkt_size;
36     } else {
37     $lo = inet_aton $lo;
38     $hi = inet_aton $hi;
39     $pktsz = Net::FPing::icmp4_pkt_size;
40     }
41    
42     push @ranges, [$lo, $hi, $kbps && $pktsz / ($kbps * 1000)];
43     }
44    
45     Net::FPing::register_cb {
46     use Data::Dumper;
47     warn Dumper \@_;
48     };
49    
50     for (0 .. $count - 1) {
51     my $done = AnyEvent->condvar;
52     Net::FPing::icmp_ping \@ranges, $rate && 1 / $rate, $_, sub { $done->broadcast };
53     $done->wait;
54     }
55    
56     {
57     my $done = AnyEvent->condvar;
58     my $wait_w = AnyEvent->timer (after => $wait, cb => sub { $done->broadcast });
59     $done->wait;
60     }
61    
62