ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/AnyEvent-FastPing/bin/net-fping
Revision: 1.4
Committed: Fri May 4 15:44:06 2007 UTC (19 years, 4 months ago) by root
Branch: MAIN
Changes since 1.3: +3 -1 lines
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 root 1.2 use strict;
9    
10 root 1.1 my $ipv6 = eval { require Socket6; 1 };
11    
12     Getopt::Long::Configure ("bundling", "no_ignore_case");
13    
14     my $count = 1;
15     my $rate = 0;
16 root 1.3 my $wait = 0.25;
17 root 1.4 my $quiet = 0;
18 root 1.1
19     GetOptions (
20     "count|c=i" => \$count,
21 root 1.2 "rate|r=n" => \$rate,
22 root 1.1 "wait|w=n" => \$wait,
23 root 1.4 "quiet|q" => \$quiet,
24 root 1.1 ) or exit 1;
25    
26     my @ranges;
27    
28     for (@ARGV) {
29     my ($lo, $hi, $kbps) = split /,/;
30     my $pktsz;
31    
32     $hi = $lo unless $hi;
33    
34     if ($lo =~ /:/) {
35     # ipv6
36     $ipv6 or die "Socket6 module missing, no ipv6 support available.\n";
37 root 1.2 $lo = Socket6::inet_pton (&AF_INET6, $lo);
38     $hi = Socket6::inet_pton (&AF_INET6, $hi);
39     $pktsz = Net::FPing::icmp6_pktsize;
40 root 1.1 } else {
41     $lo = inet_aton $lo;
42     $hi = inet_aton $hi;
43 root 1.2 $pktsz = Net::FPing::icmp4_pktsize;
44 root 1.1 }
45    
46     push @ranges, [$lo, $hi, $kbps && $pktsz / ($kbps * 1000)];
47     }
48    
49     Net::FPing::register_cb {
50 root 1.2 for (@{$_[0]}) {
51     printf "%s %d %g\n",
52 root 1.3 (4 == length $_->[0] ? inet_ntoa $_->[0] : Socket6::inet_ntop (&AF_INET6, $_->[0])),
53 root 1.2 $_->[2],
54     $_->[1];
55     }
56 root 1.4 } unless $quiet;
57 root 1.1
58     for (0 .. $count - 1) {
59     my $done = AnyEvent->condvar;
60     Net::FPing::icmp_ping \@ranges, $rate && 1 / $rate, $_, sub { $done->broadcast };
61     $done->wait;
62     }
63    
64     {
65     my $done = AnyEvent->condvar;
66     my $wait_w = AnyEvent->timer (after => $wait, cb => sub { $done->broadcast });
67     $done->wait;
68     }
69    
70