From owner-svn-src-all@FreeBSD.ORG Sat Jun 20 18:13:20 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7B084106564A; Sat, 20 Jun 2009 18:13:20 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 688138FC0A; Sat, 20 Jun 2009 18:13:20 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5KIDKQs083129; Sat, 20 Jun 2009 18:13:20 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5KIDKVA083127; Sat, 20 Jun 2009 18:13:20 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200906201813.n5KIDKVA083127@svn.freebsd.org> From: Robert Watson Date: Sat, 20 Jun 2009 18:13:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r194546 - head/tools/regression/netipx/spxloopback X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Jun 2009 18:13:20 -0000 Author: rwatson Date: Sat Jun 20 18:13:20 2009 New Revision: 194546 URL: http://svn.freebsd.org/changeset/base/194546 Log: Up the scale of the SPX loopback check a bit: use much larger data sizes so that we need to do segmentation. Modified: head/tools/regression/netipx/spxloopback/spxloopback.c Modified: head/tools/regression/netipx/spxloopback/spxloopback.c ============================================================================== --- head/tools/regression/netipx/spxloopback/spxloopback.c Sat Jun 20 17:44:04 2009 (r194545) +++ head/tools/regression/netipx/spxloopback/spxloopback.c Sat Jun 20 18:13:20 2009 (r194546) @@ -46,11 +46,7 @@ #include #define IPX_ENDPOINT "0xbebe.1.0x8a13" -#define PACKETLEN 128 - -#if 0 -#define SPX_SUPPORTS_SENDTO_WITH_CONNECT -#endif +#define PACKETLEN 16 * (1024 * 1024) static void packet_fill(u_char *packet) @@ -62,61 +58,40 @@ packet_fill(u_char *packet) } static int -packet_check(u_char *packet) +packet_check(u_char *packet, size_t totlen, ssize_t len) { - int i; + size_t i; - for (i = 0; i < PACKETLEN; i++) { + for (i = totlen; i < totlen + len; i++) { if (packet[i] != (i & 0xff)) return (-1); } return (0); } -#ifdef SPX_SUPPORTS_SENDTO_WITH_CONNECT -static void -my_sendto(int sock, const char *who, pid_t pid, struct sockaddr *sa, - socklen_t sa_len) -{ - u_char packet[PACKETLEN]; - ssize_t len; - int error; - - packet_fill(packet); - len = sendto(sock, packet, sizeof(packet), 0, sa, sa_len); - if (len < 0) { - error = errno; - (void)kill(pid, SIGTERM); - errno = error; - err(-1, "%s: sendto()", who); - } - if (len != sizeof(packet)) { - (void)kill(pid, SIGTERM); - errx(-1, "%s: sendto(): short send (%d length, %d sent)", - who, sizeof(packet), len); - } -} -#endif - static void my_send(int sock, const char *who, pid_t pid) { u_char packet[PACKETLEN]; ssize_t len; + size_t totlen; int error; + totlen = 0; packet_fill(packet); - len = send(sock, packet, sizeof(packet), 0); - if (len < 0) { - error = errno; - (void)kill(pid, SIGTERM); - errno = error; - err(-1, "%s: send()", who); - } - if (len != sizeof(packet)) { - (void)kill(pid, SIGTERM); - errx(-1, "%s: send(): short send (%d length, %d sent)", who, - sizeof(packet), len); + while (totlen < PACKETLEN) { + len = send(sock, packet + totlen, PACKETLEN - totlen, 0); + if (len < 0) { + error = errno; + (void)kill(pid, SIGTERM); + errno = error; + err(-1, "%s: send()", who); + } + if (len == 0) { + (void)kill(pid, SIGTERM); + errx(-1, "%s: send(): EOF", who); + } + totlen += len; } } @@ -125,24 +100,28 @@ my_recv(int sock, const char *who, pid_t { u_char packet[PACKETLEN]; ssize_t len; + size_t totlen; int error; + totlen = 0; bzero(packet, sizeof(packet)); - len = recv(sock, packet, sizeof(packet), 0); - if (len < 0) { - errno = error; - (void)kill(pid, SIGTERM); - errno = error; - err(-1, "%s: recv()", who); - } - if (len != sizeof(packet)) { - (void)kill(pid, SIGTERM); - errx(-1, "%s: recv(): got %d expected %d", who, len, - sizeof(packet)); - } - if (packet_check(packet) < 0) { - (void)kill(pid, SIGTERM); - errx(-1, "%s: recv(): got bad data", who); + while (totlen < PACKETLEN) { + len = recv(sock, packet + totlen, sizeof(packet) - totlen, 0); + if (len < 0) { + errno = error; + (void)kill(pid, SIGTERM); + errno = error; + err(-1, "%s: recv()", who); + } + if (len == 0) { + (void)kill(pid, SIGTERM); + errx(-1, "%s: recv(): EOF", who); + } + if (packet_check(packet, totlen, len) < 0) { + (void)kill(pid, SIGTERM); + errx(-1, "%s: recv(): got bad data", who); + } + totlen += len; } }