diff --git a/.cvsignore b/.cvsignore index e69de29..5e3e0ca 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +fping-2.4b2_to-ipv6.tar.gz diff --git a/fping-2.4b2_ipv6-fix.diff b/fping-2.4b2_ipv6-fix.diff new file mode 100644 index 0000000..1a7c691 --- /dev/null +++ b/fping-2.4b2_ipv6-fix.diff @@ -0,0 +1,88 @@ +--- fping-2.4b2-to-ipv6.orig/fping.c ++++ fping-2.4b2-to-ipv6/fping.c +@@ -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 ) \ +@@ -150,7 +149,11 @@ + #define MIN_PING_DATA sizeof( PING_DATA ) + #define MAX_IP_PACKET 65536 /* (theoretical) max IP packet size */ + #define SIZE_IP_HDR 20 ++#ifndef IPV6 + #define SIZE_ICMP_HDR ICMP_MINLEN /* from ip_icmp.h */ ++#else ++#define SIZE_ICMP_HDR sizeof(FPING_ICMPHDR) ++#endif + #define MAX_PING_DATA ( MAX_IP_PACKET - SIZE_IP_HDR - SIZE_ICMP_HDR ) + + /* sized so as to be like traditional ping */ +@@ -474,6 +477,35 @@ + sizeof(opton))) + err(1, "setsockopt(IPV6_RTHDR)"); + #endif ++#ifndef USE_SIN6_SCOPE_ID ++#ifdef IPV6_RECVPKTINFO ++ if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, &opton, ++ sizeof(opton))) ++ err(1, "setsockopt(IPV6_RECVPKTINFO)"); ++#else /* old adv. API */ ++ if (setsockopt(s, IPPROTO_IPV6, IPV6_PKTINFO, &opton, ++ sizeof(opton))) ++ err(1, "setsockopt(IPV6_PKTINFO)"); ++#endif ++#endif /* USE_SIN6_SCOPE_ID */ ++#ifdef IPV6_RECVHOPLIMIT ++ if (setsockopt(s, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &opton, ++ sizeof(opton))) ++ err(1, "setsockopt(IPV6_RECVHOPLIMIT)"); ++#else /* old adv. API */ ++ if (setsockopt(s, IPPROTO_IPV6, IPV6_HOPLIMIT, &opton, ++ sizeof(opton))) ++ err(1, "setsockopt(IPV6_HOPLIMIT)"); ++#endif ++#ifdef IPV6_CHECKSUM ++#ifndef SOL_RAW ++#define SOL_RAW IPPROTO_IPV6 ++#endif ++ opton = 2; ++ if (setsockopt(s, SOL_RAW, IPV6_CHECKSUM, &opton, ++ sizeof(opton))) ++ err(1, "setsockopt(SOL_RAW,IPV6_CHECKSUM)"); ++#endif + #endif + + if( ( uid = getuid() ) ) +@@ -1382,8 +1414,8 @@ + 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 ); ++ h->num_sent_i, h->num_recv_i, h->num_sent_i > 0 ? ++ ( ( h->num_sent_i - h->num_recv_i ) * 100 ) / h->num_sent_i : 0 ); + + }/* IF */ + else +@@ -2165,6 +2197,7 @@ + struct addrinfo *res, hints; + int ret_ga; + char *hostname; ++ size_t len; + + /* getaddrinfo */ + bzero(&hints, sizeof(struct addrinfo)); +@@ -2178,7 +2211,9 @@ + 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);*/ ++ len = res->ai_addrlen; ++ if (len > sizeof(FPING_SOCKADDR)) len = sizeof(FPING_SOCKADDR); ++ (void)memcpy(&dst, res->ai_addr, len); + add_addr(name, name, &dst); + #endif + } /* add_name() */ diff --git a/fping.spec b/fping.spec new file mode 100644 index 0000000..2277812 --- /dev/null +++ b/fping.spec @@ -0,0 +1,57 @@ +Name: fping +Version: 2.4b2 +Release: 3 +Summary: Scriptable, parallelized ping-like utility +Group: Applications/Internet +License: BSD +URL: http://www.fping.com/ +Source0: http://www.fping.com/download/%{name}-%{version}_to-ipv6.tar.gz +Patch0: fping-2.4b2_ipv6-fix.diff +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +%description +fping is a ping-like program which can determine the accessibility of +multiple hosts using ICMP echo requests. fping is designed for parallelized +monitoring of large numbers of systems, and is developed with ease of +use in scripting in mind. + +%prep +%setup -q -n %{name}-%{version}_to-ipv6 +%patch0 -p1 -b .ipv6 + +%build +%configure +make CFLAGS="-DIPV6 $RPM_OPT_FLAGS" +mv fping fping6 + +make clean +make CFLAGS="$RPM_OPT_FLAGS" + +%install +rm -rf $RPM_BUILD_ROOT +make DESTDIR="$RPM_BUILD_ROOT" install +install -p -m 4755 fping6 "$RPM_BUILD_ROOT"/%{_sbindir} + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc ChangeLog COPYING README +%attr(4755,root,root) %{_sbindir}/fping +%attr(4755,root,root) %{_sbindir}/fping6 +%{_mandir}/man8/* + +%changelog +* Mon May 16 2005 Chris Ricker 2.4b2-3 +- Simplify doc packaging (Matthias Saou) +- Simplify clean (Matthias Saou) +- Don't strip fping6 binary (Matthias Saou) +- Preserve timestamps + +* Wed May 11 2005 Chris Ricker 2.4b2-2 +- Fix URL and Source locations + +* Wed Mar 23 2005 Chris Ricker 2.4b2-1 +- Initial package for Fedora +- IPv6 patches from Herbert Xu (Debian) diff --git a/sources b/sources index e69de29..c171497 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +3ad516765514249a40d3c5b6caab812a fping-2.4b2_to-ipv6.tar.gz