]> git.gsnw.org Git - fping.git/commitdiff
Import version 2.4b2_to-ipv6
authorDavid Schweikert <david@schweikert.ch>
Sat, 10 Dec 2011 00:58:41 +0000 (19:58 -0500)
committerDavid Schweikert <david@schweikert.ch>
Sat, 10 Dec 2011 00:58:41 +0000 (19:58 -0500)
19 files changed:
COPYING [new file with mode: 0755]
ChangeLog [new file with mode: 0755]
INSTALL [new file with mode: 0755]
Makefile.am [new file with mode: 0755]
Makefile.in [new file with mode: 0755]
README [new file with mode: 0755]
acconfig.h [new file with mode: 0755]
aclocal.m4 [new file with mode: 0755]
config.h.in [new file with mode: 0755]
configure [new file with mode: 0755]
configure.in [new file with mode: 0755]
fping.8 [new file with mode: 0755]
fping.c [new file with mode: 0755]
install-sh [new file with mode: 0755]
linux.h [new file with mode: 0755]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
options.h [new file with mode: 0755]
stamp-h.in [new file with mode: 0755]

diff --git a/COPYING b/COPYING
new file mode 100755 (executable)
index 0000000..4210b35
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,15 @@
+
+/*
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Stanford University.  The name of the University may not be used 
+ * to endorse or promote products derived from this software without 
+ * specific prior written permission.
+ * 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.
+ */
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100755 (executable)
index 0000000..83c4843
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,312 @@
+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\r
+Jason Ewasiuk <jasone@remote.net>\r
+- Revision v2.4b1\r
+       - added -g option for generating IPs from a start to an end value\r
+               - two available options, generate IPs from start IP to end IP\r
+                 or from a passed netmask, such as 192.168.1.0/24\r
+\r
+Thu Feb 15 2001\r
+Jason Ewasiuk <jasone@remote.net>\r
+- Revision v2.3b1\r
+       - formatting changes to code layout (fping.c)\r
+       NOTE:  Best viewed with a tab stop of 4\r
+       - merged in changes from Debian c/o Herbert Xu\r
+       <herbert@gondor.apana.org.au>\r
+               - Compilation fix on alphas with glibc\r
+               - Alignment issues (note from JE:  in wait_for_reply())\r
+               - A typo with the time specified on the command line\r
+               (note from JE:  bug was using 10 instead of 100)\r
+               - Drop privileges after obtaining socket\r
+               (note from JE:  might be moot, since prog exits if\r
+               user is not root)\r
+       - touched all files in package to this date\r
+       - couple new #ifdefs added for future WIN32 support\r
+       (Haven't got to adding this yet, will take a lot of rewriting.)\r
+\r
+Fri Dec  8 10:33:13 2000  Roland Schemers  <schemers@stanford.edu>\r
+\r
+       * stop using sys_errlist and start using strerror\r
+       fixed bug in output of -C\r
+\r
+Wed Jan  8 11:18:37 1997  Roland Schemers  <schemers@stanford.edu>\r
+\r
+       * Created ChangeLog file. What follows was from the CHANGES file.\r
+\r
+* Revision 2.0  1994/10/31 21:26:23 morgan\r
+\r
+  Substantial rewrite, including new features:\r
+\r
+    support some traditional ping features:\r
+      loop mode\r
+      specify size of data packets\r
+      specify how many pings to send\r
+      show per-response data\r
+      interpret ICMPs other than ICMP Echo response\r
+\r
+  also\r
+\r
+    rewrote main loop completely\r
+    make timings in tenths of milliseconds\r
+    do exponential backoff on retries\r
+    port to more systems\r
+    add some debugging stuff\r
+    do better checking on whether received ICMP is for us\r
+\r
+* Revision 1.24  1993/12/10  23:11:39  schemers\r
+\r
+  commented out seteuid(getuid()) since it isn't needed\r
+\r
+* Revision 1.23  1993/12/10  18:33:41  schemers\r
+\r
+  Took out the -f option for non-root users. This can be enabled by\r
+  defining ENABLE_F_OPTION before compiling. There is a call to\r
+  access before opening the file, but there is a race condition.\r
+  Reading from stdin is much safer.\r
+\r
+\r
+* Revision 1.22  1993/11/16  19:49:24  schemers\r
+\r
+  Took out setuid(getuid()) and used access() system call to\r
+  check for access to the file specified with "-f".\r
\r
+* Revision 1.21  1993/07/20  18:08:19  schemers\r
+\r
+  commented out the test to make sure the ping packet came from the\r
+  same IP address as the one we sent to. This could cause problems on\r
+  multi-homed hosts.\r
+\r
+* Revision 1.20  1993/02/23  00:16:38  schemers\r
+\r
+fixed syntax error (should have compiled before checking in...)\r
+\r
+* Revision 1.19  1993/02/23  00:15:15  schemers\r
+\r
+turned off printing of "is alive" when -a is specified.\r
+\r
+* Revision 1.18  1992/07/28  15:16:44  schemers\r
+\r
+added a fflush(stdout) call before the summary is sent to stderr, so\r
+everything shows up in the right order.\r
+\r
+* Revision 1.17  1992/07/23  03:29:42  schemers\r
+* Revision 1.16  1992/07/22  19:24:37  schemers\r
+\r
+Fixed declaration of timeval_diff. Didn't notice the problem because\r
+I use 'cc' in stead of gcc under Ultrix. Time to switch? :-)\r
+\r
+Modified file reaing so it would skip blank lines or lines starting\r
+with a '#'. Now you can do something like:\r
+\r
+fping -ad < /etc/hosts\r
+\r
+* Revision 1.15  1992/07/21  17:07:18  schemers\r
+\r
+Put in sanity checks so only root can specify "dangerous" options.\r
+Changed usage to show switchs in alphabetical order.\r
+* Revision 1.14  1992/07/21  16:40:52  schemers\r
+* Revision 1.13  1992/07/17  21:02:17  schemers\r
+\r
+Changed the default timeout to 2500 msec, and retry to 3. This was\r
+due to suggestions from people with slow (WAN) networks. The default\r
+1 sec timeout was too fast.\r
+\r
+\r
+Added '-e' option for showing elapsed (round-trip) times on pakets, and\r
+modified the -s option to include min, max, and average round-trip times,\r
+and over all elapsed time.\r
+\r
+Modified action taken when a error is returned from sendto. The action\r
+taken now considers the host unreachable and prints the hostname \r
+followed by the errno message. The program will not exit and will continue\r
+to try other hosts.\r
+\r
+* Revision 1.12  1992/07/17  16:38:54  schemers\r
+* Revision 1.11  1992/07/17  16:28:38  schemers\r
+\r
+ move socket create call so I could do a setuid(getuid()) before the\r
+ fopen call is made. Once the socket is created root privs aren't needed\r
+ to send stuff out on it.\r
+\r
+ moved num_timeout counter. It really was for debug purposes and didn't\r
+ make sense to the general public :-) Now it is the number of timeouts\r
+ (pings that didn't get received with the time limit).\r
+\r
+\r
+* Revision 1.10 1992/07/16  16:24:38  schemers\r
+* Revision 1.9  1992/07/16  16:00:04  schemers\r
+* Revision 1.8  1992/07/16  05:44:41  schemers\r
+\r
+Added _NO_PROTO stuff for older compilers, and _POSIX_SOURCE\r
+for unistd.h, and _POSIX_SOURCE for stdlib.h. Also added\r
+check for __cplusplus.\r
+\r
+Now compiles ok under Ultrix 3.1, and Sun4 using cc. Also compiled\r
+ok using g++ 2.2.2.\r
+\r
+Changed '-a' and '-u' flags to be mutually exclusive (makes sense, since\r
+specifiying both '-a' and '-u' is the same as not specifiying anything.\r
+Since '-a' and '-u' are mutually exclusive, these options now only print\r
+the hostname, and not the 'is alive' or 'is unreachable'  messages.\r
+This makes it much easier to do stuff like:\r
+\r
+#!/usr/local/bin/perl\r
+$hosts_to_backup=`cat /etc/hosts.backup|fping -a`;\r
+\r
+Since you don't have to strip off the 'is alive' messages.\r
+\r
+Changed usage to and stats to print to stderr instead of stdout.\r
+\r
+-----------------------------------------------------------------------------\r
+\r
+RCS header info from original fping.c package (no longer required)\r
+\r
+/* \r
+ ***************************************************\r
+ *\r
+ * Standard RCS Header information (see co(1))\r
+ *\r
+ * $Author: schemers $\r
+ *\r
+ * $Date: 1997/01/08 20:29:33 $\r
+ *\r
+ * $Revision: 2.2 $\r
+ *\r
+ * $Locker:  $\r
+ *\r
+ * $Source: /afs/ir/group/networking/src/fping/fping-2.2/src/RCS/fping.c,v $\r
+ *\r
+ * $State: Exp $\r
+ *\r
+ * $Log: fping.c,v $\r
+ *\r
+ * Revision 2.2  1997/01/08 20:29:33  schemers\r
+ * changes for autoconf/automake\r
+ *\r
+ * Revision 2.1  1997/01/08 19:07:18  schemers\r
+ * checked in RL "Bob"'s changes before configure'ing\r
+ *\r
+ * Revision 2.0  1994/10/31  21:26:23  schemers\r
+ * many changes by RL "Bob" Morgan\r
+ *   add timing data collection, loop mode, per-packet output, etc\r
+ *\r
+ * Revision 1.24  1993/12/10  23:11:39  schemers\r
+ * commented out seteuid(getuid()) since it isn't needed\r
+ *\r
+ * Revision 1.23  1993/12/10  18:33:41  schemers\r
+ * Took out the -f option for non-root users. This can be enabled by\r
+ * defining ENABLE_F_OPTION before compiling. There is a call to\r
+ * access before opening the file, but there is a race condition.\r
+ * Reading from stdin is much safer.\r
+ *\r
+ * Revision 1.22  1993/11/16  19:49:24  schemers\r
+ * Took out setuid(getuid()) and used access() system call to\r
+ * check for access to the file specified with "-f".\r
+ *\r
+ * Revision 1.21  1993/07/20  18:08:19  schemers\r
+ * commented out the test to make sure the ping packet came from the\r
+ * same IP address as the one we sent to. This could cause problems on\r
+ * multi-homed hosts.\r
+ *\r
+ * Revision 1.20  1993/02/23  00:16:38  schemers\r
+ * fixed syntax error (should have compiled before checking in...)\r
+ *\r
+ * Revision 1.19  1993/02/23  00:15:15  schemers\r
+ * turned off printing of "is alive" when -a is specified.\r
+ *\r
+ * Revision 1.18  1992/07/28  15:16:44  schemers\r
+ * added a fflush(stdout) call before the summary is sent to stderr, so\r
+ * everything shows up in the right order.\r
+ *\r
+ * Revision 1.17  1992/07/23  03:29:42  schemers\r
+ * fixed declaration of timeval_diff.\r
+ *\r
+ * Revision 1.16  1992/07/22  19:24:37  schemers\r
+ * Modified file reading so it would skip blanks lines or lines starting\r
+ * with a '#'. Now you can do something like:\r
+ *\r
+ * fping -ad < /etc/hosts\r
+ *\r
+ * Revision 1.15  1992/07/21  17:07:18  schemers\r
+ * Put in sanity checks so only root can specify "dangerous" options.\r
+ * Changed usage to show switchs in alphabetical order.\r
+ *\r
+ * Revision 1.14  1992/07/21  16:40:52  schemers\r
+ * Now when sendto returns an error, the host is considered unreachable and\r
+ * and the error message (from errno) is displayed.\r
+ *\r
+ * Revision 1.13  1992/07/17  21:02:17  schemers\r
+ * changed default timeout to 2500 msec (for WANs), and default try\r
+ * to 3. This gives 10 second overall timeout.\r
+ *\r
+ * Added -e option for showing elapsed (round-trip) time on packets\r
+ *\r
+ * Modified -s option to inlude to round-trip stats\r
+ *\r
+ * Added #ifndef DEFAULT_* stuff its easier to change the defaults\r
+ *\r
+ * Reorganized main loop.\r
+ *\r
+ * cleaned up timeval stuff. removed set_timeval and timeval_expired\r
+ * since they aren't needed anymore. Just use timeval_diff.\r
+ *\r
+ * Revision 1.12  1992/07/17  16:38:54  schemers\r
+ * move socket create call so I could do a setuid(getuid()) before the\r
+ * fopen call is made. Once the socket is created root privs aren't needed\r
+ * to send stuff out on it.\r
+ *\r
+ * Revision 1.11  1992/07/17  16:28:38  schemers\r
+ * moved num_timeout counter. It really was for debug purposes and didn't\r
+ * make sense to the general public :-) Now it is the number of timeouts\r
+ * (pings that didn't get received with the time limit).\r
+ *\r
+ * Revision 1.10  1992/07/16  16:24:38  schemers\r
+ * changed usage() to use fprintf(stderr,"...");\r
+ *\r
+ * Revision 1.9  1992/07/16  16:00:04  schemers\r
+ * Added _NO_PROTO stuff for older compilers, and _POSIX_SOURCE\r
+ * for unistd.h, and _POSIX_SOURCE for stdlib.h. Also added\r
+ * check for __cplusplus.\r
+ *\r
+ * Revision 1.8  1992/07/16  05:44:41  schemers\r
+ * changed -a and -u to only show hostname in results. This is\r
+ * for easier parsing. Also added -v flag\r
+ *\r
+ * Revision 1.7  1992/07/14  18:45:23  schemers\r
+ * initialized last_time in add_host function\r
+ *\r
+ * Revision 1.6  1992/07/14  18:32:40  schemers\r
+ * changed select to use FD_ macros\r
+ *\r
+ * Revision 1.5  1992/07/14  17:21:22  schemers\r
+ * standardized exit status codes\r
+ *\r
+ * Revision 1.4  1992/06/26  15:25:35  schemers\r
+ * changed name from rrping to fping\r
+ *\r
+ * Revision 1.3  1992/06/24  15:39:32  schemers\r
+ * added -d option for unreachable systems\r
+ *\r
+ * Revision 1.2  1992/06/23  03:01:23  schemers\r
+ * misc fixes from R.L. "Bob" Morgan\r
+ *\r
+ * Revision 1.1  1992/06/19  18:23:52  schemers\r
+ * Initial revision\r
+ *\r
+ *--------------------------------------------------\r
+ * Copyright (c) 1992, 1994, 1997 Board of Trustees\r
+ *            Leland Stanford Jr. University\r
+ ***************************************************\r
+ */\r
+\r
+\r
diff --git a/INSTALL b/INSTALL
new file mode 100755 (executable)
index 0000000..24566b5
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,185 @@
+Basic Installation
+==================
+
+   These are generic installation 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.
+
+
+Problems and Notes
+==================
+
+Apr 2001
+- Making fping requires 'm4' and 'autoheader'
+- fping is known not to build on Solaris. (Solaris lacks 'autoheader')
+- fping has been reported to bug out if a file contains more than 3600 addresses to scan.
+- If you are having problems compiling, try an earlier version (2.2b2 for example)
diff --git a/Makefile.am b/Makefile.am
new file mode 100755 (executable)
index 0000000..1341eda
--- /dev/null
@@ -0,0 +1,5 @@
+sbin_PROGRAMS = fping
+fping_SOURCES = fping.c options.h linux.h
+man_MANS = fping.8
+AUTOMAKE_OPTIONS=foreign
+EXTRA_DIST = $(man_MANS)
diff --git a/Makefile.in b/Makefile.in
new file mode 100755 (executable)
index 0000000..f6b6716
--- /dev/null
@@ -0,0 +1,397 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CC = @CC@
+CPP = @CPP@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+sbin_PROGRAMS = fping
+fping_SOURCES = fping.c options.h linux.h
+man_MANS = fping.8
+AUTOMAKE_OPTIONS = foreign
+EXTRA_DIST = $(man_MANS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(sbin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I.
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+fping_OBJECTS =  fping.o
+fping_LDADD = $(LDADD)
+fping_DEPENDENCIES = 
+fping_LDFLAGS = 
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+man8dir = $(mandir)/man8
+MANS = $(man_MANS)
+
+NROFF = nroff
+DIST_COMMON =  README ./stamp-h.in COPYING ChangeLog INSTALL Makefile.am \
+Makefile.in acconfig.h aclocal.m4 config.h.in configure configure.in \
+install-sh missing mkinstalldirs
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+SOURCES = $(fping_SOURCES)
+OBJECTS = $(fping_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4):  configure.in 
+       cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+       cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+       @if test ! -f $@; then \
+               rm -f stamp-h; \
+               $(MAKE) stamp-h; \
+       else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES= CONFIG_HEADERS=config.h \
+            $(SHELL) ./config.status
+       @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+       @if test ! -f $@; then \
+               rm -f $(srcdir)/stamp-h.in; \
+               $(MAKE) $(srcdir)/stamp-h.in; \
+       else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
+       cd $(top_srcdir) && $(AUTOHEADER)
+       @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+       -rm -f config.h
+
+maintainer-clean-hdr:
+
+mostlyclean-sbinPROGRAMS:
+
+clean-sbinPROGRAMS:
+       -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+
+distclean-sbinPROGRAMS:
+
+maintainer-clean-sbinPROGRAMS:
+
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(sbindir)
+       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo "  $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+            $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+         else :; fi; \
+       done
+
+uninstall-sbinPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       list='$(sbin_PROGRAMS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       done
+
+.c.o:
+       $(COMPILE) -c $<
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+fping: $(fping_OBJECTS) $(fping_DEPENDENCIES)
+       @rm -f fping
+       $(LINK) $(fping_LDFLAGS) $(fping_OBJECTS) $(fping_LDADD) $(LIBS)
+
+install-man8:
+       $(mkinstalldirs) $(DESTDIR)$(man8dir)
+       @list='$(man8_MANS)'; \
+       l2='$(man_MANS)'; for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
+         $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
+       done
+
+uninstall-man8:
+       @list='$(man8_MANS)'; \
+       l2='$(man_MANS)'; for i in $$l2; do \
+         case "$$i" in \
+           *.8*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
+         rm -f $(DESTDIR)$(man8dir)/$$inst; \
+       done
+install-man: $(MANS)
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-man8
+uninstall-man:
+       @$(NORMAL_UNINSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) uninstall-man8
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       -rm -rf $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+       mkdir $(distdir)/=build
+       mkdir $(distdir)/=inst
+       dc_install_base=`cd $(distdir)/=inst && pwd`; \
+       cd $(distdir)/=build \
+         && ../configure --srcdir=.. --prefix=$$dc_install_base \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) dist
+       -rm -rf $(distdir)
+       @banner="$(distdir).tar.gz is ready for distribution"; \
+       dashes=`echo "$$banner" | sed s/./=/g`; \
+       echo "$$dashes"; \
+       echo "$$banner"; \
+       echo "$$dashes"
+dist: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+dist-all: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+distdir: $(DISTFILES)
+       -rm -rf $(distdir)
+       mkdir $(distdir)
+       -chmod 777 $(distdir)
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+all-recursive-am: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am: install-sbinPROGRAMS
+install-exec: install-exec-am
+
+install-data-am: install-man
+install-data: install-data-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-sbinPROGRAMS uninstall-man
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+all-redirect: all-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+       $(mkinstalldirs)  $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir)/man8
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-hdr mostlyclean-sbinPROGRAMS \
+               mostlyclean-compile mostlyclean-tags \
+               mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am:  clean-hdr clean-sbinPROGRAMS clean-compile clean-tags \
+               clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am:  distclean-hdr distclean-sbinPROGRAMS distclean-compile \
+               distclean-tags distclean-generic clean-am
+
+distclean: distclean-am
+       -rm -f config.status
+
+maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-sbinPROGRAMS \
+               maintainer-clean-compile maintainer-clean-tags \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+       -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS clean-sbinPROGRAMS \
+maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \
+install-sbinPROGRAMS mostlyclean-compile distclean-compile \
+clean-compile maintainer-clean-compile install-man8 uninstall-man8 \
+install-man uninstall-man tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck all-recursive-am install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/README b/README
new file mode 100755 (executable)
index 0000000..08a7ca6
--- /dev/null
+++ b/README
@@ -0,0 +1,64 @@
+fping README
+------------
+
+Current maintainer:
+
+David Papp - david@remote.net 
+
+
+fping website:  http://www.fping.com
+
+
+Original author:  Roland Schemers (schemers@stanford.edu)
+Previous maintainer:  RL "Bob" Morgan (morgan@stanford.edu)
+IPv6 Support: Jeroen Massar (jeroen@unfix.org / jeroen@ipng.nl)
+
+
+Suggestions and patches:
+
+....
+
+------------------------------------------------------------------------------
+
+Original README from 1992! 5 years ago? Time flies...
+
+        fping - A tool to quickly ping N number of hosts to determine
+        their reachability.
+
+             Roland J. Schemers III - Stanford University
+                   schemers@Stanford.EDU
+
+      fping is a ping(1) like program which uses the Internet Control
+      Message Protocol (ICMP) echo request to determine if a host is
+      up. fping is different from ping in that you can specify any
+      number of hosts on the command line, or specify a file containing
+      the lists of hosts to ping. Instead of trying one host until it
+      timeouts or replies, fping will send out a ping packet and move
+      on to the next host in a round-robin fashion. If a host replies,
+      it is noted and removed from the list of hosts to check. If a host
+      does not respond within a certain time limit and/or retry limit it 
+      will be considered unreachable. 
+
+Site
+      Stanford University has a large TCP/IP network with over 16,000 
+      assigned IP addresses and over 100 IP subnets.
+
+Problem and Issues
+
+      With a large a number of IP addresses in use, its becomes more and
+      more time consuming to check on which IP addresses are actively
+      in use, and which critical machines (routers, bridges, servers, etc)
+      are reachable. One example is we have a program which goes through
+      all of our routers arp caches looking for IP addresses that are in 
+      use. After finding a list of IP addresses that aren't in any arp
+      caches fping can then be used to see if these IP addresses really
+      aren't being used, or are just behind the routers. Checking 2500
+      hosts (99% of which are unreachable) via ping can take hours.
+       
+      fping was written to solve the problem of pinging N number of hosts
+      in an efficient manner. By sending out pings in a round-robin fashion
+      and checking on responses as they come in at random, a large number of 
+      hosts can be checked at once.
+
+      Unlike ping, fping is meant to be used in scripts and its
+      output is easy to parse.
diff --git a/acconfig.h b/acconfig.h
new file mode 100755 (executable)
index 0000000..e623979
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+@TOP@
+
+/* VERSION (from configure.in) */
+#undef VERSION
+
+
+@BOTTOM@
+
+/* some OSes do not define this ... lets take a wild guess */
+
+#ifndef INADDR_NONE
+#  define INADDR_NONE 0xffffffffU
+#endif
+
+#endif /* CONFIG_H */
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100755 (executable)
index 0000000..f23ba29
--- /dev/null
@@ -0,0 +1,127 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated.  We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+  case " <<$>>CONFIG_HEADERS " in
+  *" <<$>>am_file "*<<)>>
+    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+    ;;
+  esac
+  am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
diff --git a/config.h.in b/config.h.in
new file mode 100755 (executable)
index 0000000..712dc0c
--- /dev/null
@@ -0,0 +1,40 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+#ifndef CONFIG_H
+#define CONFIG_H
+
+
+/* VERSION (from configure.in) */
+#undef VERSION
+
+/* Define if you have the <stdlib.h> header file.  */
+#undef HAVE_STDLIB_H
+
+/* Define if you have the <sys/file.h> header file.  */
+#undef HAVE_SYS_FILE_H
+
+/* Define if you have the <sys/select.h> header file.  */
+#undef HAVE_SYS_SELECT_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the nsl library (-lnsl).  */
+#undef HAVE_LIBNSL
+
+/* Define if you have the socket library (-lsocket).  */
+#undef HAVE_LIBSOCKET
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
+
+/* some OSes do not define this ... lets take a wild guess */
+
+#ifndef INADDR_NONE
+#  define INADDR_NONE 0xffffffffU
+#endif
+
+#endif /* CONFIG_H */
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..31da3b3
--- /dev/null
+++ b/configure
@@ -0,0 +1,3258 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.50.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+cross_compiling=no
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Avoid depending upon Character Ranges.
+ac_cr_az='abcdefghijklmnopqrstuvwxyz'
+ac_cr_AZ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ac_cr_09='0123456789'
+ac_cr_alnum=$ac_cr_az$ac_cr_AZ$ac_cr_09
+
+# Sed expression to map a string onto a valid sh and CPP variable names.
+ac_tr_sh="sed y%*+%pp%;s%[^_$ac_cr_alnum]%_%g"
+ac_tr_cpp="sed y%*$ac_cr_az%P$ac_cr_AZ%;s%[^_$ac_cr_alnum]%_%g"
+
+ac_unique_file="fping.c"
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$ac_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$ac_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+              localstatedir libdir includedir oldincludedir infodir mandir \
+              exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    NONE ) ;;
+    *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<EOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+EOF
+
+  cat <<EOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+EOF
+
+  cat <<\EOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\EOF
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+    cd $ac_subdir
+    # A "../" for each directory in /$ac_subdir.
+    ac_dots=`echo $ac_subdir |
+             sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+    case $srcdir in
+    .) # No --srcdir option.  We are building in place.
+      ac_sub_srcdir=$srcdir ;;
+    [\\/]* | ?:[\\/]* ) # Absolute path.
+      ac_sub_srcdir=$srcdir/$ac_subdir ;;
+    *) # Relative path.
+      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+    esac
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_sub_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_sub_srcdir/configure; then
+      echo
+      $SHELL $ac_sub_srcdir/configure  --help=recursive
+    elif test -f $ac_sub_srcdir/configure.ac ||
+           test -f $ac_sub_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\EOF
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.50.  Invocation command line was
+
+  $ $0 $@
+
+EOF
+{
+cat <<_ASUNAME
+## ---------- ##
+## Platform.  ##
+## ---------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests.  ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+  case $ac_arg in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+    ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+    ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+    ac_sep=" " ;;
+  *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+     ac_sep=" " ;;
+  esac
+  # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  echo >&5
+  echo "## ----------------- ##" >&5
+  echo "## Cache variables.  ##" >&5
+  echo "## ----------------- ##" >&5
+  echo >&5
+  # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+        "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+         s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+        "s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} >&5
+  sed "/^$/d" confdefs.h >conftest.log
+  if test -s conftest.log; then
+    echo >&5
+    echo "## ------------ ##" >&5
+    echo "## confdefs.h.  ##" >&5
+    echo "## ------------ ##" >&5
+    echo >&5
+    cat conftest.log >&5
+  fi
+  (echo; echo) >&5
+  test "$ac_signal" != 0 &&
+    echo "$as_me: caught signal $ac_signal" >&5
+  echo "$as_me: exit $exit_status" >&5
+  rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_status=$?; ac_signal='$ac_signal'; { (exit $ac_status); exit $ac_status; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:812: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    cat "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:823: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:831: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_suggest_removing_cache=false
+for ac_var in `(set) 2>&1 |
+               sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:847: WARNING: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: WARNING: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_suggest_removing_cache=: ;;
+    ,set)
+      { echo "$as_me:851: WARNING: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: WARNING: \`$ac_var' was not set in the previous run" >&2;}
+      ac_suggest_removing_cache=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+        { echo "$as_me:857: WARNING: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: WARNING: \`$ac_var' has changed since the previous run:" >&2;}
+        { echo "$as_me:859: WARNING:   former value:  $ac_old_val" >&5
+echo "$as_me: WARNING:   former value:  $ac_old_val" >&2;}
+        { echo "$as_me:861: WARNING:   current value: $ac_new_val" >&5
+echo "$as_me: WARNING:   current value: $ac_new_val" >&2;}
+        ac_suggest_removing_cache=:
+      fi;;
+  esac
+done
+if $ac_suggest_removing_cache; then
+  { echo "$as_me:868: WARNING: changes in the environment can compromise the build" >&5
+echo "$as_me: WARNING: changes in the environment can compromise the build" >&2;}
+  { echo "$as_me:870: WARNING: consider removing $cache_file and starting over" >&5
+echo "$as_me: WARNING: consider removing $cache_file and starting over" >&2;}
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+echo "#! $SHELL" >conftest.sh
+echo  "exit 0"   >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:889: PATH=\".;.\"; conftest.sh") >&5
+  (PATH=".;."; conftest.sh) 2>&5
+  ac_status=$?
+  echo "$as_me:892: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  ac_path_separator=';'
+else
+  ac_path_separator=:
+fi
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:918: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:938: checking for a BSD compatible install" >&5
+echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    ac_save_IFS=$IFS; IFS=$ac_path_separator
+  for ac_dir in $PATH; do
+    IFS=$ac_save_IFS
+    # Account for people who put trailing slashes in PATH elements.
+    case $ac_dir/ in
+    / | ./ | .// | /cC/* \
+    | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
+    | /usr/ucb/* ) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if $as_executable_p "$ac_dir/$ac_prog"; then
+         if test $ac_prog = install &&
+            grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:987: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:998: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "$*" != "X $srcdir/configure conftestfile" \
+      && test "$*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:1021: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:1034: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f conftest*
+echo "$as_me:1041: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF >conftest.sed
+s,\\,\\\\,g; s,\$,$$,g
+EOF
+  program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+  rm -f conftest.sed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},;$program_transform_name"
+
+# sed with no file args requires a program.
+test -z "$program_transform_name" && program_transform_name="s,x,x,"
+
+echo "$as_me:1062: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:1082: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:1086: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+PACKAGE=fping
+
+VERSION=2.4b2_to
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  { { echo "$as_me:1096: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+cat >>confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >>confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo "$as_me:1110: checking for working aclocal" >&5
+echo $ECHO_N "checking for working aclocal... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+   ACLOCAL=aclocal
+   echo "$as_me:1117: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+   ACLOCAL="$missing_dir/missing aclocal"
+   echo "$as_me:1121: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:1125: checking for working autoconf" >&5
+echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+   AUTOCONF=autoconf
+   echo "$as_me:1132: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+   AUTOCONF="$missing_dir/missing autoconf"
+   echo "$as_me:1136: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:1140: checking for working automake" >&5
+echo $ECHO_N "checking for working automake... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+   AUTOMAKE=automake
+   echo "$as_me:1147: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+   AUTOMAKE="$missing_dir/missing automake"
+   echo "$as_me:1151: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:1155: checking for working autoheader" >&5
+echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+   AUTOHEADER=autoheader
+   echo "$as_me:1162: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+   AUTOHEADER="$missing_dir/missing autoheader"
+   echo "$as_me:1166: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+echo "$as_me:1170: checking for working makeinfo" >&5
+echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+   MAKEINFO=makeinfo
+   echo "$as_me:1177: result: found" >&5
+echo "${ECHO_T}found" >&6
+else
+   MAKEINFO="$missing_dir/missing makeinfo"
+   echo "$as_me:1181: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+fi
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_config_commands="$ac_config_commands default-1"
+
+#VERSION=2.4b2
+#PACKAGE=fping
+
+cat >>confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:1204: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1219: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1227: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1230: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:1239: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1254: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1262: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1265: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:1278: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1293: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1301: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1304: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1313: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1328: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1336: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1339: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1352: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+  ac_prog_rejected=yes
+  continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1372: found $ac_dir/$ac_word" >&5
+break
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" ${1+"$@"}
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1394: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1397: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:1408: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1423: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:1431: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:1434: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1447: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1462: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:1470: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:1473: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+test -z "$CC" && { { echo "$as_me:1485: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1490 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compiler, and finding out an intuition
+# of exeext.
+echo "$as_me:1506: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:1509: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:1512: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `ls a.exe conftest.exe a.* conftest conftest.* 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    a.out ) # We found the default executable, but exeext='' is most
+            # certainly right.
+            break;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1529: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1535: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1540: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:1546: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1549: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:1556: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:1564: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1571: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1573: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1576: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1578: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:1581: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+          export ac_cv_exeext
+          break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:1597: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1603: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:1609: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1615 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1627: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1630: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1642: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1649: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1653: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1659 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1674: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1677: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1680: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1683: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:1695: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:1701: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1707 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1719: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1722: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1725: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1728: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:1738: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1765: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1768: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1771: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1774: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   ''\
+   '#include <stdlib.h>' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1786 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1799: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1802: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1805: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1808: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1818 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1830: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:1833: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:1836: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:1839: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+echo '#ifdef __cplusplus' >>confdefs.h
+echo $ac_declaration      >>confdefs.h
+echo '#endif'             >>confdefs.h
+
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:1868: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      # break 2 since there is a loop in there.
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1890 "configure"
+#include "confdefs.h"
+#include <assert.h>
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:1895: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1901: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1924 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:1928: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1934: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break 2
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:1971: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 1981 "configure"
+#include "confdefs.h"
+#include <assert.h>
+                     Syntax error
+_ACEOF
+if { (eval echo "$as_me:1986: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:1992: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2015 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:2019: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2025: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:2053: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:2076: checking for a BSD compatible install" >&5
+echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    ac_save_IFS=$IFS; IFS=$ac_path_separator
+  for ac_dir in $PATH; do
+    IFS=$ac_save_IFS
+    # Account for people who put trailing slashes in PATH elements.
+    case $ac_dir/ in
+    / | ./ | .// | /cC/* \
+    | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
+    | /usr/ucb/* ) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if $as_executable_p "$ac_dir/$ac_prog"; then
+         if test $ac_prog = install &&
+            grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:2125: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:2136: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2142 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostbyname (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gethostbyname ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+f = gethostbyname;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2173: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2176: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2179: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2182: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:2192: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6
+
+if test $ac_cv_func_gethostbyname = no; then
+
+echo "$as_me:2197: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 2205 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2224: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2227: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2230: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2233: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:2244: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+  cat >>confdefs.h <<EOF
+#define HAVE_LIBNSL 1
+EOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+echo "$as_me:2256: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6
+if test "${ac_cv_func_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2262 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char connect (); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char connect ();
+char (*f) ();
+
+int
+main ()
+{
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_connect) || defined (__stub___connect)
+choke me
+#else
+f = connect;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2293: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2296: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2299: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2302: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:2312: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6
+
+if test $ac_cv_func_connect = no; then
+
+echo "$as_me:2317: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 2325 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char connect ();
+int
+main ()
+{
+connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2344: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2347: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:2350: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2353: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_socket_connect=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:2364: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6
+if test $ac_cv_lib_socket_connect = yes; then
+  cat >>confdefs.h <<EOF
+#define HAVE_LIBSOCKET 1
+EOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+
+fi
+
+for ac_header in unistd.h sys/file.h stdlib.h sys/select.h
+do
+ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh`
+echo "$as_me:2380: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$ac_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line 2386 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:2390: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  egrep -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:2396: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$ac_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  eval "$ac_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+fi
+echo "$as_me:2415: result: `eval echo '${'$ac_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$ac_ac_Header'}'`" >&6
+if test `eval echo '${'$ac_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $ac_tr_cpp` 1
+EOF
+
+fi
+done
+
+ac_config_files="$ac_config_files Makefile"
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+        "s/'/'\\\\''/g;
+         s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+        "s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[   ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[     ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:2505: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\EOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.50,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    shift
+    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+    shift
+    ;;
+  -*);;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_need_defaults=false;;
+  esac
+
+  case $1 in
+  # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+    exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:2681: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    shift
+    CONFIG_FILES="$CONFIG_FILES $1"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $1"
+    ac_need_defaults=false;;
+
+  # Handling of arguments.
+  'Makefile' ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  'default-1' ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  'config.h' ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:2705: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+  *) { { echo "$as_me:2710: error: invalid argument: $1" >&5
+echo "$as_me: error: invalid argument: $1" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+  shift
+done
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status.  ##
+## ----------------------- ##
+
+This file was extended by $as_me 2.50, executed with
+  > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit $?); exit $?; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+  tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=$TMPDIR/cs$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+   { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+#
+# INIT-COMMANDS section.
+#
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CPP@,$CPP,;t t
+CEOF
+
+EOF
+
+  cat >>$CONFIG_STATUS <<\EOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case $srcdir in
+  .)  ac_srcdir=.
+      if test -z "$ac_dots"; then
+         ac_top_srcdir=.
+      else
+         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+      fi ;;
+  [\\/]* | ?:[\\/]* )
+      ac_srcdir=$srcdir$ac_dir_suffix;
+      ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_dots$srcdir ;;
+  esac
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_dots$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:2945: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated automatically by config.status.  */
+  configure_input="Generated automatically from `echo $ac_file_in |
+                                                 sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:2963: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:2976: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+  sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='[       ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+        cat >$tmp/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:3037: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:3048: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo $srcdir/$f
+         else
+           # /dev/null tree
+           { { echo "$as_me:3061: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[     ]*$//' $ac_file_inputs >$tmp/in
+
+EOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\EOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[   ]*#[    ]*define[       ][      ]*\(\([^        (][^    (]*\)([^)]*)\)[         ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
+t end
+s,^[   ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+EOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\EOF
+s,^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+EOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if egrep "^[   ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[    ]*#[    ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # egrep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[    ]*#[    ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\EOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated automatically by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated automatically by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+      { echo "$as_me:3178: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+        { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+      fi
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+
+  case $ac_dest in
+    default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;;
+  esac
+done
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
+EOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
diff --git a/configure.in b/configure.in
new file mode 100755 (executable)
index 0000000..59611d5
--- /dev/null
@@ -0,0 +1,32 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(fping.c)
+AM_INIT_AUTOMAKE(fping, 2.4b2_to_ipv6)
+
+AM_CONFIG_HEADER(config.h)
+#VERSION=2.4b2
+#PACKAGE=fping
+AC_SUBST(PACKAGE)
+AC_SUBST(VERSION)
+AC_DEFINE_UNQUOTED(VERSION,"$VERSION")
+
+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
+
+dnl Checks for header files.
+AC_CHECK_HEADERS(unistd.h sys/file.h stdlib.h sys/select.h)
+
+AC_OUTPUT(Makefile)
diff --git a/fping.8 b/fping.8
new file mode 100755 (executable)
index 0000000..254804e
--- /dev/null
+++ b/fping.8
@@ -0,0 +1,220 @@
+.TH fping l\r
+.SH NAME\r
+fping \- send ICMP ECHO_REQUEST packets to network hosts\r
+.SH SYNOPSIS\r
+.B fping\r
+[ \fIoptions\fR ]\r
+[ \fIsystems...\fR ]\r
+\r
+.SH DESCRIPTION\r
+.NXR "fping command"\r
+.NXR "ICMP ECHO_REQUEST"\r
+\r
+      \r
+.B fping \r
+is a \r
+.MS ping 8\r
+like program which uses the Internet Control\r
+Message Protocol (ICMP) echo request to determine if a target host is\r
+responding. \r
+.B fping \r
+differs from ping in that you can specify any\r
+number of targets on the command line, or specify a file containing\r
+the lists of targets to ping. Instead of sending to one target until it\r
+times out or replies, \r
+.B fping \r
+will send out a ping packet and move\r
+on to the next target in a round-robin fashion. \r
+.PP\r
+In the default mode, if a target replies,\r
+it is noted and removed from the list of targets to check; if a target\r
+does not respond within a certain time limit and/or retry limit it \r
+is designated as unreachable.  \r
+.B fping \r
+also supports sending a specified number of pings to a target, or\r
+looping indefinitely (as in \r
+.B ping\r
+).\r
+.PP\r
+Unlike \r
+.B ping\r
+,\r
+.B fping \r
+is meant to be used in scripts, so its output is designed to be \r
+easy to parse.\r
+.SH OPTIONS\r
+.IP \fB-a\fR 5\r
+Show systems that are alive.\r
+.IP \fB-A\fR 5\r
+Display targets by address rather than DNS name.\r
+.IP \fB-b\fIn\fR 5\r
+Number of bytes of ping data to send.  The minimum size (normally 12)\r
+allows room for the data that \r
+.B fping \r
+needs to do its work (sequence number, timestamp).  The reported\r
+received data size includes the IP header (normally 20 bytes) and ICMP\r
+header (8 bytes), so the minimum total size is 40 bytes.  Default is\r
+56, as in \r
+.B ping.\r
+Maximum is the theoretical maximum IP datagram size (64K), though most\r
+systems limit this to a smaller, system-dependent number.\r
+.IP \fB-B\fIn\fR 5\r
+In the default mode,\r
+.B fping\r
+sends several requests to a target before giving up, waiting longer for\r
+a reply on each successive request.  This parameter is the value by\r
+which the wait time is multiplied on each successive request; it must\r
+be entered as a floating-point number (x.y).  The default is 1.5.\r
+.IP \fB-c\fR 5\r
+Number of request packets to send to each target.  In this mode, a\r
+line is displayed for each received response (this can suppressed with\r
+-q or -Q).  Also, statistics about responses for each target are displayed\r
+when all requests have been sent (or when interrupted).\r
+.IP \fB-C\fR 5\r
+Similar to -c, but the per-target statistics are displayed in a format\r
+designed for automated response-time statistics gathering.  For\r
+example:\r
+\r
+% fping -C 5 -q somehost\r
+\r
+somehost : 91.7 37.0 29.2 - 36.8\r
+\r
+shows the response time in milliseconds for each of the five requests,\r
+with the "-" indicating that no response was received to the fourth\r
+request.\r
+.IP \fB-d\fR 5\r
+Use DNS to lookup address of return ping packet. This allows you to give\r
+fping a list of IP addresses as input and print hostnames in the output.\r
+.IP \fB-e\fR 5\r
+Show elapsed (round-trip) time of packets.\r
+.IP \fB-f\fR 5\r
+Read list of targets from a file.  This option can only be used by the\r
+root user.  Regular users should pipe in the file via stdin:\r
+\r
+% fping < targets_file\r
+\r
+.IP \fB-g\fR 5\r
+Generate a target list from a supplied IP netmask, or a starting and ending IP.\r
+Specify the netmask or start/end in the targets portion of the command line.\r
+\r
+ex. To ping the class C 192.168.1.x, the specified command line could look like either:\r
+\r
+fping -g 192.168.1.0/24\r
+\r
+or\r
+\r
+fping -g 192.168.1.0 192.168.1.255\r
+.IP \fB-h\fR 5\r
+Print usage message.\r
+.IP \fB-i\fIn\fR 5\r
+The minimum amount of time (in milliseconds) between sending a ping packet to any target (default is 25).\r
+.IP \fB-l\fR 5\r
+Loop sending packets to each target indefinitely.  Can be interrupted\r
+with ctl-C; statistics about responses for each target are then displayed.\r
+.IP \fB-m\fR 5\r
+Send pings to each of a target host's multiple interfaces.\r
+.IP \fB-n\fR 5\r
+Same as -d.\r
+.IP \fB-p\fR 5\r
+In looping or counting modes (-l, -c, or -C), this parameter sets the\r
+time in milliseconds that\r
+.B fping\r
+waits between successive packets to an individual target.  Default is\r
+1000.\r
+.IP \fB-q\fR 5\r
+Quiet. Don't show per-target results, just set final exit status.\r
+.IP \fB-Q\fIn\fR 5\r
+Like -q, but show summary results every n seconds.\r
+.IP \fB-r\fIn\fR 5\r
+Retry limit (default 3). This is the number of times an attempt at pinging\r
+a target will be made, not including the first try.\r
+.IP \fB-s\fR 5\r
+Print cumulative statistics upon exit.\r
+.IP \fB-t\fIn\fR 5\r
+Initial target timeout in milliseconds (default 500). In the default\r
+mode, this is the amount of time that \r
+.B fping\r
+waits for a response to its first request.  Successive timeouts are\r
+multiplied by the backoff factor.\r
+.IP \fB-u\fR 5\r
+Show targets that are unreachable.\r
+.IP \fB-v\fR 5\r
+Print \r
+.B fping\r
+version information.\r
+\r
+.SH EXAMPLES\r
+The following perl script will check a list of hosts and send mail if\r
+any are unreachable. It uses the open2 function which allows a program\r
+to be opened for reading and writing. fping does not start pinging the\r
+list of systems until it reads EOF, which it gets after INPUT is closed. \r
+Sure the open2 usage is not needed in this example, but it's a good open2\r
+example none the less. \r
+.nf\r
+\r
+#!/usr/local/bin/perl\r
+require 'open2.pl';\r
+\r
+$MAILTO = "root";\r
+\r
+$pid = &open2("OUTPUT","INPUT","/usr/local/bin/fping -u");\r
+\r
+@check=("slapshot","foo","foobar");\r
+\r
+foreach(@check) {  print INPUT "$_\\n"; }\r
+close(INPUT);\r
+@output=<OUTPUT>;\r
+\r
+if ($#output != -1) {\r
+ chop($date=`date`);\r
+ open(MAIL,"|mail -s 'unreachable systems' $MAILTO");\r
+ print MAIL "\\nThe following systems are unreachable as of: $date\\n\\n";\r
+ print MAIL @output;\r
+ close MAIL;\r
+}\r
+\r
+.ni\r
+Another good example is when you want to perform an action only on hosts\r
+that are currently reachable.\r
+.nf\r
+\r
+#!/usr/local/bin/perl\r
+\r
+$hosts_to_backup = `cat /etc/hosts.backup | fping -a`;\r
+\r
+foreach $host (split(/\\n/,$hosts_to_backup)) {\r
+  # do it\r
+}\r
+\r
+.ni\r
+\r
+.SH AUTHORS\r
+.nf\r
+Roland J. Schemers III, Stanford University, concept and versions 1.x\r
+RL "Bob" Morgan, Stanford University, versions 2.x\r
+David Papp, versions 2.3x and up,\r
+fping website:  http://www.fping.com\r
+.ni\r
+.SH DIAGNOSTICS\r
+Exit status is 0 if all the hosts are reachable, 1 if some hosts were\r
+unreachable, 2 if any IP addresses were not found, 3 for invalid\r
+command line arguments, and 4 for a system call failure.\r
+.SH BUGS\r
+Ha! If we knew of any we would have fixed them!\r
+.SH RESTRICTIONS\r
+If certain options are used (i.e, a low value for -i and -t, and a \r
+high value for -r) it is possible to flood the network. This program\r
+must be installed as setuid root in order to open up a raw socket,\r
+or must be run by root. In order to stop mere mortals from hosing the\r
+network (when fping is installed setuid root) , normal users can't specify \r
+the following:\r
+.nf\r
+\r
+ -i n   where n < 10  msec\r
+ -r n   where n > 20\r
+ -t n   where n < 250 msec\r
+\r
+.ni\r
+.SH SEE ALSO\r
+netstat(1), ping(8), ifconfig(8c)\r
+\r
diff --git a/fping.c b/fping.c
new file mode 100755 (executable)
index 0000000..7d0c525
--- /dev/null
+++ b/fping.c
@@ -0,0 +1,2742 @@
+/* 
+ * fping: fast-ping, file-ping, favorite-ping, funky-ping
+ *
+ *   Ping a list of target hosts in a round robin fashion.
+ *   A better ping overall.
+ *
+ * VIEWING NOTES:
+ * 
+ * This file was formatted with tab indents at a tab stop of 4.
+ *
+ * It is highly recommended that your editor is set to this
+ * tab stop setting for viewing and editing.
+ *
+ * fping website:  http://www.fping.com
+ *
+ *
+ *
+ * Current maintainers of fping:
+ *
+ * David Papp
+ * Suggestions and patches, please email david@remote.net
+ *
+ *
+ *
+ * Original author:  Roland Schemers  <schemers@stanford.edu>
+ * IPv6 Support:     Jeroen Massar    <jeroen@unfix.org / jeroen@ipng.nl>
+ *
+ *
+ *
+ * RCS header information no longer used.  It has been moved to the
+ * ChangeLog file.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by Stanford University.  The name of the University may not be used 
+ * to endorse or promote products derived from this software without 
+ * specific prior written permission.
+ * 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.
+ */
+#define IPV6 1                                         /* This should be a compiler option, or even better be done from the Makefile... ;) */
+
+#ifndef _NO_PROTO
+#if !__STDC__ && !defined( __cplusplus ) && !defined( FUNCPROTO ) \
+                                                 && !defined( _POSIX_SOURCE )
+#define _NO_PROTO
+#endif /* __STDC__ */
+#endif /* _NO_PROTO */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/* if compiling for Windows, use this separate set
+  (too difficult to ifdef all the autoconf defines) */
+#ifdef WIN32
+
+/*** Windows includes ***/
+
+
+#else
+
+/*** autoconf includes ***/
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <time.h>
+#include <signal.h>
+
+#include <netinet/in.h>
+
+#include "config.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif /* HAVE_STDLIB_H */
+
+#include <string.h>
+#include <stddef.h>
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+
+#if HAVE_SYS_FILE_H
+#include <sys/file.h>
+#endif /* HAVE_SYS_FILE_H */
+
+#ifdef IPV6
+#include <netinet/icmp6.h>
+#endif
+#include <netinet/in_systm.h>
+
+/* Linux has bizarre ip.h and ip_icmp.h */
+#if defined( __linux__ )
+#include "linux.h"
+#else
+#include <netinet/ip.h>
+#include <netinet/ip_icmp.h>
+#endif /* defined(__linux__) */
+
+#include <arpa/inet.h>
+#include <netdb.h>
+
+/* RS6000 has sys/select.h */
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif /* HAVE_SYS_SELECT_H */
+
+#endif /* WIN32 */
+
+#include "options.h"
+
+/*** externals ***/
+
+extern char *optarg;
+extern int optind,opterr;
+extern int h_errno;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+/*** Constants ***/
+
+#define REV_DATE       "2002/01/16 00:33:42"
+#define EMAIL          "david@remote.net"
+
+/*** Ping packet defines ***/
+
+/* data added after ICMP header for our nefarious purposes */
+
+typedef struct ping_data
+{
+     int                  ping_count;         /* counts up to -c count or 1 */
+     struct timeval       ping_ts;            /* time sent */
+
+} PING_DATA;
+
+#define MIN_PING_DATA  sizeof( PING_DATA )
+#define        MAX_IP_PACKET   65536   /* (theoretical) max IP packet size */
+#define SIZE_IP_HDR            20
+#define SIZE_ICMP_HDR  ICMP_MINLEN             /* from ip_icmp.h */
+#define MAX_PING_DATA  ( MAX_IP_PACKET - SIZE_IP_HDR - SIZE_ICMP_HDR )
+
+/* sized so as to be like traditional ping */
+#define DEFAULT_PING_DATA_SIZE ( MIN_PING_DATA + 44 ) 
+
+/* maxima and minima */
+#define MAX_COUNT                              10000
+#define MIN_INTERVAL                   10              /* in millisec */
+#define MIN_PERHOST_INTERVAL   20              /* in millisec */
+#define MIN_TIMEOUT                            50              /* in millisec */
+#define MAX_RETRY                              20
+
+/* response time array flags */
+#define RESP_WAITING   -1
+#define RESP_UNUSED            -2
+
+/* debugging flags */
+#if defined( DEBUG ) || defined( _DEBUG )
+#define DBG_TRACE                              1
+#define DBG_SENT_TIMES                 2
+#define DBG_RANDOM_LOSE_FEW            4
+#define DBG_RANDOM_LOSE_MANY   8
+#define DBG_PRINT_PER_SYSTEM   16
+#define DBG_REPORT_ALL_RTTS            32
+#endif /* DEBUG || _DEBUG */
+
+/* Long names for ICMP packet types */
+char *icmp_type_str[19] =
+{
+       "ICMP Echo Reply",                      /* 0 */
+       "",
+       "",
+       "ICMP Unreachable",                     /* 3 */
+       "ICMP Source Quench",           /* 4 */
+       "ICMP Redirect",                        /* 5 */
+       "",
+       "",
+       "ICMP Echo",                            /* 8 */
+       "",
+       "",
+       "ICMP Time Exceeded",           /* 11 */
+       "ICMP Paramter Problem",        /* 12 */
+       "ICMP Timestamp Request",       /* 13 */
+       "ICMP Timestamp Reply",         /* 14 */
+       "ICMP Information Request",     /* 15 */
+       "ICMP Information Reply",       /* 16 */
+       "ICMP Mask Request",            /* 17 */
+       "ICMP Mask Reply"                       /* 18 */
+};
+
+char *icmp_unreach_str[16] =
+{
+       "ICMP Network Unreachable",                                                                             /* 0 */
+       "ICMP Host Unreachable",                                                                                /* 1 */
+       "ICMP Protocol Unreachable",                                                                    /* 2 */
+       "ICMP Port Unreachable",                                                                                /* 3 */
+       "ICMP Unreachable (Fragmentation Needed)",                                              /* 4 */
+       "ICMP Unreachable (Source Route Failed)",                                               /* 5 */
+       "ICMP Unreachable (Destination Network Unknown)",                               /* 6 */
+       "ICMP Unreachable (Destination Host Unknown)",                                  /* 7 */
+       "ICMP Unreachable (Source Host Isolated)",                                              /* 8 */
+       "ICMP Unreachable (Communication with Network Prohibited)",             /* 9 */
+       "ICMP Unreachable (Communication with Host Prohibited)",                /* 10 */
+       "ICMP Unreachable (Network Unreachable For Type Of Service)",   /* 11 */
+       "ICMP Unreachable (Host Unreachable For Type Of Service)",              /* 12 */
+       "ICMP Unreachable (Communication Administratively Prohibited)", /* 13 */
+       "ICMP Unreachable (Host Precedence Violation)",                                 /* 14 */
+       "ICMP Unreachable (Precedence cutoff in effect)"                                /* 15 */
+};
+
+#define        ICMP_UNREACH_MAXTYPE    15
+#ifndef IPV6
+#define        FPING_SOCKADDR struct sockaddr_in
+#define        FPING_ICMPHDR   struct icmp
+#else
+#define        FPING_SOCKADDR struct sockaddr_in6
+#define        FPING_ICMPHDR   struct icmp6_hdr
+#endif
+
+/* entry used to keep track of each host we are pinging */
+
+typedef struct host_entry
+{
+     struct host_entry    *prev,*next;        /* doubly linked list */
+     int                  i;                  /* index into array */
+     char                 *name;              /* name as given by user */
+     char                 *host;              /* text description of host */
+     char                 *pad;               /* pad to align print names */
+     FPING_SOCKADDR       saddr;              /* internet address */
+     int                  timeout;            /* time to wait for response */
+     u_char               running;            /* unset when through sending */
+     u_char               waiting;            /* waiting for response */
+     struct timeval       last_send_time;     /* time of last packet sent */
+     int                  num_sent;           /* number of ping packets sent */
+     int                  num_recv;           /* number of pings received */
+     int                  max_reply;          /* longest response time */
+     int                  min_reply;          /* shortest response time */
+     int                  total_time;         /* sum of response times */
+     int                  num_sent_i;         /* number of ping packets sent */
+     int                  num_recv_i;         /* number of pings received */
+     int                  max_reply_i;        /* longest response time */
+     int                  min_reply_i;        /* shortest response time */
+     int                  total_time_i;       /* sum of response times */
+     int                  *resp_times;        /* individual response times */
+#if defined( DEBUG ) || defined( _DEBUG )
+     int                  *sent_times;        /* per-sent-ping timestamp */
+#endif /* DEBUG || _DEBUG */
+} HOST_ENTRY;
+
+/*** globals ***/
+
+HOST_ENTRY *rrlist = NULL;     /* linked list of hosts be pinged */
+HOST_ENTRY **table = NULL;     /* array of pointers to items in the list */
+HOST_ENTRY *cursor;
+
+char *prog;
+int ident;                                     /* our pid */
+int s;                                         /* socket */
+u_int debugging = 0;
+
+/* times get *100 because all times are calculated in 10 usec units, not ms */
+u_int retry = DEFAULT_RETRY;
+u_int timeout = DEFAULT_TIMEOUT * 100; 
+u_int interval = DEFAULT_INTERVAL * 100;
+u_int perhost_interval = DEFAULT_PERHOST_INTERVAL * 100;
+float backoff = DEFAULT_BACKOFF_FACTOR;
+u_int select_time = DEFAULT_SELECT_TIME * 100;
+u_int ping_data_size = DEFAULT_PING_DATA_SIZE;
+u_int ping_pkt_size;
+u_int count = 1;
+u_int trials;
+u_int report_interval = 0;
+
+/* global stats */
+long max_reply = 0;
+long min_reply = 1000000;
+int total_replies = 0;
+double sum_replies = 0;
+int max_hostname_len = 0;
+int num_jobs = 0;                                      /* number of hosts still to do */
+int num_hosts;                                         /* total number of hosts */
+int num_alive = 0,                                     /* total number alive */
+    num_unreachable = 0,                       /* total number unreachable */
+    num_noaddress = 0;                         /* total number of addresses not found */
+int num_timeout = 0,                           /* number of times select timed out */
+    num_pingsent = 0,                          /* total pings sent */
+    num_pingreceived = 0,                      /* total pings received */
+    num_othericmprcvd = 0;                     /* total non-echo-reply ICMP received */
+
+struct timeval current_time;           /* current time (pseudo) */
+struct timeval start_time; 
+struct timeval end_time;
+struct timeval last_send_time;         /* time last ping was sent */
+struct timeval last_report_time;       /* time last report was printed */
+struct timezone tz;
+
+/* switches */
+int generate_flag = 0;                         /* flag for IP list generation */
+int verbose_flag, quiet_flag, stats_flag, unreachable_flag, alive_flag;
+int elapsed_flag, version_flag, count_flag, loop_flag;
+int per_recv_flag, report_all_rtts_flag, name_flag, addr_flag, backoff_flag;
+int multif_flag;
+#if defined( DEBUG ) || defined( _DEBUG )
+int randomly_lose_flag, sent_times_flag, trace_flag, print_per_system_flag;
+int lose_factor;
+#endif /* DEBUG || _DEBUG */
+
+char *filename = NULL;                         /* file containing hosts to ping */
+
+/*** forward declarations ***/
+
+#ifdef _NO_PROTO
+
+void add_name();
+void add_addr();
+char *na_cat();
+char *cpystr();
+void crash_and_burn();
+void errno_crash_and_burn();
+char *get_host_by_address();
+int in_cksum();
+void u_sleep();
+int recvfrom_wto ();
+void remove_job();
+void send_ping();
+void usage();
+int wait_for_reply();
+long timeval_diff();
+void print_per_system_stats();
+void print_per_system_splits();
+void print_global_stats();
+void finish();
+int handle_random_icmp();
+char *sprint_tm();
+
+#else
+
+void add_name( char *name );
+#ifndef IPV6
+void add_addr( char *name, char *host, struct in_addr ipaddr );
+#else
+void add_addr( char *name, char *host, FPING_SOCKADDR *ipaddr );
+#endif
+char *na_cat( char *name, struct in_addr ipaddr );
+char *cpystr( char *string );
+void crash_and_burn( char *message );
+void errno_crash_and_burn( char *message );
+char *get_host_by_address( struct in_addr in );
+int in_cksum( u_short *p, int n );
+void u_sleep( int u_sec );
+int recvfrom_wto ( int s, char *buf, int len, FPING_SOCKADDR *saddr, int timo );
+void remove_job( HOST_ENTRY *h );
+void send_ping( int s, HOST_ENTRY *h );
+long timeval_diff( struct timeval *a, struct timeval *b );
+void usage( void );
+int wait_for_reply( void );
+void print_per_system_stats( void );
+void print_per_system_splits( void );
+void print_global_stats( void );
+void finish();
+int handle_random_icmp( FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr );
+char *sprint_tm( int t );
+
+#endif /* _NO_PROTO */
+
+/*** function definitions ***/
+
+/************************************************************
+
+  Function: main
+
+*************************************************************
+
+  Inputs:  int argc, char** argv
+
+  Description:
+  
+  Main program entry point
+
+************************************************************/
+
+#ifdef _NO_PROTO
+int main( argc, argv )
+int argc; char **argv;
+#else
+int main( int argc, char **argv )
+#endif /* _NO_PROTO */
+{
+       int c, i, n;
+#ifdef IPV6
+       int opton = 1;
+#endif
+       u_int lt, ht;
+       int advance;
+       struct protoent *proto;
+       char *buf;
+       uid_t uid;
+       /* check if we are root */
+
+       if( geteuid() )
+       {
+               fprintf( stderr,
+                       "This program can only be run by root, or it must be setuid root.\n" );
+
+               exit( 3 );
+
+       }/* IF */
+
+       /* confirm that ICMP is available on this machine */
+#ifndef IPV6
+       if( ( proto = getprotobyname( "icmp" ) ) == NULL ) 
+#else
+       if( ( proto = getprotobyname( "ipv6-icmp" ) ) == NULL ) 
+#endif
+               crash_and_burn( "icmp: unknown protocol" );
+
+       /* create raw socket for ICMP calls (ping) */
+#ifndef IPV6
+       s = socket( AF_INET, SOCK_RAW, proto->p_proto );
+#else
+       s = socket( AF_INET6, SOCK_RAW, proto->p_proto );
+#endif
+
+       if( s < 0 )
+               errno_crash_and_burn( "can't create raw socket" );
+
+#ifdef IPV6
+       /*
+        * let the kerel pass extension headers of incoming packets,
+        * for privileged socket options
+        */
+#ifdef IPV6_RECVHOPOPTS
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVHOPOPTS, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_RECVHOPOPTS)");
+#else  /* old adv. API */
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_HOPOPTS, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_HOPOPTS)");
+#endif
+#ifdef IPV6_RECVDSTOPTS
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVDSTOPTS, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_RECVDSTOPTS)");
+#else  /* old adv. API */
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_DSTOPTS, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_DSTOPTS)");
+#endif
+#ifdef IPV6_RECVRTHDRDSTOPTS
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVRTHDRDSTOPTS, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_RECVRTHDRDSTOPTS)");
+#endif
+#ifdef IPV6_RECVRTHDR
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVRTHDR, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_RECVRTHDR)");
+#else  /* old adv. API */
+               if (setsockopt(s, IPPROTO_IPV6, IPV6_RTHDR, &opton,
+                   sizeof(opton)))
+                       err(1, "setsockopt(IPV6_RTHDR)");
+#endif
+#endif
+
+       if( ( uid = getuid() ) )
+       {
+               seteuid( getuid() );
+
+       }/* IF */
+
+       prog = argv[0];
+       ident = getpid() & 0xFFFF;
+
+       verbose_flag = 1;
+       backoff_flag = 1;
+       opterr = 1;
+
+       /* get command line options */
+
+       while( ( c = getopt( argc, argv, "gedhlmnqusaAvz:t:i:p:f:r:c:b:C:Q:B:" ) ) != EOF )
+       {
+               switch( c )
+               {
+               case 't':
+                       if( !( timeout = ( u_int )atoi( optarg ) * 100 ) )
+                               usage();
+
+                       break;
+               
+               case 'r':
+                       if( !( retry = ( u_int )atoi( optarg ) ) )
+                               usage();
+
+                       break;
+               
+               case 'i':
+                       if( !( interval = ( u_int )atoi( optarg ) * 100 ) )
+                               usage();
+
+                       break;
+
+               case 'p':
+                       if( !( perhost_interval = ( u_int )atoi( optarg ) * 100 ) )
+                               usage();
+
+                       break;
+
+               case 'c':
+                       if( !( count = ( u_int )atoi( optarg ) ) )
+                               usage();
+                       
+                       count_flag = 1;
+                       break;
+               
+               case 'C':
+                       if( !( count = ( u_int )atoi( optarg ) ) )
+                               usage();
+                       
+                       count_flag = 1;
+                       report_all_rtts_flag = 1;
+                       break;
+
+               case 'b':
+                       if( !( ping_data_size = ( u_int )atoi( optarg ) ) )
+                               usage();
+                       
+                       break;
+
+               case 'h':
+                       usage();
+                       break;
+
+               case 'q':
+                       verbose_flag = 0;
+                       quiet_flag = 1;
+                       break;
+
+               case 'Q':
+                       verbose_flag = 0;
+                       quiet_flag = 1;
+                       if( !( report_interval = ( u_int )atoi( optarg ) * 100000 ) )
+                               usage();
+                       
+                       break;
+
+               case 'e':
+                       elapsed_flag = 1;
+                       break;
+
+               case 'm':
+                       multif_flag = 1;
+                       break;
+
+               case 'd': 
+               case 'n':
+                       name_flag = 1;
+                       break;
+
+               case 'A':
+                       addr_flag = 1;
+                       break;
+
+               case 'B':
+                       if( !( backoff = atof( optarg ) ) )
+                               usage();
+                       
+                       break;
+
+               case 's':
+                       stats_flag = 1;
+                       break;
+
+               case 'l':
+                       loop_flag = 1;
+                       backoff_flag = 0;
+                       break;
+
+               case 'u':
+                       unreachable_flag = 1;
+                       break;
+
+               case 'a':
+                       alive_flag = 1;
+                       break;
+
+#if defined( DEBUG ) || defined( _DEBUG )
+               case 'z':
+                       if( ! ( debugging = ( u_int )atoi( optarg ) ) )
+                               usage();
+                       
+                       break;
+#endif /* DEBUG || _DEBUG */
+
+               case 'v':
+                       printf( "%s: Version %s $Date: %s $\n", argv[0], VERSION, REV_DATE );
+                       printf( "%s: comments to %s\n", argv[0], EMAIL );
+                       exit( 0 );
+
+               case 'f': 
+#ifdef ENABLE_F_OPTION
+                       filename = optarg;
+                       generate_flag = 0;
+                       break;
+#else
+                       if( getuid() )
+                       {
+                               printf( "%s: this option can only be used by root.\n", argv[0] );
+                               printf( "%s: fping will read from stdin by default.\n", argv[0] );
+                               exit( 3 );
+
+                       }/* IF */
+                       else
+                       {
+                               filename = optarg;
+                               generate_flag = 0;
+
+                       }/* ELSE */
+
+                       break;
+#endif /* ENABLE_F_OPTION */
+
+               case 'g':
+                       /* use IP list generation */
+                       /* mutually exclusive with using file input or command line targets */
+                       generate_flag = 1;
+                       break;
+
+               default:
+                       usage();
+                       break;
+
+               }/* SWITCH */
+       }/* WHILE */
+
+       /* validate various option settings */
+
+       if( unreachable_flag && alive_flag )
+       {
+               fprintf( stderr, "%s: specify only one of a, u\n", argv[0] );
+               usage();
+
+       }/* IF */
+
+       if( count_flag && loop_flag )
+       {
+               fprintf( stderr, "%s: specify only one of c, l\n", argv[0] );
+               usage();
+       
+       }/* IF */
+       
+       if( ( interval < MIN_INTERVAL * 100 ||
+                       perhost_interval < MIN_PERHOST_INTERVAL * 100 || 
+                       retry > MAX_RETRY || 
+                       timeout < MIN_TIMEOUT * 100 ) 
+               && getuid() )
+       {
+               fprintf( stderr, "%s: these options are too risky for mere mortals.\n", prog );
+               fprintf( stderr, "%s: You need i >= %u, p >= %u, r < %u, and t >= %u\n",
+                       prog, MIN_INTERVAL, MIN_PERHOST_INTERVAL, MAX_RETRY, MIN_TIMEOUT );
+               usage();
+
+       }/* IF */
+       
+       if( ( ping_data_size > MAX_PING_DATA ) || ( ping_data_size < MIN_PING_DATA ) )
+       {
+               fprintf( stderr, "%s: data size %u not valid, must be between %u and %u\n",
+                       prog, ping_data_size, MIN_PING_DATA, MAX_PING_DATA );
+               usage();
+       
+       }/* IF */
+       
+       if( ( backoff > MAX_BACKOFF_FACTOR ) || ( backoff < MIN_BACKOFF_FACTOR ) )
+       {
+               fprintf( stderr, "%s: backoff factor %.1f not valid, must be between %.1f and %.1f\n",
+                       prog, backoff, MIN_BACKOFF_FACTOR, MAX_BACKOFF_FACTOR );
+               usage();
+       
+       }/* IF */
+
+       if( count > MAX_COUNT )
+       {
+               fprintf( stderr, "%s: count %u not valid, must be less than %u\n",
+                       prog, count, MAX_COUNT );
+           usage();
+       
+       }/* IF */
+       
+       if( alive_flag || unreachable_flag )
+               verbose_flag = 0;
+       
+       if( count_flag )
+       {
+               if( verbose_flag )
+                       per_recv_flag = 1;
+    
+               alive_flag = unreachable_flag = verbose_flag = 0;
+
+       }/* IF */
+       
+       if( loop_flag )
+       {
+               if( !report_interval )
+                       per_recv_flag = 1;
+               
+               alive_flag = unreachable_flag = verbose_flag = 0;
+
+       }/* IF */
+       
+       trials = ( count > retry + 1 ) ? count : retry + 1;
+
+#if defined( DEBUG ) || defined( _DEBUG )
+       if( debugging & DBG_TRACE )
+               trace_flag = 1;
+       
+       if( ( debugging & DBG_SENT_TIMES ) && !loop_flag )
+               sent_times_flag = 1;
+
+       if( debugging & DBG_RANDOM_LOSE_FEW )
+       {
+               randomly_lose_flag = 1;
+               lose_factor = 1;     /* ie, 1/4 */
+       
+       }/* IF */
+       
+       if( debugging & DBG_RANDOM_LOSE_MANY )
+       {
+               randomly_lose_flag = 1;
+               lose_factor = 5;     /* ie, 3/4 */
+       
+       }/* IF */
+  
+       if( debugging & DBG_PRINT_PER_SYSTEM )
+               print_per_system_flag = 1;
+
+       if( ( debugging & DBG_REPORT_ALL_RTTS ) && !loop_flag )
+               report_all_rtts_flag = 1;
+
+       if( trace_flag )
+       {
+               fprintf( stderr, "%s:\n  count: %u, retry: %u, interval: %u\n",
+                       prog, count, retry, interval / 10 );
+               fprintf( stderr, "  perhost_interval: %u, timeout: %u\n",
+                       perhost_interval / 10, timeout / 10 );
+               fprintf( stderr, "  ping_data_size = %u, trials = %u\n",
+                       ping_data_size, trials );
+               
+               if( verbose_flag ) fprintf( stderr, "  verbose_flag set\n" );
+               if( multif_flag ) fprintf( stderr, "  multif_flag set\n" );
+               if( name_flag ) fprintf( stderr, "  name_flag set\n" );
+               if( addr_flag ) fprintf( stderr, "  addr_flag set\n" );
+               if( stats_flag ) fprintf( stderr, "  stats_flag set\n" );
+               if( unreachable_flag ) fprintf( stderr, "  unreachable_flag set\n" );
+               if( alive_flag ) fprintf( stderr, "  alive_flag set\n" );
+               if( elapsed_flag ) fprintf( stderr, "  elapsed_flag set\n" );
+               if( version_flag ) fprintf( stderr, "  version_flag set\n" );
+               if( count_flag ) fprintf( stderr, "  count_flag set\n" );
+               if( loop_flag ) fprintf( stderr, "  loop_flag set\n" );
+               if( backoff_flag ) fprintf( stderr, "  backoff_flag set\n" );
+               if( per_recv_flag ) fprintf( stderr, "  per_recv_flag set\n" );
+               if( report_all_rtts_flag ) fprintf( stderr, "  report_all_rtts_flag set\n" );
+               if( randomly_lose_flag ) fprintf( stderr, "  randomly_lose_flag set\n" );
+               if( sent_times_flag ) fprintf( stderr, "  sent_times_flag set\n" );
+               if( print_per_system_flag ) fprintf( stderr, "  print_per_system_flag set\n" );
+
+       }/* IF */
+#endif /* DEBUG || _DEBUG */
+
+       /* handle host names supplied on command line or in a file */
+       /* if the generate_flag is on, then generate the IP list */
+
+       argv = &argv[optind];
+
+       /* cover allowable conditions */
+
+       /* file and generate are mutually exclusive */
+       /* file and command line are mutually exclusive */
+       /* generate requires command line parameters beyond the switches */
+       if( ( *argv && filename ) || ( filename && generate_flag ) || ( generate_flag && !*argv ) )
+               usage();
+
+       /* if no conditions are specified, then assume input from stdin */
+       if( !*argv && !filename && !generate_flag )
+               filename = "-";
+       
+       if( *argv && !generate_flag )
+       {
+               while( *argv )
+               {
+                       add_name( *argv );
+                       ++argv;
+
+               }/* WHILE */
+       }/* IF */
+       else if( filename )
+       {
+               FILE *ping_file;
+               char line[132];
+               char host[132];
+               char *p;
+               
+               if( strcmp( filename, "-" ) == 0 )
+                       ping_file = fdopen( 0, "r" );
+               else
+                       ping_file = fopen( filename, "r" );
+
+               if( !ping_file )
+                       errno_crash_and_burn( "fopen" );
+
+
+               while( fgets( line, 132, ping_file ) )
+               {
+                       if( sscanf( line, "%s", host ) != 1 )
+                               continue;
+                       
+                       if( ( !*host ) || ( host[0] == '#' ) )  /* magic to avoid comments */
+                               continue;
+                       
+                       p = cpystr( host );
+                       add_name( p );
+               
+               }/* WHILE */
+               
+               fclose( ping_file );
+
+       }/* ELSE IF */
+       else if( *argv && generate_flag )
+       {
+               char* pStart;
+               char* pEnd;
+               char* pCopy;
+               char* pTemp;
+
+               struct in_addr sStart;
+               struct in_addr sEnd;
+               int iBits;
+               int iBitpos;
+               int iMask = 1;
+               int failed = 0;
+               unsigned long uTemp;
+
+               /* two possible forms are allowed here */
+
+               pStart = *argv;
+               argv++;
+
+               /* IP mask is specified */
+               if( !*argv )
+               {
+                       pCopy = ( char* )malloc( sizeof( char ) * strlen( pStart ) + 1 );
+                       if( pCopy )
+                       {
+                               /* make a copy of the arg, so we don't damage the original */
+                               strcpy( pCopy, pStart );
+
+                               /* look for token '/' */
+                               if( strtok( pCopy, "/" ) != NULL )
+                               {
+                                       /* if no token was found, the string should be unaltered */
+                                       if( strcmp( pCopy, pStart ) != 0 )
+                                       {
+                                               /* convert it to the starting address */
+                                               if( inet_addr( pCopy ) != INADDR_NONE )
+                                               {
+                                                       sStart.s_addr = inet_addr( pCopy );
+
+                                                       /* now find the bitmask */
+                                                       pTemp = ( char* )pStart + strlen( pCopy ) + 1;
+       
+                                                       /* get the bits */
+                                                       iBits = 32 - atoi( pTemp );
+
+                                                       if( ( iBits < 32 ) && ( iBits >= 0 ) )
+                                                       {
+                                                               /* now make the end address */
+                                                               for( iBitpos = 0; iBitpos < iBits; iBitpos++ )
+                                                                       iMask = iMask | 1 << iBitpos;
+
+                                                               sEnd.s_addr = sStart.s_addr | ntohl( iMask );
+
+                                                       }/* IF */
+                                                       else
+                                                               failed = 1;
+
+                                               }/* IF */
+                                               else
+                                                       failed = 1;
+
+                                       }/* IF */
+                                       else
+                                               failed = 1;
+
+                               }/* IF */
+                               else
+                                       failed = 1;
+
+                               free( pCopy );
+
+                               if( failed == 1 )
+                                       usage();
+
+                       }/* IF */
+                       else
+                               crash_and_burn( "Cannot malloc copy of input string" );
+
+               }/* IF */
+               else
+               {
+                       /* IP start and end points are specified */
+                       pEnd = *argv;
+
+                       /* parameters should be start and end ranges */
+                       if( ( inet_addr( pStart ) != INADDR_NONE ) && ( inet_addr( pEnd ) != INADDR_NONE ) )
+                       {
+                               sStart.s_addr = inet_addr( pStart );
+                               sEnd.s_addr = inet_addr( pEnd );
+
+                       }/* IF */
+                       else
+                               usage();
+
+               }/* ELSE */
+
+               /* ensure that the end point is greater or equal to the start */
+               if( htonl( sEnd.s_addr ) >= htonl( sStart.s_addr ) )
+               {
+                       /* start and end points should be determined, so generate list */
+                       unsigned int uiDiff;
+                       struct in_addr sTemp;
+                       int iCount;
+
+                       uiDiff = htonl( sEnd.s_addr ) - htonl( sStart.s_addr ) + 1;
+
+                       for( iCount = 0; iCount < uiDiff; iCount++ )
+                       {
+                               sTemp.s_addr = sStart.s_addr + ntohl( iCount );
+                               pTemp = cpystr( inet_ntoa( sTemp ) );
+                               add_name( pTemp );
+
+                       }/* FOR */
+               }/* IF */
+               else
+                       usage();
+
+       }/* ELSE IF */
+       else
+               usage();
+       
+       if( !num_hosts )
+               exit( 2 );
+
+       /* allocate array to hold outstanding ping requests */
+
+       table = ( HOST_ENTRY** )malloc( sizeof( HOST_ENTRY* ) * num_hosts );
+       if( !table )
+               crash_and_burn( "Can't malloc array of hosts" );
+
+       cursor = rrlist;
+
+       for( num_jobs = 0; num_jobs < num_hosts; num_jobs++ )
+       {
+               table[num_jobs] = cursor;
+               cursor->i = num_jobs;
+               
+               /* as long as we're here, put this in so names print out nicely */
+               if( count_flag || loop_flag )
+               {
+                       n = max_hostname_len - strlen( cursor->host );
+                       buf = ( char* ) malloc( n + 1 );
+                       if( !buf )
+                               crash_and_burn( "can't malloc host pad" );
+                       
+                       for ( i = 0; i < n; i++ )
+                               buf[i] = ' ';
+
+                       buf[n] = '\0';
+                       cursor->pad = buf;
+
+               }/* IF */
+               
+               cursor=cursor->next;
+
+       }/* FOR */
+
+       ping_pkt_size = ping_data_size + SIZE_ICMP_HDR;
+       
+       signal( SIGINT, finish );
+       
+       gettimeofday( &start_time, &tz );
+       current_time = start_time;
+
+       if( report_interval )
+               last_report_time = start_time;
+
+       last_send_time.tv_sec = current_time.tv_sec - 10000;
+
+#if defined( DEBUG ) || defined( _DEBUG )
+       if( randomly_lose_flag ) 
+               srandom( start_time.tv_usec );
+#endif /* DEBUG || _DEBUG */
+
+       cursor = rrlist;
+       advance = 0;
+
+       /* main loop */
+
+       while( num_jobs )
+       {
+               if( num_pingsent )
+                       while( wait_for_reply() );  /* call wfr until we timeout */
+                       
+               if( cursor && advance )
+                       cursor = cursor->next;
+               
+               gettimeofday( &current_time, &tz );
+               lt = timeval_diff( &current_time, &last_send_time );
+               ht = timeval_diff( &current_time, &cursor->last_send_time );
+
+               if( report_interval && ( loop_flag || count_flag ) &&
+                       ( timeval_diff ( &current_time, &last_report_time )     > report_interval ) )
+               {
+                       print_per_system_splits();
+                       gettimeofday( &current_time, &tz );
+                       lt = timeval_diff( &current_time, &last_send_time );
+                       ht = timeval_diff( &current_time, &cursor->last_send_time );
+                       last_report_time = current_time;
+               
+               }/* IF */
+               
+               advance = 1;
+
+#if defined( DEBUG ) || defined( _DEBUG )
+               if( trace_flag )
+               {
+                       printf(
+                               "main loop:\n  [%s, wait/run/sent/recv/timeout = %u/%u/%u/%u/%u], jobs/lt/ht = %u/%u/%u\n",
+                               cursor->host, cursor->waiting, cursor->running, cursor->num_sent, 
+                               cursor->num_recv, cursor->timeout, num_jobs, lt, ht );
+
+               }/* IF */
+#endif /* DEBUG || _DEBUG */
+
+               /* if it's OK to send while counting or looping or starting */
+               if( ( lt > interval ) && ( ht > perhost_interval ) )
+               {
+                       /* send if starting or looping */
+                       if( ( cursor->num_sent == 0 ) || loop_flag )
+                       {
+                               send_ping( s, cursor );
+                               continue;
+                       
+                       }/* IF */
+               
+                       /* send if counting and count not exceeded */
+                       if( count_flag )
+                       {
+                               if( cursor->num_sent < count )
+                               {
+                                       send_ping( s, cursor );
+                                       continue;
+                               
+                               }/* IF */
+                       }/* IF */
+               }/* IF */
+
+               /* is-it-alive mode, and timeout exceeded while waiting for a reply */
+               /*   and we haven't exceeded our retries                            */
+               if( ( lt > interval ) && !count_flag && !loop_flag && !cursor->num_recv &&
+                       ( ht > cursor->timeout ) && ( cursor->waiting < retry + 1 ) )
+               {
+#if defined( DEBUG ) || defined( _DEBUG )
+                       if( trace_flag ) 
+                               printf( "main loop: timeout for %s\n", cursor->host );
+#endif /* DEBUG || _DEBUG */
+
+                       num_timeout++;
+
+                       /* try again */
+                       if( backoff_flag )
+                               cursor->timeout *= backoff;
+
+                       send_ping( s, cursor );
+                       continue;
+               
+               }/* IF */
+
+               /* didn't send, can we remove? */
+
+#if defined( DEBUG ) || defined( _DEBUG )
+               if( trace_flag )
+                       printf( "main loop: didn't send to %s\n", cursor->host );
+#endif /* DEBUG || _DEBUG */
+    
+               /* never remove if looping */
+               if( loop_flag )
+                       continue;
+
+               /* remove if counting and count exceeded */
+               /* but allow time for the last one to come in */
+               if( count_flag )
+               {
+                       if( ( cursor->num_sent >= count ) && ( ht > cursor->timeout ) )
+                       {
+                               remove_job( cursor );
+                               continue;
+                       
+                       }/* IF */
+               }/* IF */
+               else
+               {
+                       /* normal mode, and we got one */
+                       if( cursor->num_recv )
+                       {
+                               remove_job( cursor );
+                               continue;
+                       
+                       }/* IF */
+                       
+                       /* normal mode, and timeout exceeded while waiting for a reply */
+                       /* and we've run out of retries, so node is unreachable */
+                       if( ( ht > cursor->timeout ) && ( cursor->waiting >= retry + 1 ) )
+                       {
+#if defined( DEBUG ) || defined( _DEBUG )
+                               if( trace_flag ) 
+                                       printf( "main loop: timeout for %s\n", cursor->host );
+#endif /* DEBUG || _DEBUG */
+
+                               num_timeout++;
+                               remove_job( cursor );
+                               continue;
+                       
+                       }/* IF */
+               }/* ELSE */
+               
+               /* could send to this host, so keep considering it */
+               if( ht > interval )
+                       advance = 0;
+
+       }/* WHILE */
+       
+       finish();
+
+} /* main() */
+
+
+/************************************************************
+
+  Function: finish
+
+*************************************************************
+
+  Inputs:  void (none)
+
+  Description:
+  
+  Main program clean up and exit point
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void finish()
+#else
+void finish()
+#endif /* _NO_PROTO */
+{
+       int i;
+       HOST_ENTRY *h;
+
+       gettimeofday( &end_time, &tz );
+
+       /* tot up unreachables */
+       for( i = 0; i < num_hosts; i++ )
+       {
+               h = table[i];
+
+               if( !h->num_recv )
+               {
+                       num_unreachable++;
+
+                       if( verbose_flag || unreachable_flag )
+                       {
+                               printf( "%s", h->host );
+
+                               if( verbose_flag ) 
+                                       printf( " is unreachable" );
+                               
+                               printf( "\n" );
+                       
+                       }/* IF */
+               }/* IF */
+       }/* FOR */
+
+       if( count_flag || loop_flag )
+               print_per_system_stats();
+#if defined( DEBUG ) || defined( _DEBUG )
+       else if( print_per_system_flag )
+               print_per_system_stats();
+#endif /* DEBUG || _DEBUG */
+
+       if( stats_flag )
+               print_global_stats();
+
+       if( num_noaddress )
+               exit( 2 );
+       else if( num_alive != num_hosts )
+               exit( 1 ); 
+       
+       exit(0);
+
+} /* finish() */
+
+
+/************************************************************
+
+  Function: print_per_system_stats
+
+*************************************************************
+
+  Inputs:  void (none)
+
+  Description:
+  
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void print_per_system_stats()
+#else
+void print_per_system_stats( void )
+#endif /* _NO_PROTO */
+{
+       int i, j, k, avg;
+       HOST_ENTRY *h;
+       char *buf;
+       int bufsize;
+       int resp;
+
+       bufsize = max_hostname_len + 1;
+       buf = ( char* )malloc( bufsize );
+
+       if( !buf )
+               crash_and_burn( "can't malloc print buf" );
+
+       memset( buf, 0, bufsize );
+
+       fflush( stdout );
+
+       if( verbose_flag || per_recv_flag )
+               fprintf( stderr, "\n" );
+
+       for( i = 0; i < num_hosts; i++ )
+       {
+               h = table[i];
+               fprintf( stderr, "%s%s :", h->host, h->pad );
+
+               if( report_all_rtts_flag )
+               {
+                       for( j = 0; j < h->num_sent; j++ )
+                       {
+                               if( ( resp = h->resp_times[j] ) >= 0 )
+                                       fprintf( stderr, " %d.%02d", resp / 100, resp % 100 );
+                               else
+                                       fprintf( stderr, " -" );
+
+                       }/* FOR */
+                 
+                       fprintf( stderr, "\n" );
+         
+               }/* IF */
+               else
+               {
+                       if( h->num_recv <= h->num_sent )
+                       {
+                               fprintf( stderr, " xmt/rcv/%%loss = %d/%d/%d%%",
+                                       h->num_sent, h->num_recv, h->num_sent > 0 ?
+                                       ( ( h->num_sent - h->num_recv ) * 100 ) / h->num_sent : 0 );
+
+                       }/* IF */
+                       else
+                       {
+                               fprintf( stderr, " xmt/rcv/%%return = %d/%d/%d%%",
+                                       h->num_sent, h->num_recv,
+                                       ( ( h->num_recv * 100 ) / h->num_sent ) );
+                 
+                       }/* ELSE */
+                 
+                       if( h->num_recv )
+                       {
+                               avg = h->total_time / h->num_recv;
+                               fprintf( stderr, ", min/avg/max = %s", sprint_tm( h->min_reply ) );
+                               fprintf( stderr, "/%s", sprint_tm( avg ) );
+                               fprintf( stderr, "/%s", sprint_tm( h->max_reply ) );
+                 
+                       }/* IF */
+                 
+                       fprintf(stderr, "\n");
+
+               }/* ELSE */
+
+#if defined( DEBUG ) || defined( _DEBUG )
+               if( sent_times_flag )
+               {
+                       for( j = 0; j < h->num_sent; j++ )
+                       {
+                               if( ( resp = h->sent_times[j] ) >= 0 )
+                                       fprintf( stderr, " %s", sprint_tm( resp ) );
+                               else
+                                       fprintf( stderr, " -" );
+                         
+                               fprintf( stderr, "\n" );
+
+                       }/* FOR */
+               }/* IF */
+#endif /* DEBUG || _DEBUG */
+       }/* FOR */
+  
+       free( buf );
+
+} /* print_per_system_stats() */
+
+
+/************************************************************
+
+  Function: print_per_system_splits
+
+*************************************************************
+
+  Inputs:  void (none)
+
+  Description:
+  
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void print_per_system_splits()
+#else
+void print_per_system_splits( void )
+#endif /* _NO_PROTO */
+{
+       int i, j, k, avg;
+       HOST_ENTRY *h;
+       char *buf;
+       int bufsize;
+       int resp;
+       struct tm *curr_tm;
+
+       bufsize = max_hostname_len + 1;
+       buf = ( char* )malloc( bufsize );
+       if( !buf )
+               crash_and_burn( "can't malloc print buf" );
+
+       memset( buf, 0, bufsize );
+
+       fflush( stdout );
+
+       if( verbose_flag || per_recv_flag )
+               fprintf( stderr, "\n" );
+
+       curr_tm = localtime( ( time_t* )&current_time.tv_sec );
+       fprintf( stderr, "[%2.2d:%2.2d:%2.2d]\n", curr_tm->tm_hour,
+               curr_tm->tm_min, curr_tm->tm_sec );
+
+       for( i = 0; i < num_hosts; i++ )
+       {
+               h = table[i];
+               fprintf( stderr, "%s%s :", h->host, h->pad );
+
+               if( h->num_recv_i <= h->num_sent_i )
+               {
+                       fprintf( stderr, " xmt/rcv/%%loss = %d/%d/%d%%",
+                               h->num_sent_i, h->num_recv_i,
+                               ( ( h->num_sent_i - h->num_recv_i ) * 100 ) / h->num_sent_i );
+
+               }/* IF */
+               else
+               {
+                       fprintf( stderr, " xmt/rcv/%%return = %d/%d/%d%%",
+                               h->num_sent_i, h->num_recv_i,
+                               ( ( h->num_recv_i * 100 ) / h->num_sent_i ) );
+
+               }/* ELSE */
+
+               if( h->num_recv_i )
+               {
+                       avg = h->total_time_i / h->num_recv_i;
+                       fprintf( stderr, ", min/avg/max = %s", sprint_tm( h->min_reply_i ) );
+                       fprintf( stderr, "/%s", sprint_tm( avg ) );
+                       fprintf( stderr, "/%s", sprint_tm( h->max_reply_i ) );
+               
+               }/* IF */
+               
+               fprintf( stderr, "\n" );
+               h->num_sent_i = h->num_recv_i = h->max_reply_i =
+                       h->min_reply_i = h->total_time_i = 0;
+       
+       }/* FOR */
+
+       free( buf );
+
+} /* print_per_system_splits() */
+
+
+/************************************************************
+
+  Function: print_global_stats
+
+*************************************************************
+
+  Inputs:  void (none)
+
+  Description:
+  
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void print_global_stats()
+#else
+void print_global_stats( void )
+#endif /* _NO_PROTO */
+{
+       fflush( stdout );
+       fprintf( stderr, "\n" );
+       fprintf( stderr, " %7d targets\n", num_hosts );
+       fprintf( stderr, " %7d alive\n", num_alive );
+       fprintf( stderr, " %7d unreachable\n" ,num_unreachable );
+       fprintf( stderr, " %7d unknown addresses\n", num_noaddress );
+       fprintf( stderr, "\n" );
+       fprintf( stderr, " %7d timeouts (waiting for response)\n", num_timeout );
+       fprintf( stderr, " %7d ICMP Echos sent\n", num_pingsent );
+       fprintf( stderr, " %7d ICMP Echo Replies received\n", num_pingreceived );
+       fprintf( stderr, " %7d other ICMP received\n", num_othericmprcvd );
+       fprintf( stderr, "\n" );
+
+       if( total_replies == 0 )
+       {
+               min_reply = 0;
+               max_reply = 0;
+               total_replies = 1;
+               sum_replies = 0;
+       
+       }/* IF */
+
+       fprintf( stderr, " %s ms (min round trip time)\n", sprint_tm( min_reply ) );
+       fprintf( stderr, " %s ms (avg round trip time)\n",
+               sprint_tm( ( int )( sum_replies / total_replies ) ) );
+       fprintf( stderr, " %s ms (max round trip time)\n", sprint_tm( max_reply ) );
+       fprintf( stderr, " %12.3f sec (elapsed real time)\n",
+               timeval_diff( &end_time, &start_time ) / 100000.0 );
+       fprintf( stderr, "\n" );
+
+} /* print_global_stats() */
+
+
+/************************************************************
+
+  Function: send_ping
+
+*************************************************************
+
+  Inputs:  int s, HOST_ENTRY *h
+
+  Description:
+
+  Compose and transmit an ICMP_ECHO REQUEST packet.  The IP packet
+  will be added on by the kernel.  The ID field is our UNIX process ID,
+  and the sequence number is an index into an array of outstanding
+  ping requests. The sequence number will later be used to quickly
+  figure out who the ping reply came from.
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void send_ping( s, h )
+int s; HOST_ENTRY *h;
+#else
+void send_ping( int s, HOST_ENTRY *h )
+#endif /* _NO_PROTO */
+{
+       char *buffer;
+       FPING_ICMPHDR *icp;
+       PING_DATA *pdp;
+       int n;
+
+       buffer = ( char* )malloc( ( size_t )ping_pkt_size );
+       if( !buffer )
+               crash_and_burn( "can't malloc ping packet" );
+       
+       memset( buffer, 0, ping_pkt_size * sizeof( char ) );
+       icp = ( FPING_ICMPHDR* )buffer;
+
+       gettimeofday( &h->last_send_time, &tz );
+#ifndef IPV6
+       icp->icmp_type = ICMP_ECHO;
+       icp->icmp_code = 0;
+       icp->icmp_cksum = 0;
+       icp->icmp_seq = h->i;
+       icp->icmp_id = ident;
+
+       pdp = ( PING_DATA* )( buffer + SIZE_ICMP_HDR );
+       pdp->ping_ts = h->last_send_time;
+       pdp->ping_count = h->num_sent;
+
+       icp->icmp_cksum = in_cksum( ( u_short* )icp, ping_pkt_size );
+#else
+       icp->icmp6_type = ICMP6_ECHO_REQUEST;
+       icp->icmp6_code = 0;
+       icp->icmp6_seq = h->i;
+       icp->icmp6_id = ident;
+
+       pdp = ( PING_DATA* )( buffer + SIZE_ICMP_HDR );
+       pdp->ping_ts = h->last_send_time;
+       pdp->ping_count = h->num_sent;
+
+       icp->icmp6_cksum = 0;   // The IPv6 stack calculates the checksum for us...
+#endif
+#if defined(DEBUG) || defined(_DEBUG)
+       if( trace_flag )
+               printf( "sending [%d] to %s\n", h->num_sent, h->host );
+#endif /* DEBUG || _DEBUG */
+
+       n = sendto( s, buffer, ping_pkt_size, 0,
+               ( struct sockaddr* )&h->saddr, sizeof( FPING_SOCKADDR ) );
+
+       if( n < 0 || n != ping_pkt_size )
+       {
+               if( verbose_flag || unreachable_flag )
+               {
+                       printf( "%s", h->host );
+                       if( verbose_flag )
+                               printf( " error while sending ping: %s\n", strerror( errno ) );
+                       
+                       printf( "\n" );
+
+               }/* IF */
+               
+               num_unreachable++;
+               remove_job( h ); 
+
+       }/* IF */
+       else
+       {
+               /* mark this trial as outstanding */
+               if( !loop_flag )
+                       h->resp_times[h->num_sent] = RESP_WAITING;
+
+#if defined( DEBUG ) || defined( _DEBUG )
+               if( sent_times_flag )
+                       h->sent_times[h->num_sent] = timeval_diff( &h->last_send_time, &start_time );
+#endif /* DEBUG || _DEBUG */
+
+               h->num_sent++;
+               h->num_sent_i++;
+               h->waiting++;
+               num_pingsent++;
+               last_send_time = h->last_send_time;
+
+       }/* ELSE */
+       
+       free( buffer );
+
+} /* send_ping() */
+
+
+/************************************************************
+
+  Function: wait_for_reply
+
+*************************************************************
+
+  Inputs:  void (none)
+
+  Returns:  int
+
+  Description:
+  
+
+************************************************************/
+
+#ifdef _NO_PROTO
+int wait_for_reply()
+#else
+int wait_for_reply( void )
+#endif
+{
+       int result;
+       static char buffer[4096];
+       FPING_SOCKADDR response_addr;
+       struct ip *ip;
+       int hlen = 0;
+       FPING_ICMPHDR *icp;
+       int n, avg;
+       HOST_ENTRY *h;
+       long this_reply;
+       int this_count;
+       struct timeval sent_time;
+
+       result = recvfrom_wto( s, buffer, sizeof(buffer), &response_addr, select_time );
+
+       if( result < 0 )
+               return 0;       /* timeout */
+  
+#if defined( DEBUG ) || defined( _DEBUG )
+       if( randomly_lose_flag )
+       {
+               if( ( random() & 0x07 ) <= lose_factor )
+                       return 0;
+
+       }/* IF */
+#endif /* DEBUG || _DEBUG */
+
+       ip = ( struct ip* )buffer;
+#ifndef IPV6
+#if defined( __alpha__ ) && __STDC__ && !defined( __GLIBC__ )
+       /* The alpha headers are decidedly broken.
+        * Using an ANSI compiler, it provides ip_vhl instead of ip_hl and
+        * ip_v.  So, to get ip_hl, we mask off the bottom four bits.
+        */
+       hlen = ( ip->ip_vhl & 0x0F ) << 2;
+#else
+       hlen = ip->ip_hl << 2;
+#endif /* defined(__alpha__) && __STDC__ */
+       if( result < hlen + ICMP_MINLEN )
+#else
+       if( result < sizeof(FPING_ICMPHDR) )
+#endif
+       {
+               if( verbose_flag )
+               {
+#ifndef IPV6
+                       printf( "received packet too short for ICMP (%d bytes from %s)\n", result,
+                               inet_ntoa( response_addr.sin_addr ) );
+#else                  
+                       char buf[INET6_ADDRSTRLEN];
+                       inet_ntop(response_addr.sin6_family, &response_addr.sin6_addr, buf, INET6_ADDRSTRLEN);
+                       printf( "received packet too short for ICMP (%d bytes from %s)\n", result, buf);
+#endif
+               }
+               return( 1 ); /* too short */ 
+       }/* IF */
+
+       icp = ( FPING_ICMPHDR* )( buffer + hlen );
+#ifndef IPV6
+       if( icp->icmp_type != ICMP_ECHOREPLY )
+#else
+       if( icp->icmp6_type != ICMP6_ECHO_REPLY )
+#endif
+       {
+               /* handle some problem */
+               if( handle_random_icmp( icp, result, &response_addr ) )
+                       num_othericmprcvd++;
+               return 1;
+       }/* IF */
+
+#ifndef IPV6
+       if( icp->icmp_id != ident )
+#else
+       if( icp->icmp6_id != ident )
+#endif
+               return 1; /* packet received, but not the one we are looking for! */
+
+       num_pingreceived++;
+
+#ifndef IPV6
+       if( icp->icmp_seq  >= ( n_short )num_hosts )
+#else
+       if( icp->icmp6_seq  >= ( n_short )num_hosts )
+#endif
+               return( 1 ); /* packet received, don't worry about it anymore */
+
+#ifndef IPV6
+       n = icp->icmp_seq;
+#else
+       n = icp->icmp6_seq;
+#endif
+       h = table[n];
+
+       /* received ping is cool, so process it */
+       gettimeofday( &current_time, &tz );
+       h->waiting = 0;
+       h->timeout = timeout;
+       h->num_recv++;
+       h->num_recv_i++;
+
+#ifndef IPV6
+       memcpy( &sent_time, icp->icmp_data + offsetof( PING_DATA, ping_ts ), sizeof( sent_time ) );
+       memcpy( &this_count, icp->icmp_data, sizeof( this_count ) );
+#else
+       memcpy( &sent_time, ((char *)icp->icmp6_data32)+4+offsetof(PING_DATA, ping_ts), sizeof( sent_time ) );
+       memcpy( &this_count, ((char *)icp->icmp6_data32)+4, sizeof( this_count ) );
+#endif
+
+#if defined( DEBUG ) || defined( _DEBUG )
+       if( trace_flag ) 
+               printf( "received [%d] from %s\n", this_count, h->host );
+#endif /* DEBUG || _DEBUG */
+
+       this_reply = timeval_diff( &current_time, &sent_time );
+       if( this_reply > max_reply ) max_reply = this_reply;
+       if( this_reply < min_reply ) min_reply = this_reply;
+       if( this_reply > h->max_reply ) h->max_reply = this_reply;
+       if( this_reply < h->min_reply ) h->min_reply = this_reply;
+       if( this_reply > h->max_reply_i ) h->max_reply_i = this_reply;
+       if( this_reply < h->min_reply_i ) h->min_reply_i = this_reply;
+       sum_replies += this_reply;
+       h->total_time += this_reply;
+       h->total_time_i += this_reply;
+       total_replies++;
+       
+       /* note reply time in array, probably */
+       if( !loop_flag )
+       {
+               if( ( this_count >= 0 ) && ( this_count < trials ) )
+               {
+                       if( h->resp_times[this_count] != RESP_WAITING )
+                       {
+                               if( !per_recv_flag )
+                               {
+                                       fprintf( stderr, "%s : duplicate for [%d], %d bytes, %s ms",
+                                               h->host, this_count, result, sprint_tm( this_reply ) );
+#ifndef IPV6
+                                       if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                                               fprintf( stderr, " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+#else
+                                       if(memcmp(&response_addr.sin6_addr, &h->saddr.sin6_addr, sizeof(response_addr.sin6_addr)))
+                                       {
+                                               char buf[INET6_ADDRSTRLEN];
+                                               inet_ntop(response_addr.sin6_family, &response_addr.sin6_addr, buf, INET6_ADDRSTRLEN);
+
+                                               fprintf( stderr, " [<- %s]", buf);
+                                       }
+#endif   
+                                       fprintf( stderr, "\n" );
+       
+                               }/* IF */
+               }/* IF */
+                       else
+                               h->resp_times[this_count] = this_reply;
+               
+               }/* IF */
+               else
+               {
+                       /* count is out of bounds?? */
+                       fprintf( stderr, "%s : duplicate for [%d], %d bytes, %s ms\n",
+                               h->host, this_count, result, sprint_tm( this_reply ) );
+               
+               }/* ELSE */
+       }/* IF */
+
+       if( h->num_recv == 1 )
+       {
+               num_alive++;
+               if( verbose_flag || alive_flag )
+               {
+                       printf( "%s", h->host );
+
+                       if( verbose_flag )
+                               printf( " is alive" );
+
+                       if( elapsed_flag )
+                               printf( " (%s ms)", sprint_tm( this_reply ) );
+#ifndef IPV6
+                       if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                               printf( " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+#else
+       if(memcmp(&response_addr.sin6_addr, &h->saddr.sin6_addr, sizeof(response_addr.sin6_addr)))
+                       {
+                               char buf[INET6_ADDRSTRLEN];
+                               inet_ntop(response_addr.sin6_family, &response_addr.sin6_addr, buf, INET6_ADDRSTRLEN);
+                               fprintf( stderr, " [<- %s]", buf);
+                       }
+#endif
+                       printf( "\n" );
+               
+               }/* IF */
+       }/* IF */
+
+       if( per_recv_flag )
+       {
+               avg = h->total_time / h->num_recv;
+               printf( "%s%s : [%d], %d bytes, %s ms",
+                       h->host, h->pad, this_count, result, sprint_tm( this_reply ) );
+               printf( " (%s avg, ", sprint_tm( avg ) );
+    
+               if( h->num_recv <= h->num_sent )
+               {
+                       printf( "%d%% loss)",
+                               ( ( h->num_sent - h->num_recv ) * 100 ) / h->num_sent );
+
+               }/* IF */
+               else
+               {
+                       printf( "%d%% return)",
+                               ( h->num_recv * 100 ) / h->num_sent );
+               
+               }/* ELSE */
+#ifndef IPV6
+               if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                       printf( " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+#else
+       if(memcmp(&response_addr.sin6_addr, &h->saddr.sin6_addr, sizeof(response_addr.sin6_addr)))
+               {
+                       char buf[INET6_ADDRSTRLEN];
+                       inet_ntop(response_addr.sin6_family, &response_addr.sin6_addr, buf, INET6_ADDRSTRLEN);
+                       fprintf( stderr, " [<- %s]", buf);
+               }
+#endif
+               
+               printf( "\n" );
+       
+       }/* IF */
+       
+       return num_jobs;
+
+} /* wait_for_reply() */
+
+/************************************************************
+
+  Function: handle_random_icmp
+
+*************************************************************
+
+  Inputs:  FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr
+
+  Returns:  int
+
+  Description:
+  
+
+************************************************************/
+
+#ifdef _NO_PROTO
+int handle_random_icmp( p, psize, addr )
+     FPING_ICMPHDR *p;
+     int psize;
+     FPING_SOCKADDR *addr;
+#else
+int handle_random_icmp( FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr )
+#endif /* _NO_PROTO */
+{
+       FPING_ICMPHDR *sent_icmp;
+       struct ip *sent_ip;
+       u_char *c;
+       HOST_ENTRY *h;
+#ifdef IPV6
+       char addr_ascii[INET6_ADDRSTRLEN];
+       inet_ntop(addr->sin6_family, &addr->sin6_addr, addr_ascii, INET6_ADDRSTRLEN);
+#endif
+
+       c = ( u_char* )p;
+#ifndef IPV6
+       switch( p->icmp_type )
+#else
+       switch( p->icmp6_type )
+#endif
+       {
+       case ICMP_UNREACH:
+               sent_icmp = ( FPING_ICMPHDR* )( c + 28 );
+               
+#ifndef IPV6
+               sent_icmp = ( struct icmp* )( c + 28 );
+               
+               if( ( sent_icmp->icmp_type == ICMP_ECHO ) &&
+                       ( sent_icmp->icmp_id == ident ) &&
+                       ( sent_icmp->icmp_seq < ( n_short )num_hosts ) )
+               {
+                       /* this is a response to a ping we sent */
+                       h = table[sent_icmp->icmp_seq];
+                       
+                       if( p->icmp_code > ICMP_UNREACH_MAXTYPE )
+                       {
+                               fprintf( stderr, "ICMP Unreachable (Invalid Code) from %s for ICMP Echo sent to %s",
+                                       inet_ntoa( addr->sin_addr ), h->host );
+
+#else
+               if( ( sent_icmp->icmp6_type == ICMP_ECHO ) &&
+                       ( sent_icmp->icmp6_id == ident ) &&
+                       ( sent_icmp->icmp6_seq < ( n_short )num_hosts ) )
+               {
+                       /* this is a response to a ping we sent */
+                       h = table[sent_icmp->icmp6_seq];
+                       
+                       if( p->icmp6_code > ICMP_UNREACH_MAXTYPE )
+                       {
+                               fprintf( stderr, "ICMP Unreachable (Invalid Code) from %s for ICMP Echo sent to %s",
+                                       addr_ascii, h->host );
+#endif
+                       }/* IF */
+                       else
+                       {
+                               fprintf( stderr, "%s from %s for ICMP Echo sent to %s",
+#ifndef IPV6
+                                       icmp_unreach_str[p->icmp_code], inet_ntoa( addr->sin_addr ), h->host );
+#else
+                                       icmp_unreach_str[p->icmp6_code], addr_ascii, h->host );
+#endif
+                       
+                       }/* ELSE */
+
+                       if( inet_addr( h->host ) == -1 )
+#ifndef IPV6
+                               fprintf( stderr, " (%s)", inet_ntoa( h->saddr.sin_addr ) );
+#else
+                               fprintf( stderr, " (%s)", addr_ascii);
+#endif
+                       
+                       fprintf( stderr, "\n" );
+               
+               }/* IF */
+
+               return 1;
+
+       case ICMP_SOURCEQUENCH:
+       case ICMP_REDIRECT:
+       case ICMP_TIMXCEED:
+       case ICMP_PARAMPROB:
+               sent_icmp = ( FPING_ICMPHDR* )( c + 28 );
+#ifndef IPV6
+               if( ( sent_icmp->icmp_type = ICMP_ECHO ) && 
+                       ( sent_icmp->icmp_id = ident ) &&
+                       ( sent_icmp->icmp_seq < ( n_short )num_hosts ) )
+               {
+                       /* this is a response to a ping we sent */
+                       h = table[sent_icmp->icmp_seq];
+                       fprintf( stderr, "%s from %s for ICMP Echo sent to %s",
+                               icmp_type_str[p->icmp_type], inet_ntoa( addr->sin_addr ), h->host );
+      
+                       if( inet_addr( h->host ) == -1 )
+                               fprintf( stderr, " (%s)", inet_ntoa( h->saddr.sin_addr ) );
+#else
+               if( ( sent_icmp->icmp6_type = ICMP_ECHO ) && 
+                       ( sent_icmp->icmp6_id = ident ) &&
+                       ( sent_icmp->icmp6_seq < ( n_short )num_hosts ) )
+               {
+                       /* this is a response to a ping we sent */
+                       h = table[sent_icmp->icmp6_seq];
+                       fprintf( stderr, "%s from %s for ICMP Echo sent to %s",
+                               icmp_type_str[p->icmp6_type], addr_ascii, h->host );
+      
+                       if( inet_addr( h->host ) == -1 )
+                               fprintf( stderr, " (%s)", addr_ascii );
+#endif
+
+                       fprintf( stderr, "\n" );
+               
+               }/* IF */
+
+               return 2;
+
+       /* no way to tell whether any of these are sent due to our ping */
+       /* or not (shouldn't be, of course), so just discard            */
+       case ICMP_TSTAMP:
+       case ICMP_TSTAMPREPLY:
+       case ICMP_IREQ:
+       case ICMP_IREQREPLY:
+       case ICMP_MASKREQ:
+       case ICMP_MASKREPLY:
+       default:
+               return 0;
+       
+       }/* SWITCH */
+
+} /* handle_random_icmp() */
+
+
+/************************************************************
+
+  Function: in_cksum
+
+*************************************************************
+
+  Inputs:  u_short *p, int n
+
+  Returns:  int
+
+  Description:
+
+  Checksum routine for Internet Protocol family headers (C Version)
+  From ping examples in W.Richard Stevens "UNIX NETWORK PROGRAMMING" book.
+
+************************************************************/
+
+#ifdef _NO_PROTO
+int in_cksum( p, n )
+u_short *p; int n;
+#else
+int in_cksum( u_short *p, int n )
+#endif /* _NO_PROTO */
+{
+       register u_short answer;
+       register long sum = 0;
+       u_short odd_byte = 0;
+
+       while( n > 1 )
+       {
+               sum += *p++;
+               n -= 2;
+       
+       }/* WHILE */
+
+
+       /* mop up an odd byte, if necessary */
+       if( n == 1 )
+       {
+               *( u_char* )( &odd_byte ) = *( u_char* )p;
+               sum += odd_byte;
+       
+       }/* IF */
+
+       sum = ( sum >> 16 ) + ( sum & 0xffff ); /* add hi 16 to low 16 */
+       sum += ( sum >> 16 );                                   /* add carry */
+       answer = ~sum;                                                  /* ones-complement, truncate*/
+       
+       return ( answer );
+
+} /* in_cksum() */
+
+
+/************************************************************
+
+  Function: add_name
+
+*************************************************************
+
+  Inputs:  char* name
+
+  Description:
+
+  process input name for addition to target list
+  name can turn into multiple targets via multiple interfaces (-m)
+  or via NIS groups
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void add_name( name )
+char *name;
+#else
+void add_name( char *name )
+#endif /* _NO_PROTO */
+{
+#ifndef IPV6
+       struct hostent *host_ent;
+       u_int ipaddress;
+       struct in_addr *ipa = ( struct in_addr* )&ipaddress;
+       struct in_addr *host_add;
+       char *nm;
+       int i = 0;
+
+       if( ( ipaddress = inet_addr( name ) ) != -1 )
+       {
+               /* input name is an IP addr, go with it */
+               if( name_flag )
+               {
+                       if( addr_flag )
+                               add_addr( name, na_cat( get_host_by_address( *ipa ), *ipa ), *ipa );
+                       else
+                       {
+                               nm = cpystr( get_host_by_address( *ipa ) );
+                               add_addr( name, nm, *ipa );
+
+                       }/* ELSE */
+               }/* IF */
+               else
+                       add_addr( name, name, *ipa );
+               
+               return;
+       
+       }/* IF */
+
+       /* input name is not an IP addr, maybe it's a host name */
+       host_ent = gethostbyname( name ); 
+       if( host_ent == NULL )
+       { 
+               if( h_errno == TRY_AGAIN )
+               { 
+                       u_sleep( DNS_TIMEOUT ); 
+                       host_ent = gethostbyname( name );
+
+               }/* IF */
+
+               if( host_ent == NULL )
+               {
+#ifdef NIS_GROUPS
+
+                       /* maybe it's the name of a NIS netgroup */
+                       char *machine, *user_ignored, *domain_ignored;
+                       setnetgrent( name );
+                       if( getnetgrent( &machine, &user_ignored, &domain_ignored ) == 0 )
+                       {
+                               endnetgrent();
+                               if( !quiet_flag )
+                                       fprintf( stderr, "%s address not found\n", name );
+                               
+                               num_noaddress++;
+                               return;
+                       
+                       }/* IF */
+                       else
+                               add_name( cpystr( machine ) );
+
+                       while( getnetgrent( &machine, &user_ignored, &domain_ignored ) )
+                               add_name( cpystr( machine ) );
+      
+                       endnetgrent();
+                       return;
+#else
+                       if( !quiet_flag )
+                               fprintf( stderr, "%s address not found\n", name );
+                       
+                       num_noaddress++;
+                       return ; 
+#endif /* NIS_GROUPS */
+               }/* IF */
+       }/* IF */
+  
+       host_add = ( struct in_addr* )*( host_ent->h_addr_list ); 
+       if( host_add == NULL )
+       { 
+               if( !quiet_flag )
+                       fprintf( stderr, "%s has no address data\n", name );
+               
+               num_noaddress++;
+               return; 
+
+       }/* IF */
+       else
+       {
+               /* it is indeed a hostname with a real address */
+               while( host_add )
+               {
+                       if( name_flag && addr_flag )
+                               add_addr( name, na_cat( name, *host_add ), *host_add );
+                       else if( addr_flag )
+                       {
+                               nm = cpystr( inet_ntoa( *host_add ) );
+                               add_addr( name, nm, *host_add );
+                       }/* ELSE IF */
+                       else
+                               add_addr( name, name, *host_add );
+                       
+                       if( !multif_flag )
+                               break;
+
+                       host_add = ( struct in_addr* )( host_ent->h_addr_list[++i] ); 
+
+               }/* WHILE */
+       }/* ELSE */
+#else
+       FPING_SOCKADDR  dst;
+       struct addrinfo         *res, hints;
+       int                                             ret_ga;
+       char                                            *hostname;
+
+       /* getaddrinfo */
+       bzero(&hints, sizeof(struct addrinfo));
+       hints.ai_flags = AI_CANONNAME;
+       hints.ai_family = AF_INET6;
+       hints.ai_socktype = SOCK_RAW;
+       hints.ai_protocol = IPPROTO_ICMPV6;
+
+       ret_ga = getaddrinfo(name, NULL, &hints, &res);
+       if (ret_ga) errx(1, "%s", gai_strerror(ret_ga));
+       if (res->ai_canonname) hostname = res->ai_canonname;
+       else hostname = name;
+       if (!res->ai_addr) errx(1, "getaddrinfo failed");
+       (void)memcpy(&dst, res->ai_addr, sizeof(FPING_SOCKADDR)); /*res->ai_addrlen);*/
+       add_addr(name, name, &dst);
+#endif
+} /* add_name() */
+
+
+/************************************************************
+
+  Function: na_cat
+
+*************************************************************
+
+  Inputs:  char* name, struct in_addr ipaddr
+
+  Returns:  char*
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+char *na_cat( name, ipaddr )
+char *name;
+struct in_addr ipaddr;
+#else
+char *na_cat( char *name, struct in_addr ipaddr )
+#endif /* _NO_PROTO */
+{
+       char *nm, *as;
+
+       as = inet_ntoa( ipaddr );
+       nm = ( char* )malloc( strlen( name ) + strlen( as ) + 4 );
+
+       if( !nm )
+               crash_and_burn( "can't allocate some space for a string" );
+       
+       strcpy( nm, name );
+       strcat( nm, " (" );
+       strcat( nm, as );
+       strcat( nm, ")" );
+
+       return( nm );
+
+} /* na_cat() */
+
+
+/************************************************************
+
+  Function: add_addr
+
+*************************************************************
+
+  Inputs:  char* name, char* host, struct in_addr ipaddr
+
+  Description:
+
+  add address to linked list of targets to be pinged
+  assume memory for *name and *host is ours!!!
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void add_addr( name, host, ipaddr )
+char *name;
+char *host;
+#ifndef IPV6
+struct in_addr ipaddr;
+#else
+FPING_SOCKADDR *ipaddr;
+#endif
+#else
+#ifndef IPV6
+void add_addr( char *name, char *host, struct in_addr ipaddr )
+#else
+void add_addr( char *name, char *host, FPING_SOCKADDR *ipaddr )
+#endif
+#endif /* _NO_PROTO */
+{
+       HOST_ENTRY *p;
+       int n, *i;
+
+       p = ( HOST_ENTRY* )malloc( sizeof( HOST_ENTRY ) );
+       if( !p )
+               crash_and_burn( "can't allocate HOST_ENTRY" );
+
+       memset( ( char* ) p, 0, sizeof( HOST_ENTRY ) );
+
+       p->name = name;
+       p->host = host;
+#ifndef IPV6
+       p->saddr.sin_family = AF_INET;
+       p->saddr.sin_addr = ipaddr; 
+#else
+       p->saddr.sin6_family = AF_INET6;
+       (void)memcpy(&p->saddr, ipaddr, sizeof(FPING_SOCKADDR));
+#endif
+       p->timeout = timeout;
+       p->running = 1;
+       p->min_reply = 10000000;
+
+       if( strlen( p->host ) > max_hostname_len )
+               max_hostname_len = strlen( p->host );
+
+       /* array for response time results */
+       if( !loop_flag )
+       {
+               i = ( int* )malloc( trials * sizeof( int ) );
+               if( !i )
+                       crash_and_burn( "can't allocate resp_times array" );
+               
+               for( n = 1; n < trials; n++ )
+                       i[n] = RESP_UNUSED;
+               
+               p->resp_times = i;
+
+       }/* IF */
+
+#if defined( DEBUG ) || defined( _DEBUG )
+       /* likewise for sent times */
+       if( sent_times_flag )
+       {
+               i = ( int* )malloc( trials * sizeof( int ) );
+               if( !i )
+                       crash_and_burn( "can't allocate sent_times array" );
+    
+               for( n = 1; n < trials; n++ )
+                       i[n] = RESP_UNUSED;
+               
+               p->sent_times = i;
+       
+       }/* IF */
+#endif /* DEBUG || _DEBUG */
+
+       if( !rrlist )
+       {
+               rrlist = p;
+               p->next = p;
+               p->prev = p;
+
+       }/* IF */
+       else
+       {
+               p->next = rrlist;
+               p->prev = rrlist->prev;
+               p->prev->next = p;
+               p->next->prev = p;
+       
+       }/* ELSE */
+
+       num_hosts++;
+
+} /* add_addr() */
+
+
+/************************************************************
+
+  Function: remove_job
+
+*************************************************************
+
+  Inputs:  HOST_ENTRY *h
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void remove_job( h )
+HOST_ENTRY *h;
+#else
+void remove_job( HOST_ENTRY *h )
+#endif /* _NO_PROTO */
+{
+#if defined( DEBUG ) || defined( _DEBUG )
+       if( trace_flag )
+               printf( "removing job for %s\n", h->host );
+#endif /* DEBUG || _DEBUG */
+
+       h->running = 0;
+       h->waiting = 0;
+       --num_jobs;
+
+       if( num_jobs )
+       {
+               /* remove us from list of active jobs */
+               h->prev->next = h->next;
+               h->next->prev = h->prev;
+               if( h==cursor )
+                       cursor = h->next;
+
+       }/* IF */
+       else
+       {
+               cursor = NULL;
+               rrlist = NULL;
+       
+       }/* ELSE */
+
+} /* remove_job() */
+
+
+/************************************************************
+
+  Function: get_host_by_address
+
+*************************************************************
+
+  Inputs:  struct in_addr in
+
+  Returns:  char*
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+char *get_host_by_address( in )
+struct in_addr in;
+#else
+char *get_host_by_address( struct in_addr in )
+#endif /* _NO_PROTO */
+{
+       struct hostent *h;
+#ifndef IPV6
+       h = gethostbyaddr( ( char* )&in, sizeof( struct in_addr ),AF_INET );
+#else
+       h = gethostbyaddr( ( char* )&in, sizeof( FPING_SOCKADDR ),AF_INET6 );
+#endif
+       
+       if( h == NULL || h->h_name == NULL )
+               return inet_ntoa( in );
+       else
+               return ( char* )h->h_name;
+
+} /* get_host_by_address() */
+
+
+/************************************************************
+
+  Function: cpystr
+
+*************************************************************
+
+  Inputs:  char* string
+
+  Returns:  char*
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+char *cpystr( string )
+char *string;
+#else
+char *cpystr( char *string )
+#endif /* _NO_PROTO */
+{
+       char *dst;
+
+       if( string )
+       {
+               dst = ( char* )malloc( 1 + strlen( string ) );
+               if( !dst )
+                       crash_and_burn( "can't allocate some space for a string" );
+               
+               strcpy( dst, string );
+               return dst;
+       
+       }/* IF */
+       else 
+               return NULL;
+
+} /* cpystr() */
+
+
+/************************************************************
+
+  Function: crash_and_burn
+
+*************************************************************
+
+  Inputs:  char* message
+
+  Description:
+
+************************************************************/
+  
+#ifdef _NO_PROTO
+void crash_and_burn( message )
+char *message;
+#else
+void crash_and_burn( char *message )
+#endif /* _NO_PROTO */
+{
+       if( verbose_flag )
+               fprintf( stderr, "%s: %s\n", prog, message );
+       
+       exit( 4 );
+
+} /* crash_and_burn() */
+
+
+/************************************************************
+
+  Function: errno_crash_and_burn
+
+*************************************************************
+
+  Inputs:  char* message
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void errno_crash_and_burn( message )
+char *message;
+#else
+void errno_crash_and_burn( char *message )
+#endif /* _NO_PROTO */
+{
+       if( verbose_flag )
+               fprintf( stderr, "%s: %s : %s\n", prog, message, strerror( errno ) );
+
+       exit( 4 );
+
+} /* errno_crash_and_burn() */
+
+
+/************************************************************
+
+  Function: timeval_diff
+
+*************************************************************
+
+  Inputs:  struct timeval *a, struct timeval *b
+
+  Returns:  long
+
+  Description:
+
+  timeval_diff now returns result in hundredths of milliseconds
+  ie, tens of microseconds                                    
+
+************************************************************/
+
+#ifdef _NO_PROTO
+long timeval_diff( a, b )
+struct timeval *a, *b;
+#else
+long timeval_diff( struct timeval *a, struct timeval *b )
+#endif /* _NO_PROTO */
+{
+       double temp;
+
+       temp = ( ( ( a->tv_sec * 1000000 ) + a->tv_usec ) -
+               ( ( b->tv_sec * 1000000 ) + b->tv_usec ) ) / 10;
+
+       return ( long )temp;
+
+} /* timeval_diff() */
+
+/************************************************************
+
+  Function: sprint_tm
+
+*************************************************************
+
+  Inputs:  int t
+
+  Returns:  char*
+
+  Description:
+
+  render time into a string with three digits of precision
+  input is in tens of microseconds
+
+************************************************************/
+
+#ifdef _NO_PROTO
+char * sprint_tm( t )
+int t;
+#else
+char * sprint_tm( int t )
+#endif /* _NO_PROTO */
+{
+       static char buf[10];
+
+       /* <= 0.99 ms */
+       if( t < 100 )
+       {
+               sprintf( buf, "0.%02d", t );
+               return( buf );
+
+       }/* IF */
+
+       /* 1.00 - 9.99 ms */
+       if( t < 1000 )
+       {
+               sprintf( buf, "%d.%02d", t / 100, t % 100 );
+               return( buf );
+
+       }/* IF */
+
+       /* 10.0 - 99.9 ms */
+       if( t < 10000 )
+       {
+               sprintf( buf, "%d.%d", t / 100, ( t % 100 ) / 10 );
+               return( buf );
+       
+       }/* IF */
+  
+       /* >= 100 ms */
+       sprintf( buf, "%d", t / 100 );
+       return( buf );
+
+} /* sprint_tm() */
+
+
+/************************************************************
+
+  Function: u_sleep
+
+*************************************************************
+
+  Inputs:  int u_sec
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void u_sleep( u_sec )
+int u_sec;
+#else
+void u_sleep( int u_sec )
+#endif /* _NO_PROTO */
+{
+       int nfound, slen, n;
+       struct timeval to;
+       fd_set readset, writeset;
+
+       to.tv_sec = u_sec / 1000000;
+       to.tv_usec = u_sec - ( to.tv_sec * 1000000 );
+
+       FD_ZERO( &readset );
+       FD_ZERO( &writeset );
+       nfound = select( 0, &readset, &writeset, NULL, &to );
+       if( nfound < 0 )
+               errno_crash_and_burn( "select" );
+
+       return;
+
+} /* u_sleep() */
+
+
+/************************************************************
+
+  Function: recvfrom_wto
+
+*************************************************************
+
+  Inputs:  int s, char* buf, int len, FPING_SOCKADDR *saddr, int timo
+
+  Returns:  int
+
+  Description:
+
+  receive with timeout
+  returns length of data read or -1 if timeout
+  crash_and_burn on any other errrors
+
+************************************************************/
+
+#ifdef _NO_PROTO
+int recvfrom_wto( s, buf, len, saddr, timo )
+int s; char *buf; int len; FPING_SOCKADDR *saddr; int timo;
+#else
+int recvfrom_wto( int s, char *buf, int len, FPING_SOCKADDR *saddr, int timo )
+#endif /* _NO_PROTO */
+{
+       int nfound, slen, n;
+       struct timeval to;
+       fd_set readset, writeset;
+
+       to.tv_sec = timo / 100000;
+       to.tv_usec = ( timo - ( to.tv_sec * 100000 ) ) * 10;
+
+       FD_ZERO( &readset );
+       FD_ZERO( &writeset );
+       FD_SET( s, &readset );
+       nfound = select( s + 1, &readset, &writeset, NULL, &to );
+       if( nfound < 0 )
+               errno_crash_and_burn( "select" );
+
+       if( nfound == 0 )
+               return -1;              /* timeout */
+
+#ifndef IPV6
+       slen = sizeof( struct sockaddr );
+#else
+       slen = sizeof( FPING_SOCKADDR );
+#endif
+       n = recvfrom( s, buf, len, 0, (struct sockaddr *)saddr, &slen );
+       if( n < 0 )
+               errno_crash_and_burn( "recvfrom" );
+       
+       return n;
+
+} /* recvfrom_wto() */
+
+
+/************************************************************
+
+  Function: usage
+
+*************************************************************
+
+  Inputs:  none (void)
+
+  Description:
+
+************************************************************/
+
+#ifdef _NO_PROTO
+void usage()
+#else
+void usage( void )
+#endif /* _NO_PROTO */
+{
+       fprintf( stderr, "\n" );
+       fprintf( stderr, "Usage: %s [options] [targets...]\n", prog );
+       fprintf( stderr, "   -a         show targets that are alive\n" );
+       fprintf( stderr, "   -A         show targets by address\n" );
+       fprintf( stderr, "   -b n       amount of ping data to send, in bytes (default %d)\n", ping_data_size );
+       fprintf( stderr, "   -B f       set exponential backoff factor to f\n" );
+       fprintf( stderr, "   -c n       count of pings to send to each target (default %d)\n", count );  
+       fprintf( stderr, "   -C n       same as -c, report results in verbose format\n" );
+       fprintf( stderr, "   -e         show elapsed time on return packets\n" );
+       fprintf( stderr, "   -f file    read list of targets from a file ( - means stdin) (only if no -g specified)\n" );
+       fprintf( stderr, "   -g         generate target list (only if no -f specified)\n" );
+       fprintf( stderr, "                (specify the start and end IP in the target list, or supply a IP netmask)\n" );
+    fprintf( stderr, "                (ex. %s -g 192.168.1.0 192.168.1.255 or %s -g 192.168.1.0/24)\n", prog, prog );
+       fprintf( stderr, "   -i n       interval between sending ping packets (in millisec) (default %d)\n", interval / 100 );
+       fprintf( stderr, "   -l         loop sending pings forever\n" );
+       fprintf( stderr, "   -m         ping multiple interfaces on target host\n" );
+       fprintf( stderr, "   -n         show targets by name (-d is equivalent)\n" );
+       fprintf( stderr, "   -p n       interval between ping packets to one target (in millisec)\n" );
+       fprintf( stderr, "                (in looping and counting modes, default %d)\n", perhost_interval / 100 );
+       fprintf( stderr, "   -q         quiet (don't show per-target/per-ping results)\n" );
+       fprintf( stderr, "   -Q n       same as -q, but show summary every n seconds\n" );
+       fprintf( stderr, "   -r n       number of retries (default %d)\n", retry );
+       fprintf( stderr, "   -s         print final stats\n" );
+       fprintf( stderr, "   -t n       individual target initial timeout (in millisec) (default %d)\n", timeout / 100 );
+       fprintf( stderr, "   -u         show targets that are unreachable\n" );
+       fprintf( stderr, "   -v         show version\n" );
+       fprintf( stderr, "   targets    list of targets to check (if no -f specified)\n" );
+       fprintf( stderr, "\n");
+       exit( 3 );
+
+} /* usage() */
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..5871924
--- /dev/null
@@ -0,0 +1,238 @@
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/linux.h b/linux.h
new file mode 100755 (executable)
index 0000000..ef265c7
--- /dev/null
+++ b/linux.h
@@ -0,0 +1,133 @@
+/*
+** Special compatibility definitions for linux.
+**
+**     On the linux platform, several IP-related structures have
+**     different names. Also some of the structure fields have
+**     other names, although the layout is (obviously) fixed.
+**     Several constants are not defined in the standard files.
+**
+**     @(#)linux.h             e07@nikhef.nl (Eric Wassenaar) 960301
+*/
+
+#if defined(linux)
+
+#include <endian.h>            /* to get the proper BYTE_ORDER */
+
+#if !defined(BYTE_ORDER) || (BYTE_ORDER != BIG_ENDIAN && \
+     BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != PDP_ENDIAN)
+error "Undefined or invalid BYTE_ORDER";
+#endif
+
+/*
+ * Structure of an ip header, without options.
+ */
+
+#define        IPVERSION       4
+
+struct ip {
+#if (BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN)
+       u_char  ip_hl:4,                /* header length */
+               ip_v:4;                 /* version */
+#else
+       u_char  ip_v:4,                 /* version */
+               ip_hl:4;                /* header length */
+#endif
+       u_char  ip_tos;                 /* type of service */
+       short   ip_len;                 /* total length */
+       u_short ip_id;                  /* identification */
+       short   ip_off;                 /* fragment offset field */
+#define        IP_DF 0x4000                    /* dont fragment flag */
+#define        IP_MF 0x2000                    /* more fragments flag */
+       u_char  ip_ttl;                 /* time to live */
+       u_char  ip_p;                   /* protocol */
+       u_short ip_sum;                 /* checksum */
+       struct  in_addr ip_src,ip_dst;  /* source and dest address */
+};
+
+#define        IP_MAXPACKET    65535           /* maximum packet size */
+
+/*
+ * Structure of an icmp header.
+ */
+
+struct icmp {
+       u_char  icmp_type;              /* type of message, see below */
+       u_char  icmp_code;              /* type sub code */
+       u_short icmp_cksum;             /* ones complement cksum of struct */
+       union {
+               u_char ih_pptr;                 /* ICMP_PARAMPROB */
+               struct in_addr ih_gwaddr;       /* ICMP_REDIRECT */
+               struct ih_idseq {
+                       n_short icd_id;
+                       n_short icd_seq;
+               } ih_idseq;
+               int ih_void;
+       } icmp_hun;
+#define        icmp_pptr       icmp_hun.ih_pptr
+#define        icmp_gwaddr     icmp_hun.ih_gwaddr
+#define        icmp_id         icmp_hun.ih_idseq.icd_id
+#define        icmp_seq        icmp_hun.ih_idseq.icd_seq
+#define        icmp_void       icmp_hun.ih_void
+       union {
+               struct id_ts {
+                       n_time its_otime;
+                       n_time its_rtime;
+                       n_time its_ttime;
+               } id_ts;
+               struct id_ip  {
+                       struct ip idi_ip;
+                       /* options and then 64 bits of data */
+               } id_ip;
+               u_long  id_mask;
+               char    id_data[1];
+       } icmp_dun;
+#define        icmp_otime      icmp_dun.id_ts.its_otime
+#define        icmp_rtime      icmp_dun.id_ts.its_rtime
+#define        icmp_ttime      icmp_dun.id_ts.its_ttime
+#define        icmp_ip         icmp_dun.id_ip.idi_ip
+#define        icmp_mask       icmp_dun.id_mask
+#define        icmp_data       icmp_dun.id_data
+};
+
+#define        ICMP_MINLEN     8               /* abs minimum */
+
+/*
+ * Definition of icmp type and code field values.
+ */
+
+#define        ICMP_ECHOREPLY          0               /* echo reply */
+#define        ICMP_UNREACH            3               /* dest unreachable, codes: */
+#define                ICMP_UNREACH_NET        0               /* bad net */
+#define                ICMP_UNREACH_HOST       1               /* bad host */
+#define                ICMP_UNREACH_PROTOCOL   2               /* bad protocol */
+#define                ICMP_UNREACH_PORT       3               /* bad port */
+#define                ICMP_UNREACH_NEEDFRAG   4               /* IP_DF caused drop */
+#define                ICMP_UNREACH_SRCFAIL    5               /* src route failed */
+#define        ICMP_SOURCEQUENCH       4               /* packet lost, slow down */
+#define        ICMP_REDIRECT           5               /* shorter route, codes: */
+#define                ICMP_REDIRECT_NET       0               /* for network */
+#define                ICMP_REDIRECT_HOST      1               /* for host */
+#define                ICMP_REDIRECT_TOSNET    2               /* for tos and net */
+#define                ICMP_REDIRECT_TOSHOST   3               /* for tos and host */
+#define        ICMP_ECHO               8               /* echo service */
+#define        ICMP_TIMXCEED           11              /* time exceeded, code: */
+#define                ICMP_TIMXCEED_INTRANS   0               /* ttl==0 in transit */
+#define                ICMP_TIMXCEED_REASS     1               /* ttl==0 in reass */
+#define        ICMP_PARAMPROB          12              /* ip header bad */
+#define        ICMP_TSTAMP             13              /* timestamp request */
+#define        ICMP_TSTAMPREPLY        14              /* timestamp reply */
+#define        ICMP_IREQ               15              /* information request */
+#define        ICMP_IREQREPLY          16              /* information reply */
+#define        ICMP_MASKREQ            17              /* address mask request */
+#define        ICMP_MASKREPLY          18              /* address mask reply */
+
+/*
+ * Definitions needed for the udp header structure.
+ */
+
+#define uh_sport       source
+#define uh_dport       dest
+#define uh_ulen                len
+#define uh_sum         check
+
+#endif /* linux */
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..7789652
--- /dev/null
+++ b/missing
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing - GNU libit 0.0"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`configure.in'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`configure.in'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f y.tab.h ]; then
+       echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequirements for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..cc8783e
--- /dev/null
@@ -0,0 +1,36 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Last modified: 1994-03-25
+# Public domain
+
+errstatus=0
+
+for file in ${1+"$@"} ; do 
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d in ${1+"$@"} ; do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp" 1>&2
+        mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
+     fi
+
+     if test ! -d "$pathcomp"; then
+       errstatus=$lasterr
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/options.h b/options.h
new file mode 100755 (executable)
index 0000000..3c99d80
--- /dev/null
+++ b/options.h
@@ -0,0 +1,54 @@
+
+/* 
+ *  Interval is the minimum amount of time between sending a ping packet to 
+ *  any host.
+ * 
+ *  Perhost_interval is the minimum amount of time between sending a ping 
+ *  packet to a particular responding host (when count is > 1)
+ * 
+ *  Timeout  is the initial amount of time between sending a ping packet to
+ *  a particular non-responding host.
+ * 
+ *  Retry is the number of ping packets to send to a non-responding host
+ *  before giving up (in is-it-alive mode).
+ * 
+ *  Backoff factor is how much longer to wait on successive retries.
+ * 
+ * 
+ */
+
+/* constants */
+
+#ifndef DEFAULT_INTERVAL
+#define DEFAULT_INTERVAL 25        /* default time between packets (msec) */
+#endif
+
+#ifndef DEFAULT_PERHOST_INTERVAL      /* default time between packets */
+#define DEFAULT_PERHOST_INTERVAL 1000 /* to a particular destination  */
+#endif                                /* in counting/looping mode     */
+
+#ifndef DEFAULT_TIMEOUT
+#define DEFAULT_TIMEOUT 500       /* individual host timeouts */
+#endif
+
+
+#ifndef DEFAULT_RETRY 
+#define DEFAULT_RETRY 3            /* number of times to retry a host */
+#endif
+
+#ifndef DEFAULT_SELECT_TIME
+#define DEFAULT_SELECT_TIME 10     /* default time to wait during select() */
+#endif
+
+#ifndef DEFAULT_BACKOFF_FACTOR
+#define DEFAULT_BACKOFF_FACTOR 1.5 /* exponential timeout factor */
+#endif
+#define MIN_BACKOFF_FACTOR     1.0 /* exponential timeout factor */
+#define MAX_BACKOFF_FACTOR     5.0 /* exponential timeout factor */
+
+#ifndef DNS_TIMEOUT
+#define DNS_TIMEOUT 1000         /* time in micro_sec for dns retry */
+#endif
+
+/*  NIS_GROUPS allows input name to be an NIS netgroup name */
+/* #define NIS_GROUPS=1 */
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100755 (executable)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp