1/* 2 3 Copyright (C) 1993-2011 Hewlett-Packard Company 4 ALL RIGHTS RESERVED. 5 6 The enclosed software and documentation includes copyrighted works 7 of Hewlett-Packard Co. For as long as you comply with the following 8 limitations, you are hereby authorized to (i) use, reproduce, and 9 modify the software and documentation, and to (ii) distribute the 10 software and documentation, including modifications, for 11 non-commercial purposes only. 12 13 1. The enclosed software and documentation is made available at no 14 charge in order to advance the general development of 15 high-performance networking products. 16 17 2. You may not delete any copyright notices contained in the 18 software or documentation. All hard copies, and copies in 19 source code or object code form, of the software or 20 documentation (including modifications) must contain at least 21 one of the copyright notices. 22 23 3. The enclosed software and documentation has not been subjected 24 to testing and quality control and is not a Hewlett-Packard Co. 25 product. At a future time, Hewlett-Packard Co. may or may not 26 offer a version of the software and documentation as a product. 27 28 4. THE SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS". 29 HEWLETT-PACKARD COMPANY DOES NOT WARRANT THAT THE USE, 30 REPRODUCTION, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR 31 DOCUMENTATION WILL NOT INFRINGE A THIRD PARTY'S INTELLECTUAL 32 PROPERTY RIGHTS. HP DOES NOT WARRANT THAT THE SOFTWARE OR 33 DOCUMENTATION IS ERROR FREE. HP DISCLAIMS ALL WARRANTIES, 34 EXPRESS AND IMPLIED, WITH REGARD TO THE SOFTWARE AND THE 35 DOCUMENTATION. HP SPECIFICALLY DISCLAIMS ALL WARRANTIES OF 36 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 37 38 5. HEWLETT-PACKARD COMPANY WILL NOT IN ANY EVENT BE LIABLE FOR ANY 39 DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 40 (INCLUDING LOST PROFITS) RELATED TO ANY USE, REPRODUCTION, 41 MODIFICATION, OR DISTRIBUTION OF THE SOFTWARE OR DOCUMENTATION. 42 43*/ 44char netperf_id[]="\ 45@(#)netperf.c (c) Copyright 1993-2012 Hewlett-Packard Company. Version 2.6.0"; 46 47#ifdef HAVE_CONFIG_H 48#include "config.h" 49#endif 50 51#include <stdio.h> 52#include <stdlib.h> 53#if HAVE_STRING_H 54# if !STDC_HEADERS && HAVE_MEMORY_H 55# include <memory.h> 56# endif 57# include <string.h> 58#endif 59#ifdef HAVE_STRINGS_H 60#include <strings.h> 61#endif 62 63/* FreeBSD doesn't like socket.h before types are set. */ 64#if __FreeBSD__ 65# include <sys/types.h> 66#endif 67 68#ifdef WIN32 69#include <winsock2.h> 70#include <windows.h> 71#include "missing\stdint.h" 72#endif /* WIN32 */ 73 74#include "netsh.h" 75#include "netlib.h" 76#include "nettest_bsd.h" 77 78#ifdef WANT_UNIX 79#include "nettest_unix.h" 80#endif /* WANT_UNIX */ 81 82#ifdef WANT_XTI 83#include "nettest_xti.h" 84#endif /* WANT_XTI */ 85 86#ifdef WANT_DLPI 87#include "nettest_dlpi.h" 88#endif /* WANT_DLPI */ 89 90#ifdef WANT_SDP 91#include "nettest_sdp.h" 92#endif 93 94/* The DNS tests have been removed from netperf2. Those wanting to do 95 DNS_RR tests should use netperf4 instead. */ 96 97#ifdef DO_DNS 98#error DNS tests have been removed from netperf. Use netperf4 instead 99#endif /* DO_DNS */ 100 101#ifdef WANT_SCTP 102#include "nettest_sctp.h" 103#endif 104 105 /* this file contains the main for the netperf program. all the other 106 routines can be found in the file netsh.c */ 107 108 109int _cdecl 110main(int argc, char *argv[]) 111{ 112 113#ifdef WIN32 114 WSADATA wsa_data ; 115 116 /* Initialize the winsock lib ( version 2.2 ) */ 117 if ( WSAStartup(MAKEWORD(2,2), &wsa_data) == SOCKET_ERROR ){ 118 printf("WSAStartup() failed : %lu\n", GetLastError()) ; 119 return 1 ; 120 } 121#endif /* WIN32 */ 122 123 netlib_init(); 124 /* the call to set_defaults() is gone because we can initialize in 125 declarations (or is that definitions) unlike the old days */ 126 scan_cmd_line(argc,argv); 127 128 if (debug) { 129 dump_globals(); 130 install_signal_catchers(); 131 } 132 133 if (debug) { 134 printf("remotehost is %s and port %s\n",host_name,test_port); 135 fflush(stdout); 136 } 137 138 139 if (!no_control) { 140 establish_control(host_name,test_port,address_family, 141 local_host_name,local_test_port,local_address_family); 142 143 if (passphrase != NULL) { 144 netperf_request.content.request_type = PASSPHRASE; 145 strncpy((char *)netperf_request.content.test_specific_data, 146 passphrase, 147 sizeof(netperf_request.content.test_specific_data)); 148 send_request_n(0); 149 } 150 } 151 152 if (strcasecmp(test_name,"TCP_STREAM") == 0) { 153 send_tcp_stream(host_name); 154 } 155 else if (strcasecmp(test_name,"TCP_MAERTS") == 0) { 156 send_tcp_maerts(host_name); 157 } 158 else if (strcasecmp(test_name,"TCP_MSS") == 0) { 159 send_tcp_mss(host_name); 160 } 161#ifdef HAVE_ICSC_EXS 162 else if (strcasecmp(test_name,"EXS_TCP_STREAM") == 0) { 163 send_exs_tcp_stream(host_name); 164 } 165#endif /* HAVE_ICSC_EXS */ 166#ifdef HAVE_SENDFILE 167 else if (strcasecmp(test_name,"TCP_SENDFILE") == 0) { 168 sendfile_tcp_stream(host_name); 169 } 170#endif /* HAVE_SENDFILE */ 171 else if (strcasecmp(test_name,"TCP_RR") == 0) { 172 send_tcp_rr(host_name); 173 } 174 else if (strcasecmp(test_name,"TCP_CRR") == 0) { 175 send_tcp_conn_rr(host_name); 176 } 177 else if (strcasecmp(test_name,"TCP_CC") == 0) { 178 send_tcp_cc(host_name); 179 } 180#ifdef DO_1644 181 else if (strcasecmp(test_name,"TCP_TRR") == 0) { 182 send_tcp_tran_rr(host_name); 183 } 184#endif /* DO_1644 */ 185#ifdef DO_NBRR 186 else if (strcasecmp(test_name,"TCP_NBRR") == 0) { 187 send_tcp_nbrr(host_name); 188 } 189#endif /* DO_NBRR */ 190 else if (strcasecmp(test_name,"UDP_STREAM") == 0) { 191 send_udp_stream(host_name); 192 } 193 else if (strcasecmp(test_name,"UDP_RR") == 0) { 194 send_udp_rr(host_name); 195 } 196 else if (strcasecmp(test_name,"LOC_CPU") == 0) { 197 loc_cpu_rate(); 198 } 199 else if (strcasecmp(test_name,"REM_CPU") == 0) { 200 rem_cpu_rate(); 201 } 202#ifdef WANT_DLPI 203 else if (strcasecmp(test_name,"DLCO_RR") == 0) { 204 send_dlpi_co_rr(host_name); 205 } 206 else if (strcasecmp(test_name,"DLCL_RR") == 0) { 207 send_dlpi_cl_rr(host_name); 208 } 209 else if (strcasecmp(test_name,"DLCO_STREAM") == 0) { 210 send_dlpi_co_stream(host_name); 211 } 212 else if (strcasecmp(test_name,"DLCL_STREAM") == 0) { 213 send_dlpi_cl_stream(host_name); 214 } 215#endif /* WANT_DLPI */ 216#ifdef WANT_UNIX 217 else if (strcasecmp(test_name,"STREAM_RR") == 0) { 218 send_stream_rr(host_name); 219 } 220 else if (strcasecmp(test_name,"DG_RR") == 0) { 221 send_dg_rr(host_name); 222 } 223 else if (strcasecmp(test_name,"STREAM_STREAM") == 0) { 224 send_stream_stream(host_name); 225 } 226 else if (strcasecmp(test_name,"DG_STREAM") == 0) { 227 send_dg_stream(host_name); 228 } 229#endif /* WANT_UNIX */ 230#ifdef WANT_XTI 231 else if (strcasecmp(test_name,"XTI_TCP_STREAM") == 0) { 232 send_xti_tcp_stream(host_name); 233 } 234 else if (strcasecmp(test_name,"XTI_TCP_RR") == 0) { 235 send_xti_tcp_rr(host_name); 236 } 237 else if (strcasecmp(test_name,"XTI_UDP_STREAM") == 0) { 238 send_xti_udp_stream(host_name); 239 } 240 else if (strcasecmp(test_name,"XTI_UDP_RR") == 0) { 241 send_xti_udp_rr(host_name); 242 } 243#endif /* WANT_XTI */ 244 245#ifdef WANT_SCTP 246 else if (strcasecmp(test_name, "SCTP_STREAM") == 0) { 247 send_sctp_stream(host_name); 248 } 249 else if (strcasecmp(test_name, "SCTP_RR") == 0) { 250 send_sctp_rr(host_name); 251 } 252 else if (strcasecmp(test_name, "SCTP_STREAM_MANY") == 0) { 253 send_sctp_stream_1toMany(host_name); 254 } 255 else if (strcasecmp(test_name, "SCTP_RR_MANY") == 0) { 256 send_sctp_rr_1toMany(host_name); 257 } 258#endif 259 260#ifdef DO_DNS 261 else if (strcasecmp(test_name,"DNS_RR") == 0) { 262 fprintf(stderr, 263 "DNS tests can now be found in netperf4.\n"); 264 fflush(stderr); 265 exit(-1); 266 } 267#endif /* DO_DNS */ 268#ifdef WANT_SDP 269 else if (strcasecmp(test_name,"SDP_STREAM") == 0) { 270 send_sdp_stream(host_name); 271 } 272 else if (strcasecmp(test_name,"SDP_MAERTS") == 0) { 273 send_sdp_maerts(host_name); 274 } 275 else if (strcasecmp(test_name,"SDP_RR") == 0) { 276 send_sdp_rr(host_name); 277 } 278#endif /* WANT_SDP */ 279#ifdef WANT_OMNI 280 else if (strcasecmp(test_name,"OMNI") == 0) { 281 send_omni(host_name); 282 } 283 else if (strcasecmp(test_name,"UUID") == 0) { 284 print_uuid(host_name); 285 } 286#endif 287 else { 288 printf("The test you requested (%s) is unknown to this netperf.\n" 289 "Please verify that you have the correct test name, \n" 290 "and that test family has been compiled into this netperf.\n", 291 test_name); 292 exit(1); 293 } 294 295 if (!no_control) { 296 shutdown_control(); 297 } 298 299#ifdef WIN32 300 /* Cleanup the winsock lib */ 301 WSACleanup(); 302#endif 303 304 return(0); 305} 306 307 308