102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar netlib_id[]="\ 202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project@(#)netlib.c (c) Copyright 1993-2007 Hewlett-Packard Company. Version 2.4.3"; 302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* netlib.c */ 802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the common utility routines available to all... */ 1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* establish_control() establish the control socket */ 1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calibrate_local_cpu() do local cpu calibration */ 1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calibrate_remote_cpu() do remote cpu calibration */ 1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_request() send a request to the remote */ 1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_response() receive a response from remote */ 1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_response() send a response to the remote */ 1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_request() recv a request from the remote */ 1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dump_request() dump request contents */ 1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dump_response() dump response contents */ 2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* cpu_start() start measuring cpu */ 2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* cpu_stop() stop measuring cpu */ 2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calc_cpu_util() calculate the cpu utilization */ 2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calc_service_demand() calculate the service demand */ 2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calc_thruput() calulate the tput in units */ 2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calibrate() really calibrate local cpu */ 2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* identify_local() print local host information */ 2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* identify_remote() print remote host information */ 2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* format_number() format the number (KB, MB,etc) */ 2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* format_units() return the format in english */ 3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* msec_sleep() sleep for some msecs */ 3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* start_timer() start a timer */ 3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the routines you get when WANT_DLPI is defined... */ 3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_open() open a file descriptor and */ 3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* attach to the card */ 3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_mtu() find the MTU of the card */ 3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_bind() bind the sap do the card */ 3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_connect() sender's have of connect */ 4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_accpet() receiver's half of connect */ 4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_set_window() set the window size */ 4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_stats() retrieve statistics */ 4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_send_disc() initiate disconnect (sender) */ 4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* dl_recv_disc() accept disconnect (receiver) */ 4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* Global include files */ 5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_CONFIG_H 5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <config.h> 5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* It would seem that most of the includes being done here from */ 5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "sys/" actually have higher-level wrappers at just /usr/include. */ 5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This is based on a spot-check of a couple systems at my disposal. */ 6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If you have trouble compiling you may want to add "sys/" raj 10/95 */ 6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <limits.h> 6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <signal.h> 6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef MPE 6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# define NSIG _NSIG 6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* MPE */ 6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <fcntl.h> 6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h> 6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdlib.h> 7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <math.h> 7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <string.h> 7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <assert.h> 7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_ENDIAN_H 7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <endian.h> 7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at some point, I would like to get rid of all these "sys/" */ 8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* includes where appropriate. if you have a system that requires */ 8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them, speak now, or your system may not comile later revisions of */ 8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* netperf. raj 1/96 */ 8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <unistd.h> 8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/stat.h> 8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/times.h> 8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef MPE 8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <time.h> 8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/time.h> 8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* MPE */ 9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/socket.h> 9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netinet/in.h> 9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <arpa/inet.h> 9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netdb.h> 9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <errno.h> 9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/utsname.h> 9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if !defined(MPE) && !defined(__VMS) 9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/param.h> 9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* MPE */ 9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* WIN32 */ 10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <process.h> 10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <time.h> 10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <winsock2.h> 10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define netperf_socklen_t socklen_t 10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <windows.h> 10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the only time someone should need to define DONT_IPV6 in the 10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "sources" file is if they are trying to compile on Windows 2000 or 11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project NT4 and I suspect this may not be their only problem :) */ 11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef DONT_IPV6 11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <ws2tcpip.h> 11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <windows.h> 11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define SIGALRM (14) 11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define sleep(x) Sleep((x)*1000) 11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef _AIX 12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/select.h> 12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/sched.h> 12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/pri.h> 12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define PRIORITY PRI_LOW 12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else/* _AIX */ 12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __sgi 12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/prctl.h> 13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/schedctl.h> 13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define PRIORITY NDPLOMIN 13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __sgi */ 13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* _AIX */ 13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI 13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/stream.h> 13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/stropts.h> 13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/poll.h> 13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __osf__ 14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpihdr.h> 14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* __osf__ */ 14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpi.h> 14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __hpux 14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpi_ext.h> 14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __hpux */ 14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __osf__ */ 14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */ 14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_MPCTL 15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/mpctl.h> 15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO) 15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include "missing/getaddrinfo.h" 15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "hist.h" 16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* Local Include Files */ 16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETLIB 16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h" 16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h" 16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netcpu.h" 17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* Global constants, macros and variables */ 17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WIN32) || defined(__VMS) 17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct timezone { 17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dummy ; 18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } ; 18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef __VMS 18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSOCKET win_kludge_socket = INVALID_SOCKET; 18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSOCKET win_kludge_socket2 = INVALID_SOCKET; 18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __VMS */ 18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 || __VMS */ 18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef LONG_LONG_MAX 18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define LONG_LONG_MAX 9223372036854775807LL 18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* LONG_LONG_MAX */ 19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* older versions of netperf knew about the HP kernel IDLE counter. */ 19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is now obsolete - in favor of either pstat(), times, or a */ 19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* process-level looper process. we also now require support for the */ 19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "long" integer type. raj 4/95. */ 19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_num_loc_cpus, /* the number of cpus in the system */ 19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_num_rem_cpus; /* how many we think are in the remote */ 19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define PAGES_PER_CHILD 2 20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint lib_use_idle; 20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint cpu_method; 20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct timeval time1, time2; 20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct timezone tz; 20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat lib_elapsed, 20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_maxrate, 20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_remote_maxrate, 21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_cpu_util, 21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_remote_cpu_util; 21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat lib_local_per_cpu_util[MAXCPUS]; 21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint lib_cpu_map[MAXCPUS]; 21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint *request_array; 21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint *response_array; 21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* INVALID_SOCKET == INVALID_HANDLE_VALUE == (unsigned int)(~0) == -1 */ 22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSOCKET netlib_control = INVALID_SOCKET; 22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSOCKET server_sock = INVALID_SOCKET; 22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* global variables to hold the value for processor affinity */ 22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint local_proc_affinity,remote_proc_affinity = -1; 22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* these are to allow netperf to be run easily through those evil, 22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project end-to-end breaking things known as firewalls */ 22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar local_data_port[10]; 22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar remote_data_port[10]; 23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *local_data_address=NULL; 23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *remote_data_address=NULL; 23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint local_data_family=AF_UNSPEC; 23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint remote_data_family=AF_UNSPEC; 23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in the past, I was overlaying a structure on an array of ints. now */ 23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I am going to have a "real" structure, and point an array of ints */ 23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at it. the real structure will be forced to the same alignment as */ 24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the type "double." this change will mean that pre-2.1 netperfs */ 24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* cannot be mixed with 2.1 and later. raj 11/95 */ 24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectunion netperf_request_struct netperf_request; 24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectunion netperf_response_struct netperf_response; 24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFILE *where; 24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar libfmt = '?'; 24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI 25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* some stuff for DLPI control messages */ 25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define DLPI_DATA_SIZE 2048 25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectunsigned long control_data[DLPI_DATA_SIZE]; 25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct strbuf control_message = {DLPI_DATA_SIZE, 0, (char *)control_data}; 25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */ 25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHANDLE hAlarm = INVALID_HANDLE_VALUE; 26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint times_up; 26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we use a getopt implementation from net.sources */ 26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * get option letter from argument vector 26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project opterr = 1, /* should error messages be printed? */ 27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project optind = 1, /* index into parent argv vector */ 27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project optopt; /* character checked for validity */ 27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar 27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *optarg; /* argument associated with option */ 27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define EMSG "" 27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 27902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 28002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 28102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic int measuring_cpu; 28202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 28302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnetlib_get_page_size(void) { 28402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 28502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not all systems seem to have the sysconf for page size. for 28602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project those which do not, we will assume that the page size is 8192 28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes. this should be more than enough to be sure that there is 28802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project no page or cache thrashing by looper processes on MP 28902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project systems. otherwise that's really just too bad - such systems 29002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project should define _SC_PAGE_SIZE - raj 4/95 */ 29102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef _SC_PAGE_SIZE 29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 29402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSYSTEM_INFO SystemInfo; 29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetSystemInfo(&SystemInfo); 29802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return SystemInfo.dwPageSize; 30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(8192L); 30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 30302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(sysconf(_SC_PAGE_SIZE)); 30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* _SC_PAGE_SIZE */ 30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 30802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 31102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic unsigned int usec_per_itvl; 31202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 31502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstop_itimer() 31602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 31802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct itimerval new_interval; 32002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct itimerval old_interval; 32102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 32202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_interval.tv_sec = 0; 32302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_interval.tv_usec = 0; 32402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_value.tv_sec = 0; 32502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_value.tv_usec = 0; 32602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (setitimer(ITIMER_REAL,&new_interval,&old_interval) != 0) { 32702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was a problem arming the interval timer */ 32802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: setitimer"); 32902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 33002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 33102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return; 33202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 33302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 33402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 33502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 33602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 33702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 33802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic void 33902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecterror(char *pch) 34002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 34102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!opterr) { 34202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return; /* without printing */ 34302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 34402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr, "%s: %s: %c\n", 34502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (NULL != program) ? program : "getopt", pch, optopt); 34602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 34702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 34802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 34902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectgetopt(int argc, char **argv, char *ostr) 35002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 35102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project static char *place = EMSG; /* option letter processing */ 35202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project register char *oli; /* option letter list index */ 35302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 35402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!*place) { 35502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* update scanning pointer */ 35602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (optind >= argc || *(place = argv[optind]) != '-' || !*++place) { 35702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return EOF; 35802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 35902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (*place == '-') { 36002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* found "--" */ 36102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++optind; 36202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project place = EMSG ; /* Added by shiva for Netperf */ 36302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return EOF; 36402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 36502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 36602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 36702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* option letter okay? */ 36802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((optopt = (int)*place++) == (int)':' 36902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project || !(oli = strchr(ostr, optopt))) { 37002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!*place) { 37102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++optind; 37202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 37302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error("illegal option"); 37402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return BADCH; 37502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 37602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (*++oli != ':') { 37702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* don't need argument */ 37802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project optarg = NULL; 37902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!*place) 38002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++optind; 38102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else { 38202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* need an argument */ 38302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (*place) { 38402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project optarg = place; /* no white space */ 38502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else if (argc <= ++optind) { 38602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* no arg */ 38702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project place = EMSG; 38802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error("option requires an argument"); 38902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return BADCH; 39002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else { 39102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project optarg = argv[optind]; /* white space */ 39202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 39302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project place = EMSG; 39402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ++optind; 39502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 39602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return optopt; /* return option letter */ 39702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 39802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 39902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 40002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*---------------------------------------------------------------------------- 40102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * WIN32 implementation of perror, does not deal very well with WSA errors 40202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * The stdlib.h version of perror only deals with the ancient XENIX error codes. 40302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * 40402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * +*+SAF Why can't all WSA errors go through GetLastError? Most seem to... 40502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *--------------------------------------------------------------------------*/ 40602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 40702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 40802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid PrintWin32Error(FILE *stream, LPSTR text) 40902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 41002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project LPSTR szTemp; 41102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DWORD dwResult; 41202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DWORD dwError; 41302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 41402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dwError = GetLastError(); 41502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dwResult = FormatMessage( 41602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_ARGUMENT_ARRAY, 41702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project NULL, 41802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dwError, 41902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project LANG_NEUTRAL, 42002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (LPTSTR)&szTemp, 42102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 42202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project NULL ); 42302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 42402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dwResult) 42502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stream, "%s: %s\n", text, szTemp); 42602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 42702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stream, "%s: error 0x%x\n", text, dwError); 42802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stream); 42902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (szTemp) 43102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project LocalFree((HLOCAL)szTemp); 43202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 43302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 43402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 43702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinet_ttos(int type) 43802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 43902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (type) { 44002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case SOCK_DGRAM: 44102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("SOCK_DGRAM"); 44202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 44302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case SOCK_STREAM: 44402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("SOCK_STREAM"); 44502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 44602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 44702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("SOCK_UNKNOWN"); 44802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 44902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 45002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 45102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 45202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 45302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar unknown[32]; 45402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 45502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 45602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinet_ptos(int protocol) { 45702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (protocol) { 45802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case IPPROTO_TCP: 45902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("IPPROTO_TCP"); 46002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 46102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case IPPROTO_UDP: 46202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("IPPROTO_UDP"); 46302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 46402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(IPPROTO_SCTP) 46502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case IPPROTO_SCTP: 46602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("IPPROTO_SCTP"); 46702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 46802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 46902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 47002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(unknown,sizeof(unknown),"IPPROTO_UNKNOWN(%d)",protocol); 47102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(unknown); 47202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 47302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 47402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 47502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* one of these days, this should not be required */ 47602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef AF_INET_SDP 47702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define AF_INET_SDP 27 47802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define PF_INET_SDP AF_INET_SDP 47902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 48002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 48202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinet_ftos(int family) 48302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 48402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch(family) { 48502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case AF_INET: 48602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("AF_INET"); 48702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 48802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6) 48902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case AF_INET6: 49002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("AF_INET6"); 49102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 49202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 49302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET_SDP) 49402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case AF_INET_SDP: 49502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("AF_INET_SDP"); 49602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 49702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 49802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 49902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return("AF_UNSPEC"); 50002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 50102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 50202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 50402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinet_nton(int af, const void *src, char *dst, int cnt) 50502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 50702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (af) { 50902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case AF_INET: 51002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* magic constants again... :) */ 51102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (cnt >= 4) { 51202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project memcpy(dst,src,4); 51302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return 4; 51402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 51502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 51602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(ENOSPC); 51702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 51802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 51902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 52002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6) 52102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case AF_INET6: 52202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (cnt >= 16) { 52302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project memcpy(dst,src,16); 52402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(16); 52502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 52602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 52702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(ENOSPC); 52802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 52902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 53002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 53102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 53202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 53302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(EAFNOSUPPORT); 53402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 53502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 53602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 53702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 53802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 53902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectntohd(double net_double) 54002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 54202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we rely on things being nicely packed */ 54302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project union { 54402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double whole_thing; 54502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int words[2]; 54602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned char bytes[8]; 54702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } conv_rec; 54802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned char scratch; 55002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 55102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 55202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on those systems where ntohl is a no-op, we want to return the */ 55302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* original value, unchanged */ 55402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 55502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ntohl(1L) == 1L) { 55602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(net_double); 55702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 55802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 55902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.whole_thing = net_double; 56002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 56102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we know that in the message passing routines that ntohl will have */ 56202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* been called on the 32 bit quantities. we need to put those back */ 56302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the way they belong before we swap */ 56402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[0] = htonl(conv_rec.words[0]); 56502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[1] = htonl(conv_rec.words[1]); 56602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 56702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now swap */ 56802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i=0; i<= 3; i++) { 56902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scratch = conv_rec.bytes[i]; 57002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.bytes[i] = conv_rec.bytes[7-i]; 57102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.bytes[7-i] = scratch; 57202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 57302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 57402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(__FLOAT_WORD_ORDER) && defined(__BYTE_ORDER) 57502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (__FLOAT_WORD_ORDER != __BYTE_ORDER) { 57602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Fixup mixed endian floating point machines */ 57702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int scratch = conv_rec.words[0]; 57802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[0] = conv_rec.words[1]; 57902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[1] = scratch; 58002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 58102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 58202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 58302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(conv_rec.whole_thing); 58402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 58502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 58602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 58702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 58802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecthtond(double host_double) 58902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 59102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we rely on things being nicely packed */ 59202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project union { 59302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double whole_thing; 59402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int words[2]; 59502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned char bytes[8]; 59602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } conv_rec; 59702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned char scratch; 59902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 60002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on those systems where ntohl is a no-op, we want to return the */ 60202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* original value, unchanged */ 60302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ntohl(1L) == 1L) { 60502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(host_double); 60602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 60702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.whole_thing = host_double; 60902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 61002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now swap */ 61102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i=0; i<= 3; i++) { 61202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scratch = conv_rec.bytes[i]; 61302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.bytes[i] = conv_rec.bytes[7-i]; 61402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.bytes[7-i] = scratch; 61502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 61602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 61702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(__FLOAT_WORD_ORDER) && defined(__BYTE_ORDER) 61802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (__FLOAT_WORD_ORDER != __BYTE_ORDER) { 61902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Fixup mixed endian floating point machines */ 62002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int scratch = conv_rec.words[0]; 62102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[0] = conv_rec.words[1]; 62202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[1] = scratch; 62302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 62402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 62502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 62602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we know that in the message passing routines htonl will */ 62702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be called on the 32 bit quantities. we need to set things up so */ 62802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that when this happens, the proper order will go out on the */ 62902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* network */ 63002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[0] = htonl(conv_rec.words[0]); 63102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project conv_rec.words[1] = htonl(conv_rec.words[1]); 63202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 63302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(conv_rec.whole_thing); 63402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 63502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 63602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 63702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 63802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* one of these days, this should be abstracted-out just like the CPU 63902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project util stuff. raj 2005-01-27 */ 64002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 64102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectget_num_cpus() 64202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 64402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on HP-UX, even when we use the looper procs we need the pstat */ 64602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* call */ 64702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int temp_cpus; 64902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __hpux 65102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/pstat.h> 65202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct pst_dynamic psd; 65402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (pstat_getdynamic((struct pst_dynamic *)&psd, 65602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (size_t)sizeof(psd), (size_t)1, 0) != -1) { 65702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = psd.psd_proc_cnt; 65802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 65902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 66002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = 1; 66102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 66202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 66302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 66402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* MW: <unistd.h> was included for non-Windows systems above. */ 66502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Thus if _SC_NPROC_ONLN is defined, we should be able to use sysconf. */ 66602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef _SC_NPROCESSORS_ONLN 66702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = sysconf(_SC_NPROCESSORS_ONLN); 66802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 66902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef USE_PERFSTAT 67002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = perfstat_cpu(NULL,NULL, sizeof(perfstat_cpu_t), 0); 67102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* USE_PERFSTAT */ 67202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 67302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* no _SC_NPROCESSORS_ONLN */ 67402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 67502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 67602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SYSTEM_INFO SystemInfo; 67702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetSystemInfo(&SystemInfo); 67802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 67902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = SystemInfo.dwNumberOfProcessors; 68002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 68102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we need to know some other ways to do this, or just fall-back on */ 68202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a global command line option - raj 4/95 */ 68302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus = shell_num_cpus; 68402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 68502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* _SC_NPROCESSORS_ONLN */ 68602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __hpux */ 68702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_cpus > MAXCPUS) { 68902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 69002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Sorry, this system has more CPUs (%d) than I can handle (%d).\n", 69102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_cpus, 69202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MAXCPUS); 69302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 69402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Please alter MAXCPUS in netlib.h and recompile.\n"); 69502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 69602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 69702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 69802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 69902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(temp_cpus); 70002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 70202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 70402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __GNUC__ 70502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project #define S64_SUFFIX(x) x##LL 70602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 70702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project #define S64_SUFFIX(x) x##i64 70802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 70902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 71002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 71102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * Number of 100 nanosecond units from 1/1/1601 to 1/1/1970 71202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 71302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define EPOCH_BIAS S64_SUFFIX(116444736000000000) 71402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 71502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 71602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * Union to facilitate converting from FILETIME to unsigned __int64 71702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 71802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttypedef union { 71902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned __int64 ft_scalar; 72002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FILETIME ft_struct; 72102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} FT; 72202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 72402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectgettimeofday( struct timeval *tv , struct timezone *not_used ) 72502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 72602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FT nt_time; 72702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project __int64 UnixTime; /* microseconds since 1/1/1970 */ 72802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetSystemTimeAsFileTime( &(nt_time.ft_struct) ); 73002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project UnixTime = ((nt_time.ft_scalar - EPOCH_BIAS) / S64_SUFFIX(10)); 73202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tv->tv_sec = (long)(time_t)(UnixTime / S64_SUFFIX(1000000)); 73302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tv->tv_usec = (unsigned long)(UnixTime % S64_SUFFIX(1000000)); 73402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 73502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 73602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/ 74002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 74102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* signal catcher */ 74202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 74302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/ 74402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 74502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 74602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(__hpux) 74702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcatcher(sig, code, scp) 74802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sig; 74902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int code; 75002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sigcontext *scp; 75102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 75202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcatcher(int sig) 75302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __hpux || __VMS */ 75402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 75502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 75602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __hpux 75702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 2) { 75802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"caught signal %d ",sig); 75902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (scp) { 76002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"while in syscall %d\n", 76102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scp->sc_syscall); 76202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 76302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 76402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"null scp\n"); 76502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 76602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 76702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 76802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* RAJ_DEBUG */ 76902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 77002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch(sig) { 77102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 77202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case SIGINT: 77302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: caught SIGINT\n"); 77402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 77502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 77602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 77702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case SIGALRM: 77802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (--test_len_ticks == 0) { 77902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test is over */ 78002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (times_up != 0) { 78102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"catcher: timer popped with times_up != 0\n"); 78202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 78302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 78402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 78502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WANT_INTERVALS) && !defined(WANT_SPIN) 78602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project stop_itimer(); 78702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 78802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 78902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 79002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 79102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 79202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __hpux 79302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test is not over yet and we must have been using the */ 79402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* interval timer. if we were in SYS_SIGSUSPEND we want to */ 79502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* re-start the system call. Otherwise, we want to get out of */ 79602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the sigsuspend call. I NEED TO KNOW HOW TO DO THIS FOR OTHER */ 79702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* OPERATING SYSTEMS. If you know how, please let me know. rick */ 79802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* jones <raj@cup.hp.com> */ 79902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (scp->sc_syscall != SYS_SIGSUSPEND) { 80002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 2) { 80102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 80202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "catcher: Time to send burst > interval!\n"); 80302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 80402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 80502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scp->sc_syscall_action = SIG_RESTART; 80602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 80702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __hpux */ 80802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* WANT_INTERVALS */ 80902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 81002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "catcher: interval timer running unexpectedly!\n"); 81102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 81202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 81302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 81402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 81502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 81602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 81702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return; 81802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 81902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 82202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinstall_signal_catchers() 82302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 82502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just a simple little routine to catch a bunch of signals */ 82602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 82802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sigaction action; 82902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 83002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 83102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"installing catcher for all signals\n"); 83202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 83302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 83402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sigemptyset(&(action.sa_mask)); 83502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_handler = catcher; 83602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 83702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SA_INTERRUPT 83802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_flags = SA_INTERRUPT; 83902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* SA_INTERRUPT */ 84002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_flags = 0; 84102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* SA_INTERRUPT */ 84202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 84302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 84402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 1; i <= NSIG; i++) { 84502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (i != SIGALRM) { 84602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sigaction(i,&action,NULL) != 0) { 84702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 84802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Could not install signal catcher for sig %d, errno %d\n", 84902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project i, 85002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 85102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 85202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 85402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 85502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 85602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 85702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return; 85802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 85902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 86002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 86302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define SIGALRM (14) 86402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 86502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectemulate_alarm( int seconds ) 86602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 86702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DWORD ErrorCode; 86802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Wait on this event for parm seconds. */ 87002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ErrorCode = WaitForSingleObject(hAlarm, seconds*1000); 87202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ErrorCode == WAIT_FAILED) 87302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 87402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("WaitForSingleObject failed"); 87502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 87602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 87702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ErrorCode == WAIT_TIMEOUT) 87902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 88002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* WaitForSingleObject timed out; this means the timer 88102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project wasn't canceled. */ 88202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 88302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 88402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 88502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We have yet to find a good way to fully emulate the effects */ 88602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of signals and getting EINTR from system calls under */ 88702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* winsock, so what we do here is close the socket out from */ 88802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* under the other thread. It is rather kludgy, but should be */ 88902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sufficient to get this puppy shipped. The concept can be */ 89002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* attributed/blamed :) on Robin raj 1/96 */ 89102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (win_kludge_socket != INVALID_SOCKET) { 89302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project closesocket(win_kludge_socket); 89402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 89502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (win_kludge_socket2 != INVALID_SOCKET) { 89602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project closesocket(win_kludge_socket2); 89702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 89802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 89902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 90002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 90202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 90402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstart_timer(int time) 90502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 90602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 90802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*+*+SAF What if StartTimer is called twice without the first timer */ 90902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*+*+SAF expiring? */ 91002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 91102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DWORD thread_id ; 91202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HANDLE tHandle; 91302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 91402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (hAlarm == (HANDLE) INVALID_HANDLE_VALUE) 91502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 91602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Create the Alarm event object */ 91702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hAlarm = CreateEvent( 91802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (LPSECURITY_ATTRIBUTES) NULL, /* no security */ 91902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FALSE, /* auto reset event */ 92002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FALSE, /* init. state = reset */ 92102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (void *)NULL); /* unnamed event object */ 92202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (hAlarm == (HANDLE) INVALID_HANDLE_VALUE) 92302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 92402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("CreateEvent failure"); 92502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 92602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 92702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 92802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 92902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 93002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ResetEvent(hAlarm); 93102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 93202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tHandle = CreateThread(0, 93502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 93602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (LPTHREAD_START_ROUTINE)emulate_alarm, 93702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (LPVOID)(ULONG_PTR)time, 93802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 93902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &thread_id ) ; 94002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project CloseHandle(tHandle); 94102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 94202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* not WIN32 */ 94302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 94402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct sigaction action; 94502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 94602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (debug) { 94702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"About to start a timer for %d seconds.\n",time); 94802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 94902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 95002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_handler = catcher; 95202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sigemptyset(&(action.sa_mask)); 95302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sigaddset(&(action.sa_mask),SIGALRM); 95402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SA_INTERRUPT 95602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on some systems (SunOS 4.blah), system calls are restarted. we do */ 95702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not want that */ 95802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_flags = SA_INTERRUPT; 95902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* SA_INTERRUPT */ 96002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project action.sa_flags = 0; 96102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* SA_INTERRUPT */ 96202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sigaction(SIGALRM, &action, NULL) < 0) { 96402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"start_timer: error installing alarm handler "); 96502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"errno %d\n",errno); 96602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 96702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 96802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 96902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 97002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is the easy case - just set the timer for so many seconds */ 97102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (alarm(time) != 0) { 97202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 97302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "error starting alarm timer, errno %d\n", 97402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 97502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 97602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 97702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 97802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 97902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_len_ticks = 1; 98002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 98202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine will disable any running timer */ 98502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 98602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstop_timer() 98702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 98802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 98902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project alarm(0); 99002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 99102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at some point we may need some win32 equivalent */ 99202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (hAlarm != (HANDLE) INVALID_HANDLE_VALUE) 99302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 99402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SetEvent(hAlarm); 99502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 99602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 99702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 99902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 100202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine will enable the interval timer and set things up so */ 100302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that for a timed test the test will end at the proper time. it */ 100402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should detect the presence of POSIX.4 timer_* routines one of */ 100502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* these days */ 100602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 100702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstart_itimer(unsigned int interval_len_msec ) 100802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 100902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 101002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int ticks_per_itvl; 101102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 101202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct itimerval new_interval; 101302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct itimerval old_interval; 101402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 101502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if -DWANT_INTERVALS was used, we will use the ticking of the itimer to */ 101602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* tell us when the test is over. while the user will be specifying */ 101702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* some number of milliseconds, we know that the interval timer is */ 101802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* really in units of 1/HZ. so, to prevent the test from running */ 101902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "long" it would be necessary to keep this in mind when calculating */ 102002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the number of itimer events */ 102102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ticks_per_itvl = ((interval_wate * sysconf(_SC_CLK_TCK) * 1000) / 102302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1000000); 102402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ticks_per_itvl == 0) ticks_per_itvl = 1; 102602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how many usecs in each interval? */ 102802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usec_per_itvl = ticks_per_itvl * (1000000 / sysconf(_SC_CLK_TCK)); 102902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 103002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how many times will the timer pop before the test is over? */ 103102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time > 0) { 103202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this was a timed test */ 103302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_len_ticks = (test_time * 1000000) / usec_per_itvl; 103402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 103502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 103602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this was not a timed test, use MAXINT */ 103702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_len_ticks = INT_MAX; 103802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 103902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 104002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 104102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"setting the interval timer to %d sec %d usec ", 104202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usec_per_itvl / 1000000, 104302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usec_per_itvl % 1000000); 104402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"test len %d ticks\n", 104502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_len_ticks); 104602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 104702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 104802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 104902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if this was not a timed test, then we really aught to enable the */ 105002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* signal catcher raj 2/95 */ 105102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_interval.tv_sec = usec_per_itvl / 1000000; 105302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_interval.tv_usec = usec_per_itvl % 1000000; 105402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_value.tv_sec = usec_per_itvl / 1000000; 105502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project new_interval.it_value.tv_usec = usec_per_itvl % 1000000; 105602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (setitimer(ITIMER_REAL,&new_interval,&old_interval) != 0) { 105702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was a problem arming the interval timer */ 105802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: setitimer"); 105902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 106002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 106102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 106202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 106302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 106402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 106502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnetlib_init_cpu_map() { 106602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 106702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 106802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_MPCTL 106902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int num; 107002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project i = 0; 107102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I go back and forth on whether this should be the system-wide set 107202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of calls, or if the processor set versions (sans the _SYS) should 107302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project be used. at the moment I believe that the system-wide version 107402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project should be used. raj 2006-04-03 */ 107502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num = mpctl(MPC_GETNUMSPUS_SYS,0,0); 107602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_cpu_map[i] = mpctl(MPC_GETFIRSTSPU_SYS,0,0); 107702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 1;((i < num) && (i < MAXCPUS)); i++) { 107802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_cpu_map[i] = mpctl(MPC_GETNEXTSPU_SYS,lib_cpu_map[i-1],0); 107902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 108002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* from here, we set them all to -1 because if we launch more 108102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loopers than actual CPUs, well, I'm not sure why :) */ 108202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (; i < MAXCPUS; i++) { 108302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_cpu_map[i] = -1; 108402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 108502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 108602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 108702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we assume that there is indeed a contiguous mapping */ 108802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < MAXCPUS; i++) { 108902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_cpu_map[i] = i; 109002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 109102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 109202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 109302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 109402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 109502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 109602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 109702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* netlib_init() */ 109802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 109902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* initialize the performance library... */ 110002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 110102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 110202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 110302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 110402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnetlib_init() 110502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 110602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 110702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 110802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project where = stdout; 110902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 111002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array = (int *)(&netperf_request); 111102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array = (int *)(&netperf_response); 111202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 111302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < MAXCPUS; i++) { 111402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_per_cpu_util[i] = 0.0; 111502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 111602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 111702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on those systems where we know that CPU numbers may not start at 111802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project zero and be contiguous, we provide a way to map from a 111902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project contiguous, starting from 0 CPU id space to the actual CPU ids. 112002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project at present this is only used for the netcpu_looper stuff because 112102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project we ass-u-me that someone setting processor affinity from the 112202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf commandline will provide a "proper" CPU identifier. raj 112302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2006-04-03 */ 112402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 112502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netlib_init_cpu_map(); 112602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 112702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 112802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 112902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netlib_init: request_array at %p\n", 113002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array); 113102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 113202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netlib_init: response_array at %p\n", 113302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array); 113402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 113602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 113702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 113902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 114002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine will conver the string into an unsigned integer. it */ 114102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is used primarily for the command-line options taking a number */ 114202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (such as the socket size) which could be rather large. If someone */ 114302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* enters 32M, then the number will be converted to 32 * 1024 * 1024. */ 114402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If they inter 32m, the number will be converted to 32 * 1000 * */ 114502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 1000 */ 114602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectunsigned int 114702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectconvert(char *string) 114802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 114902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 115002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int base; 115102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base = atoi(string); 115202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"K")) { 115302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= 1024; 115402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 115502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"M")) { 115602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1024 * 1024); 115702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 115802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"G")) { 115902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1024 * 1024 * 1024); 116002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"k")) { 116202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1000); 116302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"m")) { 116502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1000 * 1000); 116602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"g")) { 116802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1000 * 1000 * 1000); 116902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 117002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(base); 117102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 117202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 117302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* this routine is like convert, but it is used for an interval time 117402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project specification instead of stuff like socket buffer or send sizes. 117502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project it converts everything to microseconds for internal use. if there 117602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project is an 'm' at the end it assumes the user provided milliseconds, s 117702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will imply seconds, u will imply microseconds. in the future n 117802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will imply nanoseconds but for now it will be ignored. if there is 117902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project no suffix or an unrecognized suffix, it will be assumed the user 118002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project provided milliseconds, which was the long-time netperf default. one 118102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of these days, we should probably revisit that nanosecond business 118202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project wrt the return value being just an int rather than a uint64_t or 118302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project something. raj 2006-02-06 */ 118402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectunsigned int 118602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectconvert_timespec(char *string) { 118702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int base; 118902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base = atoi(string); 119002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strstr(string,"m")) { 119102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= 1000; 119202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 119302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else if (strstr(string,"u")) { 119402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1); 119502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 119602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else if (strstr(string,"s")) { 119702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1000 * 1000); 119802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 119902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 120002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project base *= (1000); 120102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 120202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(base); 120302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 120402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 120502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 120602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine will allocate a circular list of buffers for either */ 120702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send or receive operations. each of these buffers will be aligned */ 120802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and offset as per the users request. the circumference of this */ 120902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ring will be controlled by the setting of send_width. the buffers */ 121002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will be filled with data from the file specified in fill_file. if */ 121102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fill_file is an empty string, the buffers will not be filled with */ 121202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* any particular data */ 121302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 121402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct ring_elt * 121502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectallocate_buffer_ring(int width, int buffer_size, int alignment, int offset) 121602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 121702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 121802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *first_link = NULL; 121902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *temp_link = NULL; 122002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *prev_link; 122102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 122202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 122302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int malloc_size; 122402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_left; 122502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_read; 122602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int do_fill; 122702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 122802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FILE *fill_source; 122902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char default_fill[] = "netperf"; 123002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fill_cursor = 0; 123102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 123202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project malloc_size = buffer_size + alignment + offset; 123302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 123402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* did the user wish to have the buffers pre-filled with data from a */ 123502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* particular source? */ 123602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strcmp(fill_file,"") == 0) { 123702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do_fill = 0; 123802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source = NULL; 123902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 124102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do_fill = 1; 124202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source = (FILE *)fopen(fill_file,"r"); 124302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (fill_source == (FILE *)NULL) { 124402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("Could not open requested fill file"); 124502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 124602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 124902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project assert(width >= 1); 125002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 125102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = NULL; 125202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 1; i <= width; i++) { 125302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* get the ring element */ 125402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link = (struct ring_elt *)malloc(sizeof(struct ring_elt)); 125502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_link == NULL) { 12561a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn printf("malloc(%zu) failed!\n", sizeof(struct ring_elt)); 125702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 125802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 125902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remember the first one so we can close the ring at the end */ 126002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (i == 1) { 126102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_link = temp_link; 126202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 126302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_base = (char *)malloc(malloc_size); 126402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_link == NULL) { 126502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", malloc_size); 126602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 126702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 126802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 126902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 127002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr = (char *)(( (long)(temp_link->buffer_base) + 127102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long)alignment - 1) & 127202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long)alignment - 1)); 127302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 127402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr = (char *)(( (ULONG_PTR)(temp_link->buffer_base) + 127502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (ULONG_PTR)alignment - 1) & 127602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((ULONG_PTR)alignment - 1)); 127702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 127802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr += offset; 127902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is where the buffer fill code goes. */ 128002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (do_fill) { 128102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *bufptr = temp_link->buffer_ptr; 128202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left = buffer_size; 128302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (bytes_left) { 128402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (((bytes_read = (int)fread(bufptr, 128502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1, 128602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left, 128702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source)) == 0) && 128802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (feof(fill_source))){ 128902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rewind(fill_source); 129002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bufptr += bytes_read; 129202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left -= bytes_read; 129302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 129602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* use the default fill to ID our data traffic on the 129702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project network. it ain't exactly pretty, but it should work */ 129802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int j; 129902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *bufptr = temp_link->buffer_ptr; 130002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (j = 0; j < buffer_size; j++) { 130102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bufptr[j] = default_fill[fill_cursor]; 130202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_cursor += 1; 130302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the Windows DDK compiler with an x86_64 target wants a cast 130402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project here */ 130502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (fill_cursor > (int)strlen(default_fill)) { 130602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_cursor = 0; 130702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 130802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 130902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 131102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->next = prev_link; 131202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = temp_link; 131302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 131402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (first_link) { /* SAF Prefast made me do it... */ 131502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_link->next = temp_link; 131602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 131702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(first_link); /* it's a circle, doesn't matter which we return */ 131902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 132002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 132102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* this routine will dirty the first dirty_count bytes of the 132202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project specified buffer and/or read clean_count bytes from the buffer. it 132302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will go N bytes at a time, the only question is how large should N 132402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project be and if we should be going continguously, or based on some 132502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project assumption of cache line size */ 132602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 132702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 132802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectaccess_buffer(char *buffer_ptr,int length, int dirty_count, int clean_count) { 132902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_buffer; 133102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *limit; 133202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i, dirty_totals; 133302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_buffer = buffer_ptr; 133502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project limit = temp_buffer + length; 133602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_totals = 0; 133702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; 133902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((i < dirty_count) && (temp_buffer < limit)); 134002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project i++) { 134102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *temp_buffer += (char)i; 134202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_totals += *temp_buffer; 134302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_buffer++; 134402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 134502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 134602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; 134702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((i < clean_count) && (temp_buffer < limit)); 134802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project i++) { 134902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_totals += *temp_buffer; 135002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_buffer++; 135102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 135202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 135302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 100) { 135402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 135502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "This was here to try to avoid dead-code elimination %d\n", 135602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_totals); 135702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 135802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 135902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 136002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 136102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 136202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_ICSC_EXS 136302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 136402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/mman.h> 136502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/exs.h> 136602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 136702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine will allocate a circular list of buffers for either */ 136802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send or receive operations. each of these buffers will be aligned */ 136902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and offset as per the users request. the circumference of this */ 137002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ring will be controlled by the setting of send_width. the buffers */ 137102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will be filled with data from the file specified in fill_file. if */ 137202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fill_file is an empty string, the buffers will not be filled with */ 137302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* any particular data */ 137402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 137502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct ring_elt * 137602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectallocate_exs_buffer_ring (int width, int buffer_size, int alignment, int offset, exs_mhandle_t *mhandlep) 137702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 137802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 137902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *first_link; 138002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *temp_link; 138102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *prev_link; 138202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 138302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 138402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int malloc_size; 138502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_left; 138602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_read; 138702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int do_fill; 138802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 138902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FILE *fill_source; 139002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 139102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int mmap_size; 139202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *mmap_buffer, *mmap_buffer_aligned; 139302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 139402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project malloc_size = buffer_size + alignment + offset; 139502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 139602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* did the user wish to have the buffers pre-filled with data from a */ 139702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* particular source? */ 139802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strcmp (fill_file, "") == 0) { 139902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do_fill = 0; 140002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source = NULL; 140102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else { 140202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do_fill = 1; 140302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source = (FILE *) fopen (fill_file, "r"); 140402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (fill_source == (FILE *) NULL) { 140502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror ("Could not open requested fill file"); 140602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit (1); 140702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 140802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 140902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project assert (width >= 1); 141102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 141302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf (where, "allocate_exs_buffer_ring: " 141402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "width=%d buffer_size=%d alignment=%d offset=%d\n", 141502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project width, buffer_size, alignment, offset); 141602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 141702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* allocate shared memory */ 141902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mmap_size = width * malloc_size; 142002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mmap_buffer = (char *) mmap ((caddr_t)NULL, mmap_size+NBPG-1, 142102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project PROT_READ|PROT_WRITE, 142202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MAP_SHARED|MAP_ANONYMOUS, -1, 0); 142302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (mmap_buffer == NULL) { 142402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror ("allocate_exs_buffer_ring: mmap failed"); 142502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit (1); 142602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 142702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mmap_buffer_aligned = (char *) ((uintptr_t)mmap_buffer & ~(NBPG-1)); 142802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 142902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf (where, "allocate_exs_buffer_ring: " 143002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "mmap buffer size=%d address=0x%p aligned=0x%p\n", 143102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mmap_size, mmap_buffer, mmap_buffer_aligned); 143202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 143302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 143402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* register shared memory */ 143502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *mhandlep = exs_mregister ((void *)mmap_buffer_aligned, (size_t)mmap_size, 0); 143602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (*mhandlep == EXS_MHANDLE_INVALID) { 143702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror ("allocate_exs_buffer_ring: exs_mregister failed"); 143802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit (1); 143902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 144002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 144102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf (where, "allocate_exs_buffer_ring: mhandle=%d\n", 144202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *mhandlep); 144302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 144402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 144502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* allocate ring elements */ 144602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_link = (struct ring_elt *) malloc (width * sizeof (struct ring_elt)); 144702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (first_link == NULL) { 144802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf ("malloc(%d) failed!\n", width * sizeof (struct ring_elt)); 144902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit (1); 145002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 145102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 145202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize buffer ring */ 145302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = first_link + width - 1; 145402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 145502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0, temp_link = first_link; i < width; i++, temp_link++) { 145602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 145702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_base = (char *) mmap_buffer_aligned + (i*malloc_size); 145802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 145902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr = (char *) 146002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (((long)temp_link->buffer_base + (long)alignment - 1) & 146102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long)alignment - 1)); 146202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 146302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr = (char *) 146402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (((ULONG_PTR)temp_link->buffer_base + (ULONG_PTR)alignment - 1) & 146502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((ULONG_PTR)alignment - 1)); 146602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 146702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->buffer_ptr += offset; 146802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 146902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 147002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf (where, "allocate_exs_buffer_ring: " 147102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "buffer: index=%d base=0x%p ptr=0x%p\n", 147202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project i, temp_link->buffer_base, temp_link->buffer_ptr); 147302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 147402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 147502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is where the buffer fill code goes. */ 147602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (do_fill) { 147702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left = buffer_size; 147802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (bytes_left) { 147902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (((bytes_read = (int) fread (temp_link->buffer_ptr, 148002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1, 148102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left, 148202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fill_source)) == 0) && 148302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (feof (fill_source))) { 148402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rewind (fill_source); 148502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 148602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left -= bytes_read; 148702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 148802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 148902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 149002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* do linking */ 149102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link->next = temp_link; 149202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = temp_link; 149302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 149402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 149502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (first_link); /* it's a circle, doesn't matter which we return */ 149602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 149702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 149802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_ICSC_EXS */ 149902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 150002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 150102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 150202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_SENDFILE 150302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* this routine will construct a ring of sendfile_ring_elt structs 150402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project that the routine sendfile_tcp_stream() will use to get parameters 150502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project to its calls to sendfile(). It will setup the ring to point at the 150602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project file specified in the global -F option that is already used to 150702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pre-fill buffers in the send() case. 08/2000 150802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 150902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if there is no file specified in a global -F option, we will create 151002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project a tempoarary file and fill it with random data and use that 151102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project instead. raj 2007-08-09 */ 151202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 151302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct sendfile_ring_elt * 151402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectalloc_sendfile_buf_ring(int width, 151502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int buffer_size, 151602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int alignment, 151702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int offset) 151802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 151902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 152002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 152102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sendfile_ring_elt *first_link = NULL; 152202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sendfile_ring_elt *temp_link = NULL; 152302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sendfile_ring_elt *prev_link; 152402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 152502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 152602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fildes; 152702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct stat statbuf; 152802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 152902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if the user has not specified a file with the -F option, we will 153002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fail the test. otherwise, go ahead and try to open the 153102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project file. 08/2000 */ 153202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (strcmp(fill_file,"") == 0) { 153302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* use an temp file for the fill file */ 153402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_file; 153502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *temp_buffer; 153602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 153702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure we have at least an ints worth, even if the user is 153802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project using an insane buffer size for a sendfile test. we are 153902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ass-u-me-ing that malloc will return something at least aligned 154002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project on an int boundary... */ 154102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_buffer = (int *) malloc(buffer_size + sizeof(int)); 154202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_buffer) { 154302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok, we have the buffer we are going to write, lets get a 154402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temporary filename */ 154502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_file = tmpnam(NULL); 154602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (NULL != temp_file) { 154702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fildes = open(temp_file,O_RDWR | O_EXCL | O_CREAT,0600); 154802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (-1 != fildes) { 154902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int count; 155002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *int_ptr; 155102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 155202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize the random number generator */ 155302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project srand(getpid()); 155402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 155502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* unlink the file so it goes poof when we 155602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit. unless/until shown to be a problem we will 155702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project blissfully ignore the return value. raj 2007-08-09 */ 155802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unlink(temp_file); 155902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 156002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now fill-out the file with at least buffer_size * width bytes */ 156102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (count = 0; count < width; count++) { 156202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fill the buffer with random data. it doesn't have to be 156302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project really random, just "random enough" :) we do this here rather 156402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project than up above because we want each write to the file to be 156502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project different random data */ 156602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int_ptr = temp_buffer; 156702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i <= buffer_size/sizeof(int); i++) { 156802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *int_ptr = rand(); 156902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int_ptr++; 157002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 157102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (write(fildes,temp_buffer,buffer_size+sizeof(int)) != 157202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project buffer_size + sizeof(int)) { 157302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("allocate_sendfile_buf_ring: incomplete write"); 157402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 157502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 157602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 157702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 157802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 157902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("allocate_sendfile_buf_ring: could not open tempfile"); 158002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 158102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 158202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 158302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 158402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("allocate_sendfile_buf_ring: could not allocate temp name"); 158502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 158602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 158702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 158802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 158902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("alloc_sendfile_buf_ring: could not allocate buffer for file"); 159002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 159102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 159202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 159302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 159402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the user pointed us at a file, so try it */ 159502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fildes = open(fill_file , O_RDONLY); 159602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (fildes == -1){ 159702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("alloc_sendfile_buf_ring: Could not open requested file"); 159802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 159902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 160002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure there is enough file there to allow us to make a 160102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project complete ring. that way we do not need additional logic in the 160202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ring setup to deal with wrap-around issues. we might want that 160302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project someday, but not just now. 08/2000 */ 160402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (stat(fill_file,&statbuf) != 0) { 160502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("alloc_sendfile_buf_ring: could not stat file"); 160602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 160702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 160802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (statbuf.st_size < (width * buffer_size)) { 160902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the file is too short */ 161002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr,"alloc_sendfile_buf_ring: specified file too small.\n"); 161102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr,"file must be larger than send_width * send_size\n"); 161202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 161302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 161402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 161502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 161602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 161702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* so, at this point we know that fildes is a descriptor which 161802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project references a file of sufficient size for our nefarious 161902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project porpoises. raj 2007-08-09 */ 162002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = NULL; 162202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 1; i <= width; i++) { 162302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* get the ring element. we should probably make sure the malloc() 162402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project was successful, but for now we'll just let the code bomb 162502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mysteriously. 08/2000 */ 162602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link = (struct sendfile_ring_elt *) 162802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project malloc(sizeof(struct sendfile_ring_elt)); 162902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_link == NULL) { 163002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%u) failed!\n", sizeof(struct sendfile_ring_elt)); 163102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 163202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 163302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remember the first one so we can close the ring at the end */ 163502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (i == 1) { 163702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_link = temp_link; 163802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 163902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 164002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now fill-in the fields of the structure with the apropriate 164102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project stuff. just how should we deal with alignment and offset I 164202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project wonder? until something better comes-up, I think we will just 164302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ignore them. 08/2000 */ 164402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 164502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->fildes = fildes; /* from which file do we send? */ 164602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->offset = offset; /* starting at which offset? */ 164702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project offset += buffer_size; /* get ready for the next elt */ 164802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->length = buffer_size; /* how many bytes to send */ 164902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->hdtrl = NULL; /* no header or trailer */ 165002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->flags = 0; /* no flags */ 165102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 165202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is where the buffer fill code went. */ 165302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 165402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_link->next = prev_link; 165502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project prev_link = temp_link; 165602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 165702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* close the ring */ 165802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_link->next = temp_link; 165902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(first_link); /* it's a dummy ring */ 166102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 166202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_SENDFILE */ 166402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 166702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 166802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* dump_request() */ 166902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 167002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the contents of the request array to the user. it will */ 167102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the contents in decimal, hex, and ascii, with four bytes */ 167202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* per line. */ 167302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 167402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 167502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 167602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 167702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdump_request() 167802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 16791a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzynsize_t counter = 0; 168002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"request contents:\n"); 168102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfor (counter = 0; counter < ((sizeof(netperf_request)/4)-3); counter += 4) { 16821a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn fprintf(where,"%zu:\t%8x %8x %8x %8x \t|%4.4s| |%4.4s| |%4.4s| |%4.4s|\n", 168302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter, 168402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter], 168502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter+1], 168602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter+2], 168702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter+3], 168802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&request_array[counter], 168902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&request_array[counter+1], 169002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&request_array[counter+2], 169102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&request_array[counter+3]); 169202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 169302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfflush(where); 169402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 169502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 169602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 169702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 169802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 169902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* dump_response() */ 170002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 170102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the content of the response array to the user. it will */ 170202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the contents in decimal, hex, and ascii, with four bytes */ 170302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* per line. */ 170402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 170502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 170602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 170802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdump_response() 170902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 17101a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzynsize_t counter = 0; 171102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"response contents\n"); 171302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfor (counter = 0; counter < ((sizeof(netperf_response)/4)-3); counter += 4) { 17141a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn fprintf(where,"%zu:\t%8x %8x %8x %8x \t>%4.4s< >%4.4s< >%4.4s< >%4.4s<\n", 171502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter, 171602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter], 171702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter+1], 171802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter+2], 171902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter+3], 172002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&response_array[counter], 172102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&response_array[counter+1], 172202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&response_array[counter+2], 172302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&response_array[counter+3]); 172402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 172502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfflush(where); 172602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 172702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 172802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 172902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project format_number() 173102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return a pointer to a formatted string containing the value passed 173302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project translated into the units specified. It assumes that the base units 173402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project are bytes. If the format calls for bits, it will use SI units (10^) 173502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if the format calls for bytes, it will use CS units (2^)... This 173602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project routine should look familiar to uses of the latest ttcp... 173702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project we would like to use "t" or "T" for transactions, but probably 173902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project should leave those for terabits and terabytes respectively, so for 174002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project transactions, we will use "x" which will, by default, do absolutely 174102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nothing to the result. why? so we don't have to special case code 174202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elsewhere such as in the TCP_RR-as-bidirectional test case. 174302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 174502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 174802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectformat_number(double number) 174902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 175002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project static char fmtbuf[64]; 175102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 175202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (libfmt) { 175302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'K': 175402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f" , number / 1024.0); 175502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 175602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 175702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number / 1024.0 / 1024.0); 175802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 175902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'G': 176002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number / 1024.0 / 1024.0 / 1024.0); 176102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 176202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'k': 176302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number * 8 / 1000.0); 176402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 176502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 176602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number * 8 / 1000.0 / 1000.0); 176702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 176802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'g': 176902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number * 8 / 1000.0 / 1000.0 / 1000.0); 177002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 177102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'x': 177202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number); 177302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 177402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 177502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(fmtbuf, sizeof(fmtbuf), "%-7.2f", number / 1024.0); 177602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 177702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 177802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return fmtbuf; 177902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 178002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar 178202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectformat_cpu_method(int method) 178302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 178402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char method_char; 178602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (method) { 178802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case CPU_UNKNOWN: 178902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'U'; 179002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 179102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case HP_IDLE_COUNTER: 179202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'I'; 179302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 179402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case PSTAT: 179502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'P'; 179602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 179702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case KSTAT: 179802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'K'; 179902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 180002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case KSTAT_10: 180102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'M'; 180202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 180302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case PERFSTAT: 180402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'E'; 180502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 180602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case TIMES: /* historical only, completely unsuitable 180702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for netperf's purposes */ 180802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'T'; 180902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 181002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case GETRUSAGE: /* historical only, completely unsuitable 181102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for netperf;s purposes */ 181202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'R'; 181302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 181402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case LOOPER: 181502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'L'; 181602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 181702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case NT_METHOD: 181802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'N'; 181902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 182002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case PROC_STAT: 182102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'S'; 182202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 182302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case SYSCTL: 182402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'C'; 182502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 182602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case OSX: 182702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = 'O'; 182802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 182902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 183002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project method_char = '?'; 183102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 183202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return method_char; 183402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 183602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 183802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectformat_units() 183902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 184002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project static char unitbuf[64]; 184102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (libfmt) { 184302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'K': 184402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "KBytes"); 184502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 184602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 184702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "MBytes"); 184802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 184902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'G': 185002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "GBytes"); 185102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 185202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'k': 185302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "10^3bits"); 185402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 185502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 185602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "10^6bits"); 185702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 185802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'g': 185902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "10^9bits"); 186002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 186102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'x': 186202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "Trans"); 186302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 186402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 186502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 186602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(unitbuf, "KBytes"); 186702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 186802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 186902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return unitbuf; 187002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 187102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 187202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 187302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 187402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 187502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* shutdown_control() */ 187602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 187702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* tear-down the control connection between me and the server. */ 187802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 187902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 188002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 188102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectshutdown_control() 188202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 188302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 188402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *buf = (char *)&netperf_response; 188502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int buflen = sizeof(netperf_response); 188602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 188702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* stuff for select, use fd_set for better compliance */ 188802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fd_set readfds; 188902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval timeout; 189002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 189202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 189302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "shutdown_control: shutdown of control connection requested.\n"); 189402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 189502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 189602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first, we say that we will be sending no more data on the */ 189802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connection */ 189902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (shutdown(netlib_control,1) == SOCKET_ERROR) { 190002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Print_errno(where, 190102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "shutdown_control: error in shutdown"); 190202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 190302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 190402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 190502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 190602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we hang on a select waiting for the socket to become */ 190702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* readable to receive the shutdown indication from the remote. this */ 190802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will be "just" like the recv_response() code */ 190902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we only select once. it is assumed that if the response is split */ 191102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (which should not be happening, that we will receive the whole */ 191202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* thing and not have a problem ;-) */ 191302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FD_ZERO(&readfds); 191502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FD_SET(netlib_control,&readfds); 191602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_sec = 60; /* wait one minute then punt */ 191702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_usec = 0; 191802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* select had better return one, or there was either a problem or a */ 192002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timeout... */ 192102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (select(FD_SETSIZE, 192202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &readfds, 192302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 192402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 192502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &timeout) != 1) { 192602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Print_errno(where, 192702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "shutdown_control: no response received"); 192802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 192902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 193002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 193102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we now assume that the socket has come ready for reading */ 193302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv(netlib_control, buf, buflen,0); 193402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 193602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 193802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_to_specific_processor will bind the calling process to the 193902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project processor in "processor" It has lots of ugly ifdefs to deal with 194002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project all the different ways systems do processor affinity. this is a 194102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project generalization of work initially done by stephen burger. raj 194202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2004/12/13 */ 194302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 194502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbind_to_specific_processor(int processor_affinity, int use_cpu_map) 194602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 194702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int mapped_affinity; 194902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 195002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is in place because the netcpu_looper processor affinity 195102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ass-u-me-s a contiguous CPU id space starting with 0. for the 195202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project regular netperf/netserver affinity, we ass-u-me the user has used 195302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project a suitable CPU id even when the space is not contiguous and 195402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project starting from zero */ 195502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (use_cpu_map) { 195602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mapped_affinity = lib_cpu_map[processor_affinity]; 195702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 195802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 195902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mapped_affinity = processor_affinity; 196002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 196102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 196202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_MPCTL 196302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indeed, at some point it would be a good idea to check the return 196402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project status and pass-along notification of error... raj 2004/12/13 */ 196502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project mpctl(MPC_SETPROCESS_FORCE, mapped_affinity, getpid()); 196602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif HAVE_PROCESSOR_BIND 196702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 196802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/processor.h> 196902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/procset.h> 197002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project processor_bind(P_PID,P_MYID,mapped_affinity,NULL); 197102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif HAVE_BINDPROCESSOR 197202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/processor.h> 197302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is the call on AIX. It takes a "what" of BINDPROCESS or 197402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project BINDTHRAD, then "who" and finally "where" which is a CPU number 197502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project or it seems PROCESSOR_CLASS_ANY there also seems to be a mycpu() 197602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project call to return the current CPU assignment. this is all based on 197702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the sys/processor.h include file. from empirical testing, it 197802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project would seem that the my_cpu() call returns the current CPU on 197902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project which we are running rather than the CPU binding, so it's return 198002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project value will not tell you if you are bound vs unbound. */ 198102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bindprocessor(BINDPROCESS,getpid(),(cpu_t)mapped_affinity); 198202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif HAVE_SCHED_SETAFFINITY 198302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sched.h> 198402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in theory this should cover systems with more CPUs than bits in a 198502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long, without having to specify __USE_GNU. we "cheat" by taking 198602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project defines from /usr/include/bits/sched.h, which we ass-u-me is 198702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project included by <sched.h>. If they are not there we will just 198802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fall-back on what we had before, which is to use just the size of 198902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project an unsigned long. raj 2006-09-14 */ 199002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 199102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(__CPU_SETSIZE) 199202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_SETSIZE __CPU_SETSIZE 199302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_SET(cpu, cpusetp) __CPU_SET(cpu, cpusetp) 199402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_ZERO(cpusetp) __CPU_ZERO (cpusetp) 199502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project typedef cpu_set_t netperf_cpu_set_t; 199602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 199702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_SETSIZE sizeof(unsigned long) 199802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_SET(cpu, cpusetp) *cpusetp = 1 << cpu 199902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define NETPERF_CPU_ZERO(cpusetp) *cpusetp = (unsigned long)0 200002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project typedef unsigned long netperf_cpu_set_t; 200102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 200202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 200302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_cpu_set_t netperf_cpu_set; 200402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int len = sizeof(netperf_cpu_set); 200502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 200602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (mapped_affinity < 8*sizeof(netperf_cpu_set)) { 200702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project NETPERF_CPU_ZERO(&netperf_cpu_set); 200802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project NETPERF_CPU_SET(mapped_affinity,&netperf_cpu_set); 200902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 201002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sched_setaffinity(getpid(), len, &netperf_cpu_set)) { 201102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 201202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr, "failed to set PID %d's CPU affinity errno %d\n", 201302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project getpid(),errno); 201402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 201502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 201602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 201702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 201802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 201902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 202002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr, 202102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "CPU number larger than pre-compiled limits. Consider a recompile.\n"); 202202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 202302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 202402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 202502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 202602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif HAVE_BIND_TO_CPU_ID 202702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is the one for Tru64 */ 202802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 202902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/resource.h> 203002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/processor.h> 203102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 203202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* really should be checking a return code one of these days. raj 203302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2005/08/31 */ 203402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 203502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_to_cpu_id(getpid(), mapped_affinity,0); 203602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 203702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif WIN32 203802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 203902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 204002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ULONG_PTR AffinityMask; 204102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ULONG_PTR ProcessAffinityMask; 204202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ULONG_PTR SystemAffinityMask; 204302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 204402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((mapped_affinity < 0) || 204502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (mapped_affinity > MAXIMUM_PROCESSORS)) { 204602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 204702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Invalid processor_affinity specified: %d\n", mapped_affinity); fflush(where); 204802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return; 204902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 205002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 205102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!GetProcessAffinityMask( 205202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetCurrentProcess(), 205302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &ProcessAffinityMask, 205402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &SystemAffinityMask)) 205502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 205602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("GetProcessAffinityMask failed"); 205702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 205802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 205902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 206002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project AffinityMask = (ULONG_PTR)1 << mapped_affinity; 206202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (AffinityMask & ProcessAffinityMask) { 206402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!SetThreadAffinityMask( GetCurrentThread(), AffinityMask)) { 206502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("SetThreadAffinityMask failed"); 206602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 206702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 206802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else if (debug) { 206902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 207002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Processor affinity set to CPU# %d\n", mapped_affinity); 207102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 207202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 207302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 207402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 207502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 207602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 207702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 207802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Processor affinity not available for this platform!\n"); 207902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 208002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 208102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 208202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 208302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 208602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * Sets a socket to non-blocking operation. 208702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 208802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 208902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectset_nonblock (SOCKET sock) 209002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 209102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 209202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned long flags = 1; 209302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (ioctlsocket(sock, FIONBIO, &flags) != SOCKET_ERROR); 209402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 209502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (fcntl(sock, F_SETFL, O_NONBLOCK) != -1); 209602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 209702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 209802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 209902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 210002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 210102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 210202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 210302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_request() */ 210402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 210502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send a netperf request on the control socket to the remote half of */ 210602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the connection. to get us closer to intervendor interoperability, */ 210702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we will call htonl on each of the int that compose the message to */ 210802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be sent. the server-half of the connection will call the ntohl */ 210902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* routine to undo any changes that may have been made... */ 211002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 211102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 211202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 211402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_request() 211502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 21161a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn size_t counter=0; 211702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the contents of the request if the debug level is high */ 211902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* enough. otherwise, just send the darned thing ;-) */ 212002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 212202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"entered send_request...contents before htonl:\n"); 212302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_request(); 212402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 212502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* pass the processor affinity request value to netserver */ 212702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is a kludge and I know it. sgb 8/11/04 */ 212802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.dummy = remote_proc_affinity; 213002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* put the entire request array into network order. We do this */ 213202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* arbitrarily rather than trying to figure-out just how much */ 213302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the request array contains real information. this should */ 213402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be simpler, and at any rate, the performance of sending */ 213502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control messages for this benchmark is not of any real */ 213602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* concern. */ 213702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (counter=0;counter < sizeof(netperf_request)/4; counter++) { 213902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter] = htonl(request_array[counter]); 214002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 214102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 214302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_request...contents after htonl:\n"); 214402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_request(); 214502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 21471a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn "\nsend_request: about to send %zu bytes from %p\n", 214802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(netperf_request), 214902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &netperf_request); 215002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 215102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 215202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send(netlib_control, 215402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&netperf_request, 215502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(netperf_request), 215602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0) != sizeof(netperf_request)) { 215702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_request: send call failure"); 215802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 216002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 216102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 216202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 216302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/***********************************************************************/ 216402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 216502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_response() */ 216602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 216702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send a netperf response on the control socket to the remote half of */ 216802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the connection. to get us closer to intervendor interoperability, */ 216902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we will call htonl on each of the int that compose the message to */ 217002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be sent. the other half of the connection will call the ntohl */ 217102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* routine to undo any changes that may have been made... */ 217202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 217302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 217402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 217502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 217602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_response() 217702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 21781a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn size_t counter=0; 217902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_sent; 218002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display the contents of the request if the debug level is high */ 218202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* enough. otherwise, just send the darned thing ;-) */ 218302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 218502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 21861a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn "send_response: contents of %zu ints before htonl\n", 218702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(netperf_response)/4); 218802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_response(); 218902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 219002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 219102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* put the entire response_array into network order. We do this */ 219202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* arbitrarily rather than trying to figure-out just how much of the */ 219302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* request array contains real information. this should be simpler, */ 219402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and at any rate, the performance of sending control messages for */ 219502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this benchmark is not of any real concern. */ 219602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 219702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (counter=0;counter < sizeof(netperf_response)/4; counter++) { 219802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter] = htonl(response_array[counter]); 219902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 220002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 220202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 220302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "send_response: contents after htonl\n"); 220402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_response(); 220502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 22061a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn "about to send %zu bytes from %p\n", 220702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(netperf_response), 220802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &netperf_response); 220902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 221002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 221102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*KC*/ 221302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((bytes_sent = send(server_sock, 221402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&netperf_response, 221502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(netperf_response), 221602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != sizeof(netperf_response)) { 221702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_response: send call failure"); 221802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "BytesSent: %d\n", bytes_sent); 221902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 222002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 222102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 222202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 222302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 222402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 222502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 222602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* recv_request() */ 222702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 222802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the remote's request on the control socket. we will put */ 222902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the entire response into host order before giving it to the */ 223002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calling routine. hopefully, this will go most of the way to */ 223102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* insuring intervendor interoperability. if there are any problems, */ 223202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we will just punt the entire situation. */ 223302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 223402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 223502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 223602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 223702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_request() 223802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 223902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint tot_bytes_recvd, 224002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_recvd, 224102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left; 224202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *buf = (char *)&netperf_request; 224302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint buflen = sizeof(netperf_request); 22441a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzynsize_t counter; 224502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 224602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttot_bytes_recvd = 0; 224702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_recvd = 0; /* nt_lint; bytes_recvd uninitialized if buflen == 0 */ 224802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes_left = buflen; 224902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectwhile ((tot_bytes_recvd != buflen) && 225002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((bytes_recvd = recv(server_sock, buf, bytes_left,0)) > 0 )) { 225102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd += bytes_recvd; 225202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project buf += bytes_recvd; 225302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left -= bytes_recvd; 225402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 225502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* put the request into host order */ 225702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfor (counter = 0; counter < sizeof(netperf_request)/sizeof(int); counter++) { 225902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_array[counter] = ntohl(request_array[counter]); 226002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 226102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (debug) { 226302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 226402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_request: received %d bytes of request.\n", 226502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd); 226602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 226702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 226802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (bytes_recvd == SOCKET_ERROR) { 227002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Print_errno(where, 227102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_request: error on recv"); 227202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 227302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 227402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 227502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 227602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (bytes_recvd == 0) { 227702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the remote has shutdown the control connection, we should shut it */ 227802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* down as well and exit */ 227902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 228002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 228102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 228202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_request: remote requested shutdown of control\n"); 228302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 228402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 228502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 228602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (netlib_control != INVALID_SOCKET) { 228702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project shutdown_control(); 228802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 228902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(0); 229002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 229102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (tot_bytes_recvd < buflen) { 229302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) 229402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_request(); 229502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 229702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_request: partial request received of %d bytes\n", 229802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd); 229902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 230002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 230102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 230202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 230402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_request(); 230502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 230602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* get the processor affinity request value from netperf */ 230802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is a kludge and I know it. sgb 8/11/04 */ 230902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_proc_affinity = netperf_request.content.dummy; 231102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_proc_affinity != -1) { 231302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_to_specific_processor(local_proc_affinity,0); 231402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 231502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 231702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 231902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response_timed() 232102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive the remote's response on the control socket. we will put the 232302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project entire response into host order before giving it to the calling 232402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project routine. hopefully, this will go most of the way to insuring 232502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project intervendor interoperability. if there are any problems, we will just 232602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project punt the entire situation. 232702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project The call to select at the beginning is to get us out of hang 232902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project situations where the remote gives-up but we don't find-out about 233002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project it. This seems to happen only rarely, but it would be nice to be 233102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project somewhat robust ;-) 233202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 233302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project The "_timed" part is to allow the caller to add (or I suppose 233402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project subtract) from the length of timeout on the select call. this was 233502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project added since not all the CPU utilization mechanisms require a 40 233602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project second calibration, and we used to have an aribtrary 40 second sleep 233702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project in "calibrate_remote_cpu" - since we don't _always_ need that, we 233802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project want to simply add 40 seconds to the select() timeout from that call, 233902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project but don't want to change all the "recv_response" calls in the code 234002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project right away. sooo, we push the functionality of the old 234102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response() into a new recv_response_timed(addl_timout) call, and 234202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project have recv_response() call recv_response_timed(0). raj 2005-05-16 234302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 234502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 234802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_response_timed(int addl_time) 234902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 235002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint tot_bytes_recvd, 235102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_recvd = 0, 235202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left; 235302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *buf = (char *)&netperf_response; 235402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint buflen = sizeof(netperf_response); 23551a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzynsize_t counter; 235602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* stuff for select, use fd_set for better compliance */ 235802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfd_set readfds; 235902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct timeval timeout; 236002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttot_bytes_recvd = 0; 236202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes_left = buflen; 236302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* zero out the response structure */ 236502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* BUG FIX SJB 2/4/93 - should be < not <= */ 236702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfor (counter = 0; counter < sizeof(netperf_response)/sizeof(int); counter++) { 236802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter] = 0; 236902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 237002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we only select once. it is assumed that if the response is split */ 237202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (which should not be happening, that we will receive the whole */ 237302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* thing and not have a problem ;-) */ 237402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFD_ZERO(&readfds); 237602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFD_SET(netlib_control,&readfds); 237702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttimeout.tv_sec = 120 + addl_time; /* wait at least two minutes 237802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project before punting - the USE_LOOPER 237902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project CPU stuff may cause remote's to 238002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project have a bit longer time of it 238102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project than 60 seconds would allow. 238202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project triggered by fix from Jeff 238302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Dwork. */ 238402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttimeout.tv_usec = 0; 238502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* select had better return one, or there was either a problem or a */ 238702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timeout... */ 238802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif ((counter = select(FD_SETSIZE, 239002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &readfds, 239102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 239202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 239302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &timeout)) != 1) { 239402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 23951a75dd02e272ea1aa1dbee9ae60c8f73a9e3d67fMark Salyzyn "netperf: receive_response: no response received. errno %d counter %zu\n", 239602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 239702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter); 239802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 239902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 240002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectwhile ((tot_bytes_recvd != buflen) && 240202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((bytes_recvd = recv(netlib_control, buf, bytes_left,0)) > 0 )) { 240302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd += bytes_recvd; 240402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project buf += bytes_recvd; 240502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_left -= bytes_recvd; 240602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 240702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (debug) { 240902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_response: received a %d byte response\n", 241002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd); 241102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 241202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 241302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* put the response into host order */ 241502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfor (counter = 0; counter < sizeof(netperf_response)/sizeof(int); counter++) { 241702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project response_array[counter] = ntohl(response_array[counter]); 241802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 241902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 242002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (bytes_recvd == SOCKET_ERROR) { 242102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("recv_response"); 242202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 242302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 242402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (tot_bytes_recvd < buflen) { 242502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr, 242602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_response: partial response received: %d bytes\n", 242702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tot_bytes_recvd); 242802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 242902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) 243002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_response(); 243102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 243202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 243302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (debug > 1) { 243402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_response(); 243502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 243602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 243702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 243802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 243902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_response() 244002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 244102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response_timed(0); 244202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 244302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(USE_PSTAT) || defined (USE_SYSCTL) 244702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 244802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecthi_32(big_int) 244902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long long *big_int; 245002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 245102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project union overlay_u { 245202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long long dword; 245302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long words[2]; 245402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } *overlay; 245502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 245602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project overlay = (union overlay_u *)big_int; 245702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on those systems which are byte swapped, we really wish to */ 245802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return words[1] - at least I think so - raj 4/95 */ 245902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (htonl(1L) == 1L) { 246002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are a "normal" :) machine */ 246102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(overlay->words[0]); 246202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 246302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 246402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(overlay->words[1]); 246502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 246602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 246702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 246802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 246902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectlo_32(big_int) 247002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long long *big_int; 247102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 247202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project union overlay_u { 247302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long long dword; 247402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long words[2]; 247502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } *overlay; 247602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 247702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project overlay = (union overlay_u *)big_int; 247802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on those systems which are byte swapped, we really wish to */ 247902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return words[0] - at least I think so - raj 4/95 */ 248002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (htonl(1L) == 1L) { 248102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are a "normal" :) machine */ 248202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(overlay->words[1]); 248302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 248402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 248502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(overlay->words[0]); 248602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 248702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 248802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 248902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* USE_PSTAT || USE_SYSCTL */ 249002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid libmain() 249302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 249402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"hello world\n"); 249502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"debug: %d\n",debug); 249602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 249702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 250002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectset_sock_buffer (SOCKET sd, enum sock_buffer which, int requested_size, int *effective_sizep) 250102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 250202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_SNDBUF 250302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int optname = (which == SEND_BUFFER) ? SO_SNDBUF : SO_RCVBUF; 250402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_socklen_t sock_opt_len; 250502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 250602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* seems that under Windows, setting a value of zero is how one 250702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tells the stack you wish to enable copy-avoidance. Knuth only 250802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project knows what it will do on other stacks, but it might be 250902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project interesting to find-out, so we won't bother #ifdef'ing the change 251002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project to allow asking for 0 bytes. Courtesy of SAF, 2007-05 raj 251102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2007-05-31 */ 251202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (requested_size >= 0) { 251302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (setsockopt(sd, SOL_SOCKET, optname, 251402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&requested_size, sizeof(int)) < 0) { 251502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "netperf: set_sock_buffer: %s option: errno %d\n", 251602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (which == SEND_BUFFER) ? "SO_SNDBUF" : "SO_RCVBUF", 251702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 251802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 251902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 252002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 252102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 252202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "netperf: set_sock_buffer: %s of %d requested.\n", 252302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (which == SEND_BUFFER) ? "SO_SNDBUF" : "SO_RCVBUF", 252402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requested_size); 252502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 252602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 252702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 252802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 252902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 253002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 253102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 253202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 253302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sock_opt_len = sizeof(netperf_socklen_t); 253402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getsockopt(sd, SOL_SOCKET, optname, (char *)effective_sizep, 253502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sock_opt_len) < 0) { 253602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "netperf: set_sock_buffer: getsockopt %s: errno %d\n", 253702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (which == SEND_BUFFER) ? "SO_SNDBUF" : "SO_RCVBUF", errno); 253802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 253902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *effective_sizep = -1; 254002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 254202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 254302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "netperf: set_sock_buffer: " 254402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%s socket size determined to be %d\n", 254502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (which == SEND_BUFFER) ? "send" : "receive", *effective_sizep); 254602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 254702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* SO_SNDBUF */ 254902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *effective_size = -1; 255002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* SO_SNDBUF */ 255102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 255202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 255402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdump_addrinfo(FILE *dumploc, struct addrinfo *info, 255502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *host, char *port, int family) 255602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 255702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sockaddr *ai_addr; 255802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *temp; 255902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp=info; 256002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 256102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, "getaddrinfo returned the following for host '%s' ", host); 256202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, "port '%s' ", port); 256302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, "family %s\n", inet_ftos(family)); 256402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (temp) { 256502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* seems that Solaris 10 GA bits will not give a canonical name 256602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for ::0 or 0.0.0.0, and their fprintf() cannot deal with a null 256702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pointer, so we have to check for a null pointer. probably a 256802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project safe thing to do anyway, eventhough it was not necessary on 256902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project linux or hp-ux. raj 2005-02-09 */ 257002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp->ai_canonname) { 257102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, 257202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "\tcannonical name: '%s'\n",temp->ai_canonname); 257302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 257402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 257502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, 257602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "\tcannonical name: '%s'\n","(nil)"); 257702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 257802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, 257902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "\tflags: %x family: %s: socktype: %s protocol %s addrlen %d\n", 258002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp->ai_flags, 258102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(temp->ai_family), 258202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ttos(temp->ai_socktype), 258302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ptos(temp->ai_protocol), 258402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp->ai_addrlen); 258502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ai_addr = temp->ai_addr; 258602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (ai_addr != NULL) { 258702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(dumploc, 258802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "\tsa_family: %s sadata: %d %d %d %d %d %d\n", 258902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(ai_addr->sa_family), 259002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[0], 259102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[1], 259202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[2], 259302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[3], 259402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[4], 259502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (u_char)ai_addr->sa_data[5]); 259602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 259702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp = temp->ai_next; 259802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 259902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(dumploc); 260002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 260102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 260202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* 260302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project establish_control() 260402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 260502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectset-up the control connection between netperf and the netserver so we 260602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcan actually run some tests. if we cannot establish the control 260702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectconnection, that may or may not be a good thing, so we will let the 260802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcaller decide what to do. 260902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 261002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectto assist with pesky end-to-end-unfriendly things like firewalls, we 261102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectallow the caller to specify both the remote hostname and port, and the 261202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectlocal addressing info. i believe that in theory it is possible to 261302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecthave an IPv4 endpoint and an IPv6 endpoint communicate with one 261402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectanother, but for the time being, we are only going to take-in one 261502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrequested address family parameter. this means that the only way 261602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project(iirc) that we might get a mixed-mode connection would be if the 261702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectaddress family is specified as AF_UNSPEC, and getaddrinfo() returns 261802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdifferent families for the local and server names. 261902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectthe "names" can also be IP addresses in ASCII string form. 262102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectraj 2003-02-27 */ 262302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSOCKET 262502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectestablish_control_internal(char *hostname, 262602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *port, 262702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int remfam, 262802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *localhost, 262902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *localport, 263002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int locfam) 263102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 263202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int not_connected; 263302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET control_sock; 263402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int count; 263502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int error; 263602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 263702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo hints; 263802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 263902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *remote_res; 264002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res_temp; 264102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *remote_res_temp; 264202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 264302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 264402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 264502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "establish_control called with host '%s' port '%s' remfam %s\n", 264602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hostname, 264702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port, 264802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(remfam)); 264902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 265002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "\t\tlocal '%s' port '%s' locfam %s\n", 265102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost, 265202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localport, 265302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(locfam)); 265402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 265502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 265602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 265702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first, we do the remote */ 265802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project memset(&hints, 0, sizeof(hints)); 265902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_family = remfam; 266002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_socktype = SOCK_STREAM; 266102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_protocol = IPPROTO_TCP; 266202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_flags = 0|AI_CANONNAME; 266302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project count = 0; 266402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do { 266502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error = getaddrinfo((char *)hostname, 266602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)port, 266702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &hints, 266802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_res); 266902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project count += 1; 267002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (error == EAI_AGAIN) { 267102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 267202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Sleeping on getaddrinfo EAI_AGAIN\n"); 267302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 267402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 267502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep(1); 267602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 267702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } while ((error == EAI_AGAIN) && (count <= 5)); 267802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 267902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (error) { 268002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("establish control: could not resolve remote '%s' port '%s' af %s", 268102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hostname, 268202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port, 268302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(remfam)); 268402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("\n\tgetaddrinfo returned %d %s\n", 268502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error, 268602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gai_strerror(error)); 268702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(INVALID_SOCKET); 268802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 268902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 269002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 269102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_addrinfo(where, remote_res, hostname, port, remfam); 269202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 269302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 269402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now we do the local */ 269502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project memset(&hints, 0, sizeof(hints)); 269602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_family = locfam; 269702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_socktype = SOCK_STREAM; 269802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_protocol = IPPROTO_TCP; 269902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hints.ai_flags = AI_PASSIVE|AI_CANONNAME; 270002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project count = 0; 270102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project do { 270202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project count += 1; 270302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error = getaddrinfo((char *)localhost, 270402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)localport, 270502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &hints, 270602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_res); 270702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (error == EAI_AGAIN) { 270802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 270902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 271002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Sleeping on getaddrinfo(%s,%s) EAI_AGAIN count %d \n", 271102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost, 271202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localport, 271302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project count); 271402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 271502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 271602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep(1); 271702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 271802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } while ((error == EAI_AGAIN) && (count <= 5)); 271902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 272002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (error) { 272102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("establish control: could not resolve local '%s' port '%s' af %s", 272202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost, 272302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localport, 272402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project inet_ftos(locfam)); 272502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("\n\tgetaddrinfo returned %d %s\n", 272602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project error, 272702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gai_strerror(error)); 272802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(INVALID_SOCKET); 272902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 273102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 273202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dump_addrinfo(where, local_res, localhost, localport, locfam); 273302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 273502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project not_connected = 1; 273602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res_temp = local_res; 273702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res_temp = remote_res; 273802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to loop through all the possibilities. looping on the 273902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local addresses will be handled within the while loop. I suppose 274002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project these is some more "C-expert" way to code this, but it has not 274102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lept to mind just yet :) raj 2003-02024 */ 274202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 274302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (remote_res_temp != NULL) { 274402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 274502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I am guessing that we should use the address family of the 274602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local endpoint, and we will not worry about mixed family types 274702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project - presumeably the stack or other transition mechanisms will be 274802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project able to deal with that for us. famous last words :) raj 2003-02-26 */ 274902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project control_sock = socket(local_res_temp->ai_family, 275002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 275102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 275202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (control_sock == INVALID_SOCKET) { 275302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at some point we'll need a more generic "display error" 275402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message for when/if we use GUIs and the like. unlike a bind 275502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project or connect failure, failure to allocate a socket is 275602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "immediately fatal" and so we return to the caller. raj 2003-02-24 */ 275702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 275802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("establish_control: unable to allocate control socket"); 275902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 276002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(INVALID_SOCKET); 276102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 276202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 276302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if we are going to control the local enpoint addressing, we 276402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project need to call bind. of course, we should probably be setting one 276502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of the SO_REUSEmumble socket options? raj 2005-02-04 */ 276602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (bind(control_sock, 276702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res_temp->ai_addr, 276802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res_temp->ai_addrlen) == 0) { 276902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 277002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 277102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "bound control socket to %s and %s\n", 277202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost, 277302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localport); 277402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 277502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (connect(control_sock, 277702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res_temp->ai_addr, 277802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res_temp->ai_addrlen) == 0) { 277902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have successfully connected to the remote netserver */ 278002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 278102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 278202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "successful connection to remote netserver at %s and %s\n", 278302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hostname, 278402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port); 278502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 278602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project not_connected = 0; 278702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this should get us out of the while loop */ 278802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 278902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else { 279002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the connect call failed */ 279102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 279202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 279302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "establish_control: connect failed, errno %d %s\n", 279402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 279502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strerror(errno)); 279602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, " trying next address combination\n"); 279702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 279802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 279902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 280202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the bind failed */ 280302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 280402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 280502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "establish_control: bind failed, errno %d %s\n", 280602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 280702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strerror(errno)); 280802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, " trying next address combination\n"); 280902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 281002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 281102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 281202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 281302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((local_res_temp = local_res_temp->ai_next) == NULL) { 281402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* wrap the local and move to the next server, don't forget to 281502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close the current control socket. raj 2003-02-24 */ 281602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res_temp = local_res; 281702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the outer while conditions will deal with the case when we 281802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project get to the end of all the possible remote addresses. */ 281902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res_temp = remote_res_temp->ai_next; 282002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it is simplest here to just close the control sock. since 282102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project this is not a performance critical section of code, we 282202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project don't worry about overheads for socket allocation or 282302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close. raj 2003-02-24 */ 282402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 282502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(control_sock); 282602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 282702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 282802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we no longer need the addrinfo stuff */ 282902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project freeaddrinfo(local_res); 283002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project freeaddrinfo(remote_res); 283102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 283202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* so, we are either connected or not */ 283302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (not_connected) { 283402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, "establish control: are you sure there is a netserver listening on %s at port %s?\n",hostname,port); 283502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 283602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(INVALID_SOCKET); 283702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 283802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we are connected. we probably want some sort of 283902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project version check with the remote at some point. raj 2003-02-24 */ 284002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(control_sock); 284102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 284202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 284402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectestablish_control(char *hostname, 284502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *port, 284602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int remfam, 284702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *localhost, 284802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *localport, 284902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int locfam) 285002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 285102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 285202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 285302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netlib_control = establish_control_internal(hostname, 285402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port, 285502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remfam, 285602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost, 285702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localport, 285802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project locfam); 285902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (netlib_control == INVALID_SOCKET) { 286002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 286102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "establish_control could not establish the control connection from %s port %s address family %s to %s port %s address family %s\n", 286202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project localhost,localport,inet_ftos(locfam), 286302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project hostname,port,inet_ftos(remfam)); 286402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 286502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(INVALID_SOCKET); 286602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 286702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 286802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 286902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 287002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 287102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 287202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 287302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 287402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* get_id() */ 287502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 287602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Return a string to the calling routine that contains the */ 287702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* identifying information for the host we are running on. This */ 287802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* information will then either be displayed locally, or returned to */ 287902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a remote caller for display there. */ 288002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 288102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 288202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 288302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar * 288402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectget_id() 288502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 288602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project static char id_string[80]; 288702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 288802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar system_name[MAX_COMPUTERNAME_LENGTH+1] ; 288902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectDWORD name_len = MAX_COMPUTERNAME_LENGTH + 1 ; 289002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 289102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstruct utsname system_name; 289202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 289302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 289402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 289502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SYSTEM_INFO SystemInfo; 289602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetSystemInfo( &SystemInfo ) ; 289702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( !GetComputerName(system_name , &name_len) ) 289802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(system_name , "no_name") ; 289902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 290002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (uname(&system_name) <0) { 290102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("identify_local: uname"); 290202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 290302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 290402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 290502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 290602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project snprintf(id_string, sizeof(id_string), 290702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 290802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%-15s%-15s%d.%d%d", 290902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Windows NT", 291002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name , 291102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetVersion() & 0xFF , 291202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project GetVersion() & 0xFF00 , 291302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SystemInfo.dwProcessorType 291402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 291502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 291602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%-15s%-15s%-15s%-15s%-15s", 291702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name.sysname, 291802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name.nodename, 291902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name.release, 292002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name.version, 292102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project system_name.machine 292202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 292302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ); 292402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (id_string); 292502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 292602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 292702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 292802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 292902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 293002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* identify_local() */ 293102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 293202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Display identifying information about the local host to the user. */ 293302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* At first release, this information will be the same as that which */ 293402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is returned by the uname -a command, with the exception of the */ 293502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* idnumber field, which seems to be a non-POSIX item, and hence */ 293602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* non-portable. */ 293702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 293802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 293902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 294002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 294102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectidentify_local() 294202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 294302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 294402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *local_id; 294502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 294602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectlocal_id = get_id(); 294702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 294802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"Local Information \n\ 294902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSysname Nodename Release Version Machine\n"); 295002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"%s\n", 295202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_id); 295302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 295502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 295802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 295902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* identify_remote() */ 296002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 296102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Display identifying information about the remote host to the user. */ 296202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* At first release, this information will be the same as that which */ 296302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* is returned by the uname -a command, with the exception of the */ 296402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* idnumber field, which seems to be a non-POSIX item, and hence */ 296502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* non-portable. A request is sent to the remote side, which will */ 296602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return a string containing the utsname information in a */ 296702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* pre-formatted form, which is then displayed after the header. */ 296802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 296902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /***********************************************************************/ 297002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 297102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 297202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectidentify_remote() 297302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 297402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 297502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar *remote_id=""; 297602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 297702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send a request for node info to the remote */ 297802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectnetperf_request.content.request_type = NODE_IDENTIFY; 297902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_request(); 298102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* and now wait for the reply to come back */ 298302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_response(); 298502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectif (netperf_response.content.serv_errno) { 298702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 298802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("identify_remote: on remote"); 298902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 299002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 299102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"Remote Information \n\ 299302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSysname Nodename Release Version Machine\n"); 299402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfprintf(where,"%s", 299602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_id); 299702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 299802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 300002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_start(int measure_cpu) 300102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 300202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 300302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gettimeofday(&time1, 300402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &tz); 300502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 300602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (measure_cpu) { 300702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_util_init(); 300802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measuring_cpu = 1; 300902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_method = get_cpu_method(); 301002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start_internal(); 301102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 301202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 301302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 301602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_stop(int measure_cpu, float *elapsed) 301702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 301902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sec, 302102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usec; 302202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (measure_cpu) { 302402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop_internal(); 302502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_util_terminate(); 302602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 302702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gettimeofday(&time2, 302902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &tz); 303002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 303102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (time2.tv_usec < time1.tv_usec) { 303202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time2.tv_usec += 1000000; 303302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time2.tv_sec -= 1; 303402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 303502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 303602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sec = time2.tv_sec - time1.tv_sec; 303702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usec = time2.tv_usec - time1.tv_usec; 303802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_elapsed = (float)sec + ((float)usec/(float)1000000.0); 303902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *elapsed = lib_elapsed; 304102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 304302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 304602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_thruput_interval(double units_received,double elapsed) 304702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 304902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double divisor; 305002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 305102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We will calculate the thruput in libfmt units/second */ 305202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (libfmt) { 305302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'K': 305402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0; 305502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 305602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 305702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0 * 1024.0; 305802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 305902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'G': 306002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0 * 1024.0 * 1024.0; 306102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 306202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'k': 306302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 / 8.0; 306402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 306502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 306602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 * 1000.0 / 8.0; 306702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 306802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'g': 306902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 * 1000.0 * 1000.0 / 8.0; 307002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 307102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 307302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0; 307402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 307502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (units_received / divisor / elapsed); 307702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 307902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 308102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_thruput(double units_received) 308202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 308402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(calc_thruput_interval(units_received,lib_elapsed)); 308502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 308602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* these "_omni" versions are ones which understand 'x' as a unit, 308802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project meaning transactions/s. we have a separate routine rather than 308902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project convert the existing routine so we don't have to go and change 309002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project _all_ the nettest_foo.c files at one time. raj 2007-06-08 */ 309102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 309302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_thruput_interval_omni(double units_received,double elapsed) 309402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 309602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double divisor; 309702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We will calculate the thruput in libfmt units/second */ 309902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (libfmt) { 310002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'K': 310102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0; 310202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 310302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 310402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0 * 1024.0; 310502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 310602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'G': 310702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0 * 1024.0 * 1024.0; 310802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 310902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'k': 311002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 / 8.0; 311102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 311202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 311302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 * 1000.0 / 8.0; 311402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 311502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'g': 311602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1000.0 * 1000.0 * 1000.0 / 8.0; 311702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 311802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'x': 311902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1.0; 312002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 312102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project default: 312302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 312402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "WARNING calc_throughput_internal_omni: unknown units %c\n", 312502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project libfmt); 312602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 312702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project divisor = 1024.0; 312802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 312902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (units_received / divisor / elapsed); 313102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 313302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 313502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_thruput_omni(double units_received) 313602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 313802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(calc_thruput_interval_omni(units_received,lib_elapsed)); 313902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 314002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat 314602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_cpu_util(float elapsed_time) 314702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 314802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(calc_cpu_util_internal(elapsed_time)); 314902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 315002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat 315202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_service_demand_internal(double unit_divisor, 315302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double units_sent, 315402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time, 315502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float cpu_utilization, 315602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int num_cpus) 315702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 315902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double service_demand; 316102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 316202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 316402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"calc_service_demand called: units_sent = %f\n", 316502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project units_sent); 316602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," elapsed_time = %f\n", 316702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time); 316802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," cpu_util = %f\n", 316902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_utilization); 317002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," num cpu = %d\n", 317102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_cpus); 317202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 317302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 317402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 317502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (num_cpus == 0) num_cpus = lib_num_loc_cpus; 317602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 317702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (elapsed_time == 0.0) { 317802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time = lib_elapsed; 317902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 318002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (cpu_utilization == 0.0) { 318102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_utilization = lib_local_cpu_util; 318202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 318302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = (units_sent / 318502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) unit_divisor / 318602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) elapsed_time); 318702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* on MP systems, it is necessary to multiply the service demand by */ 318902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the number of CPU's. at least, I believe that to be the case:) */ 319002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* raj 10/95 */ 319102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* thruput has a "per second" component. if we were using 100% ( */ 319302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 100.0) of the CPU in a second, that would be 1 second, or 1 */ 319402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* millisecond, so we multiply cpu_utilization by 10 to go to */ 319502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* milliseconds, or 10,000 to go to micro seconds. With revision */ 319602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 2.1, the service demand measure goes to microseconds per unit. */ 319702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* raj 12/95 */ 319802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project service_demand = (cpu_utilization*10000.0/thruput) * 319902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (float) num_cpus; 320002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 320102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 320202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"calc_service_demand using: units_sent = %f\n", 320302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project units_sent); 320402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," elapsed_time = %f\n", 320502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time); 320602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," cpu_util = %f\n", 320702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_utilization); 320802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," num cpu = %d\n", 320902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_cpus); 321002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"calc_service_demand got: thruput = %f\n", 321102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput); 321202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," servdem = %f\n", 321302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project service_demand); 321402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 321502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 321602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (float)service_demand; 321702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 321802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 321902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat calc_service_demand(double units_sent, 322002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time, 322102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float cpu_utilization, 322202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int num_cpus) 322302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 322502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double unit_divisor = (double)1024.0; 322702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(calc_service_demand_internal(unit_divisor, 322902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project units_sent, 323002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 323102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_utilization, 323202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_cpus)); 323302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 323402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 323502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat calc_service_demand_trans(double units_sent, 323602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time, 323702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float cpu_utilization, 323802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int num_cpus) 323902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 324002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 324102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 324202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double unit_divisor = (double)1.0; 324302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 324402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(calc_service_demand_internal(unit_divisor, 324502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project units_sent, 324602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 324702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_utilization, 324802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_cpus)); 324902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 325002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat 325402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalibrate_local_cpu(float local_cpu_rate) 325502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 325602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_num_loc_cpus = get_num_cpus(); 325802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_use_idle = 0; 326002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef USE_LOOPER 326102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_util_init(); 326202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_use_idle = 1; 326302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* USE_LOOPER */ 326402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 326502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_rate > 0) { 326602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user think that he knows what the cpu rate is. We assume */ 326702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that all the processors of an MP system are essentially the */ 326802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* same - for this reason we do not have a per processor maxrate. */ 326902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if the machine has processors which are different in */ 327002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* performance, the CPU utilization will be skewed. raj 4/95 */ 327102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_maxrate = local_cpu_rate; 327202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 327302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 327402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if neither USE_LOOPER nor USE_PSTAT are defined, we return a */ 327502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 0.0 to indicate that times or getrusage should be used. raj */ 327602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 4/95 */ 327702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_maxrate = (float)0.0; 327802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(USE_PROC_STAT) || defined(USE_LOOPER) || defined(USE_PSTAT) || defined(USE_KSTAT) || defined(USE_PERFSTAT) || defined(USE_SYSCTL) 327902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lib_local_maxrate = calibrate_idle_rate(4,10); 328002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 328102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 328202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return lib_local_maxrate; 328302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 328402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat 328702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalibrate_remote_cpu() 328802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 328902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remrate; 329002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 329102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = CPU_CALIBRATE; 329202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 329302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we know that calibration will last at least 40 seconds, so go to */ 329402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sleep for that long so the 60 second select in recv_response will */ 329502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not pop. raj 7/95 */ 329602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 329702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we know that CPU calibration may last as long as 40 seconds, so 329802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project make sure we "select" for at least that long while looking for 329902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the response. raj 2005-05-16 */ 330002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response_timed(40); 330102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (netperf_response.content.serv_errno) { 330302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initially, silently ignore remote errors and pass */ 330402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back a zero to the caller this should allow us to */ 330502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* mix rev 1.0 and rev 1.1 netperfs... */ 330602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return((float)0.0); 330702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 330802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 330902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the rate is the first word of the test_specific data */ 331002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)netperf_response.content.test_specific_data, 331102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&remrate, 331202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(remrate)); 331302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)netperf_response.content.test_specific_data + sizeof(remrate), 331402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)&lib_num_rem_cpus, 331502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sizeof(lib_num_rem_cpus)); 331602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* remrate = (float) netperf_response.content.test_specific_data[0]; */ 331702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(remrate); 331802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 331902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 332002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef WIN32 332202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* WIN32 requires that at least one of the file sets to select be non-null. */ 332302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* Since msec_sleep routine is only called by nettest_dlpi & nettest_unix, */ 332402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* let's duck this issue. */ 332502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 332702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectmsec_sleep( int msecs ) 332802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 332902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int rval ; 333002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval timeout; 333202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_sec = msecs / 1000; 333402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_usec = (msecs - (msecs/1000) *1000) * 1000; 333502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((rval = select(0, 333602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 333702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 333802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 333902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &timeout))) { 334002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( SOCKET_EINTR(rval) ) { 334102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(1); 334202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 334302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("msec_sleep: select"); 334402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 334502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 334602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 334702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 334802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 334902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 335102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* hist.c 335202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Given a time difference in microseconds, increment one of 61 335402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project different buckets: 335502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0 - 9 in increments of 1 usec 335702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0 - 9 in increments of 10 usecs 335802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0 - 9 in increments of 100 usecs 335902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1 - 9 in increments of 1 msec 336002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1 - 9 in increments of 10 msecs 336102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1 - 9 in increments of 100 msecs 336202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1 - 9 in increments of 1 sec 336302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1 - 9 in increments of 10 sec 336402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project > 100 secs 336502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 336602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project This will allow any time to be recorded to within an accuracy of 336702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10%, and provides a compact representation for capturing the 336802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project distribution of a large number of time differences (e.g. 336902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request-response latencies). 337002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Colin Low 10/6/93 337202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Rick Jones 2004-06-15 extend to unit and ten usecs 337302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project*/ 337402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* #include "sys.h" */ 337602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*#define HIST_TEST*/ 337802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST 338002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_new(void){ 338102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST h; 338202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((h = (HIST) malloc(sizeof(struct histogram_struct))) == NULL) { 338302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("HIST_new - malloc failed"); 338402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 338502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 338602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_clear(h); 338702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return h; 338802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 338902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 339102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_clear(HIST h){ 339202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 339302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for(i = 0; i < 10; i++){ 339402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->unit_usec[i] = 0; 339502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->ten_usec[i] = 0; 339602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->hundred_usec[i] = 0; 339702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->unit_msec[i] = 0; 339802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->ten_msec[i] = 0; 339902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->hundred_msec[i] = 0; 340002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->unit_sec[i] = 0; 340102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->ten_sec[i] = 0; 340202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 340302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->ridiculous = 0; 340402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->total = 0; 340502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 340602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 340702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 340802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_add(register HIST h, int time_delta){ 340902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project register int val; 341002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->total++; 341102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = time_delta; 341202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->unit_usec[val]++; 341302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 341402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 341502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->ten_usec[val]++; 341602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 341702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 341802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->hundred_usec[val]++; 341902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 342002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 342102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->unit_msec[val]++; 342202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 342302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 342402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->ten_msec[val]++; 342502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 342602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 342702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->hundred_msec[val]++; 342802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 342902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 343002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->unit_sec[val]++; 343102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 343202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project val = val/10; 343302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(val <= 9) h->ten_sec[val]++; 343402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else h->ridiculous++; 343502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 343602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 343702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 343802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 343902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 344002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 344102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 344202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 344302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 344402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define RB_printf printf 344502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 344602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 344702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectoutput_row(FILE *fd, char *title, int *row){ 344802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project register int i; 344902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project RB_printf("%s", title); 345002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for(i = 0; i < 10; i++) RB_printf(": %4d", row[i]); 345102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project RB_printf("\n"); 345202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 345302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 345402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 345502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsum_row(int *row) { 345602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sum = 0; 345702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 345802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < 10; i++) sum += row[i]; 345902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(sum); 346002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 346102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 346202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 346302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_report(HIST h){ 346402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef OLD_HISTOGRAM 346502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "UNIT_USEC ", h->unit_usec); 346602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "TEN_USEC ", h->ten_usec); 346702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "HUNDRED_USEC ", h->hundred_usec); 346802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 346902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->hundred_usec[0] += sum_row(h->unit_usec); 347002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project h->hundred_usec[0] += sum_row(h->ten_usec); 347102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "TENTH_MSEC ", h->hundred_usec); 347202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 347302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "UNIT_MSEC ", h->unit_msec); 347402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "TEN_MSEC ", h->ten_msec); 347502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "HUNDRED_MSEC ", h->hundred_msec); 347602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "UNIT_SEC ", h->unit_sec); 347702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output_row(stdout, "TEN_SEC ", h->ten_sec); 347802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project RB_printf(">100_SECS: %d\n", h->ridiculous); 347902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project RB_printf("HIST_TOTAL: %d\n", h->total); 348002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 348102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 348202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 348302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 348402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* with the advent of sit-and-spin intervals support, we might as well 348502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project make these things available all the time, not just for demo or 348602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project histogram modes. raj 2006-02-06 */ 348702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_GETHRTIME 348802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 348902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 349002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_timestamp(hrtime_t *timestamp) 349102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 349202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *timestamp = gethrtime(); 349302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 349402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 349502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 349602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdelta_micro(hrtime_t *begin, hrtime_t *end) 349702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 349802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project long nsecs; 349902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nsecs = (*end) - (*begin); 350002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(nsecs/1000); 350102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 350202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 350302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(HAVE_GET_HRT) 350402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "hrt.h" 350502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 350602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 350702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_timestamp(hrt_t *timestamp) 350802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 350902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *timestamp = get_hrt(); 351002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 351102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 351302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdelta_micro(hrt_t *begin, hrt_t *end) 351402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 351502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return((int)get_hrt_delta(*end,*begin)); 351702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 351902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#elif defined(WIN32) 352002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid HIST_timestamp(LARGE_INTEGER *timestamp) 352102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 352202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project QueryPerformanceCounter(timestamp); 352302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 352402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 352502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint delta_micro(LARGE_INTEGER *begin, LARGE_INTEGER *end) 352602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 352702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project LARGE_INTEGER DeltaTimestamp; 352802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project static LARGE_INTEGER TickHz = {0,0}; 352902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 353002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (TickHz.QuadPart == 0) 353102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 353202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project QueryPerformanceFrequency(&TickHz); 353302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 353402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 353502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*+*+ Rick; this will overflow after ~2000 seconds, is that 353602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project good enough? Spencer: Yes, that should be more than good 353702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project enough for histogram support */ 353802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 353902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DeltaTimestamp.QuadPart = (end->QuadPart - begin->QuadPart) * 354002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1000000/TickHz.QuadPart; 354102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project assert((DeltaTimestamp.HighPart == 0) && 354202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((int)DeltaTimestamp.LowPart >= 0)); 354302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (int)DeltaTimestamp.LowPart; 354502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 354602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 354802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 355002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectHIST_timestamp(struct timeval *timestamp) 355102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 355202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gettimeofday(timestamp,NULL); 355302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 355402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 355502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return the difference (in micro seconds) between two timeval */ 355602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamps */ 355702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 355802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdelta_micro(struct timeval *begin,struct timeval *end) 355902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 356002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 356102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 356202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int usecs, secs; 356302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 356402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (end->tv_usec < begin->tv_usec) { 356502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* borrow a second from the tv_sec */ 356602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project end->tv_usec += 1000000; 356702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project end->tv_sec--; 356802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 356902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usecs = end->tv_usec - begin->tv_usec; 357002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project secs = end->tv_sec - begin->tv_sec; 357102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project usecs += (secs * 1000000); 357302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(usecs); 357502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 357702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* HAVE_GETHRTIME */ 357802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 358002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI 358102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 358202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 358302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectput_control(fd, len, pri, ack) 358402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd, len, pri, ack; 358502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 358602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int error; 358702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 358802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_error_ack_t *err_ack = (dl_error_ack_t *)control_data; 358902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 359002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project control_message.len = len; 359102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 359202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((error = putmsg(fd, &control_message, 0, pri)) < 0 ) { 359302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"put_control: putmsg error %d\n",error); 359402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 359502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 359602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 359702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((error = getmsg(fd, &control_message, 0, &flags)) < 0) { 359802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"put_control: getsmg error %d\n",error); 359902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 360002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 360102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 360202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (err_ack->dl_primitive != ack) { 360302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"put_control: acknowledgement error wanted %u got %u \n", 360402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ack,err_ack->dl_primitive); 360502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (err_ack->dl_primitive == DL_ERROR_ACK) { 360602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," dl_error_primitive: %u\n", 360702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project err_ack->dl_error_primitive); 360802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," dl_errno: %u\n", 360902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project err_ack->dl_errno); 361002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," dl_unix_errno %u\n", 361102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project err_ack->dl_unix_errno); 361202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 361402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 361502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 361702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 361802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 361902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 362002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 362102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_open(char devfile[], int ppa) 362202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 362302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd; 362402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_attach_req_t *attach_req = (dl_attach_req_t *)control_data; 362502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 362602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((fd = open(devfile, O_RDWR)) == -1) { 362702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: dl_open: open of %s failed, errno = %d\n", 362802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project devfile, 362902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 363002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 363102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 363202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 363302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project attach_req->dl_primitive = DL_ATTACH_REQ; 363402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project attach_req->dl_ppa = ppa; 363502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 363602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (put_control(fd, sizeof(dl_attach_req_t), 0, DL_OK_ACK) < 0) { 363702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 363802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: dl_open: could not send control message, errno = %d\n", 363902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 364002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 364102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 364202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(fd); 364302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 364402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 364502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 364602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_bind(int fd, int sap, int mode, char *dlsap_ptr, int *dlsap_len) 364702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 364802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_bind_req_t *bind_req = (dl_bind_req_t *)control_data; 364902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_bind_ack_t *bind_ack = (dl_bind_ack_t *)control_data; 365002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 365102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_primitive = DL_BIND_REQ; 365202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_sap = sap; 365302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_max_conind = 1; 365402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_service_mode = mode; 365502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_conn_mgmt = 0; 365602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_req->dl_xidtest_flg = 0; 365702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 365802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (put_control(fd, sizeof(dl_bind_req_t), 0, DL_BIND_ACK) < 0) { 365902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 366002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: dl_bind: could not send control message, errno = %d\n", 366102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 366202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 366302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 366402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 366502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, the control_data portion of the control message */ 366602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* structure should contain a DL_BIND_ACK, which will have a full */ 366702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* DLSAP in it. we want to extract this and pass it up so that */ 366802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it can be passed around. */ 366902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (*dlsap_len >= bind_ack->dl_addr_length) { 367002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)bind_ack+bind_ack->dl_addr_offset, 367102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap_ptr, 367202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bind_ack->dl_addr_length); 367302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *dlsap_len = bind_ack->dl_addr_length; 367402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 367502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 367602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 367702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return (-1); 367802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 367902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 368002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 368102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 368202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_connect(int fd, unsigned char *remote_addr, int remote_addr_len) 368302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 368402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_connect_req_t *connection_req = (dl_connect_req_t *)control_data; 368502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_connect_con_t *connection_con = (dl_connect_con_t *)control_data; 368602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct pollfd pinfo; 368702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 368802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 368902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is here on the off chance that we really want some data */ 369102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project u_long data_area[512]; 369202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf data_message; 369302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int error; 369502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_message.maxlen = 2048; 369702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_message.len = 0; 369802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_message.buf = (char *)data_area; 369902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connection_req->dl_primitive = DL_CONNECT_REQ; 370102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connection_req->dl_dest_addr_length = remote_addr_len; 370202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connection_req->dl_dest_addr_offset = sizeof(dl_connect_req_t); 370302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connection_req->dl_qos_length = 0; 370402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connection_req->dl_qos_offset = 0; 370502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy (remote_addr, 370602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (unsigned char *)control_data + sizeof(dl_connect_req_t), 370702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_addr_len); 370802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* well, I would call the put_control routine here, but the sequence */ 371002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of connection stuff with DLPI is a bit screwey with all this */ 371102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message passing - Toto, I don't think were in Berkeley anymore. */ 371202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 371302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project control_message.len = sizeof(dl_connect_req_t) + remote_addr_len; 371402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((error = putmsg(fd,&control_message,0,0)) !=0) { 371502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"dl_connect: putmsg failure, errno = %d, error 0x%x \n", 371602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno,error); 371702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 371802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 371902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 372002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 372102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pinfo.fd = fd; 372202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pinfo.events = POLLIN | POLLPRI; 372302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project pinfo.revents = 0; 372402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 372502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((error = getmsg(fd,&control_message,&data_message,&flags)) != 0) { 372602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"dl_connect: getmsg failure, errno = %d, error 0x%x \n", 372702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno,error); 372802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 372902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 373002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 373102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (control_data[0] == DL_TEST_CON) { 373202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* i suppose we spin until we get an error, or a connection */ 373302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indication */ 373402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((error = getmsg(fd,&control_message,&data_message,&flags)) !=0) { 373502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"dl_connect: getmsg failure, errno = %d, error = 0x%x\n", 373602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno,error); 373702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 373802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 373902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 374002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 374102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 374202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are out - it either worked or it didn't - which was it? */ 374302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (control_data[0] == DL_CONNECT_CON) { 374402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 374502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 374602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 374702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(-1); 374802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 374902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 375002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 375102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 375202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_accept(fd, remote_addr, remote_addr_len) 375302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd; 375402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned char *remote_addr; 375502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int remote_addr_len; 375602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 375702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_connect_ind_t *connect_ind = (dl_connect_ind_t *)control_data; 375802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_connect_res_t *connect_res = (dl_connect_res_t *)control_data; 375902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int tmp_cor; 376002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 376102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 376202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* hang around and wait for a connection request */ 376302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project getmsg(fd,&control_message,0,&flags); 376402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (control_data[0] != DL_CONNECT_IND) { 376502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project getmsg(fd,&control_message,0,&flags); 376602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 376702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 376802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now respond to the request. at some point, we may want to be sure */ 376902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that the connection came from the correct station address, but */ 377002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will assume that we do not have to worry about it just now. */ 377102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 377202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tmp_cor = connect_ind->dl_correlation; 377302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 377402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_primitive = DL_CONNECT_RES; 377502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_correlation = tmp_cor; 377602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_resp_token = 0; 377702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_qos_length = 0; 377802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_qos_offset = 0; 377902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project connect_res->dl_growth = 0; 378002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 378102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(put_control(fd, sizeof(dl_connect_res_t), 0, DL_OK_ACK)); 378202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 378302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 378402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 378502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 378602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_set_window(fd, window) 378702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd, window; 378802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 378902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 379002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 379102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 379202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 379302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_stats(fd) 379402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd; 379502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 379602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 379702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 379802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 379902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_send_disc(fd) 380002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd; 380102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 380202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 380302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 380402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 380502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdl_recv_disc(fd) 380602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int fd; 380702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 380802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 380902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI*/ 381002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 381102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* these routines for confidence intervals are courtesy of IBM. They */ 381202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have been modified slightly for more general usage beyond TCP/UDP */ 381302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* tests. raj 11/94 I would suspect that this code carries an IBM */ 381402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* copyright that is much the same as that for the original HP */ 381502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* netperf code */ 381602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint confidence_iterations; /* for iterations */ 381702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 381802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 381902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project result_confid=-10.0, 382002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_cpu_confid=-10.0, 382102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_cpu_confid=-10.0, 382202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 382302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_result=0.0, 382402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_result=0.0, 382502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_result=0.0, 382602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_result=0.0, 382702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 382802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_cpu=0.0, 382902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_cpu=0.0, 383002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_cpu=0.0, 383102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_cpu=0.0, 383202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 383302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_cpu=0.0, 383402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_cpu=0.0, 383502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_cpu=0.0, 383602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_cpu=0.0, 383702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 383802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_service_demand=0.0, 383902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_service_demand=0.0, 384002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_service_demand=0.0, 384102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_service_demand=0.0, 384202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 384302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_service_demand=0.0, 384402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_service_demand=0.0, 384502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_service_demand=0.0, 384602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_service_demand=0.0, 384702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 384802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_time=0.0, 384902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_time=0.0, 385002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_time=0.0, 385102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_time=0.0, 385202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 385302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_time=0.0, 385402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 385502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_fails, 385602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_local_results, 385702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence=-10.0; 385802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* interval=0.1; */ 385902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 386002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/ 386102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 386202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* Constants for Confidence Intervals */ 386302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 386402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/************************************************************************/ 386502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 386602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectinit_stat() 386702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 386802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_result=0.0; 386902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_result=0.0; 387002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_result=0.0; 387102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_result=0.0; 387202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 387302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_cpu=0.0; 387402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_cpu=0.0; 387502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_cpu=0.0; 387602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_cpu=0.0; 387702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 387802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_cpu=0.0; 387902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_cpu=0.0; 388002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_cpu=0.0; 388102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_cpu=0.0; 388202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 388302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_service_demand=0.0; 388402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_service_demand=0.0; 388502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_service_demand=0.0; 388602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_service_demand=0.0; 388702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 388802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_service_demand=0.0; 388902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_service_demand=0.0; 389002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_service_demand=0.0; 389102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_service_demand=0.0; 389202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 389302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_time=0.0; 389402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_time=0.0; 389502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_time=0.0; 389602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_time=0.0; 389702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 389802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_time=0.0; 389902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 390002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_fails = 0.0; 390102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_local_results=0.0, 390202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence=-10.0; 390302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 390402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 390502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine does a simple table lookup for some statistical */ 390602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* function that I would remember if I stayed awake in my probstats */ 390702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* class... raj 11/94 */ 390802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble 390902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectconfid(int level, int freedom) 391002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 391102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdouble t99[35],t95[35]; 391202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 391302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[1]=12.706; 391402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[2]= 4.303; 391502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[3]= 3.182; 391602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[4]= 2.776; 391702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[5]= 2.571; 391802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[6]= 2.447; 391902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[7]= 2.365; 392002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[8]= 2.306; 392102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[9]= 2.262; 392202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[10]= 2.228; 392302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[11]= 2.201; 392402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[12]= 2.179; 392502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[13]= 2.160; 392602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[14]= 2.145; 392702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[15]= 2.131; 392802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[16]= 2.120; 392902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[17]= 2.110; 393002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[18]= 2.101; 393102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[19]= 2.093; 393202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[20]= 2.086; 393302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[21]= 2.080; 393402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[22]= 2.074; 393502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[23]= 2.069; 393602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[24]= 2.064; 393702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[25]= 2.060; 393802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[26]= 2.056; 393902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[27]= 2.052; 394002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[28]= 2.048; 394102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[29]= 2.045; 394202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t95[30]= 2.042; 394302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 394402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[1]=63.657; 394502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[2]= 9.925; 394602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[3]= 5.841; 394702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[4]= 4.604; 394802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[5]= 4.032; 394902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[6]= 3.707; 395002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[7]= 3.499; 395102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[8]= 3.355; 395202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[9]= 3.250; 395302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[10]= 3.169; 395402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[11]= 3.106; 395502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[12]= 3.055; 395602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[13]= 3.012; 395702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[14]= 2.977; 395802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[15]= 2.947; 395902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[16]= 2.921; 396002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[17]= 2.898; 396102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[18]= 2.878; 396202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[19]= 2.861; 396302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[20]= 2.845; 396402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[21]= 2.831; 396502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[22]= 2.819; 396602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[23]= 2.807; 396702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[24]= 2.797; 396802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[25]= 2.787; 396902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[26]= 2.779; 397002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[27]= 2.771; 397102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[28]= 2.763; 397202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[29]= 2.756; 397302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project t99[30]= 2.750; 397402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 397502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(level==95){ 397602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(t95[freedom]); 397702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else if(level==99){ 397802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(t99[freedom]); 397902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } else{ 398002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project return(0); 398102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 398202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 398302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 398402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 398502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalculate_confidence(int confidence_iterations, 398602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float time, 398702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double result, 398802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float loc_cpu, 398902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float rem_cpu, 399002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float loc_sd, 399102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float rem_sd) 399202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 399302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 399402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 399502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 399602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "calculate_confidence: itr %d; time %f; res %f\n", 399702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iterations, 399802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time, 399902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project result); 400002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 400102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " lcpu %f; rcpu %f\n", 400202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_cpu, 400302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_cpu); 400402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 400502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " lsdm %f; rsdm %f\n", 400602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sd, 400702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_sd); 400802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 400902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 401002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 401102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test time */ 401202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_time += 401302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) time; 401402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_time += 401502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) time*time; 401602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_time = 401702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_local_time/confidence_iterations; 401802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_time = 401902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_local_time/confidence_iterations 402002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_local_time*measured_mean_local_time; 402102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 402202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test result */ 402302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_result += 402402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) result; 402502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_result += 402602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) result*result; 402702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_result = 402802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_result/confidence_iterations; 402902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_result = 403002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_result/confidence_iterations 403102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_result*measured_mean_result; 403202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 403302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local cpu utilization */ 403402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_cpu += 403502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) loc_cpu; 403602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_cpu += 403702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) loc_cpu*loc_cpu; 403802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_cpu = 403902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_local_cpu/confidence_iterations; 404002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_cpu = 404102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_local_cpu/confidence_iterations 404202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_local_cpu*measured_mean_local_cpu; 404302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 404402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote cpu util */ 404502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_cpu += 404602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) rem_cpu; 404702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_cpu+= 404802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) rem_cpu*rem_cpu; 404902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_cpu = 405002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_remote_cpu/confidence_iterations; 405102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_cpu = 405202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_remote_cpu/confidence_iterations 405302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_remote_cpu*measured_mean_remote_cpu; 405402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 405502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand */ 405602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_local_service_demand += 405702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) loc_sd; 405802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_local_service_demand+= 405902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) loc_sd*loc_sd; 406002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_service_demand = 406102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_local_service_demand/confidence_iterations; 406202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_local_service_demand = 406302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_local_service_demand/confidence_iterations 406402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_local_service_demand*measured_mean_local_service_demand; 406502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 406602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote service demand */ 406702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_sum_remote_service_demand += 406802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) rem_sd; 406902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_square_sum_remote_service_demand+= 407002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) rem_sd*rem_sd; 407102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_service_demand = 407202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_sum_remote_service_demand/confidence_iterations; 407302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_var_remote_service_demand = 407402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (double) measured_square_sum_remote_service_demand/confidence_iterations 407502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -measured_mean_remote_service_demand*measured_mean_remote_service_demand; 407602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 407702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(confidence_iterations>1){ 407802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project result_confid= (double) interval - 407902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2.0 * confid(confidence_level,confidence_iterations-1)* 408002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sqrt(measured_var_result/(confidence_iterations-1.0)) / 408102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_result; 408202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 408302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_cpu_confid= (double) interval - 408402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2.0 * confid(confidence_level,confidence_iterations-1)* 408502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sqrt(measured_var_local_cpu/(confidence_iterations-1.0)) / 408602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_local_cpu; 408702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 408802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_cpu_confid= (double) interval - 408902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2.0 * confid(confidence_level,confidence_iterations-1)* 409002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sqrt(measured_var_remote_cpu/(confidence_iterations-1.0)) / 409102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured_mean_remote_cpu; 409202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 409302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(debug){ 409402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("Conf_itvl %2d: results:%4.1f%% loc_cpu:%4.1f%% rem_cpu:%4.1f%%\n", 409502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iterations, 409602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (interval-result_confid)*100.0, 409702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (interval-loc_cpu_confid)*100.0, 409802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (interval-rem_cpu_confid)*100.0); 409902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 410002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 410102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if the user has requested that we only wait for the result to 410202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project be confident rather than the result and CPU util(s) then do 410302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project so. raj 2007-08-08 */ 410402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!result_confidence_only) { 410502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence = min(min(result_confid,loc_cpu_confid),rem_cpu_confid); 410602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 410702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 410802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence = result_confid; 410902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 411002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 411102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 411202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 411302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here ends the IBM code */ 411402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 411502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 411602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectretrieve_confident_values(float *elapsed_time, 411702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double *thruput, 411802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float *local_cpu_utilization, 411902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float *remote_cpu_utilization, 412002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float *local_service_demand, 412102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float *remote_service_demand) 412202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 412302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 412402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *elapsed_time = (float)measured_mean_local_time; 412502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *thruput = measured_mean_result; 412602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *local_cpu_utilization = (float)measured_mean_local_cpu; 412702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *remote_cpu_utilization = (float)measured_mean_remote_cpu; 412802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *local_service_demand = (float)measured_mean_local_service_demand; 412902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *remote_service_demand = (float)measured_mean_remote_service_demand; 413002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 413102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 413202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* display_confidence() is called when we could not achieve the */ 413302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* desirec confidence in the results. it will print the achieved */ 413402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* confidence to "where" raj 11/94 */ 413502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 413602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectdisplay_confidence() 413702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 413802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 413902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 414002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! WARNING\n"); 414102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 414202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! Desired confidence was not achieved within "); 414302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 414402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "the specified iterations.\n"); 414502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 414602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! This implies that there was variability in "); 414702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 414802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "the test environment that\n"); 414902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 415002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! must be investigated before going further.\n"); 415102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 415202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! Confidence intervals: Throughput : %4.1f%%\n", 415302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100.0 * (interval - result_confid)); 415402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 415502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! Local CPU util : %4.1f%%\n", 415602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100.0 * (interval - loc_cpu_confid)); 415702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 415802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "!!! Remote CPU util : %4.1f%%\n\n", 415902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100.0 * (interval - rem_cpu_confid)); 416002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 416102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4162