--- /dev/null
+
+/*
+ * 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.
+ */
+
--- /dev/null
+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
--- /dev/null
+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)
--- /dev/null
+sbin_PROGRAMS = fping
+fping_SOURCES = fping.c options.h linux.h
+man_MANS = fping.8
+AUTOMAKE_OPTIONS=foreign
+EXTRA_DIST = $(man_MANS)
--- /dev/null
+# 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:
--- /dev/null
+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.
--- /dev/null
+#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 */
--- /dev/null
+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([,]))])
+
--- /dev/null
+/* 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 */
--- /dev/null
+#! /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
+
--- /dev/null
+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)
--- /dev/null
+.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
--- /dev/null
+/*
+ * 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( ¤t_time, &tz );
+ lt = timeval_diff( ¤t_time, &last_send_time );
+ ht = timeval_diff( ¤t_time, &cursor->last_send_time );
+
+ if( report_interval && ( loop_flag || count_flag ) &&
+ ( timeval_diff ( ¤t_time, &last_report_time ) > report_interval ) )
+ {
+ print_per_system_splits();
+ gettimeofday( ¤t_time, &tz );
+ lt = timeval_diff( ¤t_time, &last_send_time );
+ ht = timeval_diff( ¤t_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* )¤t_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( ¤t_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( ¤t_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() */
--- /dev/null
+#! /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
--- /dev/null
+/*
+** 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 */
--- /dev/null
+#! /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
--- /dev/null
+#! /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
--- /dev/null
+
+/*
+ * 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 */