Revision: 18786 http://gar.svn.sourceforge.net/gar/?rev=18786&view=rev Author: j_arndt Date: 2012-07-17 18:52:52 +0000 (Tue, 17 Jul 2012) Log Message: ----------- fping/trunk: update to 3.2
Modified Paths: -------------- csw/mgar/pkg/fping/trunk/Makefile csw/mgar/pkg/fping/trunk/checksums Removed Paths: ------------- csw/mgar/pkg/fping/trunk/files/fping-2.4b2_to-sequence-fix.patch csw/mgar/pkg/fping/trunk/files/fping-ipv6.patch Modified: csw/mgar/pkg/fping/trunk/Makefile =================================================================== --- csw/mgar/pkg/fping/trunk/Makefile 2012-07-17 11:49:43 UTC (rev 18785) +++ csw/mgar/pkg/fping/trunk/Makefile 2012-07-17 18:52:52 UTC (rev 18786) @@ -1,10 +1,20 @@ -NAME = fping -VERSION = 2.4 -REV = b2_to -CATEGORIES = utils -GARTYPE = v2 +NAME = fping +VERSION = 3.2 +CATEGORIES = utils +GARTYPE = v2 -DESCRIPTION = A ping like program accepting any number of hosts +# +# package definitions +# + +PACKAGES = CSWfping +SPKG_DESC_CSWfping = A ping like program accepting any number of hosts +CATALOGNAME_CSWfping = fping + +# +# blurb +# + define BLURB fping is a ping(1) like program which uses the Internet Control Message Protocol (ICMP) echo request to determine if a host is up. @@ -18,29 +28,32 @@ unreachable. endef -MASTER_SITES = http://fping.sourceforge.net/download/ -MASTER_SITES += http://oss.oetiker.ch/smokeping/pub/ -DISTFILES = $(NAME).tar.gz -#PATCHFILES = fping-2.4b2_to-sequence-fix.patch -PATCHFILES += fping-ipv6.patch +# +# download, distfiles, patchfiles +# +MASTER_SITES = http://fping.org/dist/ +DISTFILES = $(NAME)-$(VERSION).tar.gz +VENDOR_URL = http://fping.org/ + # We define upstream file regex so we can be notifed of new upstream software release -#UFILES_REGEX = $(NAME)-(\d+(?:\.\d+)*).tar.gz +UFILES_REGEX = $(NAME)-(\d+(?:\.\d+)*).tar.gz -# If the url used to check for software update is different of MASTER_SITES, then -# uncomment the next line. Otherwise it is set by default to the value of MASTER_SITES -#UPSTREAM_MASTER_SITES = http://fping.sourceforge.net/ +# +# reinplacements +# -SPKG_SOURCEURL = http://fping.sourceforge.net/ +REINPLACE_USRLOCAL += doc/fping* -WORKSRC = $(WORKDIR)/$(NAME)-$(VERSION)$(REV) +# +# configure +# CONFIGURE_ARGS = $(DIRPATHS) +# +# nothing to be done here for installation and packaging +# + include gar/category.mk -SPKG_VERSION := $(SPKG_VERSION)_rev=$(REV) - - - - Modified: csw/mgar/pkg/fping/trunk/checksums =================================================================== --- csw/mgar/pkg/fping/trunk/checksums 2012-07-17 11:49:43 UTC (rev 18785) +++ csw/mgar/pkg/fping/trunk/checksums 2012-07-17 18:52:52 UTC (rev 18786) @@ -1,2 +1 @@ -c5e9dc057bda53ed36af08ee9fb84938 download/fping-ipv6.patch -d5e8be59e307cef76bc479e1684df705 download/fping.tar.gz +efc86557e9b54e5c3becb598a50684a0 fping-3.2.tar.gz Deleted: csw/mgar/pkg/fping/trunk/files/fping-2.4b2_to-sequence-fix.patch =================================================================== --- csw/mgar/pkg/fping/trunk/files/fping-2.4b2_to-sequence-fix.patch 2012-07-17 11:49:43 UTC (rev 18785) +++ csw/mgar/pkg/fping/trunk/files/fping-2.4b2_to-sequence-fix.patch 2012-07-17 18:52:52 UTC (rev 18786) @@ -1,82 +0,0 @@ -Only in fping-2.4b2_to.patch: Makefile -Only in fping-2.4b2_to.patch: config.h -Only in fping-2.4b2_to.patch: config.log -Only in fping-2.4b2_to.patch: config.status -Only in fping-2.4b2_to.patch: fping -diff -u fping-2.4b2_to/fping.c fping-2.4b2_to.patch/fping.c ---- fping-2.4b2_to/fping.c 2001-07-20 19:10:26.000000000 +0200 -+++ fping-2.4b2_to.patch/fping.c 2008-08-18 22:14:38.000000000 +0200 -@@ -1440,7 +1440,7 @@ - icp->icmp_type = ICMP_ECHO; - icp->icmp_code = 0; - icp->icmp_cksum = 0; -- icp->icmp_seq = h->i; -+ icp->icmp_seq = h->i + (h->num_sent) * num_hosts; - icp->icmp_id = ident; - - pdp = ( PING_DATA* )( buffer + SIZE_ICMP_HDR ); -@@ -1527,6 +1527,7 @@ - int n, avg; - HOST_ENTRY *h; - long this_reply; -+ long id; - int this_count; - struct timeval sent_time; - -@@ -1568,6 +1569,7 @@ - }/* IF */ - - icp = ( struct icmp* )( buffer + hlen ); -+ id = icp->icmp_seq % num_hosts; - if( icp->icmp_type != ICMP_ECHOREPLY ) - { - /* handle some problem */ -@@ -1583,10 +1585,10 @@ - - num_pingreceived++; - -- if( icp->icmp_seq >= ( n_short )num_hosts ) -+ if( id >= ( n_short )num_hosts ) - return( 1 ); /* packet received, don't worry about it anymore */ - -- n = icp->icmp_seq; -+ n = id; - h = table[n]; - - /* received ping is cool, so process it */ -@@ -1726,6 +1728,7 @@ - { - struct icmp *sent_icmp; - struct ip *sent_ip; -+ long id = sent_icmp->icmp_seq % num_hosts; - u_char *c; - HOST_ENTRY *h; - -@@ -1737,10 +1740,10 @@ - - if( ( sent_icmp->icmp_type == ICMP_ECHO ) && - ( sent_icmp->icmp_id == ident ) && -- ( sent_icmp->icmp_seq < ( n_short )num_hosts ) ) -+ ( id < ( n_short )num_hosts ) ) - { - /* this is a response to a ping we sent */ -- h = table[sent_icmp->icmp_seq]; -+ h = table[id]; - - if( p->icmp_code > ICMP_UNREACH_MAXTYPE ) - { -@@ -1771,10 +1774,10 @@ - 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 ) ) -+ ( id < ( n_short )num_hosts ) ) - { - /* this is a response to a ping we sent */ -- h = table[sent_icmp->icmp_seq]; -+ h = table[id]; - fprintf( stderr, "%s from %s for ICMP Echo sent to %s", - icmp_type_str[p->icmp_type], inet_ntoa( addr->sin_addr ), h->host ); - -Only in fping-2.4b2_to.patch: fping.o -Only in fping-2.4b2_to.patch: stamp-h Deleted: csw/mgar/pkg/fping/trunk/files/fping-ipv6.patch =================================================================== --- csw/mgar/pkg/fping/trunk/files/fping-ipv6.patch 2012-07-17 11:49:43 UTC (rev 18785) +++ csw/mgar/pkg/fping/trunk/files/fping-ipv6.patch 2012-07-17 18:52:52 UTC (rev 18786) @@ -1,952 +0,0 @@ -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 --Jason Ewasiuk (ZeroHype Technologies Inc.) <n...@zerohype.com> -+Wed Jan 16 2002 -+Jeroen Massar -+- Revision v2.4b2-to-IPv6 -+ - Added IPv6 support. -+ - Added -I option for selecting source IPv4/IPv6 address. -+ - Makefile.in now generates a Makefile which will build both -+ fping (IPv4) and fping6 (IPv6). Thus it makes an fping (IPv4 only) -+ and an fping6 (IPv6 only). -+ - num_unreachable was counted twice when a sendto() generated errors. -+ - See http://unfix.org/projects/ipv6/ -+ -+Tue Mar 14 2001 -+Jason Ewasiuk <jas...@remote.net> - - Revision v2.4b1 - - added -g option for generating IPs from a start to an end value - - two available options, generate IPs from start IP to end IP - or from a passed netmask, such as 192.168.1.0/24 - --Thu Feb 15 14:35:00 2001 --Jason Ewasiuk (ZeroHype Technologies Inc.) <n...@zerohype.com> -+Thu Feb 15 2001 -+Jason Ewasiuk <jas...@remote.net> - - Revision v2.3b1 - - formatting changes to code layout (fping.c) - NOTE: Best viewed with a tab stop of 4 -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. (n...@zerohype.com) http://www.zerohype.com -+David Papp - da...@remote.net - - - fping website: http://www.fping.com -@@ -11,6 +11,7 @@ - - Original author: Roland Schemers (schem...@stanford.edu) - Previous maintainer: RL "Bob" Morgan (mor...@stanford.edu) -+IPv6 Support: Jeroen Massar (jer...@unfix.org / jer...@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 - Roland J. Schemers III, Stanford University, concept and versions 1.x - RL "Bob" Morgan, Stanford University, versions 2.x --ZeroHype Technologies Inc. (http://www.zerohype.com), versions 2.3x and up, -+David Papp, versions 2.3x and up, - fping website: http://www.fping.com - .ni - .SH DIAGNOSTICS -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 n...@zerohype.com -+ * David Papp -+ * Suggestions and patches, please email da...@remote.net - * - * - * -- * Original author: Roland Schemers <schem...@stanford.edu> -+ * Original author: Roland Schemers <schem...@stanford.edu> -+ * IPv6 Support: Jeroen Massar <jer...@unfix.org / jer...@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 "n...@zerohype.com" -+#define REV_DATE "2002/01/16 00:33:42" -+#define EMAIL "da...@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 was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel