From owner-freebsd-ports-bugs@FreeBSD.ORG Sat Apr 14 01:20:03 2007 Return-Path: X-Original-To: freebsd-ports-bugs@hub.freebsd.org Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BA70516A403 for ; Sat, 14 Apr 2007 01:20:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 974F813C48C for ; Sat, 14 Apr 2007 01:20:03 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l3E1K3w4036752 for ; Sat, 14 Apr 2007 01:20:03 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l3E1K3pW036751; Sat, 14 Apr 2007 01:20:03 GMT (envelope-from gnats) Resent-Date: Sat, 14 Apr 2007 01:20:03 GMT Resent-Message-Id: <200704140120.l3E1K3pW036751@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Philip Kizer Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 499BB16A404 for ; Sat, 14 Apr 2007 01:14:46 +0000 (UTC) (envelope-from pckizer@nostrum.com) Received: from nostrum.com (shaman.nostrum.com [72.232.15.10]) by mx1.freebsd.org (Postfix) with ESMTP id C9CFB13C46A for ; Sat, 14 Apr 2007 01:14:45 +0000 (UTC) (envelope-from pckizer@nostrum.com) Received: from shaman.nostrum.com (pckizer@localhost.layeredtech.com [127.0.0.1]) by nostrum.com (8.13.8/8.13.8) with ESMTP id l3E0jGbV061704 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 13 Apr 2007 19:45:16 -0500 (CDT) (envelope-from pckizer@shaman.nostrum.com) Received: (from pckizer@localhost) by shaman.nostrum.com (8.13.8/8.13.8/Submit) id l3E0jFAi061703; Fri, 13 Apr 2007 19:45:15 -0500 (CDT) (envelope-from pckizer) Message-Id: <200704140045.l3E0jFAi061703@shaman.nostrum.com> Date: Fri, 13 Apr 2007 19:45:15 -0500 (CDT) From: Philip Kizer To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: jharris@widomaker.com Subject: ports/111549: ports/net/fping patch to add -S source_addr option X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Philip Kizer List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 14 Apr 2007 01:20:03 -0000 >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: