ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-FastPing/bin/net-fping
Revision: 1.5
Committed: Sat May 5 13:12:02 2007 UTC (17 years, 1 month ago) by root
Branch: MAIN
Changes since 1.4: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/opt/bin/perl
2
3 use Socket;
4 use Getopt::Long;
5 use Net::FPing;
6 use AnyEvent;
7
8 use strict;
9
10 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 my $wait = 0.25;
17 my $quiet = 0;
18
19 GetOptions (
20 "count|c=i" => \$count,
21 "rate|r=f" => \$rate,
22 "wait|w=f" => \$wait,
23 "quiet|q" => \$quiet,
24 ) 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 $lo = Socket6::inet_pton (&AF_INET6, $lo);
38 $hi = Socket6::inet_pton (&AF_INET6, $hi);
39 $pktsz = Net::FPing::icmp6_pktsize;
40 } else {
41 $lo = inet_aton $lo;
42 $hi = inet_aton $hi;
43 $pktsz = Net::FPing::icmp4_pktsize;
44 }
45
46 push @ranges, [$lo, $hi, $kbps && $pktsz / ($kbps * 1000)];
47 }
48
49 Net::FPing::register_cb {
50 for (@{$_[0]}) {
51 printf "%s %d %g\n",
52 (4 == length $_->[0] ? inet_ntoa $_->[0] : Socket6::inet_ntop (&AF_INET6, $_->[0])),
53 $_->[2],
54 $_->[1];
55 }
56 } unless $quiet;
57
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