102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
27cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
37cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	   Copyright (C) 1993-2011 Hewlett-Packard Company
402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                         ALL RIGHTS RESERVED.
57cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  The enclosed software and documentation includes copyrighted works
702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  of Hewlett-Packard Co. For as long as you comply with the following
802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  limitations, you are hereby authorized to (i) use, reproduce, and
902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  modify the software and documentation, and to (ii) distribute the
1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  software and documentation, including modifications, for
1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  non-commercial purposes only.
127cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  1.  The enclosed software and documentation is made available at no
1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      charge in order to advance the general development of
1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      high-performance networking products.
167cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  2.  You may not delete any copyright notices contained in the
1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      software or documentation. All hard copies, and copies in
1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      source code or object code form, of the software or
2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      documentation (including modifications) must contain at least
2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      one of the copyright notices.
227cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  3.  The enclosed software and documentation has not been subjected
2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      to testing and quality control and is not a Hewlett-Packard Co.
2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      product. At a future time, Hewlett-Packard Co. may or may not
2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      offer a version of the software and documentation as a product.
277cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  4.  THE SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS".
2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      HEWLETT-PACKARD COMPANY DOES NOT WARRANT THAT THE USE,
3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      REPRODUCTION, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      DOCUMENTATION WILL NOT INFRINGE A THIRD PARTY'S INTELLECTUAL
3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      PROPERTY RIGHTS. HP DOES NOT WARRANT THAT THE SOFTWARE OR
3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      DOCUMENTATION IS ERROR FREE. HP DISCLAIMS ALL WARRANTIES,
3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      EXPRESS AND IMPLIED, WITH REGARD TO THE SOFTWARE AND THE
3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      DOCUMENTATION. HP SPECIFICALLY DISCLAIMS ALL WARRANTIES OF
3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
377cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  5.  HEWLETT-PACKARD COMPANY WILL NOT IN ANY EVENT BE LIABLE FOR ANY
3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (INCLUDING LOST PROFITS) RELATED TO ANY USE, REPRODUCTION,
4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      MODIFICATION, OR DISTRIBUTION OF THE SOFTWARE OR DOCUMENTATION.
427cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	netperf_id[]="\
457cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes@(#)netperf.c (c) Copyright 1993-2012 Hewlett-Packard Company. Version 2.6.0";
4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_CONFIG_H
4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "config.h"
4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h>
5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdlib.h>
537cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#if HAVE_STRING_H
547cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes# if !STDC_HEADERS && HAVE_MEMORY_H
557cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#  include <memory.h>
567cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes# endif
577cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes# include <string.h>
587cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#endif
5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_STRINGS_H
6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <strings.h>
6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* FreeBSD doesn't like socket.h before types are set. */
6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if __FreeBSD__
6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <sys/types.h>
6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32
6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <winsock2.h>
7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <windows.h>
717cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#include "missing\stdint.h"
7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */
7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h"
7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h"
7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_bsd.h"
7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_UNIX
7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_unix.h"
8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_UNIX */
8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_XTI
8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_xti.h"
8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_XTI */
8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI
8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_dlpi.h"
8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */
8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SDP
9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_sdp.h"
9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* The DNS tests have been removed from netperf2. Those wanting to do
9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   DNS_RR tests should use netperf4 instead. */
9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_DNS
9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#error DNS tests have been removed from netperf. Use netperf4 instead
9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_DNS */
10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SCTP
10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_sctp.h"
10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1057cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes /* this file contains the main for the netperf program. all the other
1067cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    routines can be found in the file netsh.c */
10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint _cdecl
11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectmain(int argc, char *argv[])
11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32
11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  WSADATA	wsa_data ;
1157cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* Initialize the winsock lib ( version 2.2 ) */
11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if ( WSAStartup(MAKEWORD(2,2), &wsa_data) == SOCKET_ERROR ){
1187cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    printf("WSAStartup() failed : %lu\n", GetLastError()) ;
11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    return 1 ;
12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */
1227cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  netlib_init();
1247cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  /* the call to set_defaults() is gone because we can initialize in
1257cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes     declarations (or is that definitions) unlike the old days */
12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  scan_cmd_line(argc,argv);
1277cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (debug) {
12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    dump_globals();
13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    install_signal_catchers();
13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
1327cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (debug) {
13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    printf("remotehost is %s and port %s\n",host_name,test_port);
13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fflush(stdout);
13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
1377cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
1387cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (!no_control) {
14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    establish_control(host_name,test_port,address_family,
14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project		      local_host_name,local_test_port,local_address_family);
1427cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
1437cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    if (passphrase != NULL) {
1447cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes      netperf_request.content.request_type = PASSPHRASE;
1457cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes      strncpy((char *)netperf_request.content.test_specific_data,
1467cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	      passphrase,
1477cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	      sizeof(netperf_request.content.test_specific_data));
1487cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes      send_request_n(0);
1497cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    }
15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
1517cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (strcasecmp(test_name,"TCP_STREAM") == 0) {
15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_stream(host_name);
15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_MAERTS") == 0) {
15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_maerts(host_name);
15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
1587cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  else if (strcasecmp(test_name,"TCP_MSS") == 0) {
1597cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    send_tcp_mss(host_name);
1607cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  }
16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_ICSC_EXS
16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"EXS_TCP_STREAM") == 0) {
16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_exs_tcp_stream(host_name);
16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_ICSC_EXS */
16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_SENDFILE
16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_SENDFILE") == 0) {
16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    sendfile_tcp_stream(host_name);
16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_SENDFILE */
17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_RR") == 0) {
17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_rr(host_name);
17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_CRR") == 0) {
17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_conn_rr(host_name);
17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_CC") == 0) {
17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_cc(host_name);
17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_1644
18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_TRR") == 0) {
18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_tran_rr(host_name);
18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_1644 */
18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_NBRR
18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"TCP_NBRR") == 0) {
18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_tcp_nbrr(host_name);
18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_NBRR */
19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"UDP_STREAM") == 0) {
19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_udp_stream(host_name);
19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"UDP_RR") == 0) {
19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_udp_rr(host_name);
19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"LOC_CPU") == 0) {
19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    loc_cpu_rate();
19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"REM_CPU") == 0) {
20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    rem_cpu_rate();
20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI
20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DLCO_RR") == 0) {
20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dlpi_co_rr(host_name);
20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DLCL_RR") == 0) {
20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dlpi_cl_rr(host_name);
20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DLCO_STREAM") == 0) {
21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dlpi_co_stream(host_name);
21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DLCL_STREAM") == 0) {
21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dlpi_cl_stream(host_name);
21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */
21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_UNIX
21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"STREAM_RR") == 0) {
21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_stream_rr(host_name);
21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DG_RR") == 0) {
22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dg_rr(host_name);
22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"STREAM_STREAM") == 0) {
22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_stream_stream(host_name);
22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DG_STREAM") == 0) {
22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_dg_stream(host_name);
22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_UNIX */
23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_XTI
23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"XTI_TCP_STREAM") == 0) {
23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_xti_tcp_stream(host_name);
23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"XTI_TCP_RR") == 0) {
23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_xti_tcp_rr(host_name);
23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"XTI_UDP_STREAM") == 0) {
23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_xti_udp_stream(host_name);
23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"XTI_UDP_RR") == 0) {
24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_xti_udp_rr(host_name);
24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_XTI */
2447cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SCTP
24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name, "SCTP_STREAM") == 0) {
24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sctp_stream(host_name);
2487cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  }
24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name, "SCTP_RR") == 0) {
25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sctp_rr(host_name);
25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name, "SCTP_STREAM_MANY") == 0) {
25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sctp_stream_1toMany(host_name);
25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name, "SCTP_RR_MANY") == 0) {
2567cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    send_sctp_rr_1toMany(host_name);
25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
2597cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_DNS
26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"DNS_RR") == 0) {
26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fprintf(stderr,
26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "DNS tests can now be found in netperf4.\n");
26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fflush(stderr);
26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    exit(-1);
26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_DNS */
26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SDP
26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"SDP_STREAM") == 0) {
27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sdp_stream(host_name);
27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"SDP_MAERTS") == 0) {
27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sdp_maerts(host_name);
27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else if (strcasecmp(test_name,"SDP_RR") == 0) {
27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    send_sdp_rr(host_name);
27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_SDP */
2797cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#ifdef WANT_OMNI
2807cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  else if (strcasecmp(test_name,"OMNI") == 0) {
2817cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    send_omni(host_name);
2827cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  }
2837cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  else if (strcasecmp(test_name,"UUID") == 0) {
2847cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    print_uuid(host_name);
2857cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes  }
2867cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes#endif
28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else {
2887cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes    printf("The test you requested (%s) is unknown to this netperf.\n"
2897cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	   "Please verify that you have the correct test name, \n"
2907cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	   "and that test family has been compiled into this netperf.\n",
2917cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes	   test_name);
29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    exit(1);
29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
2947cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (!no_control) {
29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    shutdown_control();
29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
2987cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32
30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* Cleanup the winsock lib */
30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  WSACleanup();
30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
3037cb62816f02cc6abb1fe88b94808fc412e0b29d0Elliott Hughes
30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return(0);
30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
308