Compare commits
5
Commits
3.10-amiga
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
979bcfd515 | ||
|
|
097c701fe5 | ||
|
|
46852d6394 | ||
|
|
d4bd91c11a | ||
|
|
24fdc7958e |
+1
-28
@@ -1,30 +1,3 @@
|
||||
.*.swp
|
||||
*.tar.gz
|
||||
*~
|
||||
src/*.gcno
|
||||
src/*.gcda
|
||||
src/*.gcov
|
||||
.deps
|
||||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
compile
|
||||
config.guess
|
||||
config.h
|
||||
config.h.in
|
||||
config.log
|
||||
config.status
|
||||
config.sub
|
||||
configure
|
||||
depcomp
|
||||
install-sh
|
||||
missing
|
||||
src/*.o
|
||||
src/fping
|
||||
src/fping6
|
||||
stamp-h1
|
||||
doc/fping.8
|
||||
doc/fping6.8
|
||||
ci/build
|
||||
*.o
|
||||
*.kdev4
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
UNRELEASED
|
||||
* Fix double entries with fping -u and unreachable hosts
|
||||
2015-10-21 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.13
|
||||
* (bugfix) Fix ICMP errors sometimes causing crashes with fping >= 3.11
|
||||
(fixes #85, reported by Jamie Heilman and Bill Blough)
|
||||
|
||||
2015-10-14 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.12
|
||||
* (bugfix) Fix fping6 -R (fixes #84, reported by Stuart Henderson)
|
||||
|
||||
2015-10-12 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.11
|
||||
* (feature) New option -R to use random bytes instead of NULLs (#72, Anthony DeRobertis)
|
||||
* (feature) Small documentation and performance improvements (Ryan Underwood)
|
||||
* (bugfix) Fix double entries with fping -u and unreachable hosts
|
||||
* (internal) Use sockaddr_storage and simplify code, so that we can one day support both IPv4 and IPv6 with the same binary
|
||||
|
||||
2014-05-03 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.10
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
These are generic installation instructions.
|
||||
|
||||
--> See the README file for fping-specific instructions. <--
|
||||
|
||||
The `configure' shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a `Makefile' in each directory of the package.
|
||||
It may also create one or more `.h' files containing system-dependent
|
||||
definitions. Finally, it creates a shell script `config.status' that
|
||||
you can run in the future to recreate the current configuration, a file
|
||||
`config.cache' that saves the results of its tests to speed up
|
||||
reconfiguring, and a file `config.log' containing compiler output
|
||||
(useful mainly for debugging `configure').
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how `configure' could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the `README' so they can
|
||||
be considered for the next release. If at some point `config.cache'
|
||||
contains results you don't want to keep, you may remove or edit it.
|
||||
|
||||
The file `configure.in' is used to create `configure' by a program
|
||||
called `autoconf'. You only need `configure.in' if you want to change
|
||||
it or regenerate `configure' using a newer version of `autoconf'.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. `cd' to the directory containing the package's source code and type
|
||||
`./configure' to configure the package for your system. If you're
|
||||
using `csh' on an old version of System V, you might need to type
|
||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
||||
`configure' itself.
|
||||
|
||||
Running `configure' takes a while. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Optionally, type `make check' to run any self-tests that come with
|
||||
the package.
|
||||
|
||||
4. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
5. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'. To also remove the
|
||||
files that `configure' created (so you can compile the package for
|
||||
a different kind of computer), type `make distclean'. There is
|
||||
also a `make maintainer-clean' target, but that is intended mainly
|
||||
for the package's developers. If you use it, you may have to get
|
||||
all sorts of other programs in order to regenerate files that came
|
||||
with the distribution.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the `configure' script does not know about. You can give `configure'
|
||||
initial values for variables by setting them in the environment. Using
|
||||
a Bourne-compatible shell, you can do that on the command line like
|
||||
this:
|
||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
||||
|
||||
Or on systems that have the `env' program, you can do it like this:
|
||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each architecture in their
|
||||
own directory. To do this, you must use a version of `make' that
|
||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
||||
directory where you want the object files and executables to go and run
|
||||
the `configure' script. `configure' automatically checks for the
|
||||
source code in the directory that `configure' is in and in `..'.
|
||||
|
||||
If you have to use a `make' that does not supports the `VPATH'
|
||||
variable, you have to compile the package for one architecture at a time
|
||||
in the source code directory. After you have installed the package for
|
||||
one architecture, use `make distclean' before reconfiguring for another
|
||||
architecture.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, `make install' will install the package's files in
|
||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
||||
installation prefix other than `/usr/local' by giving `configure' the
|
||||
option `--prefix=PATH'.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
||||
PATH as the prefix for installing programs and libraries.
|
||||
Documentation and other data files will still use the regular prefix.
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving `configure' the
|
||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
Some packages pay attention to `--enable-FEATURE' options to
|
||||
`configure', where FEATURE indicates an optional part of the package.
|
||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
||||
is something like `gnu-as' or `x' (for the X Window System). The
|
||||
`README' should mention any `--enable-' and `--with-' options that the
|
||||
package recognizes.
|
||||
|
||||
For packages that use the X Window System, `configure' can usually
|
||||
find the X include and library files automatically, but if it doesn't,
|
||||
you can use the `configure' options `--x-includes=DIR' and
|
||||
`--x-libraries=DIR' to specify their locations.
|
||||
|
||||
Specifying the System Type
|
||||
==========================
|
||||
|
||||
There may be some features `configure' can not figure out
|
||||
automatically, but needs to determine by the type of host the package
|
||||
will run on. Usually `configure' can figure that out, but if it prints
|
||||
a message saying it can not guess the host type, give it the
|
||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
||||
type, such as `sun4', or a canonical name with three fields:
|
||||
CPU-COMPANY-SYSTEM
|
||||
|
||||
See the file `config.sub' for the possible values of each field. If
|
||||
`config.sub' isn't included in this package, then this package doesn't
|
||||
need to know the host type.
|
||||
|
||||
If you are building compiler tools for cross-compiling, you can also
|
||||
use the `--target=TYPE' option to select the type of system they will
|
||||
produce code for and the `--build=TYPE' option to select the type of
|
||||
system on which you are compiling the package.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for `configure' scripts to share,
|
||||
you can create a site shell script called `config.site' that gives
|
||||
default values for variables like `CC', `cache_file', and `prefix'.
|
||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||
`CONFIG_SITE' environment variable to the location of the site script.
|
||||
A warning: not all `configure' scripts look for a site script.
|
||||
|
||||
Operation Controls
|
||||
==================
|
||||
|
||||
`configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
`--cache-file=FILE'
|
||||
Use and save the results of the tests in FILE instead of
|
||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
||||
debugging `configure'.
|
||||
|
||||
`--help'
|
||||
Print a summary of the options to `configure', and exit.
|
||||
|
||||
`--quiet'
|
||||
`--silent'
|
||||
`-q'
|
||||
Do not print messages saying which checks are being made.
|
||||
|
||||
`--srcdir=DIR'
|
||||
Look for the package's source code in directory DIR. Usually
|
||||
`configure' can determine that directory automatically.
|
||||
|
||||
`--version'
|
||||
Print the version of Autoconf used to generate the `configure'
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
||||
Regular → Executable
+2
@@ -15,3 +15,5 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
Detailed license info can be found in supplied source files.
|
||||
@@ -1 +0,0 @@
|
||||
SUBDIRS = doc src
|
||||
@@ -0,0 +1,21 @@
|
||||
# fping 3
|
||||
|
||||
fping is a program to send ICMP echo probes to network hosts, similar to ping,
|
||||
but much better performing when pinging multiple hosts. fping has a long long
|
||||
story: Roland Schemers did publish a first version of it in 1992 and it has
|
||||
established itself since then as a standard tool.
|
||||
|
||||
_Current maintainer_:
|
||||
David Schweikert \<david@schweikert.ch\>
|
||||
|
||||
_Website_:
|
||||
http://fping.org/
|
||||
|
||||
_Mailing-list_:
|
||||
https://groups.google.com/group/fping-users
|
||||
|
||||
## Credits
|
||||
Original author: Roland Schemers (schemers@stanford.edu)
|
||||
Previous maintainer: RL "Bob" Morgan (morgan@stanford.edu)
|
||||
Initial IPv6 Support: Jeroen Massar (jeroen@unfix.org / jeroen@ipng.nl)
|
||||
Other contributors: see ChangeLog
|
||||
@@ -1,24 +0,0 @@
|
||||
#!/bin/sh
|
||||
[ -f Makefile ] && make clean
|
||||
rm -f Makefile
|
||||
rm -f Makefile.in
|
||||
rm -f aclocal.m4
|
||||
rm -rf autom4te.cache
|
||||
rm -f config.guess
|
||||
rm -f config.h
|
||||
rm -f config.h.in
|
||||
rm -f config.log
|
||||
rm -f config.status
|
||||
rm -f config.sub
|
||||
rm -f configure
|
||||
rm -f depcomp
|
||||
rm -f install-sh
|
||||
rm -f missing
|
||||
rm -f mkinstalldirs
|
||||
rm -f stamp-h1
|
||||
rm -f doc/Makefile.in
|
||||
rm -f src/Makefile.in
|
||||
rm -f doc/fping.8
|
||||
rm -f src/*.gcda
|
||||
rm -f src/*.gcno
|
||||
rm -f src/*.gcov
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/bin/sh
|
||||
autoreconf -i
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
sudo setcap cap_net_raw+ep src/fping
|
||||
sudo setcap cap_net_raw+ep src/fping6
|
||||
|
||||
if [[ ! $PATH =~ fping/src ]]; then
|
||||
echo "# WARNING: must set PATH:"
|
||||
echo PATH=/home/dws/checkouts/fping/src:\$PATH
|
||||
fi
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# only do this on Mac OS X
|
||||
if [ `uname -s` != "Darwin" ]; then
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if [[ ! `ifconfig lo0` =~ 127\.0\.0\.2 ]]; then
|
||||
sudo ifconfig lo0 127.0.0.2/8 alias
|
||||
sudo ifconfig lo0 127.0.0.3/8 alias
|
||||
sudo ifconfig lo0 127.0.0.4/8 alias
|
||||
sudo ifconfig lo0 127.0.0.5/8 alias
|
||||
fi
|
||||
|
||||
if [[ ! $PATH =~ /Users/dws/checkouts/fping/src ]]; then
|
||||
echo "# WARNING: must set PATH:"
|
||||
echo PATH=/Users/dws/checkouts/fping/src:\$PATH
|
||||
fi
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 9;
|
||||
|
||||
# ping 127.0.0.1
|
||||
my $cmd1 = Test::Command->new(cmd => "fping 127.0.0.1");
|
||||
$cmd1->exit_is_num(0);
|
||||
$cmd1->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd1->stderr_is_eq("");
|
||||
|
||||
# ping ::1
|
||||
my $cmd2 = Test::Command->new(cmd => "fping6 ::1");
|
||||
$cmd2->exit_is_num(0);
|
||||
$cmd2->stdout_is_eq("::1 is alive\n");
|
||||
$cmd2->stderr_is_eq("");
|
||||
|
||||
# ping 3 times 127.0.0.1
|
||||
my $cmd3 = Test::Command->new(cmd => "fping -p 100 -C3 127.0.0.1");
|
||||
$cmd3->exit_is_num(0);
|
||||
$cmd3->stdout_like(qr{127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[1\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[2\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
});
|
||||
$cmd3->stderr_like(qr{127\.0\.0\.1 : 0\.\d+ 0\.\d+ 0\.\d+\n});
|
||||
Executable
+65
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 9;
|
||||
|
||||
my $I_HELP = " -I if bind to a particular interface\n";
|
||||
$I_HELP = '' if $^O eq 'darwin';
|
||||
|
||||
# fping -h
|
||||
my $cmd1 = Test::Command->new(cmd => "fping -h");
|
||||
$cmd1->exit_is_num(0);
|
||||
$cmd1->stdout_is_eq(<<END);
|
||||
|
||||
Usage: fping [options] [targets...]
|
||||
-a show targets that are alive
|
||||
-A show targets by address
|
||||
-b n amount of ping data to send, in bytes (default 56)
|
||||
-B f set exponential backoff factor to f
|
||||
-c n count of pings to send to each target (default 1)
|
||||
-C n same as -c, report results in verbose format
|
||||
-D print timestamp before each output line
|
||||
-e show elapsed time on return packets
|
||||
-f file read list of targets from a file ( - means stdin) (only if no -g specified)
|
||||
-g generate target list (only if no -f specified)
|
||||
(specify the start and end IP in the target list, or supply a IP netmask)
|
||||
(ex. fping -g 192.168.1.0 192.168.1.255 or fping -g 192.168.1.0/24)
|
||||
-H n Set the IP TTL value (Time To Live hops)
|
||||
-i n interval between sending ping packets (in millisec) (default 25)
|
||||
${I_HELP} -l loop sending pings forever
|
||||
-m ping multiple interfaces on target host
|
||||
-n show targets by name (-d is equivalent)
|
||||
-O n set the type of service (tos) flag on the ICMP packets
|
||||
-p n interval between ping packets to one target (in millisec)
|
||||
(in looping and counting modes, default 1000)
|
||||
-q quiet (don't show per-target/per-ping results)
|
||||
-Q n same as -q, but show summary every n seconds
|
||||
-r n number of retries (default 3)
|
||||
-R random packet data (to foil link data compression)
|
||||
-s print final stats
|
||||
-S addr set source address
|
||||
-t n individual target initial timeout (in millisec) (default 500)
|
||||
-T n ignored (for compatibility with fping 2.4)
|
||||
-u show targets that are unreachable
|
||||
-v show version
|
||||
targets list of targets to check (if no -f specified)
|
||||
|
||||
END
|
||||
$cmd1->stderr_is_eq("");
|
||||
|
||||
# fping -v
|
||||
my $cmd2 = Test::Command->new(cmd => "fping -v");
|
||||
$cmd2->exit_is_num(0);
|
||||
$cmd2->stdout_like(qr{fping: Version \S+
|
||||
fping: comments to david\@schweikert\.ch\n});
|
||||
$cmd2->stderr_is_eq("");
|
||||
|
||||
# fping with unknown option
|
||||
my $cmd3 = Test::Command->new(cmd => "fping -Z");
|
||||
$cmd3->exit_is_num(1);
|
||||
$cmd3->stdout_is_eq("");
|
||||
if($^O eq 'darwin') {
|
||||
$cmd3->stderr_is_eq("fping: illegal option -- Z\nsee 'fping -h' for usage information\n");
|
||||
}
|
||||
else {
|
||||
$cmd3->stderr_is_eq("fping: invalid option -- 'Z'\nsee 'fping -h' for usage information\n");
|
||||
}
|
||||
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 33;
|
||||
|
||||
# fping -i 9
|
||||
my $cmd1 = Test::Command->new(cmd => "fping -i 9 -T10 -g 127.0.0.1/29");
|
||||
$cmd1->exit_is_num(1);
|
||||
$cmd1->stdout_is_eq("");
|
||||
$cmd1->stderr_is_eq(<<END);
|
||||
fping: these options are too risky for mere mortals.
|
||||
fping: You need i >= 10, p >= 20, r < 20, and t >= 50
|
||||
END
|
||||
|
||||
# fping -p 15
|
||||
my $cmd2 = Test::Command->new(cmd => "fping -c3 -p 15 127.0.0.1");
|
||||
$cmd2->exit_is_num(1);
|
||||
$cmd2->stdout_is_eq("");
|
||||
$cmd2->stderr_is_eq(<<END);
|
||||
fping: these options are too risky for mere mortals.
|
||||
fping: You need i >= 10, p >= 20, r < 20, and t >= 50
|
||||
END
|
||||
|
||||
# fping -r 30
|
||||
my $cmd3 = Test::Command->new(cmd => "fping -r 30 127.0.0.1");
|
||||
$cmd3->exit_is_num(1);
|
||||
$cmd3->stdout_is_eq("");
|
||||
$cmd3->stderr_is_eq(<<END);
|
||||
fping: these options are too risky for mere mortals.
|
||||
fping: You need i >= 10, p >= 20, r < 20, and t >= 50
|
||||
END
|
||||
|
||||
# fping -t 40
|
||||
my $cmd4 = Test::Command->new(cmd => "fping -t 40 127.0.0.1");
|
||||
$cmd4->exit_is_num(1);
|
||||
$cmd4->stdout_is_eq("");
|
||||
$cmd4->stderr_is_eq(<<END);
|
||||
fping: these options are too risky for mere mortals.
|
||||
fping: You need i >= 10, p >= 20, r < 20, and t >= 50
|
||||
END
|
||||
|
||||
# fping -H 300
|
||||
my $cmd5 = Test::Command->new(cmd => "fping -H 300 127.0.0.1");
|
||||
$cmd5->exit_is_num(1);
|
||||
$cmd5->stdout_is_eq("");
|
||||
$cmd5->stderr_is_eq("ttl 300 out of range\n");
|
||||
|
||||
# fping -a -u
|
||||
my $cmd6 = Test::Command->new(cmd => "fping -a -u 127.0.0.1");
|
||||
$cmd6->exit_is_num(1);
|
||||
$cmd6->stdout_is_eq("");
|
||||
$cmd6->stderr_is_eq("fping: specify only one of a, u\n");
|
||||
|
||||
# fping -c -l
|
||||
my $cmd7 = Test::Command->new(cmd => "fping -c3 -l 127.0.0.1");
|
||||
$cmd7->exit_is_num(1);
|
||||
$cmd7->stdout_is_eq("");
|
||||
$cmd7->stderr_is_eq("fping: specify only one of c, l\n");
|
||||
|
||||
# fping -b 65509
|
||||
my $cmd8 = Test::Command->new(cmd => "fping -b 65509 127.0.0.1");
|
||||
$cmd8->exit_is_num(1);
|
||||
$cmd8->stdout_is_eq("");
|
||||
$cmd8->stderr_is_eq("fping: data size 65509 not valid, must be between 0 and 65508\n");
|
||||
|
||||
# fping -B 0.9
|
||||
my $cmd9 = Test::Command->new(cmd => "fping -B 0.9 127.0.0.1");
|
||||
$cmd9->exit_is_num(1);
|
||||
$cmd9->stdout_is_eq("");
|
||||
$cmd9->stderr_is_eq("fping: backoff factor 0.9 not valid, must be between 1.0 and 5.0\n");
|
||||
|
||||
# fping -B 0.9
|
||||
my $cmd10 = Test::Command->new(cmd => "fping -B 5.1 127.0.0.1");
|
||||
$cmd10->exit_is_num(1);
|
||||
$cmd10->stdout_is_eq("");
|
||||
$cmd10->stderr_is_eq("fping: backoff factor 5.1 not valid, must be between 1.0 and 5.0\n");
|
||||
|
||||
# fping -C 11000
|
||||
my $cmd11 = Test::Command->new(cmd => "fping -C 11000 127.0.0.1");
|
||||
$cmd11->exit_is_num(1);
|
||||
$cmd11->stdout_is_eq("");
|
||||
$cmd11->stderr_is_eq("fping: count 11000 not valid, must be less than 10000\n");
|
||||
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 14;
|
||||
use Test::More;
|
||||
use Time::HiRes qw(gettimeofday tv_interval);
|
||||
|
||||
# -a show targets that are alive
|
||||
# -A show targets by address
|
||||
# -b n amount of ping data to send, in bytes (default 56)
|
||||
# -B f set exponential backoff factor to f
|
||||
|
||||
# fping -a
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -a 127.0.0.1 127.0.0.2");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1\n127.0.0.2\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -A
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -A localhost");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -b
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -b 1000 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -B
|
||||
{
|
||||
my $t0 = [gettimeofday];
|
||||
my $cmd = Test::Command->new(cmd => "fping -t 100 -r 3 -B 2 8.8.8.7");
|
||||
$cmd->exit_is_num(1);
|
||||
$cmd->stdout_is_eq("8.8.8.7 is unreachable\n");
|
||||
$cmd->stderr_like(qr{^(|(8.8.8.7: error while sending ping: No route to host\n)+)$});
|
||||
my $elapsed = tv_interval($t0);
|
||||
# 0.1 + 0.2 + 0.4 + 0.8 = 1.5
|
||||
cmp_ok($elapsed, '>=', 1.5);
|
||||
cmp_ok($elapsed, '<', 1.8);
|
||||
}
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 12;
|
||||
|
||||
# -c n count of pings to send to each target (default 1)
|
||||
# -C n same as -c, report results in verbose format
|
||||
# -D print timestamp before each output line
|
||||
# -e show elapsed time on return packets
|
||||
|
||||
# fping -c n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -c 2 -p 100 localhost 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_like(qr{localhost : \[0\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
localhost : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
});
|
||||
|
||||
$cmd->stderr_like(qr{localhost : xmt/rcv/%loss = 2/2/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
127\.0\.0\.1 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
});
|
||||
}
|
||||
|
||||
# fping -C n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -C 2 -p 100 localhost 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_like(qr{localhost : \[0\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
localhost : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
});
|
||||
|
||||
$cmd->stderr_like(qr{localhost : 0\.\d+ 0\.\d+
|
||||
127\.0\.0\.1 : 0\.\d+ 0\.\d+
|
||||
});
|
||||
}
|
||||
|
||||
# fping -D
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -D -c 2 -p 100 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_like(qr{\[\d{10}\.\d+\] 127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
\[\d{10}\.\d+\] 127\.0\.0\.1 : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
});
|
||||
|
||||
$cmd->stderr_like(qr{127\.0\.0\.1 : xmt/rcv/%loss = 2/2/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
});
|
||||
}
|
||||
|
||||
# fping -e
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -e 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_like(qr{127\.0\.0\.1 is alive \(0\.\d+ ms\)
|
||||
});
|
||||
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 18;
|
||||
use File::Temp;
|
||||
|
||||
# -f file read list of targets from a file ( - means stdin) (only if no -g specified)
|
||||
# -g generate target list (only if no -f specified)
|
||||
# (specify the start and end IP in the target list, or supply a IP netmask)
|
||||
# (ex. ../src/fping -g 192.168.1.0 192.168.1.255 or ../src/fping -g 192.168.1.0/24)
|
||||
# -H n Set the IP TTL value (Time To Live hops)
|
||||
|
||||
my $tmpfile = File::Temp->new();
|
||||
print $tmpfile "127.0.0.1\n127.0.0.2\n";
|
||||
close($tmpfile);
|
||||
|
||||
# fping without option (-> equivalent to 'fping -f -')
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "cat ".$tmpfile->filename." | fping");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -f -
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "cat ".$tmpfile->filename." | fping -f -");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -f file
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -f ".$tmpfile->filename);
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -g (range)
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -g 127.0.0.1 127.0.0.5");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n127.0.0.3 is alive\n127.0.0.4 is alive\n127.0.0.5 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -g (cidr)
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -g 127.0.0.1/30");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -H
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -H 1 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 4;
|
||||
|
||||
# -i n interval between sending ping packets (in millisec) (default 25)
|
||||
# -l loop sending pings forever
|
||||
# -m ping multiple interfaces on target host
|
||||
|
||||
# fping -i n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -i 100 127.0.0.1 127.0.0.2");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n127.0.0.2 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -l
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => '(sleep 2; pkill fping)& fping -p 900 -l 127.0.0.1');
|
||||
$cmd->stdout_like(qr{127\.0\.0\.1 : \[0\], 84 bytes, 0\.\d+ ms \(0.\d+ avg, 0% loss\)
|
||||
127\.0\.0\.1 : \[1\], 84 bytes, 0\.\d+ ms \(0\.\d+ avg, 0% loss\)
|
||||
});
|
||||
}
|
||||
|
||||
# fping -m -> test-14-internet-hosts
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 9;
|
||||
|
||||
# -n show targets by name (-d is equivalent)
|
||||
# -O n set the type of service (tos) flag on the ICMP packets
|
||||
# -p n interval between ping packets to one target (in millisec)
|
||||
# (in looping and counting modes, default 1000)
|
||||
# -q quiet (don't show per-target/per-ping results)
|
||||
# -Q n same as -q, but show summary every n seconds
|
||||
|
||||
# fping -n -> test-14-internet-hosts
|
||||
|
||||
# fping -O
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -O 2 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -q
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -q -p 100 -c 3 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_like(qr{127\.0\.0\.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
});
|
||||
}
|
||||
|
||||
# fping -Q
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -Q 1 -p 400 -c 4 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_like(qr{\[\d+:\d+:\d+\]
|
||||
127\.0\.0\.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
127\.0\.0\.1 : xmt/rcv/%loss = 4/4/0%, min/avg/max = 0\.\d+/0\.\d+/0\.\d+
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 18;
|
||||
|
||||
# -R random bytes
|
||||
# -r n number of retries (default 3)
|
||||
# -s print final stats
|
||||
# -S addr set source address
|
||||
# -t n individual target initial timeout (in millisec) (default 500)
|
||||
# -T n ignored (for compatibility with fping 2.4)
|
||||
|
||||
# fping -R
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -q -R -c3 -p100 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_like(qr{127\.0\.0\.1 : xmt/rcv/%loss = 3/3/0%.*});
|
||||
}
|
||||
|
||||
# fping6 -R
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping6 -q -R -c3 -p100 ::1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_like(qr{::1 : xmt/rcv/%loss = 3/3/0%.*});
|
||||
}
|
||||
|
||||
# fping -r tested in test-4-options-a-b.pl
|
||||
|
||||
# fping -s
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -s 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_like(qr{\s*
|
||||
\s*1 targets
|
||||
\s*1 alive
|
||||
\s*0 unreachable
|
||||
\s*0 unknown addresses
|
||||
\s*
|
||||
\s*0 timeouts \(waiting for response\)
|
||||
\s*1 ICMP Echos sent
|
||||
\s*1 ICMP Echo Replies received
|
||||
\s*0 other ICMP received
|
||||
|
||||
\s*0.\d+ ms \(min round trip time\)
|
||||
\s*0.\d+ ms \(avg round trip time\)
|
||||
\s*0.\d+ ms \(max round trip time\)
|
||||
\s*0.\d+ sec \(elapsed real time\)
|
||||
});
|
||||
}
|
||||
|
||||
# fping -s (no host reachable)
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -r0 -t100 -s 8.8.0.0");
|
||||
$cmd->exit_is_num(1);
|
||||
$cmd->stdout_is_eq("8.8.0.0 is unreachable\n");
|
||||
$cmd->stderr_like(qr{\s*
|
||||
\s*1 targets
|
||||
\s*0 alive
|
||||
\s*1 unreachable
|
||||
\s*0 unknown addresses
|
||||
\s*
|
||||
\s*1 timeouts \(waiting for response\)
|
||||
\s*1 ICMP Echos sent
|
||||
\s*0 ICMP Echo Replies received
|
||||
\s*0 other ICMP received
|
||||
|
||||
\s*0.\d+ ms \(min round trip time\)
|
||||
\s*0.\d+ ms \(avg round trip time\)
|
||||
\s*0.\d+ ms \(max round trip time\)
|
||||
\s*0.\d+ sec \(elapsed real time\)
|
||||
});
|
||||
}
|
||||
|
||||
# fping -S
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -S 127.0.0.1 127.0.0.1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("127.0.0.1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping6 -S
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping6 -S ::1 ::1");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("::1 is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -t tested in test-4-options-a-b.pl
|
||||
@@ -1,6 +1,13 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 6;
|
||||
use Test::Command;
|
||||
use Test::More;
|
||||
|
||||
if( $^O eq 'darwin' ) {
|
||||
plan skip_all => 'Test irrelevant on MacOS';
|
||||
exit 0;
|
||||
}
|
||||
plan tests => 6;
|
||||
|
||||
# run without privileges
|
||||
my $fping_bin = `which fping`; chomp $fping_bin;
|
||||
|
||||
@@ -7,7 +7,7 @@ use Test::Command tests => 6;
|
||||
my $cmd = Test::Command->new(cmd => "fping nosuchname.example.com");
|
||||
$cmd->exit_is_num(1);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_is_eq("nosuchname.example.com address not found\n");
|
||||
$cmd->stderr_like(qr{^nosuchname\.example\.com: .*not (known|found)});
|
||||
}
|
||||
|
||||
# fping6
|
||||
@@ -15,5 +15,5 @@ $cmd->stderr_is_eq("nosuchname.example.com address not found\n");
|
||||
my $cmd = Test::Command->new(cmd => "fping6 nosuchname.example.com");
|
||||
$cmd->exit_is_num(1);
|
||||
$cmd->stdout_is_eq("");
|
||||
$cmd->stderr_is_eq("nosuchname.example.com: Name or service not known\n");
|
||||
$cmd->stderr_like(qr{^nosuchname\.example\.com: .*not (known|found)});
|
||||
}
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
use Test::Command tests => 3;
|
||||
use Test::Command;
|
||||
use Test::More;
|
||||
|
||||
# evaluate if we have internet
|
||||
if(!gethostbyname("www.google.com")) {
|
||||
plan skip_all => 'Can\'t resolve www.google.com -> no internet?';
|
||||
exit 0;
|
||||
}
|
||||
|
||||
plan tests => 18;
|
||||
|
||||
my $re_num = qr{\d+(?:\.\d+)?};
|
||||
|
||||
@@ -15,3 +24,43 @@ www\.france-telecom\.fr\s*: xmt/rcv/%loss = [123]/3/\d+%, min/avg/max = $re_num/
|
||||
www\.google\.com\s*: xmt/rcv/%loss = [123]/3/\d+%, min/avg/max = $re_num/$re_num/$re_num
|
||||
});
|
||||
}
|
||||
|
||||
# fping -A -n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -A -n 8.8.8.8");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("google-public-dns-a.google.com (8.8.8.8) is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -A -n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -A -n google-public-dns-a.google.com");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("google-public-dns-a.google.com (8.8.8.8) is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping6 -A -n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping6 -n -A 2001:4860:4860::8888");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("google-public-dns-a.google.com (2001:4860:4860::8888) is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -m
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -m google-public-dns-a.google.com");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("google-public-dns-a.google.com is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
# fping -n
|
||||
{
|
||||
my $cmd = Test::Command->new(cmd => "fping -n 8.8.8.8");
|
||||
$cmd->exit_is_num(0);
|
||||
$cmd->stdout_is_eq("google-public-dns-a.google.com is alive\n");
|
||||
$cmd->stderr_is_eq("");
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
dnl Minimum Autoconf version required.
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
AC_INIT([fping],[3.10])
|
||||
|
||||
dnl make ipv4 and ipv6 options
|
||||
AC_ARG_ENABLE([ipv4],
|
||||
[ --enable-ipv4 Build IPv4 capable fping],
|
||||
[case "${enableval}" in
|
||||
yes) ipv4=true ;;
|
||||
no) ipv4=false ;;
|
||||
*) AC_MSG_ERROR([bad value ${enableval} for --enable-ipv4]) ;;
|
||||
esac],[ipv4=true])
|
||||
AM_CONDITIONAL([IPV4], [test x$ipv4 = xtrue])
|
||||
|
||||
AC_ARG_ENABLE([ipv6],
|
||||
[ --enable-ipv6 Build IPv6 capable fping6],
|
||||
[case "${enableval}" in
|
||||
yes) ipv6=true ;;
|
||||
no) ipv6=false ;;
|
||||
*) AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6]) ;;
|
||||
esac],[ipv6=false])
|
||||
AM_CONDITIONAL([IPV6], [test x$ipv6 = xtrue])
|
||||
|
||||
if test x$ipv4 = xfalse && test x$ipv6 = xfalse; then
|
||||
AC_MSG_ERROR([You must enable at least one of IPv4 and IPv6.])
|
||||
fi
|
||||
|
||||
AC_CANONICAL_TARGET
|
||||
AM_INIT_AUTOMAKE([foreign])
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
dnl Checks for programs.
|
||||
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AC_PROG_INSTALL
|
||||
|
||||
dnl Checks for libraries.
|
||||
|
||||
AC_CHECK_FUNC(gethostbyname)
|
||||
if test $ac_cv_func_gethostbyname = no; then
|
||||
AC_CHECK_LIB(nsl, gethostbyname)
|
||||
fi
|
||||
AC_CHECK_FUNC(connect)
|
||||
if test $ac_cv_func_connect = no; then
|
||||
AC_CHECK_LIB(socket, connect)
|
||||
fi
|
||||
|
||||
AH_TOP([
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
])
|
||||
|
||||
AH_BOTTOM([
|
||||
/* some OSes do not define this ... lets take a wild guess */
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
# define INADDR_NONE 0xffffffffU
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_H */
|
||||
|
||||
])
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_CHECK_HEADERS(unistd.h sys/file.h stdlib.h sys/select.h)
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
doc/Makefile
|
||||
src/Makefile])
|
||||
|
||||
AC_OUTPUT
|
||||
+189
@@ -0,0 +1,189 @@
|
||||
FPING(8) FPING(8)
|
||||
|
||||
[1mNAME[0m
|
||||
fping - send ICMP ECHO_REQUEST packets to network hosts
|
||||
|
||||
[1mSYNOPSIS[0m
|
||||
[1mfping [22m[ [4moptions[24m ] [ [4msystems...[24m ] [1mfping6 [22m[ [4moptions[24m ] [ [4msystems...[24m ]
|
||||
|
||||
[1mDESCRIPTION[0m
|
||||
[1mfping [22mis a program like [1mping [22mwhich uses the Internet Control Message
|
||||
Protocol (ICMP) echo request to determine if a target host is
|
||||
responding. [1mfping [22mdiffers from [1mping [22min that you can specify any number
|
||||
of targets on the command line, or specify a file containing the lists
|
||||
of targets to ping. Instead of sending to one target until it times
|
||||
out or replies, [1mfping [22mwill send out a ping packet and move on to the
|
||||
next target in a round-robin fashion. In the default mode, if a target
|
||||
replies, it is noted and removed from the list of targets to check; if
|
||||
a target does not respond within a certain time limit and/or retry
|
||||
limit it is designated as unreachable. [1mfping [22malso supports sending a
|
||||
specified number of pings to a target, or looping indefinitely (as in
|
||||
[1mping [22m). Unlike [1mping[22m, [1mfping [22mis meant to be used in scripts, so its
|
||||
output is designed to be easy to parse.
|
||||
|
||||
The binary named [1mfping6 [22mis the same as [1mfping[22m, except that it uses IPv6
|
||||
addresses instead of IPv4.
|
||||
|
||||
[1mOPTIONS[0m
|
||||
[1m-a [22mShow systems that are alive.
|
||||
|
||||
[1m-A [22mDisplay targets by address rather than DNS name. Combined with -d,
|
||||
the output will be both the ip and (if available) the hostname.
|
||||
|
||||
[1m-b [4m[22mn[24m Number of bytes of ping data to send. The minimum size (normally
|
||||
12) allows room for the data that [1mfping [22mneeds to do its work
|
||||
(sequence number, timestamp). The reported received data size
|
||||
includes the IP header (normally 20 bytes) and ICMP header (8
|
||||
bytes), so the minimum total size is 40 bytes. Default is 56, as
|
||||
in [1mping[22m. Maximum is the theoretical maximum IP datagram size
|
||||
(64K), though most systems limit this to a smaller, system-
|
||||
dependent number.
|
||||
|
||||
[1m-B [4m[22mn[24m Backoff factor. In the default mode, [1mfping [22msends several requests
|
||||
to a target before giving up, waiting longer for a reply on each
|
||||
successive request. This parameter is the value by which the wait
|
||||
time ([1m-t[22m) is multiplied on each successive request; it must be
|
||||
entered as a floating-point number (x.y). The default is 1.5.
|
||||
|
||||
[1m-c [4m[22mn[24m Number of request packets to send to each target. In this mode, a
|
||||
line is displayed for each received response (this can suppressed
|
||||
with [1m-q [22mor [1m-Q[22m). Also, statistics about responses for each target
|
||||
are displayed when all requests have been sent (or when
|
||||
interrupted).
|
||||
|
||||
[1m-C [4m[22mn[24m Similar to [1m-c[22m, but the per-target statistics are displayed in a
|
||||
format designed for automated response-time statistics gathering.
|
||||
For example:
|
||||
|
||||
% fping -C 5 -q somehost
|
||||
somehost : 91.7 37.0 29.2 - 36.8
|
||||
|
||||
shows the response time in milliseconds for each of the five
|
||||
requests, with the "-" indicating that no response was received to
|
||||
the fourth request.
|
||||
|
||||
[1m-d [22mUse DNS to lookup address of return ping packet. This allows you
|
||||
to give fping a list of IP addresses as input and print hostnames
|
||||
in the output.
|
||||
|
||||
[1m-D [22mAdd Unix timestamps in front of output lines generated with in
|
||||
looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m).
|
||||
|
||||
[1m-e [22mShow elapsed (round-trip) time of packets.
|
||||
|
||||
[1m-f [22mRead list of targets from a file. This option can only be used by
|
||||
the root user. Regular users should pipe in the file via stdin:
|
||||
|
||||
% fping < targets_file
|
||||
|
||||
[1m-g [4m[22maddr/mask[0m
|
||||
Generate a target list from a supplied IP netmask, or a starting
|
||||
and ending IP. Specify the netmask or start/end in the targets
|
||||
portion of the command line. If a network with netmask is given,
|
||||
the network and broadcast addresses will be excluded. ex. To ping
|
||||
the network 192.168.1.0/24, the specified command line could look
|
||||
like either:
|
||||
|
||||
fping -g 192.168.1.0/24
|
||||
|
||||
or
|
||||
|
||||
fping -g 192.168.1.1 192.168.1.254
|
||||
|
||||
[1m-h [22mPrint usage message.
|
||||
|
||||
[1m-i [4m[22mn[24m The minimum amount of time (in milliseconds) between sending a
|
||||
ping packet to any target (default is 25).
|
||||
|
||||
[1m-l [22mLoop sending packets to each target indefinitely. Can be
|
||||
interrupted with Ctrl-C; statistics about responses for each
|
||||
target are then displayed.
|
||||
|
||||
[1m-m [22mSend pings to each of a target host's multiple interfaces.
|
||||
|
||||
[1m-n [22mSame as -d.
|
||||
|
||||
[1m-p [22m<n>
|
||||
In looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m), this parameter sets
|
||||
the time in milliseconds that [1mfping [22mwaits between successive
|
||||
packets to an individual target. Default is 1000.
|
||||
|
||||
[1m-q [22mQuiet. Don't show per-probe results, but only the final summary.
|
||||
Also don't show ICMP error messages.
|
||||
|
||||
[1m-Q [4m[22mn[24m Like [1m-q[22m, but show summary results every n seconds.
|
||||
|
||||
[1m-r [4m[22mn[24m Retry limit (default 3). This is the number of times an attempt at
|
||||
pinging a target will be made, not including the first try.
|
||||
|
||||
[1m-R [22mInstead of using all-zeros as the packet data, generate random
|
||||
bytes. Use to defeat, e.g., link data compression.
|
||||
|
||||
[1m-s [22mPrint cumulative statistics upon exit.
|
||||
|
||||
[1m-S [4m[22maddr[0m
|
||||
Set source address.
|
||||
|
||||
[1m-I [4m[22mif[0m
|
||||
Set the interface (requires SO_BINDTODEVICE support)
|
||||
|
||||
[1m-t [4m[22mn[24m Initial target timeout in milliseconds (default 500). In the
|
||||
default mode, this is the amount of time that [1mfping [22mwaits for a
|
||||
response to its first request. Successive timeouts are multiplied
|
||||
by the backoff factor specified with [1m-B[22m. Note that this option
|
||||
has no effect looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m).
|
||||
|
||||
[1m-T [4m[22mn[24m Ignored (for compatibility with fping 2.4).
|
||||
|
||||
[1m-u [22mShow targets that are unreachable.
|
||||
|
||||
[1m-O [4m[22mn[24m Set the typ of service flag (TOS). [4mn[24m can be either decimal or
|
||||
hexadecimal (0xh) format.
|
||||
|
||||
[1m-v [22mPrint [1mfping [22mversion information.
|
||||
|
||||
[1m-H [4m[22mn[24m Set the IP TTL field (time to live hops).
|
||||
|
||||
[1mEXAMPLES[0m
|
||||
Generate ~1000 pings per second to a host until canceled, printing
|
||||
statistics on the fly at one second intervals, and printing statistics
|
||||
at the end:
|
||||
|
||||
# fping -s -l -i 1 -p 1 -T 1 -Q 1 127.0.0.1
|
||||
|
||||
Note that ping intervals less than 10ms can only be used as root.
|
||||
|
||||
[1mAUTHORS[0m
|
||||
· Roland J. Schemers III, Stanford University, concept and versions
|
||||
1.x
|
||||
|
||||
· RL "Bob" Morgan, Stanford University, versions 2.x
|
||||
|
||||
· David Papp, versions 2.3x and up
|
||||
|
||||
· David Schweikert, versions 3.0 and up
|
||||
|
||||
[1mfping website: <http://www.fping.org>[0m
|
||||
|
||||
[1mDIAGNOSTICS[0m
|
||||
Exit status is 0 if all the hosts are reachable, 1 if some hosts were
|
||||
unreachable, 2 if any IP addresses were not found, 3 for invalid
|
||||
command line arguments, and 4 for a system call failure.
|
||||
|
||||
[1mRESTRICTIONS[0m
|
||||
If certain options are used (i.e, a low value for [1m-i [22mand [1m-t[22m, and a high
|
||||
value for [1m-r[22m) it is possible to flood the network. This program must be
|
||||
installed as setuid root in order to open up a raw socket, or must be
|
||||
run by root. In order to stop mere mortals from hosing the network,
|
||||
normal users can't specify the following:
|
||||
|
||||
· [1m-i [4m[22mn[24m, where [4mn[24m < 10 msec
|
||||
|
||||
· [1m-r [4m[22mn[24m, where [4mn[24m > 20
|
||||
|
||||
· [1m-t [4m[22mn[24m, where n < 250 msec
|
||||
|
||||
[1mSEE ALSO[0m
|
||||
ping(8)
|
||||
|
||||
fping 2016-02-19 FPING(8)
|
||||
+76
-60
@@ -1,55 +1,57 @@
|
||||
FPING(8) FPING(8)
|
||||
|
||||
[1mNAME[0m
|
||||
NAME
|
||||
fping - send ICMP ECHO_REQUEST packets to network hosts
|
||||
|
||||
[1mSYNOPSIS[0m
|
||||
[1mfping [22m[ [4moptions[24m ] [ [4msystems...[24m ] [1mfping6 [22m[ [4moptions[24m ] [ [4msystems...[24m ]
|
||||
SYNOPSIS
|
||||
fping [ options ] [ systems... ] fping6 [ options ] [ systems... ]
|
||||
|
||||
[1mDESCRIPTION[0m
|
||||
[1mfping [22mis a program like [1mping [22mwhich uses the Internet Control Message
|
||||
DESCRIPTION
|
||||
fping is a program like ping which uses the Internet Control Message
|
||||
Protocol (ICMP) echo request to determine if a target host is
|
||||
responding. [1mfping [22mdiffers from [1mping [22min that you can specify any number
|
||||
responding. fping differs from ping in that you can specify any number
|
||||
of targets on the command line, or specify a file containing the lists
|
||||
of targets to ping. Instead of sending to one target until it times
|
||||
out or replies, [1mfping [22mwill send out a ping packet and move on to the
|
||||
out or replies, fping will send out a ping packet and move on to the
|
||||
next target in a round-robin fashion. In the default mode, if a target
|
||||
replies, it is noted and removed from the list of targets to check; if
|
||||
a target does not respond within a certain time limit and/or retry
|
||||
limit it is designated as unreachable. [1mfping [22malso supports sending a
|
||||
limit it is designated as unreachable. fping also supports sending a
|
||||
specified number of pings to a target, or looping indefinitely (as in
|
||||
[1mping [22m). Unlike [1mping[22m, [1mfping [22mis meant to be used in scripts, so its
|
||||
ping ). Unlike ping, fping is meant to be used in scripts, so its
|
||||
output is designed to be easy to parse.
|
||||
|
||||
The binary named [1mfping6 [22mis the same as [1mfping[22m, except that it uses IPv6
|
||||
The binary named fping6 is the same as fping, except that it uses IPv6
|
||||
addresses instead of IPv4.
|
||||
|
||||
[1mOPTIONS[0m
|
||||
[1m-a [22mShow systems that are alive.
|
||||
OPTIONS
|
||||
-a Show systems that are alive.
|
||||
|
||||
[1m-A [22mDisplay targets by address rather than DNS name.
|
||||
-A Display targets by address rather than DNS name. Combined with -d,
|
||||
the output will be both the ip and (if available) the hostname.
|
||||
|
||||
[1m-b [4m[22mn[24m Number of bytes of ping data to send. The minimum size (normally
|
||||
12) allows room for the data that [1mfping [22mneeds to do its work
|
||||
-b n Number of bytes of ping data to send. The minimum size (normally
|
||||
12) allows room for the data that fping needs to do its work
|
||||
(sequence number, timestamp). The reported received data size
|
||||
includes the IP header (normally 20 bytes) and ICMP header (8
|
||||
bytes), so the minimum total size is 40 bytes. Default is 56, as
|
||||
in [1mping[22m. Maximum is the theoretical maximum IP datagram size
|
||||
in ping. Maximum is the theoretical maximum IP datagram size
|
||||
(64K), though most systems limit this to a smaller, system-
|
||||
dependent number.
|
||||
|
||||
[1m-B [4m[22mn[24m Backoff factor. In the default mode, [1mfping [22msends several requests
|
||||
-B n Backoff factor. In the default mode, fping sends several requests
|
||||
to a target before giving up, waiting longer for a reply on each
|
||||
successive request. This parameter is the value by which the wait
|
||||
time ([1m-t[22m) is multiplied on each successive request; it must be
|
||||
time (-t) is multiplied on each successive request; it must be
|
||||
entered as a floating-point number (x.y). The default is 1.5.
|
||||
|
||||
[1m-c [4m[22mn[24m Number of request packets to send to each target. In this mode, a
|
||||
-c n Number of request packets to send to each target. In this mode, a
|
||||
line is displayed for each received response (this can suppressed
|
||||
with [1m-q [22mor [1m-Q[22m). Also, statistics about responses for each target
|
||||
with -q or -Q). Also, statistics about responses for each target
|
||||
are displayed when all requests have been sent (or when
|
||||
interrupted).
|
||||
|
||||
[1m-C [4m[22mn[24m Similar to [1m-c[22m, but the per-target statistics are displayed in a
|
||||
-C n Similar to -c, but the per-target statistics are displayed in a
|
||||
format designed for automated response-time statistics gathering.
|
||||
For example:
|
||||
|
||||
@@ -60,21 +62,21 @@
|
||||
requests, with the "-" indicating that no response was received to
|
||||
the fourth request.
|
||||
|
||||
[1m-d [22mUse DNS to lookup address of return ping packet. This allows you
|
||||
-d Use DNS to lookup address of return ping packet. This allows you
|
||||
to give fping a list of IP addresses as input and print hostnames
|
||||
in the output.
|
||||
|
||||
[1m-D [22mAdd Unix timestamps in front of output lines generated with in
|
||||
looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m).
|
||||
-D Add Unix timestamps in front of output lines generated with in
|
||||
looping or counting modes (-l, -c, or -C).
|
||||
|
||||
[1m-e [22mShow elapsed (round-trip) time of packets.
|
||||
-e Show elapsed (round-trip) time of packets.
|
||||
|
||||
[1m-f [22mRead list of targets from a file. This option can only be used by
|
||||
-f Read list of targets from a file. This option can only be used by
|
||||
the root user. Regular users should pipe in the file via stdin:
|
||||
|
||||
% fping < targets_file
|
||||
|
||||
[1m-g [4m[22maddr/mask[0m
|
||||
-g addr/mask
|
||||
Generate a target list from a supplied IP netmask, or a starting
|
||||
and ending IP. Specify the netmask or start/end in the targets
|
||||
portion of the command line. If a network with netmask is given,
|
||||
@@ -88,58 +90,70 @@
|
||||
|
||||
fping -g 192.168.1.1 192.168.1.254
|
||||
|
||||
[1m-h [22mPrint usage message.
|
||||
-h Print usage message.
|
||||
|
||||
[1m-i [4m[22mn[24m The minimum amount of time (in milliseconds) between sending a
|
||||
-i n The minimum amount of time (in milliseconds) between sending a
|
||||
ping packet to any target (default is 25).
|
||||
|
||||
[1m-l [22mLoop sending packets to each target indefinitely. Can be
|
||||
-l Loop sending packets to each target indefinitely. Can be
|
||||
interrupted with Ctrl-C; statistics about responses for each
|
||||
target are then displayed.
|
||||
|
||||
[1m-m [22mSend pings to each of a target host's multiple interfaces.
|
||||
-m Send pings to each of a target host's multiple interfaces.
|
||||
|
||||
[1m-n [22mSame as -d.
|
||||
-n Same as -d.
|
||||
|
||||
[1m-p [22m<n>
|
||||
In looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m), this parameter sets
|
||||
the time in milliseconds that [1mfping [22mwaits between successive
|
||||
-p <n>
|
||||
In looping or counting modes (-l, -c, or -C), this parameter sets
|
||||
the time in milliseconds that fping waits between successive
|
||||
packets to an individual target. Default is 1000.
|
||||
|
||||
[1m-q [22mQuiet. Don't show per-probe results, but only the final summary.
|
||||
-q Quiet. Don't show per-probe results, but only the final summary.
|
||||
Also don't show ICMP error messages.
|
||||
|
||||
[1m-Q [4m[22mn[24m Like [1m-q[22m, but show summary results every n seconds.
|
||||
-Q n Like -q, but show summary results every n seconds.
|
||||
|
||||
[1m-r [4m[22mn[24m Retry limit (default 3). This is the number of times an attempt at
|
||||
-r n Retry limit (default 3). This is the number of times an attempt at
|
||||
pinging a target will be made, not including the first try.
|
||||
|
||||
[1m-s [22mPrint cumulative statistics upon exit.
|
||||
-R Instead of using all-zeros as the packet data, generate random
|
||||
bytes. Use to defeat, e.g., link data compression.
|
||||
|
||||
[1m-S [4m[22maddr[0m
|
||||
-s Print cumulative statistics upon exit.
|
||||
|
||||
-S addr
|
||||
Set source address.
|
||||
|
||||
[1m-I [4m[22mif[0m
|
||||
-I if
|
||||
Set the interface (requires SO_BINDTODEVICE support)
|
||||
|
||||
[1m-t [4m[22mn[24m Initial target timeout in milliseconds (default 500). In the
|
||||
default mode, this is the amount of time that [1mfping [22mwaits for a
|
||||
-t n Initial target timeout in milliseconds (default 500). In the
|
||||
default mode, this is the amount of time that fping waits for a
|
||||
response to its first request. Successive timeouts are multiplied
|
||||
by the backoff factor specified with [1m-B[22m. Note that this option
|
||||
has no effect looping or counting modes ([1m-l[22m, [1m-c[22m, or [1m-C[22m).
|
||||
by the backoff factor specified with -B. Note that this option
|
||||
has no effect looping or counting modes (-l, -c, or -C).
|
||||
|
||||
[1m-T [4m[22mn[24m Ignored (for compatibility with fping 2.4).
|
||||
-T n Ignored (for compatibility with fping 2.4).
|
||||
|
||||
[1m-u [22mShow targets that are unreachable.
|
||||
-u Show targets that are unreachable.
|
||||
|
||||
[1m-O [4m[22mn[24m Set the typ of service flag (TOS). [4mn[24m can be either decimal or
|
||||
-O n Set the typ of service flag (TOS). n can be either decimal or
|
||||
hexadecimal (0xh) format.
|
||||
|
||||
[1m-v [22mPrint [1mfping [22mversion information.
|
||||
-v Print fping version information.
|
||||
|
||||
[1m-H [4m[22mn[24m Set the IP TTL field (time to live hops).
|
||||
-H n Set the IP TTL field (time to live hops).
|
||||
|
||||
[1mAUTHORS[0m
|
||||
EXAMPLES
|
||||
Generate ~1000 pings per second to a host until canceled, printing
|
||||
statistics on the fly at one second intervals, and printing statistics
|
||||
at the end:
|
||||
|
||||
# fping -s -l -i 1 -p 1 -T 1 -Q 1 127.0.0.1
|
||||
|
||||
Note that ping intervals less than 10ms can only be used as root.
|
||||
|
||||
AUTHORS
|
||||
· Roland J. Schemers III, Stanford University, concept and versions
|
||||
1.x
|
||||
|
||||
@@ -149,25 +163,27 @@
|
||||
|
||||
· David Schweikert, versions 3.0 and up
|
||||
|
||||
[1mfping website: <http://www.fping.org>[0m
|
||||
fping website: <http://www.fping.org>
|
||||
|
||||
[1mDIAGNOSTICS[0m
|
||||
DIAGNOSTICS
|
||||
Exit status is 0 if all the hosts are reachable, 1 if some hosts were
|
||||
unreachable, 2 if any IP addresses were not found, 3 for invalid
|
||||
command line arguments, and 4 for a system call failure.
|
||||
|
||||
[1mRESTRICTIONS[0m
|
||||
If certain options are used (i.e, a low value for [1m-i [22mand [1m-t[22m, and a high
|
||||
value for [1m-r[22m) it is possible to flood the network. This program must be
|
||||
RESTRICTIONS
|
||||
If certain options are used (i.e, a low value for -i and -t, and a high
|
||||
value for -r) it is possible to flood the network. This program must be
|
||||
installed as setuid root in order to open up a raw socket, or must be
|
||||
run by root. In order to stop mere mortals from hosing the network,
|
||||
normal users can't specify the following:
|
||||
|
||||
· [1m-i [4m[22mn[24m, where [4mn[24m < 10 msec
|
||||
· -i n, where n < 10 msec
|
||||
|
||||
· [1m-r [4m[22mn[24m, where [4mn[24m > 20
|
||||
· -r n, where n > 20
|
||||
|
||||
· [1m-t [4m[22mn[24m, where n < 250 msec
|
||||
· -t n, where n < 250 msec
|
||||
|
||||
SEE ALSO
|
||||
ping(8)
|
||||
|
||||
2014-05-04
|
||||
fping 2016-02-19 FPING(8)
|
||||
|
||||
@@ -0,0 +1,609 @@
|
||||
2016-02-22 Carsten Larsen <carsten.larsen@mail.com>
|
||||
* AROS Version 3.13
|
||||
* (internal) Compatibility changes in usage of gettimeofday
|
||||
* (internal) Compatibility changes datatypes and library usage
|
||||
|
||||
2016-02-22 Carsten Larsen <carsten.larsen@mail.com>
|
||||
* AmigaOS Version 3.13
|
||||
* (bugfix) Socket was not closed and memory not released on exit
|
||||
* (bugfix) Calculation of digits were incorrect due to a faulty gettimeofday function
|
||||
* (bugfix) Differences in Amiga timeval datatype sometimes caused fping to hang
|
||||
* (internal) Code compliance with AmigaOS (Amiga2Date etc.)
|
||||
* (internal) Removed non-supported TTL and TOS socket options
|
||||
* (improvement) Minor improvement in visual layouts
|
||||
|
||||
2015-10-21 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.13
|
||||
* (bugfix) Fix ICMP errors sometimes causing crashes with fping >= 3.11
|
||||
(fixes #85, reported by Jamie Heilman and Bill Blough)
|
||||
|
||||
2015-10-14 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.12
|
||||
* (bugfix) Fix fping6 -R (fixes #84, reported by Stuart Henderson)
|
||||
|
||||
2015-10-12 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.11
|
||||
* (feature) New option -R to use random bytes instead of NULLs (#72, Anthony DeRobertis)
|
||||
* (feature) Small documentation and performance improvements (Ryan Underwood)
|
||||
* (bugfix) Fix double entries with fping -u and unreachable hosts
|
||||
* (internal) Use sockaddr_storage and simplify code, so that we can one day support both IPv4 and IPv6 with the same binary
|
||||
|
||||
2015-08-14 Carsten Larsen <carsten.larsen@mail.com>
|
||||
* Initial AmigaOS version
|
||||
|
||||
2014-05-03 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.10
|
||||
* Fix confusing error message with -g and IPv6 addresses (#58, reported by Axel Beckert)
|
||||
* Allow option '-f' also for non-root (since setuid privileges are dropped)
|
||||
* Do not retry twice DNS lookup on DNS lookup problem
|
||||
* Remove support for NIS groups
|
||||
* Better document -B backoff-factor and when it can be used (#33, Oleksiy Zagorskyi)
|
||||
* More tests added
|
||||
|
||||
2014-03-08 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.9
|
||||
* Fix random output on socket error (reported by Aleksandrs Saveljevs, #56)
|
||||
* Support ppc64le architecture by including alpha libtool version
|
||||
(reported by Amit Kumar Gupta and Aravinda B Thunug)
|
||||
* Fix compilation problem on FreeBSD (#57)
|
||||
* Initial test suite and continous intergration (with travis-ci.org / coveralls.io)
|
||||
* Don't output usage information on error
|
||||
|
||||
2013-11-08 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.8
|
||||
* Fix segmentation fault introduced in version 3.7 with loop mode (reported
|
||||
by Vlad Glagolev, #55)
|
||||
|
||||
2013-11-04 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.7
|
||||
* Allow running as non-root on Mac OS X by using non-privileged ICMP (#7)
|
||||
* Remove unnecessary IPv6 socket options
|
||||
* Fix again compatibility issue with FreeBSD (Shawn Chu)
|
||||
* Fix fping hanging forever on permanent sendto failure (Shawn Chu)
|
||||
* Fix duplicate echo reply packets causing early stop in count mode
|
||||
(reported by Ramon Schwammberger, #53)
|
||||
|
||||
2013-10-10 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.6
|
||||
* Fix loop issue after 65536 pings (reported by Peter Folk and GBert, #12)
|
||||
* Minimum ping data size is now 0
|
||||
* Removed setsockopt IPV6_CHECKSUM, which shouldn't be set and breaks
|
||||
compiling on Solaris (reported by Juergen Arndt)
|
||||
* Fix wrong min RTT value with -Q option (reported by Alexander Ivanov, #51)
|
||||
|
||||
2013-05-22 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.5
|
||||
* Fix sprint_tm buffer size crash (reported by Japheth Cleaver)
|
||||
* Addded -D flag to print timestamps (Toke Høiland-Jørgensen)
|
||||
* Fix fping6 build on OS X 10.8 (unknown contributor)
|
||||
* Fix compatibility issue with FreeBSD (Alexandre Raynaud, Jason Harris, #39)
|
||||
* Fping.spec: fix setuid permissions and provides fping6 (Marcus Vinicius Ferreira)
|
||||
* Re-create configure script with autoconf 2.69 for aarch64 support (Chuck Anderson, #45)
|
||||
|
||||
2012-09-04 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.4
|
||||
* Revert "Output statistics to stdout instead of stderr", because it breaks
|
||||
tools assuming the output goes to stderr
|
||||
|
||||
2012-08-19 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.3
|
||||
* Do not output icmp errors with -q (#1)
|
||||
* Add --enable-ipv4 and --enable-ipv6 options to configure (Niclas Zeising)
|
||||
* Fix removing of unreachable hosts when doing loop (Thomas Liske, #13 #23)
|
||||
* Fix -A for fping6 (reported by Matt LaPlante, #14)
|
||||
* Fix "options inet6" breaking IPv4 name resolution (reported by Matt LaPlante, #17)
|
||||
* Output statistics to stdout instead of stderr (suggested by Simon Leinen, #9)
|
||||
* Set default data size to 56 bytes on all architectures (#18)
|
||||
* Added contrib/fping.spec (Stephen Schaefer, #24)
|
||||
* Convert man-page source to POD for easier maintenance
|
||||
* Fix error message on DNS error for IPv6 hosts (#27)
|
||||
* Fix -n flag in fping6 (#28)
|
||||
* Man-page fix: TOS option typo (Thomas Liske, #23)
|
||||
* Man-page fix: inconsistency in regards to numeric arguments (Robert Henney)
|
||||
* Man-page fix: better description of option -q (#15)
|
||||
|
||||
2012-05-29 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.2
|
||||
* Improve documentation for -g option (G.W. Haywood)
|
||||
* Performance optimization for big select timeouts (#10, Andrey Bondarenko)
|
||||
* Fix restart of select call after interrupt signal (#8, Boian Bonev)
|
||||
* Fix infinite loop caused by linked list corruption (#11, Boian Bonev)
|
||||
|
||||
2012-04-26 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.1
|
||||
* -g option (generate): exclude network and broadcast address for cidr
|
||||
ranges (idea by Eric Brander)
|
||||
* do not explicitely check if running as root, to make it possible to
|
||||
install fping with linux capabilities instead of making it setuid
|
||||
(setcap cap_net_raw+ep fping)
|
||||
* ANSI C (C89) compiler now a requirement
|
||||
* Portability fixes
|
||||
* Reorganized source directory
|
||||
* Bugfix: fix timeout issue on Solaris (Sandor Geller)
|
||||
* Man-page fixes (Axel Beckert)
|
||||
* Added -H option to specify number of hops (Paul Duda)
|
||||
* Output usage information to stdout when called with -h (Paul Duda)
|
||||
|
||||
2011-12-28 David Schweikert <david@schweikert.ch>
|
||||
* Version 3.0
|
||||
* rewritten main loop for improved performance
|
||||
* -T parameter (select timeout) now obsolete
|
||||
* Maintenance taken over from unresponsive previous maintainer
|
||||
(anybody please step up, if you disagree)
|
||||
* New homepage: www.fping.org
|
||||
|
||||
2009-12-21 Tobi Oetiker <tobi@oetiker.ch>
|
||||
* Version v2.4b2-to3-ipv6
|
||||
* added -On option to set the TOS octet
|
||||
* Removed unused variables from code
|
||||
* updated to current autoconf standards
|
||||
* Merged Debian changes (see below)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
fping (2.4b2-to-ipv6-16.1) unstable; urgency=low
|
||||
|
||||
* NMU during Moenchengladbach BSP
|
||||
* Fixes FTBFS on kfreebsd (Closes: #555398)
|
||||
* Fixes typo "Paramter" in binary
|
||||
|
||||
-- Axel Beckert <abe@deuxchevaux.org> Sat, 23 Jan 2010 16:22:02 +0100
|
||||
|
||||
fping (2.4b2-to-ipv6-16) unstable; urgency=low
|
||||
|
||||
* Fix the following bugs
|
||||
- Network byte order sensitivity was missing completely.
|
||||
Added hopefully all missing calls.
|
||||
- The sequence numbering scheme used led to packet drops.
|
||||
Changed it to a more senseful numbering scheme.
|
||||
- Some minor C programming mistakes ('=' instead of '==').
|
||||
Patch by Stephan Fuhrmann; closes: #502569
|
||||
* Add support for command line select timeout setting
|
||||
Patch by Marton Balint; closes: #502575
|
||||
* Remove symlinks in /usr/sbin; closes: #377732
|
||||
* Standards-Version is 3.8.0
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Sat, 18 Oct 2008 12:04:52 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-15) unstable; urgency=low
|
||||
|
||||
* Added interface binding (-I) for fping
|
||||
Patch by Peter Naulls <peter@mushroomnetworks.com>
|
||||
Closes: #439014
|
||||
* Fixed a couple of typos in fping.8. Closes: #423180
|
||||
* Added homepage control header
|
||||
* Bumped Standards-Version to 3.7.3
|
||||
* Fixed the following lintian issue:
|
||||
- debian-rules-sets-DH_COMPAT
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Mon, 03 Mar 2008 17:46:17 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-13) unstable; urgency=low
|
||||
|
||||
* Fixed stdout flush problem, closes: #340146.
|
||||
Patch by Bart Martens <bart.martens@advalvas.be>.
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Fri, 30 Dec 2005 08:30:09 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-12) unstable; urgency=low
|
||||
|
||||
* Fixed "problem with option -r (retry limit)", closes: #318402.
|
||||
Patch by Qingning Huo <qingningh@lanware.co.uk>.
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Sat, 08 Oct 2005 21:26:35 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-11) unstable; urgency=low
|
||||
|
||||
* Fixed "would be useful to specify 'source address' like ping for multi
|
||||
homed machines", closes: #198486.
|
||||
Patch by Marc Haber <mh+debian-bugs@zugschlus.de>.
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Thu, 02 Jun 2005 08:14:54 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-10) unstable; urgency=low
|
||||
|
||||
* Fixed "unnecessary delay with the -c option after the last packet"
|
||||
(Closes: #293856). Patch by Niko Tyni <ntyni@iki.fi>
|
||||
|
||||
-- Anibal Monsalve Salazar <anibal@debian.org> Sun, 06 Feb 2005 23:25:57 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-9) unstable; urgency=low
|
||||
|
||||
* Fixed "fping6 always does reverse lookup" (Closes: #273647).
|
||||
Patch by Jeroen Massar and forwarded by Bernhard Schmidt <berni@birkenwald.de>
|
||||
|
||||
-- Anibal Monsalve Salazar <A.Monsalve.Salazar@IEEE.org> Mon, 10 Jan 2005 00:01:32 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-7) unstable; urgency=low
|
||||
|
||||
* Build fping in build/ipv[46] instead of build and build-ipv6.
|
||||
* Made DNS errors non-fatal for IPv6 (closes: #198056).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Fri, 20 Jun 2003 21:36:30 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-6) unstable; urgency=low
|
||||
|
||||
* Do not use incorrect linux.h file (closes: #85468).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sat, 17 May 2003 14:13:11 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-5) unstable; urgency=low
|
||||
|
||||
* Fixed yet another divide by zero bug (closes: #148445).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Tue, 4 Jun 2002 12:18:03 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-4) unstable; urgency=low
|
||||
|
||||
* Made fping6 setuid (closes: #136386).
|
||||
* Moved fping back into bin.
|
||||
* Partially applied IPv6 patch to fix IPv6 checksums (closes: #136479).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sun, 7 Apr 2002 20:36:56 +1000
|
||||
|
||||
fping (2.4b2-to-ipv6-3) unstable; urgency=low
|
||||
|
||||
* Added compatibility symlink for fping (closes: #135203).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sat, 23 Feb 2002 08:34:11 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-2) unstable; urgency=low
|
||||
|
||||
* Fixed another divide by zero error (closes: #132370).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Thu, 7 Feb 2002 20:10:48 +1100
|
||||
|
||||
fping (2.4b2-to-ipv6-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Install fping into sbin as done by upstream.
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Fri, 1 Feb 2002 22:11:59 +1100
|
||||
|
||||
fping (2.2b2-3) unstable; urgency=low
|
||||
|
||||
* Removed INSTALL file from package (closes: #84050).
|
||||
* Fixed alignment bug.
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sat, 10 Feb 2001 19:25:18 +1100
|
||||
|
||||
fping (2.2b2-2) unstable; urgency=low
|
||||
|
||||
* Made changes for dpkg-statoverride (closes: #83838).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sun, 28 Jan 2001 21:53:05 +1100
|
||||
|
||||
fping (2.2b2-1) unstable; urgency=low
|
||||
|
||||
* New upstream release.
|
||||
* Fixed typo that prevented -d from working (closes: #83255).
|
||||
* Drop root privileges after opening the socket (closes: #81589).
|
||||
* Fixed the options [tip], they were out by a factor of 10
|
||||
(Richard Kettlewell, closes: #83742).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sun, 28 Jan 2001 00:09:41 +1100
|
||||
|
||||
fping (2.2b1-2) unstable; urgency=low
|
||||
|
||||
* Fixed typo in control file, spotted by William Ono (closes: #49909).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Mon, 15 May 2000 12:27:03 +1000
|
||||
|
||||
fping (2.2b1-1) unstable; urgency=low
|
||||
|
||||
* Initial release.
|
||||
* Fixed divide by zero error (closes: #29902).
|
||||
|
||||
-- Herbert Xu <herbert@debian.org> Sat, 30 Oct 1999 16:36:19 +1000
|
||||
---------------------------------------------------------------------------------
|
||||
|
||||
Wed Jan 16 2002
|
||||
Jeroen Massar
|
||||
- Revision v2.4b2-to-IPv6
|
||||
- Added IPv6 support.
|
||||
- Added -I option for selecting source IPv4/IPv6 address.
|
||||
- Makefile.in now generates a Makefile which will build both
|
||||
fping (IPv4) and fping6 (IPv6). Thus it makes an fping (IPv4 only)
|
||||
and an fping6 (IPv6 only).
|
||||
- num_unreachable was counted twice when a sendto() generated errors.
|
||||
- See http://unfix.org/projects/ipv6/
|
||||
|
||||
Tue Mar 14 2001
|
||||
Jason Ewasiuk <jasone@remote.net>
|
||||
- Revision v2.4b1
|
||||
- added -g option for generating IPs from a start to an end value
|
||||
- two available options, generate IPs from start IP to end IP
|
||||
or from a passed netmask, such as 192.168.1.0/24
|
||||
|
||||
Thu Feb 15 2001
|
||||
Jason Ewasiuk <jasone@remote.net>
|
||||
- Revision v2.3b1
|
||||
- formatting changes to code layout (fping.c)
|
||||
NOTE: Best viewed with a tab stop of 4
|
||||
- merged in changes from Debian c/o Herbert Xu
|
||||
<herbert@gondor.apana.org.au>
|
||||
- Compilation fix on alphas with glibc
|
||||
- Alignment issues (note from JE: in wait_for_reply())
|
||||
- A typo with the time specified on the command line
|
||||
(note from JE: bug was using 10 instead of 100)
|
||||
- Drop privileges after obtaining socket
|
||||
(note from JE: might be moot, since prog exits if
|
||||
user is not root)
|
||||
- touched all files in package to this date
|
||||
- couple new #ifdefs added for future WIN32 support
|
||||
(Haven't got to adding this yet, will take a lot of rewriting.)
|
||||
|
||||
Fri Dec 8 10:33:13 2000 Roland Schemers <schemers@stanford.edu>
|
||||
|
||||
* stop using sys_errlist and start using strerror
|
||||
fixed bug in output of -C
|
||||
|
||||
Wed Jan 8 11:18:37 1997 Roland Schemers <schemers@stanford.edu>
|
||||
|
||||
* Created ChangeLog file. What follows was from the CHANGES file.
|
||||
|
||||
* Revision 2.0 1994/10/31 21:26:23 morgan
|
||||
|
||||
Substantial rewrite, including new features:
|
||||
|
||||
support some traditional ping features:
|
||||
loop mode
|
||||
specify size of data packets
|
||||
specify how many pings to send
|
||||
show per-response data
|
||||
interpret ICMPs other than ICMP Echo response
|
||||
|
||||
also
|
||||
|
||||
rewrote main loop completely
|
||||
make timings in tenths of milliseconds
|
||||
do exponential backoff on retries
|
||||
port to more systems
|
||||
add some debugging stuff
|
||||
do better checking on whether received ICMP is for us
|
||||
|
||||
* Revision 1.24 1993/12/10 23:11:39 schemers
|
||||
|
||||
commented out seteuid(getuid()) since it isn't needed
|
||||
|
||||
* Revision 1.23 1993/12/10 18:33:41 schemers
|
||||
|
||||
Took out the -f option for non-root users. This can be enabled by
|
||||
defining ENABLE_F_OPTION before compiling. There is a call to
|
||||
access before opening the file, but there is a race condition.
|
||||
Reading from stdin is much safer.
|
||||
|
||||
|
||||
* Revision 1.22 1993/11/16 19:49:24 schemers
|
||||
|
||||
Took out setuid(getuid()) and used access() system call to
|
||||
check for access to the file specified with "-f".
|
||||
|
||||
* Revision 1.21 1993/07/20 18:08:19 schemers
|
||||
|
||||
commented out the test to make sure the ping packet came from the
|
||||
same IP address as the one we sent to. This could cause problems on
|
||||
multi-homed hosts.
|
||||
|
||||
* Revision 1.20 1993/02/23 00:16:38 schemers
|
||||
|
||||
fixed syntax error (should have compiled before checking in...)
|
||||
|
||||
* Revision 1.19 1993/02/23 00:15:15 schemers
|
||||
|
||||
turned off printing of "is alive" when -a is specified.
|
||||
|
||||
* Revision 1.18 1992/07/28 15:16:44 schemers
|
||||
|
||||
added a fflush(stdout) call before the summary is sent to stderr, so
|
||||
everything shows up in the right order.
|
||||
|
||||
* Revision 1.17 1992/07/23 03:29:42 schemers
|
||||
* Revision 1.16 1992/07/22 19:24:37 schemers
|
||||
|
||||
Fixed declaration of timeval_diff. Didn't notice the problem because
|
||||
I use 'cc' in stead of gcc under Ultrix. Time to switch? :-)
|
||||
|
||||
Modified file reaing so it would skip blank lines or lines starting
|
||||
with a '#'. Now you can do something like:
|
||||
|
||||
fping -ad < /etc/hosts
|
||||
|
||||
* Revision 1.15 1992/07/21 17:07:18 schemers
|
||||
|
||||
Put in sanity checks so only root can specify "dangerous" options.
|
||||
Changed usage to show switchs in alphabetical order.
|
||||
* Revision 1.14 1992/07/21 16:40:52 schemers
|
||||
* Revision 1.13 1992/07/17 21:02:17 schemers
|
||||
|
||||
Changed the default timeout to 2500 msec, and retry to 3. This was
|
||||
due to suggestions from people with slow (WAN) networks. The default
|
||||
1 sec timeout was too fast.
|
||||
|
||||
|
||||
Added '-e' option for showing elapsed (round-trip) times on pakets, and
|
||||
modified the -s option to include min, max, and average round-trip times,
|
||||
and over all elapsed time.
|
||||
|
||||
Modified action taken when a error is returned from sendto. The action
|
||||
taken now considers the host unreachable and prints the hostname
|
||||
followed by the errno message. The program will not exit and will continue
|
||||
to try other hosts.
|
||||
|
||||
* Revision 1.12 1992/07/17 16:38:54 schemers
|
||||
* Revision 1.11 1992/07/17 16:28:38 schemers
|
||||
|
||||
move socket create call so I could do a setuid(getuid()) before the
|
||||
fopen call is made. Once the socket is created root privs aren't needed
|
||||
to send stuff out on it.
|
||||
|
||||
moved num_timeout counter. It really was for debug purposes and didn't
|
||||
make sense to the general public :-) Now it is the number of timeouts
|
||||
(pings that didn't get received with the time limit).
|
||||
|
||||
|
||||
* Revision 1.10 1992/07/16 16:24:38 schemers
|
||||
* Revision 1.9 1992/07/16 16:00:04 schemers
|
||||
* Revision 1.8 1992/07/16 05:44:41 schemers
|
||||
|
||||
Added _NO_PROTO stuff for older compilers, and _POSIX_SOURCE
|
||||
for unistd.h, and _POSIX_SOURCE for stdlib.h. Also added
|
||||
check for __cplusplus.
|
||||
|
||||
Now compiles ok under Ultrix 3.1, and Sun4 using cc. Also compiled
|
||||
ok using g++ 2.2.2.
|
||||
|
||||
Changed '-a' and '-u' flags to be mutually exclusive (makes sense, since
|
||||
specifiying both '-a' and '-u' is the same as not specifiying anything.
|
||||
Since '-a' and '-u' are mutually exclusive, these options now only print
|
||||
the hostname, and not the 'is alive' or 'is unreachable' messages.
|
||||
This makes it much easier to do stuff like:
|
||||
|
||||
#!/usr/local/bin/perl
|
||||
$hosts_to_backup=`cat /etc/hosts.backup|fping -a`;
|
||||
|
||||
Since you don't have to strip off the 'is alive' messages.
|
||||
|
||||
Changed usage to and stats to print to stderr instead of stdout.
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
RCS header info from original fping.c package (no longer required)
|
||||
|
||||
/*
|
||||
***************************************************
|
||||
*
|
||||
* Standard RCS Header information (see co(1))
|
||||
*
|
||||
* $Author: schemers $
|
||||
*
|
||||
* $Date: 1997/01/08 20:29:33 $
|
||||
*
|
||||
* $Revision: 2.2 $
|
||||
*
|
||||
* $Locker: $
|
||||
*
|
||||
* $Source: /afs/ir/group/networking/src/fping/fping-2.2/src/RCS/fping.c,v $
|
||||
*
|
||||
* $State: Exp $
|
||||
*
|
||||
* $Log: fping.c,v $
|
||||
*
|
||||
* Revision 2.2 1997/01/08 20:29:33 schemers
|
||||
* changes for autoconf/automake
|
||||
*
|
||||
* Revision 2.1 1997/01/08 19:07:18 schemers
|
||||
* checked in RL "Bob"'s changes before configure'ing
|
||||
*
|
||||
* Revision 2.0 1994/10/31 21:26:23 schemers
|
||||
* many changes by RL "Bob" Morgan
|
||||
* add timing data collection, loop mode, per-packet output, etc
|
||||
*
|
||||
* Revision 1.24 1993/12/10 23:11:39 schemers
|
||||
* commented out seteuid(getuid()) since it isn't needed
|
||||
*
|
||||
* Revision 1.23 1993/12/10 18:33:41 schemers
|
||||
* Took out the -f option for non-root users. This can be enabled by
|
||||
* defining ENABLE_F_OPTION before compiling. There is a call to
|
||||
* access before opening the file, but there is a race condition.
|
||||
* Reading from stdin is much safer.
|
||||
*
|
||||
* Revision 1.22 1993/11/16 19:49:24 schemers
|
||||
* Took out setuid(getuid()) and used access() system call to
|
||||
* check for access to the file specified with "-f".
|
||||
*
|
||||
* Revision 1.21 1993/07/20 18:08:19 schemers
|
||||
* commented out the test to make sure the ping packet came from the
|
||||
* same IP address as the one we sent to. This could cause problems on
|
||||
* multi-homed hosts.
|
||||
*
|
||||
* Revision 1.20 1993/02/23 00:16:38 schemers
|
||||
* fixed syntax error (should have compiled before checking in...)
|
||||
*
|
||||
* Revision 1.19 1993/02/23 00:15:15 schemers
|
||||
* turned off printing of "is alive" when -a is specified.
|
||||
*
|
||||
* Revision 1.18 1992/07/28 15:16:44 schemers
|
||||
* added a fflush(stdout) call before the summary is sent to stderr, so
|
||||
* everything shows up in the right order.
|
||||
*
|
||||
* Revision 1.17 1992/07/23 03:29:42 schemers
|
||||
* fixed declaration of timeval_diff.
|
||||
*
|
||||
* Revision 1.16 1992/07/22 19:24:37 schemers
|
||||
* Modified file reading so it would skip blanks lines or lines starting
|
||||
* with a '#'. Now you can do something like:
|
||||
*
|
||||
* fping -ad < /etc/hosts
|
||||
*
|
||||
* Revision 1.15 1992/07/21 17:07:18 schemers
|
||||
* Put in sanity checks so only root can specify "dangerous" options.
|
||||
* Changed usage to show switchs in alphabetical order.
|
||||
*
|
||||
* Revision 1.14 1992/07/21 16:40:52 schemers
|
||||
* Now when sendto returns an error, the host is considered unreachable and
|
||||
* and the error message (from errno) is displayed.
|
||||
*
|
||||
* Revision 1.13 1992/07/17 21:02:17 schemers
|
||||
* changed default timeout to 2500 msec (for WANs), and default try
|
||||
* to 3. This gives 10 second overall timeout.
|
||||
*
|
||||
* Added -e option for showing elapsed (round-trip) time on packets
|
||||
*
|
||||
* Modified -s option to inlude to round-trip stats
|
||||
*
|
||||
* Added #ifndef DEFAULT_* stuff its easier to change the defaults
|
||||
*
|
||||
* Reorganized main loop.
|
||||
*
|
||||
* cleaned up timeval stuff. removed set_timeval and timeval_expired
|
||||
* since they aren't needed anymore. Just use timeval_diff.
|
||||
*
|
||||
* Revision 1.12 1992/07/17 16:38:54 schemers
|
||||
* move socket create call so I could do a setuid(getuid()) before the
|
||||
* fopen call is made. Once the socket is created root privs aren't needed
|
||||
* to send stuff out on it.
|
||||
*
|
||||
* Revision 1.11 1992/07/17 16:28:38 schemers
|
||||
* moved num_timeout counter. It really was for debug purposes and didn't
|
||||
* make sense to the general public :-) Now it is the number of timeouts
|
||||
* (pings that didn't get received with the time limit).
|
||||
*
|
||||
* Revision 1.10 1992/07/16 16:24:38 schemers
|
||||
* changed usage() to use fprintf(stderr,"...");
|
||||
*
|
||||
* Revision 1.9 1992/07/16 16:00:04 schemers
|
||||
* Added _NO_PROTO stuff for older compilers, and _POSIX_SOURCE
|
||||
* for unistd.h, and _POSIX_SOURCE for stdlib.h. Also added
|
||||
* check for __cplusplus.
|
||||
*
|
||||
* Revision 1.8 1992/07/16 05:44:41 schemers
|
||||
* changed -a and -u to only show hostname in results. This is
|
||||
* for easier parsing. Also added -v flag
|
||||
*
|
||||
* Revision 1.7 1992/07/14 18:45:23 schemers
|
||||
* initialized last_time in add_host function
|
||||
*
|
||||
* Revision 1.6 1992/07/14 18:32:40 schemers
|
||||
* changed select to use FD_ macros
|
||||
*
|
||||
* Revision 1.5 1992/07/14 17:21:22 schemers
|
||||
* standardized exit status codes
|
||||
*
|
||||
* Revision 1.4 1992/06/26 15:25:35 schemers
|
||||
* changed name from rrping to fping
|
||||
*
|
||||
* Revision 1.3 1992/06/24 15:39:32 schemers
|
||||
* added -d option for unreachable systems
|
||||
*
|
||||
* Revision 1.2 1992/06/23 03:01:23 schemers
|
||||
* misc fixes from R.L. "Bob" Morgan
|
||||
*
|
||||
* Revision 1.1 1992/06/19 18:23:52 schemers
|
||||
* Initial revision
|
||||
*
|
||||
*--------------------------------------------------
|
||||
* Copyright (c) 1992, 1994, 1997 Board of Trustees
|
||||
* Leland Stanford Jr. University
|
||||
***************************************************
|
||||
*/
|
||||
+25
-13
@@ -3,34 +3,46 @@
|
||||
all: fping
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = -O2 -DAROS -I. -Iinclude -Wall -Werror
|
||||
CFLAGS = -O2 -DAROS -I. -D_DEBUG -Wall -Werror
|
||||
LDLIBS = -lm
|
||||
|
||||
config.h: inet_getaddrinfo.h
|
||||
touch config.h
|
||||
build_date.h:
|
||||
echo "#define BUILD_DATE \"$$(date -u)"\" >build_date.h
|
||||
|
||||
fping.o: fping.c config.h fping.h options.h seqmap.h
|
||||
fping.h: mem.h
|
||||
touch fping.h
|
||||
|
||||
fping_amiga.o: fping_amiga.c config.h
|
||||
getaddrinfo.h: fping.h
|
||||
touch getaddrinfo.h
|
||||
|
||||
inet_getaddrinfo.o: inet_getaddrinfo.c fping.h inet_getaddrinfo.h
|
||||
fping.o: fping.c build_date.h fping.h getaddrinfo.h options.h seqmap.h
|
||||
|
||||
inet_ntop.o: inet_ntop.c
|
||||
fping_amiga.o: fping_amiga.c fping.h getaddrinfo.h
|
||||
|
||||
inet_pton.o: inet_pton.c
|
||||
getaddrinfo.o: getaddrinfo.c fping.h getaddrinfo.h
|
||||
|
||||
ntop.o: ntop.c
|
||||
|
||||
pton.o: pton.c
|
||||
|
||||
seqmap.o: seqmap.c options.h seqmap.h
|
||||
|
||||
socket.o: socket.c config.h fping.h
|
||||
socket.o: socket.c fping.h
|
||||
|
||||
socket4.o: socket4.c config.h fping.h
|
||||
socket4.o: socket4.c fping.h
|
||||
|
||||
mem.o: mem.c mem.h
|
||||
|
||||
getopt.o: getopt.c getopt.h
|
||||
|
||||
rand.o: rand.c
|
||||
|
||||
|
||||
fping: fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o
|
||||
${CC} ${CFLAGS} -s -o fping fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o ${LDLIBS}
|
||||
fping: fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o
|
||||
${CC} ${CFLAGS} -s -o fping fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o ${LDLIBS}
|
||||
|
||||
clean:
|
||||
rm -f fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o fping
|
||||
rm -f fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o build_date.h fping
|
||||
|
||||
depend:
|
||||
@echo Dependencies already done
|
||||
|
||||
+26
-14
@@ -3,34 +3,46 @@
|
||||
all: fping
|
||||
|
||||
CC = m68k-amigaos-gcc
|
||||
CFLAGS = -O2 -noixemul -DAOS3 -I. -I.. -Iinclude -Wall -Werror
|
||||
LDLIBS = -liberty -lm
|
||||
CFLAGS = -O2 -noixemul -DAOS3 -D_DEBUG -I. -I.. -Iinclude -Wall -Werror
|
||||
LDLIBS = -lm
|
||||
|
||||
config.h: inet_getaddrinfo.h
|
||||
touch config.h
|
||||
build_date.h:
|
||||
echo "#define BUILD_DATE \"$$(date -u)"\" >build_date.h
|
||||
|
||||
fping.o: fping.c config.h fping.h options.h seqmap.h
|
||||
fping.h: mem.h
|
||||
touch fping.h
|
||||
|
||||
fping_amiga.o: fping_amiga.c config.h
|
||||
getaddrinfo.h: fping.h
|
||||
touch getaddrinfo.h
|
||||
|
||||
inet_getaddrinfo.o: inet_getaddrinfo.c fping.h inet_getaddrinfo.h
|
||||
fping.o: fping.c build_date.h fping.h getaddrinfo.h options.h seqmap.h
|
||||
|
||||
inet_ntop.o: inet_ntop.c
|
||||
fping_amiga.o: fping_amiga.c fping.h getaddrinfo.h
|
||||
|
||||
inet_pton.o: inet_pton.c
|
||||
getaddrinfo.o: getaddrinfo.c fping.h getaddrinfo.h
|
||||
|
||||
ntop.o: ntop.c
|
||||
|
||||
pton.o: pton.c
|
||||
|
||||
seqmap.o: seqmap.c options.h seqmap.h
|
||||
|
||||
socket.o: socket.c config.h fping.h
|
||||
socket.o: socket.c fping.h
|
||||
|
||||
socket4.o: socket4.c config.h fping.h
|
||||
socket4.o: socket4.c fping.h
|
||||
|
||||
mem.o: mem.c mem.h
|
||||
|
||||
getopt.o: getopt.c getopt.h
|
||||
|
||||
rand.o: rand.c
|
||||
|
||||
|
||||
fping: fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o
|
||||
${CC} ${CFLAGS} -s -o fping fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o ${LDLIBS}
|
||||
fping: fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o
|
||||
${CC} ${CFLAGS} -s -o fping fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o ${LDLIBS}
|
||||
|
||||
clean:
|
||||
rm -f fping.o fping_amiga.o inet_getaddrinfo.o inet_ntop.o inet_pton.o seqmap.o socket.o socket4.o fping
|
||||
rm -f fping.o fping_amiga.o getaddrinfo.o ntop.o pton.o seqmap.o socket.o socket4.o mem.o getopt.o rand.o build_date.h fping
|
||||
|
||||
depend:
|
||||
@echo Dependencies already done
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
|
||||
#include "inet_getaddrinfo.h"
|
||||
|
||||
#ifdef AROS
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
# define HAVE_INTTYPES_H 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
#ifdef AROS
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
# define HAVE_STDINT_H 1
|
||||
#endif
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/file.h> header file. */
|
||||
#define HAVE_SYS_FILE_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
/* #undef HAVE_SYS_SELECT_H */
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "fping"
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT ""
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "fping"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "fping 3.10"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "fping"
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#define PACKAGE_URL ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "3.10"
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "3.10"
|
||||
|
||||
/* some OSes do not define this ... lets take a wild guess */
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
# define INADDR_NONE 0xffffffffU
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_H */
|
||||
|
||||
|
||||
Vendored
+20
-10
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2015 Carsten Larsen
|
||||
# Copyright (c) 2015, 16 Carsten Larsen
|
||||
# Copyright (c) 2014 Poul-Henning Kamp
|
||||
# All rights reserved.
|
||||
#
|
||||
@@ -29,22 +29,26 @@
|
||||
set -e
|
||||
|
||||
HDRS='
|
||||
config.h
|
||||
fping.h
|
||||
inet_getaddrinfo.h
|
||||
getaddrinfo.h
|
||||
options.h
|
||||
seqmap.h
|
||||
mem.h
|
||||
getopt.h
|
||||
'
|
||||
|
||||
SRCS='
|
||||
fping.c
|
||||
fping_amiga.c
|
||||
inet_getaddrinfo.c
|
||||
inet_ntop.c
|
||||
inet_pton.c
|
||||
getaddrinfo.c
|
||||
ntop.c
|
||||
pton.c
|
||||
seqmap.c
|
||||
socket.c
|
||||
socket4.c
|
||||
mem.c
|
||||
getopt.c
|
||||
rand.c
|
||||
'
|
||||
|
||||
if make -v 2>&1 | grep GNU > /dev/null 2>&1 ; then
|
||||
@@ -61,19 +65,25 @@ if $VALID ; then
|
||||
echo ''
|
||||
echo 'all: fping'
|
||||
echo ''
|
||||
if [ -n "$2" ] && [ $2 = "DEBUG" ] ; then
|
||||
DEBUG="-D_DEBUG "
|
||||
fi
|
||||
if [ -n "$1" ] && [ $1 = "AMIGA" ] ; then
|
||||
echo 'CC = m68k-amigaos-gcc'
|
||||
echo "CFLAGS = -O2 -noixemul -DAOS3 -I. -I.. -Iinclude -Wall -Werror"
|
||||
echo "LDLIBS = -liberty -lm"
|
||||
echo "CFLAGS = -O2 -noixemul -DAOS3 ${DEBUG}-I. -I.. -Iinclude -Wall -Werror"
|
||||
echo "LDLIBS = -lm"
|
||||
elif [ -n "$1" ] && [ $1 = "AROS" ] ; then
|
||||
echo 'CC = gcc'
|
||||
echo "CFLAGS = -O2 -DAROS -I. -Iinclude -Wall -Werror"
|
||||
echo "CFLAGS = -O2 -DAROS -I. ${DEBUG}-Wall -Werror"
|
||||
echo "LDLIBS = -lm"
|
||||
else
|
||||
echo "CFLAGS = -O2 -Wall -Werror"
|
||||
echo "LDLIBS = -lm"
|
||||
fi
|
||||
echo ''
|
||||
echo 'build_date.h:'
|
||||
echo ' echo "#define BUILD_DATE \"$$(date -u)"\" >build_date.h'
|
||||
echo ''
|
||||
|
||||
for f in ${HDRS}
|
||||
do
|
||||
@@ -109,7 +119,7 @@ if $VALID ; then
|
||||
echo " \${CC} \${CFLAGS} -s -o fping ${l} \${LDLIBS}"
|
||||
echo
|
||||
echo "clean:"
|
||||
echo " rm -f ${l} fping"
|
||||
echo " rm -f ${l} build_date.h fping"
|
||||
echo
|
||||
echo "depend:"
|
||||
echo " @echo Dependencies already done"
|
||||
|
||||
+261
-544
File diff suppressed because it is too large
Load Diff
+125
-13
@@ -1,34 +1,139 @@
|
||||
/*
|
||||
* Written by Carsten Larsen.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#ifndef _FPING_H
|
||||
#define _FPING_H
|
||||
|
||||
#define __APPLE_USE_RFC_3542 1
|
||||
#include <clib/dos_protos.h>
|
||||
#include <clib/exec_protos.h>
|
||||
#include <clib/alib_protos.h>
|
||||
#include <clib/timer_protos.h>
|
||||
#include <clib/utility_protos.h>
|
||||
#include <utility/date.h>
|
||||
#include <devices/timer.h>
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/file.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stddef.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "mem.h"
|
||||
#define calloc(x, y) allocmem(x*y)
|
||||
#define malloc(x) allocmem(x)
|
||||
#define free(x) freemem(x)
|
||||
|
||||
#ifdef AOS3
|
||||
#include <clib/exec_protos.h>
|
||||
#include <clib/amitcp_protos.h>
|
||||
# include <clib/amitcp_protos.h>
|
||||
# include <amitcp/socketbasetags.h>
|
||||
# include <machine/types.h>
|
||||
# define uint16_t u_int16_t
|
||||
# define IPTR ULONG
|
||||
# define ANSI_CONSOLE 1
|
||||
# define gettimeofday(x, y) getsystime(x)
|
||||
typedef unsigned int socklen_t;
|
||||
typedef unsigned int sa_family_t;
|
||||
#endif
|
||||
|
||||
#ifndef IPV6
|
||||
#define FPING_SOCKADDR struct sockaddr_in
|
||||
#define FPING_INADDR struct in_addr
|
||||
#define FPING_ICMPHDR struct icmp
|
||||
#else
|
||||
#define FPING_SOCKADDR struct sockaddr_in6
|
||||
#define FPING_INADDR struct in6_addr
|
||||
#define FPING_ICMPHDR struct icmp6_hdr
|
||||
typedef u_int16_t in_port_t;
|
||||
|
||||
#ifdef AROS
|
||||
# include <inttypes.h>
|
||||
# include <sys/time.h>
|
||||
# define Socket(a,b,c) socket(a,b,c)
|
||||
# define Bind(a,b,c) bind(a,b,c)
|
||||
# define RecvFrom(a,b,c,d,e,f) recvfrom(a,b,c,d,e,f)
|
||||
# define SendTo(a,b,c,d,e,f) sendto(a,b,c,d,e,f)
|
||||
#endif
|
||||
|
||||
#ifdef AOS3
|
||||
struct addrinfo {
|
||||
int ai_flags;
|
||||
int ai_family;
|
||||
int ai_socktype;
|
||||
int ai_protocol;
|
||||
socklen_t ai_addrlen;
|
||||
char *ai_canonname;
|
||||
struct sockaddr *ai_addr;
|
||||
struct addrinfo *ai_next;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define FPING_SOCKADDR struct sockaddr_in
|
||||
|
||||
#ifndef IPV6
|
||||
# define FPING_INADDR struct in_addr
|
||||
# define FPING_ICMPHDR struct icmp
|
||||
#else
|
||||
# define FPING_INADDR struct in6_addr
|
||||
# define FPING_ICMPHDR struct icmp6_hdr
|
||||
#endif
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
# define INADDR_NONE 0xffffffffU
|
||||
#endif
|
||||
|
||||
#ifndef PF_INET6
|
||||
# define PF_INET6 10
|
||||
#endif
|
||||
#ifndef AF_INET6
|
||||
# define AF_INET6 PF_INET6
|
||||
#endif
|
||||
|
||||
#ifndef INET_ADDRSTRLEN
|
||||
# define INET_ADDRSTRLEN 16
|
||||
#endif
|
||||
#ifndef INET6_ADDRSTRLEN
|
||||
# define INET6_ADDRSTRLEN 46
|
||||
#endif
|
||||
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
# define DEBUG_TEXT "b"
|
||||
#else
|
||||
# define DEBUG_TEXT ""
|
||||
#endif
|
||||
|
||||
#ifdef AOS3
|
||||
# define random() rand()
|
||||
# define srandom() srand()
|
||||
#endif
|
||||
|
||||
#define PACKAGE_NAME "fping"
|
||||
#define PACKAGE_VERSION "3.13"
|
||||
|
||||
/* No TTL (time to live) in socket options */
|
||||
#define NOTTL 1
|
||||
|
||||
/* No TOS (type of service) in socket options */
|
||||
#define NOTOS 1
|
||||
|
||||
#define SIGNAL ULONG
|
||||
|
||||
/* fping.c */
|
||||
void crash_and_burn( char *message );
|
||||
void errno_crash_and_burn( char *message );
|
||||
int in_cksum( unsigned short *p, int n );
|
||||
int random_data_flag;
|
||||
char *prog;
|
||||
unsigned int debugging;
|
||||
|
||||
/* socket.c */
|
||||
int open_ping_socket();
|
||||
int open_ping_socket();
|
||||
void init_ping_buffer(size_t ping_data_size);
|
||||
void socket_set_src_addr(int s, FPING_INADDR src_addr);
|
||||
int socket_sendto_ping(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq, uint16_t icmp_id);
|
||||
void close_ping_socket();
|
||||
void cleanup_ping_buffer();
|
||||
|
||||
/* inet_ntop.c */
|
||||
const char *inet_ntop(int af, const void *src, char *dst, size_t size);
|
||||
@@ -38,6 +143,13 @@ int inet_pton(int af, const char *src, void *dst);
|
||||
|
||||
/* fping_amiga.c */
|
||||
int open_libs();
|
||||
int getsystime(struct timeval *tv);
|
||||
|
||||
extern struct Library *SocketBase;
|
||||
extern int errno;
|
||||
|
||||
#ifndef AROS
|
||||
extern int h_errno;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+121
-17
@@ -3,19 +3,21 @@
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <clib/exec_protos.h>
|
||||
#include "fping.h"
|
||||
#include "getaddrinfo.h"
|
||||
|
||||
#define OPEN_ERROR "Cannot open %s.\n"
|
||||
#define OPEN_VER_ERROR "Cannot open %s (%d.0)\n"
|
||||
#define DOSLIB_NAME "dos.library"
|
||||
#define DOSLIB_REV 37L
|
||||
#define BSDLIB_NAME "bsdsocket.library"
|
||||
#define BSDLIB_REV 03L
|
||||
#define DOSLIB_NAME "dos.library"
|
||||
#define DOSLIB_REV 37L
|
||||
#define BSDLIB_NAME "bsdsocket.library"
|
||||
#define BSDLIB_REV 03L
|
||||
#define UTILLIB_NAME "utility.library"
|
||||
#define UTILLIB_REV 37L
|
||||
#define TIMER_NAME TIMERNAME
|
||||
#define LIB_ERROR 4
|
||||
|
||||
#include "config.h"
|
||||
const char *vers = "\0$VER: " PACKAGE_NAME " " PACKAGE_VERSION " (15.08.2015)";
|
||||
const char *vers = "\0$VER: " PACKAGE_NAME " " PACKAGE_VERSION " (21.02.2016)";
|
||||
|
||||
#include <unistd.h>
|
||||
#ifdef AOS3
|
||||
@@ -30,8 +32,14 @@ int setuid (uid_t id) {
|
||||
int h_errno;
|
||||
#endif
|
||||
|
||||
struct Library *DOSBase;
|
||||
struct Library *SocketBase;
|
||||
struct Library* DOSBase = NULL;
|
||||
struct Library* SocketBase = NULL;
|
||||
struct Library* UtilityBase = NULL;
|
||||
struct Device* TimerBase = NULL;
|
||||
struct timerequest* TimeRequest = NULL;
|
||||
|
||||
int create_timer();
|
||||
void delete_timer();
|
||||
|
||||
void amiga_open_error(char *name)
|
||||
{
|
||||
@@ -45,30 +53,126 @@ void amiga_open_lib_error(char *name, int version)
|
||||
|
||||
void close_libs()
|
||||
{
|
||||
if (DOSBase != NULL) {
|
||||
CloseLibrary(DOSBase);
|
||||
DOSBase = NULL;
|
||||
close_ping_socket();
|
||||
cleanup_ping_buffer();
|
||||
|
||||
if (TimerBase != NULL) {
|
||||
delete_timer();
|
||||
}
|
||||
|
||||
if (UtilityBase != NULL) {
|
||||
CloseLibrary(UtilityBase);
|
||||
UtilityBase = NULL;
|
||||
}
|
||||
|
||||
if (SocketBase != NULL) {
|
||||
CloseLibrary(SocketBase);
|
||||
SocketBase = NULL;
|
||||
}
|
||||
|
||||
freeall();
|
||||
|
||||
if (DOSBase != NULL) {
|
||||
CloseLibrary(DOSBase);
|
||||
DOSBase = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int open_libs()
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
atexit(close_libs);
|
||||
InitSemaphore(&GetaddrinfoSemaphore);
|
||||
|
||||
if(!(DOSBase = OpenLibrary((STRPTR)DOSLIB_NAME, DOSLIB_REV))) {
|
||||
amiga_open_lib_error(DOSLIB_NAME, DOSLIB_REV);
|
||||
return 5;
|
||||
return LIB_ERROR;
|
||||
}
|
||||
|
||||
if(!(SocketBase = OpenLibrary((STRPTR)BSDLIB_NAME, BSDLIB_REV))) {
|
||||
amiga_open_lib_error(BSDLIB_NAME, BSDLIB_REV);
|
||||
return 5;
|
||||
return LIB_ERROR;
|
||||
} else {
|
||||
SocketBaseTags(
|
||||
SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (IPTR) &errno,
|
||||
SBTM_SETVAL(SBTC_HERRNOLONGPTR), (IPTR) &h_errno,
|
||||
SBTM_SETVAL(SBTC_LOGTAGPTR), (IPTR) &prog,
|
||||
TAG_DONE );
|
||||
}
|
||||
|
||||
|
||||
if(!(UtilityBase = OpenLibrary((STRPTR)UTILLIB_NAME, UTILLIB_REV))) {
|
||||
amiga_open_lib_error(UTILLIB_NAME, UTILLIB_REV);
|
||||
return LIB_ERROR;
|
||||
}
|
||||
|
||||
if (create_timer() != 0) {
|
||||
amiga_open_error(TIMER_NAME);
|
||||
return LIB_ERROR;
|
||||
}
|
||||
|
||||
gettimeofday(&tv, NULL);
|
||||
srand(tv.tv_usec);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef AOS3
|
||||
int create_timer()
|
||||
{
|
||||
LONG error;
|
||||
struct MsgPort *port = CreatePort(0, 0);
|
||||
if (port == NULL)
|
||||
return 1;
|
||||
|
||||
TimeRequest = (struct timerequest*)CreateExtIO(port, sizeof(struct timerequest));
|
||||
if (TimeRequest == NULL)
|
||||
{
|
||||
DeletePort(port);
|
||||
return 1;
|
||||
}
|
||||
|
||||
error = OpenDevice(
|
||||
(STRPTR)TIMER_NAME, UNIT_MICROHZ,
|
||||
(struct IORequest*)TimeRequest, 0L
|
||||
);
|
||||
|
||||
if (error != 0)
|
||||
{
|
||||
delete_timer(TimeRequest);
|
||||
return 1;
|
||||
}
|
||||
|
||||
TimerBase = (struct Device*)TimeRequest->tr_node.io_Device;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void delete_timer()
|
||||
{
|
||||
struct MsgPort *port;
|
||||
if (TimeRequest == NULL)
|
||||
return;
|
||||
|
||||
port = TimeRequest->tr_node.io_Message.mn_ReplyPort;
|
||||
|
||||
if (port != 0)
|
||||
DeletePort(port);
|
||||
|
||||
CloseDevice((struct IORequest*)TimeRequest);
|
||||
DeleteExtIO((struct IORequest*)TimeRequest);
|
||||
}
|
||||
|
||||
int getsystime(struct timeval *tv)
|
||||
{
|
||||
struct timeval tv1;
|
||||
|
||||
GetSysTime(&tv1);
|
||||
*tv = tv1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int create_timer() { return 0; }
|
||||
void delete_timer() { }
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Carsten Larsen
|
||||
* Copyright (c) 2015, 16 Carsten Larsen
|
||||
* Copyright (c) 2001, 02 Motoyuki Kasahara
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -60,11 +60,7 @@
|
||||
#include <netdb.h>
|
||||
|
||||
#include "fping.h"
|
||||
#include "inet_getaddrinfo.h"
|
||||
|
||||
#ifdef ENABLE_PTHREAD
|
||||
#include <pthread.h>
|
||||
#endif
|
||||
#include "getaddrinfo.h"
|
||||
|
||||
#ifdef ENABLE_NLS
|
||||
#include <libintl.h>
|
||||
@@ -133,9 +129,7 @@ static struct addrinfo default_hints = {
|
||||
/*
|
||||
* Mutex.
|
||||
*/
|
||||
#ifdef ENABLE_PTHREAD
|
||||
static pthread_mutex_t gai_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
#endif
|
||||
struct SignalSemaphore GetaddrinfoSemaphore;
|
||||
|
||||
/*
|
||||
* Declaration of static functions.
|
||||
@@ -276,10 +270,7 @@ struct addrinfo **res;
|
||||
int saved_h_errno;
|
||||
int result = 0;
|
||||
|
||||
#ifdef ENABLE_PTHREAD
|
||||
pthread_mutex_lock(&gai_mutex);
|
||||
#endif
|
||||
|
||||
ObtainSemaphore(&GetaddrinfoSemaphore);
|
||||
saved_h_errno = h_errno;
|
||||
|
||||
if (nodename == NULL && servname == NULL) {
|
||||
@@ -434,9 +425,7 @@ struct addrinfo **res;
|
||||
|
||||
end:
|
||||
h_errno = saved_h_errno;
|
||||
#ifdef ENABLE_PTHREAD
|
||||
pthread_mutex_unlock(&gai_mutex);
|
||||
#endif
|
||||
ReleaseSemaphore(&GetaddrinfoSemaphore);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -449,10 +438,7 @@ int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *node, socklen_
|
||||
int saved_h_errno;
|
||||
int result = 0;
|
||||
|
||||
#ifdef ENABLE_PTHREAD
|
||||
pthread_mutex_lock(&gai_mutex);
|
||||
#endif
|
||||
|
||||
ObtainSemaphore(&GetaddrinfoSemaphore);
|
||||
saved_h_errno = h_errno;
|
||||
|
||||
if (sa_in->sin_family != PF_INET) {
|
||||
@@ -516,8 +502,6 @@ int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *node, socklen_
|
||||
|
||||
end:
|
||||
h_errno = saved_h_errno;
|
||||
#ifdef ENABLE_PTHREAD
|
||||
pthread_mutex_unlock(&gai_mutex);
|
||||
#endif
|
||||
ReleaseSemaphore(&GetaddrinfoSemaphore);
|
||||
return result;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015 Carsten Larsen
|
||||
* Copyright (c) 2015, 16 Carsten Larsen
|
||||
* Copyright (c) 2001, 02 Motoyuki Kasahara
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -33,6 +33,8 @@
|
||||
#include <sys/types.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include "fping.h"
|
||||
|
||||
/********************************************************************/
|
||||
/*
|
||||
* Undefine all the macros.
|
||||
@@ -184,15 +186,17 @@
|
||||
/*
|
||||
* Address families and Protocol families.
|
||||
*/
|
||||
#if 0
|
||||
#ifndef AF_UNSPEC
|
||||
#define AF_UNSPEC AF_INET
|
||||
#endif
|
||||
#ifndef PF_UNSPEC
|
||||
#define PF_UNSPEC PF_INET
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef u_int16_t in_port_t;
|
||||
typedef unsigned int sa_family_t;
|
||||
#include <exec/types.h>
|
||||
extern struct SignalSemaphore GetaddrinfoSemaphore;
|
||||
|
||||
const char* gai_strerror(int);
|
||||
void freeaddrinfo(struct addrinfo *);
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* getopt.c --
|
||||
*
|
||||
* Standard UNIX getopt function. Code is from BSD.
|
||||
*
|
||||
* Copyright (c) 1987-2002 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* A. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* B. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* C. Neither the names of the copyright holders nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
|
||||
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* #if !defined(lint)
|
||||
* static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
|
||||
* #endif
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "getopt.h"
|
||||
|
||||
int opterr = 1, /* if error message should be printed */
|
||||
optind = 1, /* index into parent argv vector */
|
||||
optopt, /* character checked for validity */
|
||||
optreset; /* reset getopt */
|
||||
char *optarg; /* argument associated with option */
|
||||
|
||||
#define BADCH (int)'?'
|
||||
#define BADARG (int)':'
|
||||
#define EMSG ""
|
||||
|
||||
/*
|
||||
* getopt --
|
||||
* Parse argc/argv argument vector.
|
||||
*/
|
||||
int
|
||||
getopt( int nargc,
|
||||
char * const *nargv,
|
||||
const char *ostr)
|
||||
{
|
||||
static char *place = EMSG; /* option letter processing */
|
||||
char *oli; /* option letter list index */
|
||||
|
||||
if (optreset || !*place) { /* update scanning pointer */
|
||||
optreset = 0;
|
||||
if (optind >= nargc || *(place = nargv[optind]) != '-') {
|
||||
place = EMSG;
|
||||
return (EOF);
|
||||
}
|
||||
if (place[1] && *++place == '-') { /* found "--" */
|
||||
++optind;
|
||||
place = EMSG;
|
||||
return (EOF);
|
||||
}
|
||||
} /* option letter okay? */
|
||||
if ((optopt = (int)*place++) == (int)':' ||
|
||||
!(oli = (char*) strchr(ostr, optopt))) {
|
||||
/*
|
||||
* if the user didn't specify '-' as an option,
|
||||
* assume it means EOF.
|
||||
*/
|
||||
if (optopt == (int)'-')
|
||||
return (EOF);
|
||||
if (!*place)
|
||||
++optind;
|
||||
if (opterr && *ostr != ':')
|
||||
(void)fprintf(stderr,
|
||||
"illegal option -- %c\n", optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
if (*++oli != ':') { /* don't need argument */
|
||||
optarg = NULL;
|
||||
if (!*place)
|
||||
++optind;
|
||||
}
|
||||
else { /* need an argument */
|
||||
if (*place) /* no white space */
|
||||
optarg = place;
|
||||
else if (nargc <= ++optind) { /* no arg */
|
||||
place = EMSG;
|
||||
if (*ostr == ':')
|
||||
return (BADARG);
|
||||
if (opterr)
|
||||
(void)fprintf(stderr,
|
||||
"option requires an argument -- %c\n",
|
||||
optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
else /* white space */
|
||||
optarg = nargv[optind];
|
||||
place = EMSG;
|
||||
++optind;
|
||||
}
|
||||
return (optopt); /* dump back option letter */
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
#ifndef _HAD_GETOPT_H
|
||||
#define _HAD_GETOPT_H
|
||||
|
||||
/*
|
||||
getopt.h -- header for getopt() replacement function
|
||||
Copyright (C) 1999-2011 Dieter Baron and Thomas Klausner
|
||||
|
||||
This file is part of libzip, a library to manipulate ZIP archives.
|
||||
The authors can be contacted at <libzip@nih.at>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
3. The names of the authors may not be used to endorse or promote
|
||||
products derived from this software without specific prior
|
||||
written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
|
||||
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
|
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern char *optarg;
|
||||
extern int optind;
|
||||
extern int opterr;
|
||||
|
||||
extern int getopt(int, char * const *, const char *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _HAD_GETOPT_H */
|
||||
@@ -0,0 +1,253 @@
|
||||
//--------------------------------------------------------------------------//
|
||||
// This file is in the public domain. //
|
||||
//--------------------------------------------------------------------------//
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <exec/io.h>
|
||||
#include <exec/types.h>
|
||||
#include <exec/memory.h>
|
||||
#include <exec/semaphores.h>
|
||||
#include <clib/exec_protos.h>
|
||||
//--------------------------------------------------------------------------//
|
||||
#include "mem.h"
|
||||
//--------------------------------------------------------------------------//
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
# include <stdio.h>
|
||||
# define DBG_MEMORY 128
|
||||
# define DBG_MEMORY_ADDR 256
|
||||
#endif
|
||||
//--------------------------------------------------------------------------//
|
||||
struct MemoryBlock
|
||||
{
|
||||
struct MemoryBlock *next;
|
||||
size_t size;
|
||||
void *address;
|
||||
};
|
||||
//--------------------------------------------------------------------------//
|
||||
struct MemoryList
|
||||
{
|
||||
struct MemoryBlock *first;
|
||||
struct MemoryBlock *last;
|
||||
long size;
|
||||
long count;
|
||||
long opcount;
|
||||
};
|
||||
//--------------------------------------------------------------------------//
|
||||
static struct MemoryList *list = NULL;
|
||||
//--------------------------------------------------------------------------//
|
||||
void allocerror(char*, size_t);
|
||||
void deallocerror(char*, void*);
|
||||
//--------------------------------------------------------------------------//
|
||||
void* allocmem(size_t size)
|
||||
{
|
||||
struct MemoryBlock *newblock;
|
||||
size_t allocsize;
|
||||
|
||||
if (list == NULL) {
|
||||
list =
|
||||
(struct MemoryList*)
|
||||
AllocVec(sizeof(struct MemoryList), MEMF_ANY | MEMF_CLEAR);
|
||||
|
||||
if (!list) {
|
||||
allocerror("list", sizeof(struct MemoryList));
|
||||
return 0;
|
||||
}
|
||||
|
||||
list->first = NULL;
|
||||
list->last = NULL;
|
||||
list->size = 0;
|
||||
list->count = 0;
|
||||
}
|
||||
|
||||
// Align to bytes of 4
|
||||
allocsize = (size + 3) & ~0x03;
|
||||
|
||||
newblock =
|
||||
(struct MemoryBlock*)
|
||||
AllocVec(sizeof(struct MemoryBlock), MEMF_ANY | MEMF_CLEAR);
|
||||
|
||||
if (!newblock) {
|
||||
allocerror("block", sizeof(struct MemoryBlock));
|
||||
return 0;
|
||||
}
|
||||
|
||||
newblock->address =
|
||||
(struct MemoryBlock*)
|
||||
AllocVec(allocsize, MEMF_ANY | MEMF_CLEAR);
|
||||
|
||||
if (!newblock->address) {
|
||||
FreeVec(newblock);
|
||||
allocerror("memory", allocsize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
newblock->size = allocsize;
|
||||
newblock->next = NULL;
|
||||
|
||||
if(list->first == NULL) {
|
||||
list->first = newblock;
|
||||
list->last = newblock;
|
||||
} else {
|
||||
list->last->next = newblock;
|
||||
list->last = newblock;
|
||||
}
|
||||
|
||||
list->size += allocsize;
|
||||
list->count++;
|
||||
|
||||
list->opcount++;
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if ( debugging & DBG_MEMORY_ADDR && list->opcount % 25 == 0) {
|
||||
fprintf(stderr,
|
||||
"Memory usage: %ld bytes allocated in %ld blocks.\n",
|
||||
list->size,
|
||||
list->count
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if( debugging & DBG_MEMORY_ADDR )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Memory allocated at address (%X)\n",
|
||||
(unsigned int)newblock->address);
|
||||
}
|
||||
#endif
|
||||
|
||||
return newblock->address;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
|
||||
void freemem(void* block)
|
||||
{
|
||||
struct MemoryBlock *current, *last;
|
||||
|
||||
if (list == NULL || block == NULL) {
|
||||
deallocerror("list", 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (block == NULL) {
|
||||
deallocerror("memory", 0);
|
||||
return;
|
||||
}
|
||||
|
||||
last = NULL;
|
||||
current = list->first;
|
||||
while (current != NULL && current->address != block) {
|
||||
last = current;
|
||||
current = current->next;
|
||||
}
|
||||
|
||||
if (current == NULL) {
|
||||
deallocerror("address not found", block);
|
||||
return;
|
||||
}
|
||||
|
||||
list->size -= current->size;
|
||||
list->count--;
|
||||
|
||||
if (list->first == current) {
|
||||
list->first = NULL;
|
||||
list->last = NULL;
|
||||
} else if (list->last == current) {
|
||||
last->next = current->next;
|
||||
list->last = last;
|
||||
} else {
|
||||
last->next = current->next;
|
||||
}
|
||||
|
||||
FreeVec(current->address);
|
||||
FreeVec(current);
|
||||
|
||||
list->opcount++;
|
||||
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if( debugging & DBG_MEMORY_ADDR )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Memory deallocated at address (%X)\n",
|
||||
(unsigned int)block);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void freeall()
|
||||
{
|
||||
struct MemoryBlock *current, *next;
|
||||
|
||||
if (list == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if( debugging & DBG_MEMORY )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Cleaning up (%ld) bytes in (%ld) blocks.\n",
|
||||
list->size,
|
||||
list->count
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
current = list->first;
|
||||
while (current != NULL) {
|
||||
next = current->next;
|
||||
FreeVec(current->address);
|
||||
FreeVec(current);
|
||||
current = next;
|
||||
}
|
||||
|
||||
FreeVec(list);
|
||||
list = NULL;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
|
||||
void allocerror(char *descr, size_t size)
|
||||
{
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if( debugging & DBG_MEMORY_ADDR )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Memory allocation error (%s) with size (%ld)\n",
|
||||
descr,
|
||||
size);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void deallocerror(char *descr, void *p)
|
||||
{
|
||||
#if defined( DEBUG ) || defined( _DEBUG )
|
||||
if( debugging & DBG_MEMORY_ADDR )
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Memory deallocation error (%s) address (%X)\n",
|
||||
descr,
|
||||
(unsigned int)p);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
|
||||
char *strdup(const char *s1)
|
||||
{
|
||||
char *s2;
|
||||
size_t len = strlen(s1);
|
||||
s2 = allocmem(++len);
|
||||
|
||||
if(s2 == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memcpy(s2, s1, --len);
|
||||
return s2;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------//
|
||||
@@ -0,0 +1,18 @@
|
||||
//--------------------------------------------------------------------------//
|
||||
// This file is in the public domain. //
|
||||
//--------------------------------------------------------------------------//
|
||||
#ifndef AMIGA_MEM_H
|
||||
#define AMIGA_MEM_H
|
||||
//--------------------------------------------------------------------------//
|
||||
#include <stddef.h>
|
||||
//--------------------------------------------------------------------------//
|
||||
void* allocmem(size_t);
|
||||
void freemem(void*);
|
||||
void freeall();
|
||||
//--------------------------------------------------------------------------//
|
||||
#define strdup(s) managed_strdup(s)
|
||||
char *strdup(const char *s1);
|
||||
//--------------------------------------------------------------------------//
|
||||
extern unsigned int debugging;
|
||||
//--------------------------------------------------------------------------//
|
||||
#endif
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016 - Carsten Larsen
|
||||
* Copyright (c) 1999 - 2001 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* All rights reserved.
|
||||
@@ -32,13 +33,9 @@
|
||||
*
|
||||
* $Heimdal: inet_ntop.c 21005 2007-06-08 01:54:35Z lha $
|
||||
* $NetBSD: inet_ntop.c,v 1.2 2008/03/22 08:37:21 mlelstv Exp $
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@@ -86,7 +83,7 @@ inet_ntop_v4 (const void *src, char *dst, size_t size)
|
||||
return orig_dst;
|
||||
}
|
||||
|
||||
#ifdef HAVE_IPV6
|
||||
#ifdef IPV6
|
||||
static const char *
|
||||
inet_ntop_v6 (const void *src, char *dst, size_t size)
|
||||
{
|
||||
@@ -123,7 +120,7 @@ inet_ntop_v6 (const void *src, char *dst, size_t size)
|
||||
*dst++ = '\0';
|
||||
return orig_dst;
|
||||
}
|
||||
#endif /* HAVE_IPV6 */
|
||||
#endif /* IPV6 */
|
||||
|
||||
const char *
|
||||
inet_ntop(int af, const void *src, char *dst, size_t size)
|
||||
@@ -131,7 +128,7 @@ inet_ntop(int af, const void *src, char *dst, size_t size)
|
||||
switch (af) {
|
||||
case AF_INET :
|
||||
return inet_ntop_v4 (src, dst, size);
|
||||
#ifdef HAVE_IPV6
|
||||
#ifdef IPV6
|
||||
case AF_INET6 :
|
||||
return inet_ntop_v6 (src, dst, size);
|
||||
#endif
|
||||
@@ -1,4 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016 by Carsten Larsen
|
||||
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
|
||||
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
||||
*
|
||||
@@ -49,9 +50,9 @@
|
||||
*/
|
||||
|
||||
static int inet_pton4(const char *src, unsigned char *dst, int pton);
|
||||
#ifdef INET6
|
||||
#ifdef IPV6
|
||||
static int inet_pton6(const char *src, unsigned char *dst);
|
||||
#endif /* INET6 */
|
||||
#endif /* IPV6 */
|
||||
|
||||
/* int
|
||||
* inet_pton(af, src, dst)
|
||||
@@ -71,10 +72,10 @@ inet_pton(int af, const char *src, void *dst)
|
||||
switch (af) {
|
||||
case AF_INET:
|
||||
return (inet_pton4(src, dst, 1));
|
||||
#ifdef INET6
|
||||
#ifdef IPV6
|
||||
case AF_INET6:
|
||||
return (inet_pton6(src, dst));
|
||||
#endif /* INET6 */
|
||||
#endif /* IPV6 */
|
||||
default:
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
@@ -201,7 +202,7 @@ inet_pton4(const char *src, unsigned char *dst, int pton)
|
||||
return (1);
|
||||
}
|
||||
|
||||
#ifdef INET6
|
||||
#ifdef IPV6
|
||||
/* int
|
||||
* inet_pton6(src, dst)
|
||||
* convert presentation level address to network order binary form.
|
||||
@@ -300,4 +301,4 @@ inet_pton6(const char *src, unsigned char *dst)
|
||||
memcpy(dst, tmp, NS_IN6ADDRSZ);
|
||||
return (1);
|
||||
}
|
||||
#endif /* INET6 */
|
||||
#endif /* IPV6 */
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/* $NetBSD: rand.c,v 1.12 2012/06/25 22:32:45 abs Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
#if 1
|
||||
static char sccsid[] = "@(#)rand.c 8.1 (Berkeley) 6/14/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: rand.c,v 1.12 2012/06/25 22:32:45 abs Exp $");
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef RAND_MAX
|
||||
#define RAND_MAX 2147483647
|
||||
#endif
|
||||
|
||||
static u_long next = 1;
|
||||
|
||||
int
|
||||
rand(void)
|
||||
{
|
||||
/* LINTED integer overflow */
|
||||
return (int)((next = next * 1103515245 + 12345) % ((u_long)RAND_MAX + 1));
|
||||
}
|
||||
|
||||
void
|
||||
srand(u_int seed)
|
||||
{
|
||||
next = seed;
|
||||
}
|
||||
@@ -53,7 +53,6 @@
|
||||
|
||||
static SEQMAP_VALUE *seqmap_map = NULL;
|
||||
static unsigned int seqmap_next_id = 0;
|
||||
//static SEQMAP_VALUE *seqmap_free_list;
|
||||
|
||||
#define SEQMAP_TIMEOUT_IN_S 10
|
||||
#define SEQMAP_UNASSIGNED_HOST_NR UINT_MAX
|
||||
|
||||
+38
-1
@@ -31,12 +31,17 @@
|
||||
*/
|
||||
|
||||
#include "fping.h"
|
||||
#include "config.h"
|
||||
|
||||
int open_ping_socket_ipv4();
|
||||
int open_ping_socket_ipv6();
|
||||
void init_ping_buffer_ipv4(size_t ping_data_size);
|
||||
void init_ping_buffer_ipv6(size_t ping_data_size);
|
||||
void socket_set_src_addr_ipv4(int s, FPING_INADDR src_addr);
|
||||
void socket_set_src_addr_ipv6(int s, FPING_INADDR src_addr);
|
||||
int socket_sendto_ping_ipv4(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq_nr, uint16_t icmp_id_nr);
|
||||
int socket_sendto_ping_ipv6(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq_nr, uint16_t icmp_id_nr);
|
||||
void close_ping_socket_ipv4();
|
||||
void cleanup_ping_buffer_ipv4();
|
||||
|
||||
int open_ping_socket()
|
||||
{
|
||||
@@ -47,6 +52,15 @@ int open_ping_socket()
|
||||
#endif
|
||||
}
|
||||
|
||||
void init_ping_buffer(size_t ping_data_size)
|
||||
{
|
||||
#ifndef IPV6
|
||||
return init_ping_buffer_ipv4(ping_data_size);
|
||||
#else
|
||||
return init_ping_buffer_ipv6(ping_data_size);
|
||||
#endif
|
||||
}
|
||||
|
||||
void socket_set_src_addr(int s, FPING_INADDR src_addr)
|
||||
{
|
||||
#ifndef IPV6
|
||||
@@ -55,3 +69,26 @@ void socket_set_src_addr(int s, FPING_INADDR src_addr)
|
||||
socket_set_src_addr_ipv6(s, src_addr);
|
||||
#endif
|
||||
}
|
||||
|
||||
int socket_sendto_ping(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq_nr, uint16_t icmp_id_nr)
|
||||
{
|
||||
#ifndef IPV6
|
||||
return socket_sendto_ping_ipv4(s, saddr, saddr_len, icmp_seq_nr, icmp_id_nr);
|
||||
#else
|
||||
return socket_sendto_ping_ipv6(s, saddr, saddr_len, icmp_seq_nr, icmp_id_nr);
|
||||
#endif
|
||||
}
|
||||
|
||||
void close_ping_socket()
|
||||
{
|
||||
#ifndef IPV6
|
||||
close_ping_socket_ipv4();
|
||||
#endif
|
||||
}
|
||||
|
||||
void cleanup_ping_buffer()
|
||||
{
|
||||
#ifndef IPV6
|
||||
cleanup_ping_buffer_ipv4();
|
||||
#endif
|
||||
}
|
||||
|
||||
+76
-5
@@ -31,28 +31,34 @@
|
||||
*/
|
||||
|
||||
#include "fping.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/ip_icmp.h>
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
char *ping_buffer = 0;
|
||||
size_t ping_pkt_size;
|
||||
int s = -1;
|
||||
|
||||
int open_ping_socket_ipv4()
|
||||
{
|
||||
struct protoent *proto;
|
||||
int s;
|
||||
|
||||
/* confirm that ICMP is available on this machine */
|
||||
if( ( proto = getprotobyname( "icmp" ) ) == NULL )
|
||||
crash_and_burn( "icmp: unknown protocol" );
|
||||
|
||||
/* create raw socket for ICMP calls (ping) */
|
||||
s = socket( AF_INET, SOCK_RAW, proto->p_proto );
|
||||
s = Socket( AF_INET, SOCK_RAW, proto->p_proto );
|
||||
if( s < 0 ) {
|
||||
/* try non-privileged icmp (works on Mac OSX without privileges, for example) */
|
||||
s = socket( AF_INET, SOCK_DGRAM, proto->p_proto );
|
||||
s = Socket( AF_INET, SOCK_DGRAM, proto->p_proto );
|
||||
if( s < 0 ) {
|
||||
errno_crash_and_burn( "can't create socket (must run as root?)" );
|
||||
}
|
||||
@@ -61,6 +67,15 @@ int open_ping_socket_ipv4()
|
||||
return s;
|
||||
}
|
||||
|
||||
void init_ping_buffer_ipv4(size_t ping_data_size)
|
||||
{
|
||||
/* allocate ping buffer */
|
||||
ping_pkt_size = ping_data_size + ICMP_MINLEN;
|
||||
ping_buffer = (char *) calloc(1, ping_pkt_size);
|
||||
if(!ping_buffer)
|
||||
crash_and_burn( "can't malloc ping packet" );
|
||||
}
|
||||
|
||||
void socket_set_src_addr_ipv4(int s, FPING_INADDR src_addr)
|
||||
{
|
||||
struct sockaddr_in sa;
|
||||
@@ -68,6 +83,62 @@ void socket_set_src_addr_ipv4(int s, FPING_INADDR src_addr)
|
||||
sa.sin_family = AF_INET;
|
||||
sa.sin_addr = src_addr;
|
||||
|
||||
if ( bind( s, (struct sockaddr *)&sa, sizeof( sa ) ) < 0 )
|
||||
if ( Bind( s, (struct sockaddr *)&sa, sizeof( sa ) ) < 0 )
|
||||
errno_crash_and_burn( "cannot bind source address" );
|
||||
}
|
||||
|
||||
unsigned short calcsum(unsigned short *buffer, int length)
|
||||
{
|
||||
unsigned long sum;
|
||||
|
||||
// initialize sum to zero and loop until length (in words) is 0
|
||||
for (sum=0; length>1; length-=2) // sizeof() returns number of bytes, we're interested in number of words
|
||||
sum += *buffer++; // add 1 word of buffer to sum and proceed to the next
|
||||
|
||||
// we may have an extra byte
|
||||
if (length==1)
|
||||
sum += (char)*buffer;
|
||||
|
||||
sum = (sum >> 16) + (sum & 0xFFFF); // add high 16 to low 16
|
||||
sum += (sum >> 16); // add carry
|
||||
return ~sum;
|
||||
}
|
||||
|
||||
int socket_sendto_ping_ipv4(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq_nr, uint16_t icmp_id_nr)
|
||||
{
|
||||
struct icmp *icp;
|
||||
int n;
|
||||
|
||||
icp = (struct icmp *) ping_buffer;
|
||||
|
||||
icp->icmp_type = ICMP_ECHO;
|
||||
icp->icmp_code = 0;
|
||||
icp->icmp_cksum = 0;
|
||||
icp->icmp_seq = htons(icmp_seq_nr);
|
||||
icp->icmp_id = htons(icmp_id_nr);
|
||||
|
||||
if (random_data_flag) {
|
||||
for (n = ((void*)&icp->icmp_data - (void *)icp); n < ping_pkt_size; ++n) {
|
||||
ping_buffer[n] = random() & 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
icp->icmp_cksum = calcsum((unsigned short *) icp, ping_pkt_size);
|
||||
|
||||
n = SendTo(s, (void*)icp, ping_pkt_size, 0, saddr, saddr_len);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
void close_ping_socket_ipv4()
|
||||
{
|
||||
if(s > 0)
|
||||
CloseSocket(s);
|
||||
}
|
||||
|
||||
void cleanup_ping_buffer_ipv4()
|
||||
{
|
||||
if (ping_buffer != 0) {
|
||||
free(ping_buffer);
|
||||
}
|
||||
}
|
||||
|
||||
+38
-3
@@ -31,20 +31,22 @@
|
||||
*/
|
||||
|
||||
#include "fping.h"
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <netinet/icmp6.h>
|
||||
#include <netinet/icmp6.h>
|
||||
|
||||
char *ping_buffer = 0;
|
||||
size_t ping_pkt_size;
|
||||
|
||||
int open_ping_socket_ipv6()
|
||||
{
|
||||
struct protoent *proto;
|
||||
int opton = 1;
|
||||
int s;
|
||||
|
||||
/* confirm that ICMP is available on this machine */
|
||||
@@ -64,6 +66,15 @@ int open_ping_socket_ipv6()
|
||||
return s;
|
||||
}
|
||||
|
||||
void init_ping_buffer_ipv6(size_t ping_data_size)
|
||||
{
|
||||
/* allocate ping buffer */
|
||||
ping_pkt_size = ping_data_size + sizeof(struct icmp6_hdr);
|
||||
ping_buffer = (char *) calloc(1, ping_pkt_size);
|
||||
if(!ping_buffer)
|
||||
crash_and_burn( "can't malloc ping packet" );
|
||||
}
|
||||
|
||||
void socket_set_src_addr_ipv6(int s, FPING_INADDR src_addr)
|
||||
{
|
||||
struct sockaddr_in6 sa;
|
||||
@@ -74,3 +85,27 @@ void socket_set_src_addr_ipv6(int s, FPING_INADDR src_addr)
|
||||
if ( bind( s, (struct sockaddr *)&sa, sizeof( sa ) ) < 0 )
|
||||
errno_crash_and_burn( "cannot bind source address" );
|
||||
}
|
||||
|
||||
int socket_sendto_ping_ipv6(int s, struct sockaddr *saddr, socklen_t saddr_len, uint16_t icmp_seq_nr, uint16_t icmp_id_nr)
|
||||
{
|
||||
struct icmp6_hdr *icp;
|
||||
int n;
|
||||
|
||||
icp = (struct icmp6_hdr *) ping_buffer;
|
||||
icp->icmp6_type = ICMP6_ECHO_REQUEST;
|
||||
icp->icmp6_code = 0;
|
||||
icp->icmp6_seq = htons(icmp_seq_nr);
|
||||
icp->icmp6_id = htons(icmp_id_nr);
|
||||
|
||||
if (random_data_flag) {
|
||||
for (n = sizeof(struct icmp6_hdr); n < ping_pkt_size; ++n) {
|
||||
ping_buffer[n] = random() & 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
icp->icmp6_cksum = 0; // The IPv6 stack calculates the checksum for us...
|
||||
|
||||
n = sendto(s, icp, ping_pkt_size, 0, saddr, saddr_len);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user