]> git.pld-linux.org Git - packages/fping.git/commitdiff
ipv6 patch + ac fix (patch isnt mine)
authorMaciej Pijanka <agaran@pld-linux.org>
Thu, 7 Nov 2002 20:34:20 +0000 (20:34 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    fping-ipv6-ac.patch -> 1.1
    fping-ipv6.patch -> 1.1

fping-ipv6-ac.patch [new file with mode: 0644]
fping-ipv6.patch [new file with mode: 0644]

diff --git a/fping-ipv6-ac.patch b/fping-ipv6-ac.patch
new file mode 100644 (file)
index 0000000..9c941f0
--- /dev/null
@@ -0,0 +1,461 @@
+diff -Naur fping-2.4b2_to-ipv6/config.h.in fping-2.4b2_to-ipv6-ac/config.h.in
+--- fping-2.4b2_to-ipv6/config.h.in    Wed Jan 16 01:49:45 2002
++++ fping-2.4b2_to-ipv6-ac/config.h.in Thu Nov  7 20:53:14 2002
+@@ -1,4 +1,4 @@
+-/* config.h.in.  Generated automatically from configure.in by autoheader.  */
++/* config.h.in.  Generated from configure.in by autoheader.  */
+ #ifndef CONFIG_H
+ #define CONFIG_H
+@@ -6,31 +6,77 @@
+ /* VERSION (from configure.in) */
+ #undef VERSION
+-/* Define if you have the <stdlib.h> header file.  */
++
++
++/* Define if you want to enable IPv6 support */
++#undef ENABLE_IPV6
++
++/* Define if getaddrinfo exists and works */
++#undef HAVE_GETADDRINFO
++
++/* Define to 1 if you have the <inttypes.h> header file. */
++#undef HAVE_INTTYPES_H
++
++/* Define to 1 if you have the `nsl' library (-lnsl). */
++#undef HAVE_LIBNSL
++
++/* Define to 1 if you have the `socket' library (-lsocket). */
++#undef HAVE_LIBSOCKET
++
++/* Define to 1 if you have the <memory.h> header file. */
++#undef HAVE_MEMORY_H
++
++/* Define to 1 if you have the <stdint.h> header file. */
++#undef HAVE_STDINT_H
++
++/* Define to 1 if you have the <stdlib.h> header file. */
+ #undef HAVE_STDLIB_H
+-/* Define if you have the <sys/file.h> header file.  */
++/* Define to 1 if you have the <strings.h> header file. */
++#undef HAVE_STRINGS_H
++
++/* Define to 1 if you have the <string.h> header file. */
++#undef HAVE_STRING_H
++
++/* Define to 1 if you have the <sys/file.h> header file. */
+ #undef HAVE_SYS_FILE_H
+-/* Define if you have the <sys/select.h> header file.  */
++/* Define to 1 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 to 1 if you have the <sys/stat.h> header file. */
++#undef HAVE_SYS_STAT_H
+-/* Define if you have the nsl library (-lnsl).  */
+-#undef HAVE_LIBNSL
++/* Define to 1 if you have the <sys/types.h> header file. */
++#undef HAVE_SYS_TYPES_H
+-/* Define if you have the socket library (-lsocket).  */
+-#undef HAVE_LIBSOCKET
++/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H
+ /* Name of package */
+ #undef PACKAGE
++/* Define to the address where bug reports for this package should be sent. */
++#undef PACKAGE_BUGREPORT
++
++/* Define to the full name of this package. */
++#undef PACKAGE_NAME
++
++/* Define to the full name and version of this package. */
++#undef PACKAGE_STRING
++
++/* Define to the one symbol short name of this package. */
++#undef PACKAGE_TARNAME
++
++/* Define to the version of this package. */
++#undef PACKAGE_VERSION
++
++/* Define to 1 if you have the ANSI C header files. */
++#undef STDC_HEADERS
++
+ /* Version number of package */
+ #undef VERSION
+-
+ /* some OSes do not define this ... lets take a wild guess */
+ #ifndef INADDR_NONE
+diff -Naur fping-2.4b2_to-ipv6/configure.in fping-2.4b2_to-ipv6-ac/configure.in
+--- fping-2.4b2_to-ipv6/configure.in   Wed Jan 16 01:48:02 2002
++++ fping-2.4b2_to-ipv6-ac/configure.in        Thu Nov  7 20:52:17 2002
+@@ -14,6 +14,84 @@
+ AC_PROG_CC
+ AC_PROG_CPP
+ AC_PROG_INSTALL
++AC_PROG_AWK
++
++dnl **********************************************************************
++dnl Checks for IPv6
++dnl **********************************************************************
++dnl borrowed from curl
++
++AC_MSG_CHECKING([whether to enable ipv6])
++AC_ARG_ENABLE(ipv6,
++[  --enable-ipv6              Enable ipv6 (with ipv4) support
++  --disable-ipv6      Disable ipv6 support],
++[ case "$enableval" in
++  no)
++       AC_MSG_RESULT(no)
++       ipv6=no
++       ;;
++  *)   AC_MSG_RESULT(yes)
++       ipv6=yes
++       ;;
++  esac ],
++
++  AC_TRY_RUN([ /* is AF_INET6 available? */
++#include <sys/types.h>
++#include <sys/socket.h>
++main()
++{
++ if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
++   exit(1);
++ else
++   exit(0);
++}
++],
++  AC_MSG_RESULT(yes)
++  ipv6=yes,
++  AC_MSG_RESULT(no)
++  ipv6=no,
++  AC_MSG_RESULT(no)
++  ipv6=no
++))
++
++if test "$ipv6" = "yes"; then
++  AC_CACHE_CHECK(for working getaddrinfo, ac_cv_working_getaddrinfo,[
++  AC_TRY_RUN( [
++#include <netdb.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++
++void main(void) {
++    struct addrinfo hints, *ai;
++    int error;
++
++    memset(&hints, 0, sizeof(hints));
++    hints.ai_family = AF_UNSPEC;
++    hints.ai_socktype = SOCK_STREAM;
++    error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
++    if (error) {
++        exit(1);
++    }
++    else {
++        exit(0);
++    }
++}
++],[
++  ac_cv_working_getaddrinfo="yes"
++],[
++  ac_cv_working_getaddrinfo="no"
++],[
++  ac_cv_working_getaddrinfo="yes"
++])])
++if test "$ac_cv_working_getaddrinfo" = "yes"; then
++  AC_DEFINE(HAVE_GETADDRINFO, 1, [Define if getaddrinfo exists and works])
++  AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support])
++
++  IPV6_ENABLED=1
++  AC_SUBST(IPV6_ENABLED)
++fi
++fi
++
+ dnl Checks for libraries.
+diff -Naur fping-2.4b2_to-ipv6/fping.c fping-2.4b2_to-ipv6-ac/fping.c
+--- fping-2.4b2_to-ipv6/fping.c        Mon Jan 21 02:06:30 2002
++++ fping-2.4b2_to-ipv6-ac/fping.c     Thu Nov  7 20:56:42 2002
+@@ -42,7 +42,6 @@
+  * 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 ) \
+@@ -96,7 +95,7 @@
+ #include <sys/file.h>
+ #endif /* HAVE_SYS_FILE_H */
+-#ifdef IPV6
++#ifdef ENABLE_IPV6
+ #include <netinet/icmp6.h>
+ #endif
+ #include <netinet/in_systm.h>
+@@ -222,7 +221,7 @@
+ };
+ #define       ICMP_UNREACH_MAXTYPE    15
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+ #define       FPING_SOCKADDR struct sockaddr_in
+ #define       FPING_ICMPHDR   struct icmp
+ #else
+@@ -349,7 +348,7 @@
+ #else
+ void add_name( char *name );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+ void add_addr( char *name, char *host, struct in_addr ipaddr );
+ #else
+ void add_addr( char *name, char *host, FPING_SOCKADDR *ipaddr );
+@@ -400,7 +399,7 @@
+ #endif /* _NO_PROTO */
+ {
+       int c, i, n;
+-#ifdef IPV6
++#ifdef ENABLE_IPV6
+       int opton = 1;
+ #endif
+       u_int lt, ht;
+@@ -420,7 +419,7 @@
+       }/* IF */
+       /* confirm that ICMP is available on this machine */
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       if( ( proto = getprotobyname( "icmp" ) ) == NULL ) 
+ #else
+       if( ( proto = getprotobyname( "ipv6-icmp" ) ) == NULL ) 
+@@ -428,7 +427,7 @@
+               crash_and_burn( "icmp: unknown protocol" );
+       /* create raw socket for ICMP calls (ping) */
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       s = socket( AF_INET, SOCK_RAW, proto->p_proto );
+ #else
+       s = socket( AF_INET6, SOCK_RAW, proto->p_proto );
+@@ -437,7 +436,7 @@
+       if( s < 0 )
+               errno_crash_and_burn( "can't create raw socket" );
+-#ifdef IPV6
++#ifdef ENABLE_IPV6
+       /*
+        * let the kerel pass extension headers of incoming packets,
+        * for privileged socket options
+@@ -1504,7 +1503,7 @@
+       icp = ( FPING_ICMPHDR* )buffer;
+       gettimeofday( &h->last_send_time, &tz );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       icp->icmp_type = ICMP_ECHO;
+       icp->icmp_code = 0;
+       icp->icmp_cksum = 0;
+@@ -1624,7 +1623,7 @@
+ #endif /* DEBUG || _DEBUG */
+       ip = ( struct ip* )buffer;
+-#ifndef IPV6
++#ifndef ENABLE_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
+@@ -1641,7 +1640,7 @@
+       {
+               if( verbose_flag )
+               {
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+                       printf( "received packet too short for ICMP (%d bytes from %s)\n", result,
+                               inet_ntoa( response_addr.sin_addr ) );
+ #else                 
+@@ -1654,7 +1653,7 @@
+       }/* IF */
+       icp = ( FPING_ICMPHDR* )( buffer + hlen );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       if( icp->icmp_type != ICMP_ECHOREPLY )
+ #else
+       if( icp->icmp6_type != ICMP6_ECHO_REPLY )
+@@ -1666,7 +1665,7 @@
+               return 1;
+       }/* IF */
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       if( icp->icmp_id != ident )
+ #else
+       if( icp->icmp6_id != ident )
+@@ -1675,14 +1674,14 @@
+       num_pingreceived++;
+-#ifndef IPV6
++#ifndef ENABLE_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
++#ifndef ENABLE_IPV6
+       n = icp->icmp_seq;
+ #else
+       n = icp->icmp6_seq;
+@@ -1696,7 +1695,7 @@
+       h->num_recv++;
+       h->num_recv_i++;
+-#ifndef IPV6
++#ifndef ENABLE_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
+@@ -1732,7 +1731,7 @@
+                               {
+                                       fprintf( stderr, "%s : duplicate for [%d], %d bytes, %s ms",
+                                               h->host, this_count, result, sprint_tm( this_reply ) );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+                                       if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                                               fprintf( stderr, " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+ #else
+@@ -1773,7 +1772,7 @@
+                       if( elapsed_flag )
+                               printf( " (%s ms)", sprint_tm( this_reply ) );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+                       if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                               printf( " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+ #else
+@@ -1808,7 +1807,7 @@
+                               ( h->num_recv * 100 ) / h->num_sent );
+               
+               }/* ELSE */
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+               if( response_addr.sin_addr.s_addr != h->saddr.sin_addr.s_addr )
+                       printf( " [<- %s]", inet_ntoa( response_addr.sin_addr ) );
+ #else
+@@ -1856,13 +1855,13 @@
+       struct ip *sent_ip;
+       u_char *c;
+       HOST_ENTRY *h;
+-#ifdef IPV6
++#ifdef ENABLE_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
++#ifndef ENABLE_IPV6
+       switch( p->icmp_type )
+ #else
+       switch( p->icmp6_type )
+@@ -1871,7 +1870,7 @@
+       case ICMP_UNREACH:
+               sent_icmp = ( FPING_ICMPHDR* )( c + 28 );
+               
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+               sent_icmp = ( struct icmp* )( c + 28 );
+               
+               if( ( sent_icmp->icmp_type == ICMP_ECHO ) &&
+@@ -1903,7 +1902,7 @@
+                       else
+                       {
+                               fprintf( stderr, "%s from %s for ICMP Echo sent to %s",
+-#ifndef IPV6
++#ifndef ENABLE_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 );
+@@ -1912,7 +1911,7 @@
+                       }/* ELSE */
+                       if( inet_addr( h->host ) == -1 )
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+                               fprintf( stderr, " (%s)", inet_ntoa( h->saddr.sin_addr ) );
+ #else
+                               fprintf( stderr, " (%s)", addr_ascii);
+@@ -1929,7 +1928,7 @@
+       case ICMP_TIMXCEED:
+       case ICMP_PARAMPROB:
+               sent_icmp = ( FPING_ICMPHDR* )( c + 28 );
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+               if( ( sent_icmp->icmp_type = ICMP_ECHO ) && 
+                       ( sent_icmp->icmp_id = ident ) &&
+                       ( sent_icmp->icmp_seq < ( n_short )num_hosts ) )
+@@ -2053,7 +2052,7 @@
+ void add_name( char *name )
+ #endif /* _NO_PROTO */
+ {
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       struct hostent *host_ent;
+       u_int ipaddress;
+       struct in_addr *ipa = ( struct in_addr* )&ipaddress;
+@@ -2243,13 +2242,13 @@
+ void add_addr( name, host, ipaddr )
+ char *name;
+ char *host;
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+ struct in_addr ipaddr;
+ #else
+ FPING_SOCKADDR *ipaddr;
+ #endif
+ #else
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+ void add_addr( char *name, char *host, struct in_addr ipaddr )
+ #else
+ void add_addr( char *name, char *host, FPING_SOCKADDR *ipaddr )
+@@ -2267,7 +2266,7 @@
+       p->name = name;
+       p->host = host;
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       p->saddr.sin_family = AF_INET;
+       p->saddr.sin_addr = ipaddr; 
+ #else
+@@ -2401,7 +2400,7 @@
+ #endif /* _NO_PROTO */
+ {
+       struct hostent *h;
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       h = gethostbyaddr( ( char* )&in, sizeof( struct in_addr ),AF_INET );
+ #else
+       h = gethostbyaddr( ( char* )&in, sizeof( FPING_SOCKADDR ),AF_INET6 );
+@@ -2677,7 +2676,7 @@
+       if( nfound == 0 )
+               return -1;              /* timeout */
+-#ifndef IPV6
++#ifndef ENABLE_IPV6
+       slen = sizeof( struct sockaddr );
+ #else
+       slen = sizeof( FPING_SOCKADDR );
diff --git a/fping-ipv6.patch b/fping-ipv6.patch
new file mode 100644 (file)
index 0000000..5ed8dc8
--- /dev/null
@@ -0,0 +1,952 @@
+diff -Naur fping-2.4b2/ChangeLog fping-2.4b2_to-ipv6/ChangeLog
+--- fping-2.4b2/ChangeLog      Thu Mar 15 03:09:39 2001
++++ fping-2.4b2_to-ipv6/ChangeLog      Mon Jan 21 02:15:04 2002
+@@ -1,12 +1,23 @@
+-Tue Mar 14 18:37:50 2001\r
+-Jason Ewasiuk (ZeroHype Technologies Inc.) <noc@zerohype.com>\r
++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 14:35:00 2001\r
+-Jason Ewasiuk (ZeroHype Technologies Inc.) <noc@zerohype.com>\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
+diff -Naur fping-2.4b2/Makefile.am fping-2.4b2_to-ipv6/Makefile.am
+--- fping-2.4b2/Makefile.am    Thu Mar 15 03:07:52 2001
++++ fping-2.4b2_to-ipv6/Makefile.am    Wed Jan 16 01:52:18 2002
+@@ -1,5 +1,5 @@
+-
+ sbin_PROGRAMS = fping
+ fping_SOURCES = fping.c options.h linux.h
+ man_MANS = fping.8
+ AUTOMAKE_OPTIONS=foreign
++EXTRA_DIST = $(man_MANS)
+diff -Naur fping-2.4b2/README fping-2.4b2_to-ipv6/README
+--- fping-2.4b2/README Wed Apr 25 20:29:10 2001
++++ fping-2.4b2_to-ipv6/README Mon Jan 21 02:02:12 2002
+@@ -1,9 +1,9 @@
+ fping README
+ ------------
+-Current maintainer and cool feature adder:
++Current maintainer:
+-ZeroHype Technologies Inc. (noc@zerohype.com) http://www.zerohype.com
++David Papp - david@remote.net 
+ fping website:  http://www.fping.com
+@@ -11,6 +11,7 @@
+ 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:
+diff -Naur fping-2.4b2/acconfig.h fping-2.4b2_to-ipv6/acconfig.h
+--- fping-2.4b2/acconfig.h     Thu Mar 15 03:07:52 2001
++++ fping-2.4b2_to-ipv6/acconfig.h     Sat Nov  3 16:23:40 2001
+@@ -1,4 +1,18 @@
++#ifndef CONFIG_H
++#define CONFIG_H
++
++@TOP@
+ /* VERSION (from configure.in) */
+ #undef VERSION
++
++@BOTTOM@
++
++/* some OSes do not define this ... lets take a wild guess */
++
++#ifndef INADDR_NONE
++#  define INADDR_NONE 0xffffffffU
++#endif
++
++#endif /* CONFIG_H */
+diff -Naur fping-2.4b2/aclocal.m4 fping-2.4b2_to-ipv6/aclocal.m4
+--- fping-2.4b2/aclocal.m4     Thu Jan  1 01:00:00 1970
++++ fping-2.4b2_to-ipv6/aclocal.m4     Wed Jan 16 01:48:55 2002
+@@ -0,0 +1,127 @@
++dnl aclocal.m4 generated automatically by aclocal 1.4
++
++dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
++dnl This file is free software; the Free Software Foundation
++dnl gives unlimited permission to copy and/or distribute it,
++dnl with or without modifications, as long as this notice is preserved.
++
++dnl This program is distributed in the hope that it will be useful,
++dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++dnl PARTICULAR PURPOSE.
++
++# Do all the work for Automake.  This macro actually does too much --
++# some checks are only needed if your package does certain things.
++# But this isn't really a big deal.
++
++# serial 1
++
++dnl Usage:
++dnl AM_INIT_AUTOMAKE(package,version, [no-define])
++
++AC_DEFUN(AM_INIT_AUTOMAKE,
++[AC_REQUIRE([AC_PROG_INSTALL])
++PACKAGE=[$1]
++AC_SUBST(PACKAGE)
++VERSION=[$2]
++AC_SUBST(VERSION)
++dnl test to see if srcdir already configured
++if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
++  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
++fi
++ifelse([$3],,
++AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
++AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
++AC_REQUIRE([AM_SANITY_CHECK])
++AC_REQUIRE([AC_ARG_PROGRAM])
++dnl FIXME This is truly gross.
++missing_dir=`cd $ac_aux_dir && pwd`
++AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
++AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
++AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
++AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
++AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
++AC_REQUIRE([AC_PROG_MAKE_SET])])
++
++#
++# Check to make sure that the build environment is sane.
++#
++
++AC_DEFUN(AM_SANITY_CHECK,
++[AC_MSG_CHECKING([whether build environment is sane])
++# Just in case
++sleep 1
++echo timestamp > conftestfile
++# Do `set' in a subshell so we don't clobber the current shell's
++# arguments.  Must try -L first in case configure is actually a
++# symlink; some systems play weird games with the mod time of symlinks
++# (eg FreeBSD returns the mod time of the symlink's containing
++# directory).
++if (
++   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
++   if test "[$]*" = "X"; then
++      # -L didn't work.
++      set X `ls -t $srcdir/configure conftestfile`
++   fi
++   if test "[$]*" != "X $srcdir/configure conftestfile" \
++      && test "[$]*" != "X conftestfile $srcdir/configure"; then
++
++      # If neither matched, then we have a broken ls.  This can happen
++      # if, for instance, CONFIG_SHELL is bash and it inherits a
++      # broken ls alias from the environment.  This has actually
++      # happened.  Such a system could not be considered "sane".
++      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
++alias in your environment])
++   fi
++
++   test "[$]2" = conftestfile
++   )
++then
++   # Ok.
++   :
++else
++   AC_MSG_ERROR([newly created file is older than distributed files!
++Check your system clock])
++fi
++rm -f conftest*
++AC_MSG_RESULT(yes)])
++
++dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
++dnl The program must properly implement --version.
++AC_DEFUN(AM_MISSING_PROG,
++[AC_MSG_CHECKING(for working $2)
++# Run test in a subshell; some versions of sh will print an error if
++# an executable is not found, even if stderr is redirected.
++# Redirect stdin to placate older versions of autoconf.  Sigh.
++if ($2 --version) < /dev/null > /dev/null 2>&1; then
++   $1=$2
++   AC_MSG_RESULT(found)
++else
++   $1="$3/missing $2"
++   AC_MSG_RESULT(missing)
++fi
++AC_SUBST($1)])
++
++# Like AC_CONFIG_HEADER, but automatically create stamp file.
++
++AC_DEFUN(AM_CONFIG_HEADER,
++[AC_PREREQ([2.12])
++AC_CONFIG_HEADER([$1])
++dnl When config.status generates a header, we must update the stamp-h file.
++dnl This file resides in the same directory as the config header
++dnl that is generated.  We must strip everything past the first ":",
++dnl and everything past the last "/".
++AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
++ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
++<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
++<<am_indx=1
++for am_file in <<$1>>; do
++  case " <<$>>CONFIG_HEADERS " in
++  *" <<$>>am_file "*<<)>>
++    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
++    ;;
++  esac
++  am_indx=`expr "<<$>>am_indx" + 1`
++done<<>>dnl>>)
++changequote([,]))])
++
+diff -Naur fping-2.4b2/config.h.in fping-2.4b2_to-ipv6/config.h.in
+--- fping-2.4b2/config.h.in    Thu Mar 15 03:07:52 2001
++++ fping-2.4b2_to-ipv6/config.h.in    Wed Jan 16 01:49:45 2002
+@@ -1,4 +1,7 @@
+ /* config.h.in.  Generated automatically from configure.in by autoheader.  */
++#ifndef CONFIG_H
++#define CONFIG_H
++
+ /* VERSION (from configure.in) */
+ #undef VERSION
+@@ -20,3 +23,18 @@
+ /* Define if you have the socket library (-lsocket).  */
+ #undef HAVE_LIBSOCKET
++
++/* Name of package */
++#undef PACKAGE
++
++/* Version number of package */
++#undef VERSION
++
++
++/* some OSes do not define this ... lets take a wild guess */
++
++#ifndef INADDR_NONE
++#  define INADDR_NONE 0xffffffffU
++#endif
++
++#endif /* CONFIG_H */
+diff -Naur fping-2.4b2/configure.in fping-2.4b2_to-ipv6/configure.in
+--- fping-2.4b2/configure.in   Thu Nov  7 21:11:57 2002
++++ fping-2.4b2_to-ipv6/configure.in   Wed Jan 16 01:48:02 2002
+@@ -1,18 +1,26 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(fping.c)
+-AM_INIT_AUTOMAKE(fping,fping)
++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_ARG_PROGRAM
+ AC_PROG_CC
+ AC_PROG_CPP
+ AC_PROG_INSTALL
+ dnl Checks for libraries.
+-AC_CHECK_FUNC(gethostbyname, [] AC_CHECK_LIB(nsl, gethostbyname))
++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)
+@@ -21,4 +29,4 @@
+ dnl Checks for header files.
+ AC_CHECK_HEADERS(unistd.h sys/file.h stdlib.h sys/select.h)
+-AC_OUTPUT([Makefile])
++AC_OUTPUT(Makefile)
+diff -Naur fping-2.4b2/fping.8 fping-2.4b2_to-ipv6/fping.8
+--- fping-2.4b2/fping.8        Thu Mar 15 03:10:45 2001
++++ fping-2.4b2_to-ipv6/fping.8        Mon Jan 21 02:05:48 2002
+@@ -192,7 +192,7 @@
+ .nf\r
+ Roland J. Schemers III, Stanford University, concept and versions 1.x\r
+ RL "Bob" Morgan, Stanford University, versions 2.x\r
+-ZeroHype Technologies Inc. (http://www.zerohype.com), versions 2.3x and up,\r
++David Papp, versions 2.3x and up,\r
+ fping website:  http://www.fping.com\r
+ .ni\r
+ .SH DIAGNOSTICS\r
+diff -Naur fping-2.4b2/fping.c fping-2.4b2_to-ipv6/fping.c
+--- fping-2.4b2/fping.c        Fri Jul 20 19:10:26 2001
++++ fping-2.4b2_to-ipv6/fping.c        Mon Jan 21 02:06:30 2002
+@@ -17,12 +17,13 @@
+  *
+  * Current maintainers of fping:
+  *
+- * ZeroHype Technologies Inc. (http://www.zerohype.com)
+- * Suggestions and patches, please email noc@zerohype.com
++ * David Papp
++ * Suggestions and patches, please email david@remote.net
+  *
+  *
+  *
+- * Original author:  Roland Schemers  <schemers@stanford.edu> 
++ * Original author:  Roland Schemers  <schemers@stanford.edu>
++ * IPv6 Support:     Jeroen Massar    <jeroen@unfix.org / jeroen@ipng.nl>
+  *
+  *
+  *
+@@ -41,6 +42,7 @@
+  * 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 ) \
+@@ -65,13 +67,16 @@
+ /*** autoconf includes ***/
+-#include <config.h>
+ #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 */
+@@ -91,8 +96,10 @@
+ #include <sys/file.h>
+ #endif /* HAVE_SYS_FILE_H */
++#ifdef IPV6
++#include <netinet/icmp6.h>
++#endif
+ #include <netinet/in_systm.h>
+-#include <netinet/in.h>
+ /* Linux has bizarre ip.h and ip_icmp.h */
+ #if defined( __linux__ )
+@@ -126,8 +133,8 @@
+ /*** Constants ***/
+-#define REV_DATE      "2001/01/25 11:25:04"
+-#define EMAIL         "noc@zerohype.com"
++#define REV_DATE      "2002/01/16 00:33:42"
++#define EMAIL         "david@remote.net"
+ /*** Ping packet defines ***/
+@@ -215,6 +222,13 @@
+ };
+ #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 */
+@@ -225,7 +239,7 @@
+      char                 *name;              /* name as given by user */
+      char                 *host;              /* text description of host */
+      char                 *pad;               /* pad to align print names */
+-     struct sockaddr_in   saddr;              /* internet address */
++     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 */
+@@ -335,7 +349,11 @@
+ #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 );
+@@ -343,7 +361,7 @@
+ 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, struct sockaddr *saddr, int timo );
++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 );
+@@ -353,7 +371,7 @@
+ void print_per_system_splits( void );
+ void print_global_stats( void );
+ void finish();
+-int handle_random_icmp( struct icmp *p, int psize, struct sockaddr_in *addr );
++int handle_random_icmp( FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr );
+ char *sprint_tm( int t );
+ #endif /* _NO_PROTO */
+@@ -382,12 +400,14 @@
+ #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() )
+@@ -400,15 +420,62 @@
+       }/* 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() );
+@@ -1425,7 +1492,7 @@
+ #endif /* _NO_PROTO */
+ {
+       char *buffer;
+-      struct icmp *icp;
++      FPING_ICMPHDR *icp;
+       PING_DATA *pdp;
+       int n;
+@@ -1434,9 +1501,10 @@
+               crash_and_burn( "can't malloc ping packet" );
+       
+       memset( buffer, 0, ping_pkt_size * sizeof( char ) );
+-      icp = ( struct icmp* )buffer;
++      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;
+@@ -1448,14 +1516,25 @@
+       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( struct sockaddr_in ) );
++              ( struct sockaddr* )&h->saddr, sizeof( FPING_SOCKADDR ) );
+       if( n < 0 || n != ping_pkt_size )
+       {
+@@ -1520,18 +1599,17 @@
+ {
+       int result;
+       static char buffer[4096];
+-      struct sockaddr_in response_addr;
++      FPING_SOCKADDR response_addr;
+       struct ip *ip;
+-      int hlen;
+-      struct icmp *icp;
++      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, 4096,
+-              ( struct sockaddr* )&response_addr, select_time );
++      result = recvfrom_wto( s, buffer, sizeof(buffer), &response_addr, select_time );
+       if( result < 0 )
+               return 0;       /* timeout */
+@@ -1546,7 +1624,7 @@
+ #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
+@@ -1556,37 +1634,59 @@
+ #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 = ( struct icmp* )( buffer + hlen );
++      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 */
+@@ -1595,9 +1695,14 @@
+       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 ) 
+@@ -1627,10 +1732,18 @@
+                               {
+                                       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 */
+@@ -1660,10 +1773,17 @@
+                       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 */
+@@ -1688,9 +1808,17 @@
+                               ( 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" );
+       
+@@ -1706,7 +1834,7 @@
+ *************************************************************
+-  Inputs:  struct icmp *p, int psize, struct sockaddr_in *addr
++  Inputs:  FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr
+   Returns:  int
+@@ -1717,22 +1845,33 @@
+ #ifdef _NO_PROTO
+ int handle_random_icmp( p, psize, addr )
+-     struct icmp *p;
++     FPING_ICMPHDR *p;
+      int psize;
+-     struct sockaddr_in *addr;
++     FPING_SOCKADDR *addr;
+ #else
+-int handle_random_icmp( struct icmp *p, int psize, struct sockaddr_in *addr )
++int handle_random_icmp( FPING_ICMPHDR *p, int psize, FPING_SOCKADDR *addr )
+ #endif /* _NO_PROTO */
+ {
+-      struct icmp *sent_icmp;
++      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 ) &&
+@@ -1747,16 +1886,37 @@
+                               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" );
+               
+@@ -1768,7 +1928,8 @@
+       case ICMP_REDIRECT:
+       case ICMP_TIMXCEED:
+       case ICMP_PARAMPROB:
+-              sent_icmp = ( struct icmp* )( c + 28 );
++              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 ) )
+@@ -1780,6 +1941,19 @@
+       
+                       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" );
+               
+@@ -1879,6 +2053,7 @@
+ 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;
+@@ -1985,7 +2160,27 @@
+               }/* 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() */
+@@ -2048,9 +2243,17 @@
+ 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;
+@@ -2064,8 +2267,13 @@
+       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;
+@@ -2193,7 +2401,11 @@
+ #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 );
+@@ -2429,7 +2641,7 @@
+ *************************************************************
+-  Inputs:  int s, char* buf, int len, struct sockaddr *saddr, int timo
++  Inputs:  int s, char* buf, int len, FPING_SOCKADDR *saddr, int timo
+   Returns:  int
+@@ -2443,9 +2655,9 @@
+ #ifdef _NO_PROTO
+ int recvfrom_wto( s, buf, len, saddr, timo )
+-int s; char *buf; int len; struct sockaddr *saddr; int timo;
++int s; char *buf; int len; FPING_SOCKADDR *saddr; int timo;
+ #else
+-int recvfrom_wto( int s, char *buf, int len, struct sockaddr *saddr, int timo )
++int recvfrom_wto( int s, char *buf, int len, FPING_SOCKADDR *saddr, int timo )
+ #endif /* _NO_PROTO */
+ {
+       int nfound, slen, n;
+@@ -2465,8 +2677,12 @@
+       if( nfound == 0 )
+               return -1;              /* timeout */
++#ifndef IPV6
+       slen = sizeof( struct sockaddr );
+-      n = recvfrom( s, buf, len, 0, saddr, &slen );
++#else
++      slen = sizeof( FPING_SOCKADDR );
++#endif
++      n = recvfrom( s, buf, len, 0, (struct sockaddr *)saddr, &slen );
+       if( n < 0 )
+               errno_crash_and_burn( "recvfrom" );
+       
This page took 0.251168 seconds and 4 git commands to generate.