From e4c6f4a207b6affe16322ec99a356b5c44be4fb4 Mon Sep 17 00:00:00 2001 From: Tilman Keskinoz Date: Sat, 3 Dec 2005 21:30:21 +0000 Subject: Add optional IPv6 support Submitted by: Andreas Kohn --- benchmarks/netio/files/patch-netio.c | 180 +++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 benchmarks/netio/files/patch-netio.c (limited to 'benchmarks/netio/files/patch-netio.c') diff --git a/benchmarks/netio/files/patch-netio.c b/benchmarks/netio/files/patch-netio.c new file mode 100644 index 000000000000..41cc0a95ec2f --- /dev/null +++ b/benchmarks/netio/files/patch-netio.c @@ -0,0 +1,180 @@ +--- netio.c.orig Thu Apr 19 14:21:02 2001 ++++ netio.c Sat Dec 3 16:14:21 2005 +@@ -477,14 +477,22 @@ + + /* TCP/IP code */ + +-int nPort = 0x494F; /* "IO" */ ++int nPort = 0x494F; /* "IO" */ ++#ifdef USE_IPV6 ++struct in6_addr addr_server; ++#else + struct in_addr addr_server; ++#endif + + void TcpIpServer(void *arg) + { + char *cBuffer; +- int bQuit = 0; +- struct sockaddr_in sa_server, sa_client; ++ int bQuit = 0; ++#ifdef USE_IPV6 ++ struct sockaddr_in6 sa_server, sa_client; ++#else ++ struct sockaddr_in sa_server, sa_client; ++#endif + int server, client, length; + struct timeval tv; + fd_set fds; +@@ -495,17 +503,27 @@ + perror("malloc()"); + return; + } +- +- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0) ++ ++#ifdef USE_IPV6 ++ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0) ++#else ++ if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0) ++#endif + { + psock_errno("socket()"); + free(cBuffer); + return; + } +- +- sa_server.sin_family = AF_INET; ++ ++#ifdef USE_IPV6 ++ sa_server.sin6_family = AF_INET6; ++ sa_server.sin6_port = htons(nPort); ++ sa_server.sin6_addr = in6addr_any; ++#else ++ sa_server.sin_family = AF_INET; + sa_server.sin_port = htons(nPort); + sa_server.sin_addr.s_addr = INADDR_ANY; ++#endif + + if (bind(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0) + { +@@ -524,8 +542,12 @@ + } + + for (;;) +- { ++ { ++#ifdef USE_IPV6 ++ printf("TCP/IP server Listening (IPv6).\n"); ++#else + printf("TCP/IP server Listening.\n"); ++#endif + + FD_ZERO(&fds); + FD_SET(server, &fds); +@@ -575,8 +597,12 @@ + TIMER nTimer; + long nTime; + long nData; +- int i; +- struct sockaddr_in sa_server; ++#ifdef USE_IPV6 ++ struct sockaddr_in6 sa_client; ++#else ++ struct sockaddr_in sa_client; ++#endif ++ int i; + int server; + int rc; + +@@ -585,19 +611,28 @@ + perror("malloc()"); + return; + } +- +- sa_server.sin_family = AF_INET; +- sa_server.sin_port = htons(nPort); +- sa_server.sin_addr = addr_server; +- ++ ++#ifdef USE_IPV6 ++ sa_client.sin6_family = AF_INET6; ++ sa_client.sin6_port = htons(nPort); ++ sa_client.sin6_addr = addr_server; ++#else ++ sa_client.sin_family = AF_INET; ++ sa_client.sin_port = htons(nPort); ++ sa_client.sin_addr = addr_server; ++#endif ++ ++#ifdef USE_IPV6 ++ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0) ++#else + if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0) ++#endif + { + psock_errno("socket()"); + free(cBuffer); + return; +- } +- +- if (connect(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0) ++ } ++ if (connect(server, (struct sockaddr *) &sa_client, sizeof(sa_client)) < 0) + { + psock_errno("connect()"); + soclose(server); +@@ -664,13 +699,17 @@ + { + printf( + #ifndef USE_NETBIOS ++#ifdef USE_IPV6 ++ "\nUsage: netio6 [-s] [-p ] []\n" ++#else + "\nUsage: netio [-s] [-p ] []\n" ++#endif + "\n\t-s\t\trun server side of benchmark (otherwise run client)" + "\n\t-p \tuse this port instead of the default (%d)" + "\n\t\tif the client side of the benchmark is running," + "\n\t\t\ta server host name is required\n" +-#else +- "\nUsage: netio [-s] [-t | -n] [-p ] [-a ] []\n" ++#else ++ "\nUsage: netio [-s] [-t | -n] [-p ] [-a ] []\n" + "\n\t-s\trun server side of benchmark (otherwise run client)" + "\n\t-t\tuse TCP/IP protocol for benchmark" + "\n\t-p \tuse this port for TCP/IP (default is %d)" +@@ -766,14 +805,28 @@ + if (optind == argc) + usage(); + +- if (isdigit(*argv[optind])) +- addr_server.s_addr = inet_addr(argv[optind]); ++ if (isdigit(*argv[optind]) ++#ifdef USE_IPV6 ++ || *argv[optind] == ':') ++ inet_pton(AF_INET6, argv[optind], &addr_server); ++#else ++ ) ++ addr_server.s_addr = inet_addr(argv[optind]); ++#endif + else +- { +- if ((host = gethostbyname(argv[optind])) == NULL) ++ { ++#ifdef USE_IPV6 ++ if ((host = gethostbyname2(argv[optind], AF_INET6)) == NULL) ++#else ++ if ((host = gethostbyname(argv[optind])) == NULL) ++#endif + return psock_errno("gethostbyname()"), 1; + +- addr_server = * (struct in_addr *) (host->h_addr); ++#ifdef USE_IPV6 ++ addr_server = * (struct in6_addr *) (host->h_addr); ++#else ++ addr_server = * (struct in_addr *) (host->h_addr); ++#endif + } + } + } -- cgit v1.2.3