102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netperf_version.h"
202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	netsh_id[]="\
402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project@(#)netsh.c (c) Copyright 1993-2007 Hewlett-Packard Company. Version 2.4.3pre";
502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/
802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*								*/
902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*	Global include files					*/
1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*								*/
1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/
1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_CONFIG_H
1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "config.h"
1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h>
1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32
1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <unistd.h>
2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef __VMS
2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/ipc.h>
2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __VMS */
2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */
2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <fcntl.h>
2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32
2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <errno.h>
2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <signal.h>
2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif  /* !WIN32 */
2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h>
3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdlib.h>
3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <ctype.h>
3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the following four includes should not be needed ?*/
3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32
3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/time.h>
3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/socket.h>
3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netinet/in.h>
3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netdb.h>
3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <time.h>
4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <winsock2.h>
4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define netperf_socklen_t socklen_t
4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef STRINGS
4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <string.h>
4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* STRINGS */
4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <strings.h>
4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* STRINGS */
4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32
5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectextern	int	getopt(int , char **, char *) ;
5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble atof(const char *);
5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */
5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/**********************************************************************/
5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*                                                                    */
5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*          Local Include Files                                       */
5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*                                                                    */
6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/**********************************************************************/
6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define  NETSH
6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h"
6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h"
6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_bsd.h"
6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_UNIX
6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_unix.h"
6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32
7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "sys/socket.h"
7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif  /* !WIN32 */
7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_UNIX */
7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_XTI
7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_xti.h"
7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_XTI */
7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI
7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_dlpi.h"
8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */
8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SCTP
8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_sctp.h"
8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*	Global constants  and macros					*/
9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Some of the args take optional parameters. Since we are using */
9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* getopt to parse the command line, we will tell getopt that they do */
9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not take parms, and then look for them ourselves */
9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define GLOBAL_CMD_LINE_ARGS "A:a:b:B:CcdDf:F:H:hi:I:k:K:l:L:n:NO:o:P:p:rt:T:v:VW:w:46"
9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*	Extern variables 						*/
10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*
10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectextern int errno;
10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectextern char *sys_errlist[ ];
10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectextern int sys_nerr;
10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/
10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*	Global variables 						*/
11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*									*/
11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/
11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* some names and such                                                  */
11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	*program;		/* program invocation name		*/
11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	username[BUFSIZ];	/* login name of user			*/
11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	cmd_file[BUFSIZ];	/* name of the commands file		*/
12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* stuff to say where this test is going                                */
12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	host_name[HOSTNAMESIZE];	/* remote host name or ip addr  */
12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar    local_host_name[HOSTNAMESIZE];  /* local hostname or ip */
12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar    test_name[BUFSIZ];		/* which test to run 		*/
12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar	test_port[PORTBUFSIZE];		/* where is the test waiting    */
12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar    local_test_port[PORTBUFSIZE];   /* from whence we should start */
12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint     address_family;                 /* which address family remote */
12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint     local_address_family;           /* which address family local */
12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the source of data for filling the buffers */
13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar    fill_file[BUFSIZ];
13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* output controlling variables                                         */
13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  debug,			/* debugging level */
13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  print_headers,		/* do/don't display headers */
13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  verbosity;		/* verbosity level */
13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* When specified with -B, this will be displayed at the end of the line
14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   for output that does not include the test header.  mostly this is
14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   to help identify a specific netperf result when concurrent netperfs
14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   are run. raj 2006-02-01 */
14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *result_brand = NULL;
14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* cpu variables */
14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_cpu_usage,	/* you guessed it			*/
14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_cpu_usage;	/* still right !			*/
14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat
15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_cpu_rate,
15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_cpu_rate;
15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  shell_num_cpus=1;
15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the end-test conditions for the tests - either transactions, bytes,  */
15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* or time. different vars used for clarity - space is cheap ;-)        */
15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_time,		/* test ends by time			*/
16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_len_ticks,       /* how many times will the timer go off before */
16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project			/* the test is over? */
16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_bytes,		/* test ends on byte count		*/
16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_trans;		/* test ends on tran count		*/
16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the alignment conditions for the tests				*/
16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_recv_align,	/* alignment for local receives		*/
16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_send_align,	/* alignment for local sends		*/
17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_send_offset = 0,
17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_recv_offset = 0,
17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_recv_align,	/* alignment for remote receives	*/
17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_send_align,	/* alignment for remote sends		*/
17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_send_offset = 0,
17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_recv_offset = 0;
17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WANT_INTERVALS) || defined(WANT_DEMO)
17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_usecs,
18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_wate,
18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_burst;
18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint demo_mode;                    /* are we actually in demo mode? */
18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble demo_interval = 1000000.0; /* what is the desired interval to
18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     display interval results. default
18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     is one second in units of
18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     microseconds */
18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble demo_units = 0.0;          /* what is our current best guess as
18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     to how many work units must be
19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     done to be near the desired
19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				     reporting interval? */
19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble units_this_tick;
19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY
19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	loc_dirty_count;
19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	loc_clean_count;
19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	rem_dirty_count;
20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	rem_clean_count;
20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */
20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* some of the vairables for confidence intervals... */
20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint  confidence_level;
20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint  iteration_min;
20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint  iteration_max;
20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint  result_confidence_only = 0;
20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble interval;
21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* stuff to control the "width" of the buffer rings for sending and */
21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receiving data */
21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	send_width;
21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint     recv_width;
21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* address family */
21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint	af = AF_INET;
21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* did someone request processor affinity? */
22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint cpu_binding_requested = 0;
22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* are we not establishing a control connection? */
22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint no_control = 0;
22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar netserver_usage[] = "\n\
22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectUsage: netserver [options] \n\
22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\
22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectOptions:\n\
23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -h                Display this text\n\
23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -d                Increase debugging output\n\
23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -L name,family    Use name to pick listen address and family for family\n\
23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -p portnum        Listen for connect requests on portnum.\n\
23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -4                Do IPv4\n\
23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -6                Do IPv6\n\
23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -v verbosity      Specify the verbosity level\n\
23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -V                Display version information and exit\n\
23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n";
23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* netperf_usage done as two concatenated strings to make the MS
24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   compiler happy when compiling for x86_32.  fix from Spencer
24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   Frink.  */
24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar netperf_usage1[] = "\n\
24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectUsage: netperf [global options] -- [test options] \n\
24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\
24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectGlobal options:\n\
24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -a send,recv      Set the local send,recv buffer alignment\n\
24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -A send,recv      Set the remote send,recv buffer alignment\n\
25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -B brandstr       Specify a string to be emitted with brief output\n\
25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -c [cpu_rate]     Report local CPU usage\n\
25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -C [cpu_rate]     Report remote CPU usage\n\
25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -d                Increase debugging output\n\
25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -D [secs,units] * Display interim results at least every secs seconds\n\
25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                      using units as the initial guess for units per second\n\
25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -f G|M|K|g|m|k    Set the output units\n\
25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -F fill_file      Pre-fill buffers with data from fill_file\n\
25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -h                Display this text\n\
25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -H name|ip,fam *  Specify the target machine and/or local ip and family\n\
26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -i max,min        Specify the max and min number of iterations (15,1)\n\
26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -I lvl[,intvl]    Specify confidence level (95 or 99) (99) \n\
26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                      and confidence interval in percentage (10)\n\
26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -l testlen        Specify test duration (>0 secs) (<0 bytes|trans)\n\
26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -L name|ip,fam *  Specify the local ip|name and address family\n\
26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -o send,recv      Set the local send,recv buffer offsets\n\
26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -O send,recv      Set the remote send,recv buffer offset\n\
26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -n numcpu         Set the number of processors for CPU util\n\
26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -N                Establish no control connection, do 'send' side only\n\
26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -p port,lport*    Specify netserver port number and/or local port\n\
27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -P 0|1            Don't/Do display test headers\n\
27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -r                Allow confidence to be hit on result only\n\
27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -t testname       Specify test to perform\n\
27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -T lcpu,rcpu      Request netperf/netserver be bound to local/remote cpu\n\
27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -v verbosity      Specify the verbosity level\n\
27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -W send,recv      Set the number of send,recv buffers\n\
27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -v level          Set the verbosity level (default 1, min 0)\n\
27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    -V                Display the netperf version and exit\n";
27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
27902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar netperf_usage2[] = "\n\
28002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFor those options taking two parms, at least one must be specified;\n\
28102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectspecifying one value without a comma will set both parms to that\n\
28202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvalue, specifying a value with a leading comma will set just the second\n\
28302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectparm, a value with a trailing comma will set just the first. To set\n\
28402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecteach parm to unique values, specify both and separate them with a\n\
28502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcomma.\n\
28602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n"
28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project"* For these options taking two parms, specifying one value with no comma\n\
28802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectwill only set the first parms and will leave the second at the default\n\
28902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvalue. To set the second value it must be preceded with a comma or be a\n\
29002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcomma-separated pair. This is to retain previous netperf behaviour.\n";
29102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This routine will return the two arguments to the calling routine. */
29402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* If the second argument is not specified, and there is no comma, */
29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* then the value of the second argument will be the same as the */
29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* value of the first. If there is a comma, then the value of the */
29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* second argument will be the value of the second argument ;-) */
29802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbreak_args(char *s, char *arg1, char *arg2)
30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  char *ns;
30302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  ns = strchr(s,',');
30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (ns) {
30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* there was a comma arg2 should be the second arg*/
30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    *ns++ = '\0';
30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    while ((*arg2++ = *ns++) != '\0');
30802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
30902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else {
31002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* there was not a comma, we can use ns as a temp s */
31102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* and arg2 should be the same value as arg1 */
31202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    ns = s;
31302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    while ((*arg2++ = *ns++) != '\0');
31402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  };
31502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  while ((*arg1++ = *s++) != '\0');
31602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
31702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
31802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* break_args_explicit
31902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
32002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   this routine is somewhat like break_args in that it will separate a
32102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   pair of comma-separated values.  however, if there is no comma,
32202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   this version will not ass-u-me that arg2 should be the same as
32302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   arg1. raj 2005-02-04 */
32402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
32502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbreak_args_explicit(char *s, char *arg1, char *arg2)
32602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
32702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
32802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  char *ns;
32902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  ns = strchr(s,',');
33002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (ns) {
33102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* there was a comma arg2 should be the second arg*/
33202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    *ns++ = '\0';
33302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    while ((*arg2++ = *ns++) != '\0');
33402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
33502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else {
33602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* there was not a comma, so we should make sure that arg2 is \0
33702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       lest something become confused. raj 2005-02-04 */
33802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    *arg2 = '\0';
33902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  };
34002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  while ((*arg1++ = *s++) != '\0');
34102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
34302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* given a string with possible values for setting an address family,
34502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   convert that into one of the AF_mumble values - AF_INET, AF_INET6,
34602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   AF_UNSPEC as apropriate. the family_string is compared in a
34702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   case-insensitive manner */
34802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
35002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectparse_address_family(char family_string[])
35102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
35202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
35302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  char temp[10];  /* gotta love magic constants :) */
35402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
35502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strncpy(temp,family_string,10);
35602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
35702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (debug) {
35802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fprintf(where,
35902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    "Attempting to parse address family from %s derived from %s\n",
36002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    temp,
36102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    family_string);
36202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
36302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
36402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (strstr(temp,"6")) {
36502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    return(AF_INET6);
36602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
36702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
36802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (strstr(temp,"inet") ||
36902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strstr(temp,"4")) {
37002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    return(AF_INET);
37102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
37202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (strstr(temp,"unspec") ||
37302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strstr(temp,"0")) {
37402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    return(AF_UNSPEC);
37502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
37602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
37702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "WARNING! %s not recognized as an address family, using AF_UNPSEC\n",
37802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  family_string);
37902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
38002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "Are you sure netperf was configured for that address family?\n");
38102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fflush(where);
38202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return(AF_UNSPEC);
38302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
38402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
38502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
38602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
38702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectset_defaults()
38802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
38902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
39002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* stuff to say where this test is going                              */
39102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strcpy(host_name,"");	      /* remote host name or ip addr  */
39202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strcpy(local_host_name,""); /* we want it to be INADDR_ANY */
39302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strcpy(test_name,"TCP_STREAM");	/* which test to run 		*/
39402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strncpy(test_port,"12865",PORTBUFSIZE); /* where is the test waiting    */
39502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strncpy(local_test_port,"0",PORTBUFSIZE);/* INPORT_ANY as it were */
39602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  address_family = AF_UNSPEC;
39702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_address_family = AF_UNSPEC;
39802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
39902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* output controlling variables                               */
40002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  debug			= 0;/* debugging level			*/
40102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  print_headers		= 1;/* do print test headers		*/
40202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  verbosity		= 1;/* verbosity level			*/
40302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* cpu variables */
40402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_cpu_usage	= 0;/* measure local cpu		*/
40502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_cpu_usage	= 0;/* what do you think ;-)		*/
40602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
40702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_cpu_rate	= (float)0.0;
40802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_cpu_rate	= (float)0.0;
40902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
41002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* the end-test conditions for the tests - either transactions, bytes,  */
41102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* or time. different vars used for clarity - space is cheap ;-)        */
41202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_time	= 10;	/* test ends by time			*/
41302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_bytes	= 0;	/* test ends on byte count		*/
41402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  test_trans	= 0;	/* test ends on tran count		*/
41502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
41602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* the alignment conditions for the tests				*/
41702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_recv_align	= 8;	/* alignment for local receives	*/
41802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  local_send_align	= 8;	/* alignment for local sends	*/
41902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_recv_align	= 8;	/* alignment for remote receives*/
42002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  remote_send_align	= 8;	/* alignment for remote sends	*/
42102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
42202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS
42302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* rate controlling stuff */
42402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_usecs  = 0;
42502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_wate   = 1;
42602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval_burst  = 0;
42702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */
42802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
42902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY
43002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* dirty and clean cache stuff */
43102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  loc_dirty_count = 0;
43202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  loc_clean_count = 0;
43302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  rem_dirty_count = 0;
43402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  rem_clean_count = 0;
43502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */
43602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
43702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* some of the vairables for confidence intervals... */
43802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
43902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  confidence_level = 99;
44002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  iteration_min = 1;
44102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  iteration_max = 1;
44202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  interval = 0.05; /* five percent? */
44302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
44402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  no_control = 0;
44502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strcpy(fill_file,"");
44602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
44702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
44802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
44902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
45002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectprint_netserver_usage()
45102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
45202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fwrite(netserver_usage, sizeof(char), strlen(netserver_usage), stderr);
45302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
45402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
45502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
45602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
45702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectprint_netperf_usage()
45802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
45902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fwrite(netperf_usage1, sizeof(char), strlen(netperf_usage1),  stderr);
46002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fwrite(netperf_usage2, sizeof(char), strlen(netperf_usage2),  stderr);
46102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
46202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
46302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
46402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectscan_cmd_line(int argc, char *argv[])
46502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
46602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  extern int	optind;           /* index of first unused arg 	*/
46702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  extern char	*optarg;	  /* pointer to option string	*/
46802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
46902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int		c;
47002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
47102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  char	arg1[BUFSIZ],  /* argument holders		*/
47202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    arg2[BUFSIZ];
47302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
47402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  program = (char *)malloc(strlen(argv[0]) + 1);
47502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (program == NULL) {
4761a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn    printf("malloc(%zu) failed!\n", strlen(argv[0]) + 1);
47702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    exit(1);
47802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
47902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  strcpy(program, argv[0]);
48002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
48102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* Go through all the command line arguments and break them */
48202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* out. For those options that take two parms, specifying only */
48302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* the first will set both to that value. Specifying only the */
48402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* second will leave the first untouched. To change only the */
48502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* first, use the form first, (see the routine break_args.. */
48602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
48702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  while ((c= getopt(argc, argv, GLOBAL_CMD_LINE_ARGS)) != EOF) {
48802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    switch (c) {
48902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case '?':
49002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'h':
49102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      print_netperf_usage();
49202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      exit(1);
49302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'a':
49402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set local alignments */
49502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
49602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
49702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_send_align = convert(arg1);
49802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
49902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
50002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_recv_align = convert(arg2);
50102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
50202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'A':
50302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set remote alignments */
50402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
50502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
50602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_send_align = convert(arg1);
50702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
50802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
50902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_recv_align = convert(arg2);
51002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
51102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'c':
51202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* measure local cpu usage please. the user */
51302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* may have specified the cpu rate as an */
51402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* optional parm */
51502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (argv[optind] && isdigit((unsigned char)argv[optind][0])){
51602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	/* there was an optional parm */
51702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_cpu_rate = (float)atof(argv[optind]);
51802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	optind++;
51902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
52002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      local_cpu_usage++;
52102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
52202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'C':
52302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* measure remote cpu usage please */
52402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (argv[optind] && isdigit((unsigned char)argv[optind][0])){
52502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	/* there was an optional parm */
52602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_cpu_rate = (float)atof(argv[optind]);
52702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	optind++;
52802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
52902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      remote_cpu_usage++;
53002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
53102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'd':
53202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      debug++;
53302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
53402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'D':
53502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if (defined WANT_DEMO)
53602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      demo_mode++;
53702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (argv[optind] && isdigit((unsigned char)argv[optind][0])){
53802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	/* there was an optional parm */
53902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	break_args_explicit(argv[optind],arg1,arg2);
54002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	optind++;
54102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	if (arg1[0]) {
54202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  demo_interval = atof(arg1) * 1000000.0;
54302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	}
54402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	if (arg2[0]) {
54502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  demo_units = convert(arg2);
54602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	}
54702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
54802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
54902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("Sorry, Demo Mode not configured into this netperf.\n");
55002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("please consider reconfiguring netperf with\n");
55102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("--enable-demo=yes and recompiling\n");
55202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
55302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
55402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'f':
55502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the thruput formatting */
55602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      libfmt = *optarg;
55702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
55802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'F':
55902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the fill_file variable for pre-filling buffers */
56002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(fill_file,optarg);
56102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
56202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'i':
56302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the iterations min and max for confidence intervals */
56402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
56502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
56602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	iteration_max = convert(arg1);
56702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
56802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0] ) {
56902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	iteration_min = convert(arg2);
57002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
57102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* if the iteration_max is < iteration_min make iteration_max
57202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 equal iteration_min */
57302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_max < iteration_min) iteration_max = iteration_min;
57402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* limit minimum to 3 iterations */
57502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_max < 3) iteration_max = 3;
57602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_min < 3) iteration_min = 3;
57702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* limit maximum to 30 iterations */
57802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_max > 30) iteration_max = 30;
57902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_min > 30) iteration_min = 30;
58002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
58102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'I':
58202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the confidence level (95 or 99) and width */
58302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
58402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
58502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	confidence_level = convert(arg1);
58602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
58702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if((confidence_level != 95) && (confidence_level != 99)){
58802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	printf("Only 95%% and 99%% confidence level is supported\n");
58902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	exit(1);
59002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
59102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0] ) {
59202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	interval = (double) convert(arg2)/100;
59302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
59402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* make sure that iteration_min and iteration_max are at least
59502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 at a reasonable default value.  if a -i option has previously
59602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 been parsed, these will no longer be 1, so we can check
59702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 against 1 */
59802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_min == 1) iteration_min = 3;
59902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (iteration_max == 1) iteration_max = 10;
60002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
60102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
60202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'k':
60302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* local dirty and clean counts */
60402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY
60502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
60602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
60702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	loc_dirty_count = convert(arg1);
60802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
60902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0] ) {
61002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	loc_clean_count = convert(arg2);
61102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
61202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
61302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("I don't know how to get dirty.\n");
61402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */
61502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
61602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'K':
61702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* remote dirty and clean counts */
61802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY
61902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
62002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
62102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	rem_dirty_count = convert(arg1);
62202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
62302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0] ) {
62402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	rem_clean_count = convert(arg2);
62502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
62602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
62702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("I don't know how to get dirty.\n");
62802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */
62902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
63002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'n':
63102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      shell_num_cpus = atoi(optarg);
63202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
63302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'N':
63402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      no_control = 1;
63502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
63602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'o':
63702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the local offsets */
63802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
63902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
64002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_send_offset = convert(arg1);
64102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
64202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_recv_offset = convert(arg2);
64302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
64402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'O':
64502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the remote offsets */
64602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
64702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
64802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_send_offset = convert(arg1);
64902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
65002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_recv_offset = convert(arg2);
65102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
65202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'P':
65302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* to print or not to print, that is */
65402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* the header question */
65502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      print_headers = convert(optarg);
65602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
65702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'r':
65802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* the user wishes that we declare confidence when hit on the
65902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 result even if not yet reached on CPU utilization.  only
66002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 meaningful if cpu util is enabled */
66102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      result_confidence_only = 1;
66202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
66302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 't':
66402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the test name */
66502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(test_name,optarg);
66602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
66702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'T':
66802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* We want to set the processor on which netserver or netperf */
66902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* will run */
67002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
67102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0]) {
67202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_proc_affinity = convert(arg1);
67302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	bind_to_specific_processor(local_proc_affinity,0);
67402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
67502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0]) {
67602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	remote_proc_affinity = convert(arg2);
67702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
67802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      cpu_binding_requested = 1;
67902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
68002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'W':
68102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* set the "width" of the user space data buffer ring. This will */
68202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* be the number of send_size buffers malloc'd in the tests */
68302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args(optarg,arg1,arg2);
68402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
68502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	send_width = convert(arg1);
68602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
68702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	recv_width = convert(arg2);
68802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
68902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'l':
69002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* determine test end conditions */
69102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* assume a timed test */
69202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      test_time = convert(optarg);
69302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      test_bytes = test_trans = 0;
69402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (test_time < 0) {
69502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	test_bytes = -1 * test_time;
69602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	test_trans = test_bytes;
69702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	test_time = 0;
69802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
69902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
70002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'v':
70102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* say how much to say */
70202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      verbosity = convert(optarg);
70302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
70402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'p':
70502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* specify an alternate port number we use break_args_explicit
70602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 here to maintain backwards compatibility with previous
70702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 generations of netperf where having a single value did not
70802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 set both remote _and_ local port number. raj 2005-02-04 */
70902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args_explicit(optarg,arg1,arg2);
71002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
71102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strncpy(test_port,arg1,PORTBUFSIZE);
71202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
71302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strncpy(local_test_port,arg2,PORTBUFSIZE);
71402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
71502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'H':
71602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* save-off the host identifying information, use
71702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 break_args_explicit since passing just one value should not
71802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 set both */
71902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args_explicit(optarg,arg1,arg2);
72002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
72102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strncpy(host_name,arg1,sizeof(host_name));
72202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
72302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	address_family = parse_address_family(arg2);
72402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
72502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'L':
72602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* save-off the local control socket addressing information. use
72702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 break_args_explicit since passing just one value should not
72802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 set both */
72902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break_args_explicit(optarg,arg1,arg2);
73002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg1[0])
73102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strncpy(local_host_name,arg1,sizeof(local_host_name));
73202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (arg2[0])
73302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	local_address_family = parse_address_family(arg2);
73402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
73502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'w':
73602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* We want to send requests at a certain wate. */
73702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* Remember that there are 1000000 usecs in a */
73802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* second, and that the packet rate is */
73902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* expressed in packets per millisecond. */
74002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS
74102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      interval_usecs = convert_timespec(optarg);
74202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      interval_wate  = interval_usecs / 1000;
74302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
74402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,
74502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      "Packet rate control is not compiled in.\n");
74602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
74702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
74802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'b':
74902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* we want to have a burst so many packets per */
75002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* interval. */
75102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS
75202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      interval_burst = convert(optarg);
75302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
75402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,
75502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      "Packet burst size is not compiled in. \n");
75602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */
75702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
75802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'B':
75902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      result_brand = malloc(strlen(optarg)+1);
76002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (NULL != result_brand) {
76102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strcpy(result_brand,optarg);
76202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
76302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      else {
76402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	fprintf(where,
76502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project		"Unable to malloc space for result brand\n");
76602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
76702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
76802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case '4':
76902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      address_family = AF_INET;
77002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      local_address_family = AF_INET;
77102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
77202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case '6':
77302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
77402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      address_family = AF_INET6;
77502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      local_address_family = AF_INET6;
77602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
77702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("This netperf was not compiled on an IPv6 capable system!\n");
77802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      exit(-1);
77902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
78002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
78102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case 'V':
78202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("Netperf version %s\n",NETPERF_VERSION);
78302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      exit(0);
78402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
78502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    };
78602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
78702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* ok, what should our default hostname and local binding info be?
78802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   */
78902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if ('\0' == host_name[0]) {
79002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* host_name was not set */
79102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    switch (address_family) {
79202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_INET:
79302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(host_name,"localhost");
79402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
79502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_UNSPEC:
79602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* what to do here? case it off the local_address_family I
79702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 suppose */
79802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      switch (local_address_family) {
79902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_INET:
80002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_UNSPEC:
80102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strcpy(host_name,"localhost");
80202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	break;
80302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
80402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_INET6:
80502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strcpy(host_name,"::1");
80602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	break;
80702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
80802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      default:
80902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	printf("Netperf does not understand %d as an address family\n",
81002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	       address_family);
81102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	exit(-1);
81202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
81302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
81402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
81502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_INET6:
81602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(host_name,"::1");
81702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
81802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
81902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    default:
82002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("Netperf does not understand %d as an address family\n",
82102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     address_family);
82202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      exit(-1);
82302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
82402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
82502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
82602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* now, having established the name to which the control will
82702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     connect, from what should it come? */
82802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if ('\0' == local_host_name[0]) {
82902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    switch (local_address_family) {
83002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_INET:
83102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(local_host_name,"0.0.0.0");
83202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
83302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_UNSPEC:
83402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      switch (address_family) {
83502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_INET:
83602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_UNSPEC:
83702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strcpy(local_host_name,"0.0.0.0");
83802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	break;
83902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
84002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      case AF_INET6:
84102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	strcpy(local_host_name,"::0");
84202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	break;
84302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
84402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      default:
84502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	printf("Netperf does not understand %d as an address family\n",
84602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	       address_family);
84702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	exit(-1);
84802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
84902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
85002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6)
85102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    case AF_INET6:
85202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      strcpy(local_host_name,"::0");
85302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      break;
85402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
85502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    default:
85602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      printf("Netperf does not understand %d as an address family\n",
85702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     address_family);
85802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      exit(-1);
85902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
86002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
86102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
86202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* so, if we aren't even going to establish a control connection we
86302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     should set certain "remote" settings to reflect this, regardless
86402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     of what else may have been set on the command line */
86502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (no_control) {
86602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_recv_align = -1;
86702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_send_align = -1;
86802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_send_offset = -1;
86902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_recv_offset = -1;
87002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_cpu_rate = (float)-1.0;
87102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    remote_cpu_usage = 0;
87202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
87302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
87402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* parsing test-specific options used to be conditional on there
87502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    being a "--" in the option stream.  however, some of the tests
87602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    have other initialization happening in their "scan" routines so we
87702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    want to call them regardless. raj 2005-02-08 */
87802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if ((strcasecmp(test_name,"TCP_STREAM") == 0) ||
87902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_ICSC_EXS
88002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    (strcasecmp(test_name,"EXS_TCP_STREAM") == 0) ||
88102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_ICSC_EXS */
88202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_SENDFILE
88302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_SENDFILE") == 0) ||
88402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_SENDFILE */
88502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_MAERTS") == 0) ||
88602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_RR") == 0) ||
88702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_CRR") == 0) ||
88802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_CC") == 0) ||
88902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_1644
89002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_TRR") == 0) ||
89102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_1644 */
89202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_NBRR
89302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"TCP_TRR") == 0) ||
89402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_NBRR */
89502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"UDP_STREAM") == 0) ||
89602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(strcasecmp(test_name,"UDP_RR") == 0))
89702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      {
89802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	scan_sockets_args(argc, argv);
89902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
90002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
90102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI
90202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if ((strcasecmp(test_name,"DLCO_RR") == 0) ||
90302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"DLCL_RR") == 0) ||
90402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"DLCO_STREAM") == 0) ||
90502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"DLCL_STREAM") == 0))
90602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      {
90702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	scan_dlpi_args(argc, argv);
90802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
90902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */
91002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
91102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_UNIX
91202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if ((strcasecmp(test_name,"STREAM_RR") == 0) ||
91302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"DG_RR") == 0) ||
91402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"STREAM_STREAM") == 0) ||
91502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"DG_STREAM") == 0))
91602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      {
91702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	scan_unix_args(argc, argv);
91802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
91902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_UNIX */
92002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
92102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_XTI
92202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if ((strcasecmp(test_name,"XTI_TCP_RR") == 0) ||
92302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"XTI_TCP_STREAM") == 0) ||
92402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"XTI_UDP_RR") == 0) ||
92502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"XTI_UDP_STREAM") == 0))
92602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      {
92702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	scan_xti_args(argc, argv);
92802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
92902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_XTI */
93002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
93102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SCTP
93202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if ((strcasecmp(test_name,"SCTP_STREAM") == 0) ||
93302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"SCTP_RR") == 0) ||
93402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"SCTP_STREAM_MANY") == 0) ||
93502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	     (strcasecmp(test_name,"SCTP_RR_MANY") == 0))
93602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    {
93702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      scan_sctp_args(argc, argv);
93802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
93902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
94002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
94102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_SDP
94202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if((strcasecmp(test_name,"SDP_STREAM") == 0) ||
94302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    (strcasecmp(test_name,"SDP_MAERTS") == 0) ||
94402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    (strcasecmp(test_name,"SDP_RR") == 0))
94502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      {
94602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	scan_sdp_args(argc, argv);
94702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
94802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
94902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
95002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* what is our default value for the output units?  if the test
95102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       name contains "RR" or "rr" or "Rr" or "rR" then the default is
95202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       'x' for transactions. otherwise it is 'm' for megabits
95302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       (10^6) */
95402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
95502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if ('?' == libfmt) {
95602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* we use a series of strstr's here because not everyone has
95702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 strcasestr and I don't feel like up or downshifting text */
95802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if ((strstr(test_name,"RR")) ||
95902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"rr")) ||
96002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"Rr")) ||
96102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"rR"))) {
96202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	libfmt = 'x';
96302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
96402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      else {
96502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	libfmt = 'm';
96602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
96702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
96802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    else if ('x' == libfmt) {
96902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* now, a format of 'x' makes no sense for anything other than
97002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 an RR test. if someone has been silly enough to try to set
97102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 that, we will reset it silently to default - namely 'm' */
97202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if ((strstr(test_name,"RR") == NULL) &&
97302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"rr") == NULL) &&
97402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"Rr") == NULL) &&
97502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  (strstr(test_name,"rR") == NULL)) {
97602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	libfmt = 'm';
97702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
97802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
97902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
98002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
98102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
98202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
98302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdump_globals()
98402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
98502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Program name: %s\n", program);
98602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Local send alignment: %d\n",local_send_align);
98702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Local recv alignment: %d\n",local_recv_align);
98802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Remote send alignment: %d\n",remote_send_align);
98902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Remote recv alignment: %d\n",remote_recv_align);
99002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Report local CPU %d\n",local_cpu_usage);
99102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Report remote CPU %d\n",remote_cpu_usage);
99202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Verbosity: %d\n",verbosity);
99302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Debug: %d\n",debug);
99402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Port: %s\n",test_port);
99502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Test name: %s\n",test_name);
99602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Test bytes: %d Test time: %d Test trans: %d\n",
99702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 test_bytes,
99802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 test_time,
99902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 test_trans);
100002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("Host name: %s\n",host_name);
100102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  printf("\n");
100202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
1003