From owner-p4-projects@FreeBSD.ORG Sun Jul 31 20:42:52 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D0A281065673; Sun, 31 Jul 2011 20:42:51 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 93248106564A for ; Sun, 31 Jul 2011 20:42:51 +0000 (UTC) (envelope-from cnicutar@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 808CC8FC0C for ; Sun, 31 Jul 2011 20:42:51 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p6VKgpUO065623 for ; Sun, 31 Jul 2011 20:42:51 GMT (envelope-from cnicutar@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p6VKgpV7065620 for perforce@freebsd.org; Sun, 31 Jul 2011 20:42:51 GMT (envelope-from cnicutar@freebsd.org) Date: Sun, 31 Jul 2011 20:42:51 GMT Message-Id: <201107312042.p6VKgpV7065620@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to cnicutar@freebsd.org using -f From: Catalin Nicutar To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 196988 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 31 Jul 2011 20:42:52 -0000 http://p4web.freebsd.org/@@196988?ac=10 Change 196988 by cnicutar@cnicutar_cronos on 2011/07/31 20:42:13 Change the way disconnection is simulated (route blackhole doesn't work for IPv6 routes). Add 2 new IPv6 tests. Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/long_uto.c#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/runtest.sh#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/short_uto.c#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/test_utils.c#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/test_utils.h#3 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/long_uto.c#3 (text+ko) ==== @@ -45,7 +45,7 @@ err(EX_OSERR, "fork"); break; case 0: - server_disconnect(saddr, port, caddr, DOWNTIME, UTO, 1); + server_disconnect(saddr, port, DOWNTIME, UTO, 1); exit(EX_OK); break; } ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/runtest.sh#3 (text+ko) ==== @@ -110,6 +110,25 @@ runtest "$addr $PORT" ;; + "5") + name="short_utov6" + bin="short_uto" + client="2001:db80:5::2" + server="2001:db80:5::3" + ipv6="yes" + + test_with_loopback $client $server + ;; + "6") + name="long_utov6" + bin="long_uto" + client="2001:db80:5::2" + server="2001:db80:5::3" + ipv6="yes" + + test_with_loopback $client $server + ;; + esac ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/short_uto.c#3 (text+ko) ==== @@ -49,7 +49,7 @@ err(EX_OSERR, "fork"); break; case 0: - server_disconnect(saddr, port, caddr, DOWNTIME, UTO, 1); + server_disconnect(saddr, port, DOWNTIME, UTO, 1); exit(EX_OK); break; } ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/test_utils.c#3 (text+ko) ==== @@ -96,9 +96,6 @@ return (rp == NULL) ? -1 : s; } - - - /* * Set UTO values on a socket. */ @@ -168,43 +165,29 @@ return s; } -int -is_v6(char *addr) -{ - return strchr(addr, ':') != NULL; -} /* - * Simulate broken connectivity by setting the "blackhole" flag on a route; - * setting the interface to "down" or deleting the route has unfortunate - * side-effects (sending ARPs etc). + * Simulate broken connectivity by diverting the traffic to an unlistened + * port. */ void -route_down(char *addr) +port_down(char *port) { static char cmd[256]; - - if (is_v6(addr)) - snprintf(cmd, sizeof(cmd), "route change -inet6 %s -blackhole", - addr); - else - snprintf(cmd, sizeof(cmd), "route change -inet %s -blackhole", - addr); + + snprintf(cmd, sizeof(cmd), "ipfw add 00050 divert 5000 tcp from" + " any %s to any", port); + system(cmd); } /* - * Remove the blackhole flag from a route. See the route_down function. + * Remove the rule added by port_down. */ void -route_up(char *addr) +port_up() { - static char cmd[256]; - if (is_v6(addr)) - snprintf(cmd, sizeof(cmd), "route change -inet6 %s", addr); - else - snprintf(cmd, sizeof(cmd), "route change %s", addr); - system(cmd); + system("ipfw delete 00050"); } @@ -216,8 +199,8 @@ * If the connection is dead, write(2) should trigger an EPIPE. */ void -server_disconnect(char *laddr, char *lport, char *downaddr, int downtime, - int send_uto, int recv_uto) +server_disconnect(char *laddr, char *lport, int downtime, int send_uto, + int recv_uto) { int listen_sock; int sock; @@ -233,7 +216,7 @@ /* Take the route down and then attempt to send data. */ if (downtime) - route_down(downaddr); + port_down(lport); bytes = send(sock, &buf, sizeof(buf), MSG_NOSIGNAL); if (bytes < 0) @@ -242,7 +225,7 @@ /* Sleep through downtime and then bring the route back up. */ if (downtime) { sleep(downtime); - route_up(downaddr); + port_up(); } /* Try again. If it succeeds, the connection is still up. */ ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/tools/regression/netinet/tcputo/test_utils.h#3 (text+ko) ==== @@ -10,10 +10,10 @@ void uto_get(int s, int *send_uto, int *recv_uto); int listen_uto(char *laddr, char *port, int send_uto, int recv_uto); int connect_uto(char *laddr, char *raddr, char *rport, int send_uto, int recv_uto); -void route_down(char *addr); -void route_up(char *addr); -void server_disconnect(char *laddr, char *lport, char *downaddr, int downtime, - int send_uto, int recv_uto); +void port_down(char *port); +void port_up(); +void server_disconnect(char *laddr, char *lport, int downtime, int send_uto, + int recv_uto); void client_generic(char *laddr, char *raddr, char *rport, int send_uto, int recv_uto);