Date: Fri, 13 Apr 2007 19:45:15 -0500 (CDT) From: Philip Kizer <pckizer@nostrum.com> To: FreeBSD-gnats-submit@FreeBSD.org Cc: jharris@widomaker.com Subject: ports/111549: ports/net/fping patch to add -S source_addr option Message-ID: <200704140045.l3E0jFAi061703@shaman.nostrum.com> Resent-Message-ID: <200704140120.l3E1K3pW036751@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 111549 >Category: ports >Synopsis: ports/net/fping patch to add -S source_addr option >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sat Apr 14 01:20:02 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Philip Kizer >Release: FreeBSD 6.2-STABLE i386 >Organization: >Environment: System: FreeBSD shaman.nostrum.com 6.2-STABLE FreeBSD 6.2-STABLE #1: Tue Mar 20 23:33:38 CDT 2007 root@shaman:/usr/obj/usr/src/sys/CUSTOM i386 >Description: 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. >How-To-Repeat: n/a >Fix: The patch from: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=198486 was adapted to apply to the ports system. Put the following patch into ports/net/fping/files/patch-fping.c-dash-S and re-install fping. It will then take a <-S source_address> command-line option for selecting the out-going source IP: 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" ); >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704140045.l3E0jFAi061703>