Date: Thu, 24 Sep 2009 13:17:24 GMT From: Oleg <Oleg.Dolgov@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/139112: [ttcp] sockaddr_in.sin_family initialization, new option -S src_addr added. Message-ID: <200909241317.n8ODHOrc017910@www.freebsd.org> Resent-Message-ID: <200909241320.n8ODK15F045403@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 139112 >Category: bin >Synopsis: [ttcp] sockaddr_in.sin_family initialization, new option -S src_addr added. >Confidential: no >Severity: serious >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Sep 24 13:20:01 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Oleg >Release: FreeBSD 7.0 >Organization: Sunbay >Environment: >Description: Field sinme.sin_family doesn't initialized passed to bind, which failed. New parameter -S src_addr added. -s src_addr Set the source IP address for the ttcp connection to src_addr. >How-To-Repeat: phobos@amd64# ./ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: bind: Invalid argument errno=22 phobos@amd64# ./ttcp -t -s 127.0.0.1 ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp -> 127.0.0.1 ttcp-t: socket ttcp-t: bind: Invalid argument errno=22 >Fix: Patch attached with submission follows: --- ttcp.c 2009-09-24 15:54:25.000000000 +0300 +++ ttcp.c.patched 2009-09-24 15:55:38.000000000 +0300 @@ -99,6 +99,7 @@ int touchdata = 0; /* access data after reading */ struct hostent *addr; +in_addr_t src_addr; extern int errno; extern int optind; extern char *optarg; @@ -156,7 +157,7 @@ if (argc < 2) goto usage; - while ((c = getopt(argc, argv, "drstuvBDTb:f:l:n:p:A:O:")) != -1) { + while ((c = getopt(argc, argv, "drstuvBDTb:f:l:n:p:A:O:S:")) != -1) { switch (c) { case 'B': @@ -217,6 +218,9 @@ case 'T': touchdata = 1; break; + case 'S': + src_addr = inet_addr(optarg); + break; default: goto usage; @@ -249,12 +253,14 @@ #endif /* cray */ } sinhim.sin_port = htons(port); + sinme.sin_addr.s_addr = src_addr; sinme.sin_port = 0; /* free choice */ } else { /* rcvr */ sinme.sin_port = htons(port); } + sinme.sin_family = AF_INET; if (udp && buflen < 5) { buflen = 5; /* send more than the sentinel size */ >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200909241317.n8ODHOrc017910>