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