diff options
author | edwin <edwin@FreeBSD.org> | 2007-09-08 21:31:22 +0800 |
---|---|---|
committer | edwin <edwin@FreeBSD.org> | 2007-09-08 21:31:22 +0800 |
commit | b42b37d3626fc9197301f8ce684a0992c79c9daf (patch) | |
tree | 452de6ffff580e4d685efccc4c20ff96645dcdaa /net/fping | |
parent | 2c8a18971d43e9f37e68ad03eb2bd3514fb6677b (diff) | |
download | freebsd-ports-gnome-b42b37d3626fc9197301f8ce684a0992c79c9daf.tar.gz freebsd-ports-gnome-b42b37d3626fc9197301f8ce684a0992c79c9daf.tar.zst freebsd-ports-gnome-b42b37d3626fc9197301f8ce684a0992c79c9daf.zip |
ports/net/fping patch to add -S source_addr option
Several people have produced some patches for fping that adds an
option to select the IP source_address for queries and some have
said they submitted them to the sourceforge fping maintainer.
Since I did not see any official fping distributions that include
any of those patches, I recently Cc-ed the sourceforge fping
maintainer's address in a question to the smokeping mailing-list
asking about that patch but so far I have heard back only from
that list with a pointer to a debian patch. Per request from
Jason Harris, I include here a copy of the patch that is usable
in ports/net/fping/files that adds that option.
PR: ports/111549
Submitted by: Philip Kizer <pckizer@nostrum.com>
Approved by: maintainer timeout
Diffstat (limited to 'net/fping')
-rw-r--r-- | net/fping/Makefile | 1 | ||||
-rw-r--r-- | net/fping/files/patch-sourceaddr | 88 |
2 files changed, 89 insertions, 0 deletions
diff --git a/net/fping/Makefile b/net/fping/Makefile index 27f490a92ad1..54702803d03a 100644 --- a/net/fping/Makefile +++ b/net/fping/Makefile @@ -8,6 +8,7 @@ PORTNAME= fping PORTVERSION= 2.4b2 +PORTREVISION= 1 CATEGORIES= net ipv6 MASTER_SITES= http://keyserver.kjsl.com/~jharris/distfiles/ #MASTER_SITES= http://www.fping.com/download/ diff --git a/net/fping/files/patch-sourceaddr b/net/fping/files/patch-sourceaddr new file mode 100644 index 000000000000..543c8ef24ec5 --- /dev/null +++ b/net/fping/files/patch-sourceaddr @@ -0,0 +1,88 @@ +diff -ru ../fping-2.4b2_to-ipv6-orig/fping.c ./fping.c +--- ../fping-2.4b2_to-ipv6-orig/fping.c Sun Jan 20 19:06:30 2002 ++++ ./fping.c Fri Apr 13 14:36:02 2007 +@@ -283,6 +283,12 @@ + u_int count = 1; + u_int trials; + u_int report_interval = 0; ++int src_addr_present = 0; ++#ifndef IPV6 ++struct in_addr src_addr; ++#else ++struct in6_addr src_addr; ++#endif + + /* global stats */ + long max_reply = 0; +@@ -408,6 +414,11 @@ + struct protoent *proto; + char *buf; + uid_t uid; ++#ifndef IPV6 ++ struct sockaddr_in sa; ++#else ++ struct sockaddr_in6 sa; ++#endif + /* check if we are root */ + + if( geteuid() ) +@@ -491,7 +502,7 @@ + + /* get command line options */ + +- while( ( c = getopt( argc, argv, "gedhlmnqusaAvz:t:i:p:f:r:c:b:C:Q:B:" ) ) != EOF ) ++ while( ( c = getopt( argc, argv, "gedhlmnqusaAvz:t:i:p:f:r:c:b:C:Q:B:S:" ) ) != EOF ) + { + switch( c ) + { +@@ -639,6 +650,16 @@ + generate_flag = 1; + break; + ++ case 'S': ++#ifndef IPV6 ++ if( ! inet_pton( AF_INET, optarg, &src_addr ) ) ++#else ++ if( ! inet_pton( AF_INET6, optarg, &src_addr ) ) ++#endif ++ usage(); ++ src_addr_present = 1; ++ break; ++ + default: + usage(); + break; +@@ -962,6 +983,22 @@ + if( !num_hosts ) + exit( 2 ); + ++ /* set the source address */ ++ ++ if( src_addr_present ) ++ { ++ memset( &sa, 0, sizeof( sa ) ); ++#ifndef IPV6 ++ sa.sin_family = AF_INET; ++ sa.sin_addr = src_addr; ++#else ++ sa.sin6_family = AF_INET6; ++ sa.sin6_addr = src_addr; ++#endif ++ if ( bind( s, (struct sockaddr *)&sa, sizeof( sa ) ) < 0 ) ++ errno_crash_and_burn( "cannot bind source address" ); ++ } ++ + /* allocate array to hold outstanding ping requests */ + + table = ( HOST_ENTRY** )malloc( sizeof( HOST_ENTRY* ) * num_hosts ); +@@ -2732,6 +2769,7 @@ + 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, " -S addr set source address\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" ); + + + |