102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* nettest_dlpi.c */ 502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the actual test routines... */ 702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_dlpi_co_stream() perform a CO DLPI stream test */ 902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_dlpi_co_stream() */ 1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_dlpi_co_rr() perform a CO DLPI req/res */ 1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_dlpi_co_rr() */ 1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_dlpi_cl_stream() perform a CL DLPI stream test */ 1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_dlpi_cl_stream() */ 1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_dlpi_cl_rr() perform a CL DLPI req/res */ 1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_dlpi_cl_rr() */ 1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef HAVE_CONFIG_H 2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "config.h" 2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DLPI 2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar nettest_dlpi_id[]="\ 2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project@(#)nettest_dlpi.c (c) Copyright 1993,1995,2004 Hewlett-Packard Co. Version 2.4.3"; 2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <fcntl.h> 2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <errno.h> 3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <signal.h> 3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h> 3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <string.h> 3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <time.h> 3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <malloc.h> 3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/stream.h> 3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/stropts.h> 3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/poll.h> 3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __osf__ 3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpihdr.h> 4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* __osf__ */ 4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpi.h> 4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __hpux__ 4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dlpi_ext.h> 4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __hpux__ */ 4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __osf__ */ 4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h" 4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h" 4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_dlpi.h" 5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* these are some variables global to all the DLPI tests. declare */ 5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* them static to make them global only to this file */ 5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic int 5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size, /* remote send window size */ 5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size, /* remote recv window size */ 5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local send window size */ 5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size, /* local recv window size */ 5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size = 100, /* request size */ 6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size = 200, /* response size */ 6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how big are individual sends */ 6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size; /* how big are individual receives */ 6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_ppa = 4, /* the ppa for the local interface, */ 6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* as shown as the NM Id in lanscan */ 6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_ppa = 4, /* the ppa for the remote interface */ 6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap = 84; /* which 802.2 SAP should we use? */ 6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar loc_dlpi_device[32] = "/dev/dlpi"; 7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar rem_dlpi_device[32] = "/dev/dlpi"; 7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar dlpi_usage[] = "\n\ 7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectUsage: netperf [global options] -- [test options] \n\ 7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\ 7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectCO/CL DLPI Test Options:\n\ 7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -D dev[,dev] Set the local/remote DLPI device file name\n\ 7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -h Display this text\n\ 7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -M bytes Set the recv size (DLCO_STREAM, DLCL_STREAM)\n\ 8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -m bytes Set the send size (DLCO_STREAM, DLCL_STREAM)\n\ 8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -p loc[,rem] Set the local/remote PPA for the test\n\ 8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -R bytes Set response size (DLCO_RR, DLCL_RR)\n\ 8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -r bytes Set request size (DLCO_RR, DLCL_RR)\n\ 8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -s sap Set the 802.2 sap for the test\n\ 8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -W send[,recv] Set remote send/recv window sizes\n\ 8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -w send[,recv] Set local send/recv window sizes\n\ 8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\ 8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFor those options taking two parms, at least one must be specified;\n\ 8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectspecifying one value without a comma will set both parms to that\n\ 9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvalue, specifying a value with a leading comma will set just the second\n\ 9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectparm, a value with a trailing comma will set just the first. To set\n\ 9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecteach parm to unique values, specify both and separate them with a\n\ 9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcomma.\n"; 9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This routine implements the CO unidirectional data transfer test */ 9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* (a.k.a. stream) for the sockets interface. It receives its */ 9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* parameters via global variables from the shell and writes its */ 9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* output to the standard output. */ 10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_dlpi_co_stream() 10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send \n\ 10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectWindow Window Message Elapsed \n\ 10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput \n\ 11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes frames bytes secs. %s/sec \n\n"; 11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f\n"; 11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1 = 11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%5d %5d %6d %-6.2f %7.2f \n"; 11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send Utilization Service Demand\n\ 12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectWindow Window Message Elapsed Send Recv Send Recv\n\ 12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput local remote local remote\n\ 12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes frames bytes secs. %-8.8s/s %% %% us/KB us/KB\n\n"; 12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f\n"; 12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1 = 12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%5d %5d %6d %-6.2f %7.2f %-6.2f %-6.2f %-6.3f %-6.3f\n"; 12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\n\ 13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectAlignment Offset %-8.8s %-8.8s Sends %-8.8s Recvs\n\ 13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal Remote Local Remote Xfered Per Per\n\ 13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Send Recv Send (avg) Recv (avg)\n\ 13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %5d %5d %5d %6.4g %6.2f %6d %6.2f %6d\n"; 13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int interval_count; 14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what we want is to have a buffer space that is at least one */ 14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-size greater than our send window. this will insure that we */ 14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are never trying to re-use a buffer that may still be in the hands */ 14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the transport. This buffer will be malloc'd after we have found */ 14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the size of the local senc socket buffer. We will want to deal */ 14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with alignment and offset concerns as well. */ 14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *send_ring; 15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message_ptr; 15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char dlsap[BUFSIZ]; 15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dlsap_len; 15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *message_int_ptr; 15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int message_offset; 15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int malloc_size; 15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int nummessages; 16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int send_descriptor; 16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_remaining; 16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with links like fddi, one can send > 32 bits worth of bytes */ 16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* during a test... ;-) */ 16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_sent; 16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_request_struct *dlpi_co_stream_request; 17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_response_struct *dlpi_co_stream_response; 18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_results_struct *dlpi_co_stream_result; 18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request = 18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_stream_request_struct *)netperf_request.content.test_specific_data; 18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response = 18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_stream_response_struct *)netperf_response.content.test_specific_data; 18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_result = 18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_stream_results_struct *)netperf_response.content.test_specific_data; 18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DLPI CO STREAM TEST\n"); 19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) 19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,cpu_title,format_units()); 19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters */ 19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = 0.0; 20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data descriptor */ 20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_descriptor = dl_open(loc_dlpi_device,loc_ppa); 20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_descriptor < 0){ 20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_dlpi_co_stream: dlpi stream data descriptor"); 20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the puppy and get the assigned dlsap */ 21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap_len = BUFSIZ; 21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(send_descriptor, 21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap, DL_CODLS, dlsap, &dlsap_len) != 0) { 21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_co_rr: bind failure\n"); 21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_co_stream: send_descriptor obtained...\n"); 22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsw_size > 0) { 22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_co_stream: window send size altered from system default...\n"); 22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d\n",lsw_size); 22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lrw_size > 0) { 23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: send_dlpi_co_stream: window recv size altered from system default...\n"); 23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," recv: %d\n",lrw_size); 23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: send_dlpi_co_stream: window sizes determined...\n"); 24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d recv: %d\n",lsw_size,lrw_size); 24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ffluch(where); 24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* DL_HP_SET_LOCAL_WIN_REQ */ 25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size = -1; 25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size = -1; 25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we should pick a default send_size, it should not be larger than */ 25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the min of the two interface MTU's, and should perhaps default to */ 26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the Interface MTU, but for now, we will default it to 1024... if */ 26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* someone wants to change this, the should change the corresponding */ 26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* lines in the recv_dlpi_co_stream routine */ 26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_size == 0) { 26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = 1024; 26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset. */ 26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* After we have calculated the proper starting address, we want to */ 27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* put that back into the message variable so we go back to the */ 27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* proper place. note that this means that only the first send is */ 27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* guaranteed to be at the alignment specified by the -a parameter. I */ 27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* think that this is a little more "real-world" than what was found */ 27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in previous versions. note also that we have allocated a quantity */ 27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of memory that is at least one send-size greater than our socket */ 27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffer size. We want to be sure that there are at least two */ 27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers allocated - this can be a bit of a problem when the */ 27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size is bigger than the socket size, so we must check... the */ 27902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user may have wanted to explicitly set the "width" of our send */ 28002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers, we should respect that wish... */ 28102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) { 28202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_width = (lsw_size/send_size) + 1; 28302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 1) send_width++; 28402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 28502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 28602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = allocate_buffer_ring(send_width, 28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 28802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 28902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset); 29002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = send_size; 29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = send_size; 29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_ring->buffer_ptr; 29402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 29802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back.*/ 30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 30302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the socket */ 30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* paramters on the other side at this point, hence the reason for */ 30802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the values being passed in the setup message. If the user did */ 30902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not specify any of the parameters, they will be passed as 0, which */ 31002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will indicate to the remote that no changes beyond the system's */ 31102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* default should be used. */ 31202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_DLPI_CO_STREAM; 31402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->send_win_size = rsw_size; 31502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->recv_win_size = rrw_size; 31602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->receive_size = recv_size; 31702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->recv_alignment= remote_recv_align; 31802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->recv_offset = remote_recv_offset; 31902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->measure_cpu = remote_cpu_usage; 32002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->cpu_rate = remote_cpu_rate; 32102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->ppa = rem_ppa; 32202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->sap = dlpi_sap; 32302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->dev_name_len = strlen(rem_dlpi_device); 32402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(dlpi_co_stream_request->dlpi_device, 32502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_dlpi_device); 32602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 32702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 32802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 32902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I didn't really want */ 33002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 33102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 33202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 33302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 33402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 33502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 33602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 33702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 33802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 33902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 34002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_co_stream_request->dlpi_device; 34102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((strlen(rem_dlpi_device) + 3) / 4); 34202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 34302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 34402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 34502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 34602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 34702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = ntohl(*charword); 34802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 34902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 35002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 35102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 35202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 35302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->test_length = test_time; 35402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 35502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 35602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->test_length = test_bytes; 35702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 35802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 35902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->dirty_count = rem_dirty_count; 36002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->clean_count = rem_clean_count; 36102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 36202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 36302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 36402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 36502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 36602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: send_dlpi_co_stream: requesting DLPI CO stream test\n"); 36702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 36802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 36902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 37002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 37102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant */ 37202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters for this test type. We will put them back into */ 37302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the variables here so they can be displayed if desired. The */ 37402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote will have calibrated CPU if necessary, and will have done */ 37502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the needed set-up we will have calibrated the cpu locally */ 37602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before sending the request, and will grab the counter value right */ 37702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the connect returns. The remote will grab the counter right */ 37802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the accept call. This saves the hassle of extra messages */ 37902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* being sent for the TCP tests. */ 38002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 38102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 38202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 38302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 38402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 38502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 38602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size = dlpi_co_stream_response->recv_win_size; 38702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size = dlpi_co_stream_response->send_win_size; 38802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage= dlpi_co_stream_response->measure_cpu; 38902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = dlpi_co_stream_response->cpu_rate; 39002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 39102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 39202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 39302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 39402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 39502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 39602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 39702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Connect up to the remote port on the data descriptor */ 39802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(dl_connect(send_descriptor, 39902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->station_addr, 40002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->station_addr_len) != 0) { 40102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_stream: connect failure\n"); 40202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 40302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 40402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 40502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 40602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either the */ 40702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connect would have failed, or the previous response would have */ 40802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indicated a problem. I failed to see the value of the extra */ 40902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message after the accept on the remote. If it failed, we'll see it */ 41002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here. If it didn't, we might as well start pumping data. */ 41102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 41202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a stream test, they can be */ 41302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* either time or byte-count based. */ 41402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 41502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 41602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 41702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 41802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining = 0; 41902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 42002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 42102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 42202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to send a number of bytes. */ 42302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining = test_bytes; 42402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 42502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 42602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 42702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 42802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 42902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 43002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 43202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We use an "OR" to control test execution. When the test is */ 43402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* controlled by time, the byte count check will always return false. */ 43502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* When the test is controlled by byte count, the time test will */ 43602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* always return false. When the test is finished, the whole */ 43702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* expression will go false and we will stop sending data. */ 43802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 44002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize the random number generator for putting dirty stuff */ 44102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* into the send buffer. raj */ 44202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project srand((int) getpid()); 44302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 44402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 44502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (bytes_remaining > 0)) { 44602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 44702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 44802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to dirty some number of consecutive integers in the buffer */ 44902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are about to send. we may also want to bring some number of */ 45002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them cleanly into the cache. The clean ones will follow any dirty */ 45102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ones into the cache. */ 45202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr = (int *)message_ptr; 45302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < loc_dirty_count; i++) { 45402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *message_int_ptr = rand(); 45502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 45602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 45702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < loc_clean_count; i++) { 45802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_dirty_count = *message_int_ptr; 45902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 46002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 46102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 46202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 46302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((putmsg(send_descriptor, 46402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 46502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 46602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != 0) { 46702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) 46802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 46902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: data send error"); 47002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 47102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 47202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = send_ring->next; 47302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_ring->buffer_ptr; 47402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 47502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (interval_count = 0; 47602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project interval_count < interval_wate; 47702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project interval_count++); 47802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 47902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 4) { 48102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_clpi_co_stream: putmsg called "); 48202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"len is %d\n",send_message.len); 48302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 48402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 48502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 48702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (bytes_remaining) { 48802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining -= send_size; 48902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 49002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 49102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 49202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test is over. Flush the buffers to the remote end. We do a */ 49302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* graceful release to insure that all data has been taken by the */ 49402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote. this needs a little work - there is no three-way */ 49502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* handshake with type two as there is with TCP, so there really */ 49602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should be a message exchange here. however, we will finesse it by */ 49702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* saying that the tests shoudl run for a while. */ 49802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 49902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 50002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"sending test end signal \n"); 50102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 50202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 50302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = (send_size - 1); 50502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_message.len == 0) send_message.len = 2; 50602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((putmsg(send_descriptor, 50802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 50902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 51002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != 0) { 51102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: data send error"); 51202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 51302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 51402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 51502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the elapsed time for the test, and */ 51602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will also store-away the necessaries for cpu utilization */ 51702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 51802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being measured? */ 51902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how long did we really run? */ 52002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 52102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have */ 52202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calculated service demand and all those interesting things. If it */ 52302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* wasn't supposed to care, it will return obvious values. */ 52402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 52502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 52602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 52702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 52802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 52902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 53002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 53102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 53202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 53302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 53402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 53502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 53602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 53702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our thruput was for the test. In the future, */ 53802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may want to include a calculation of the thruput measured by */ 53902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the remote, but it should be the case that for a TCP stream test, */ 54002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that the two numbers should be *very* close... We calculate */ 54102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bytes_sent regardless of the way the test length was controlled. */ 54202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If it was time, we needed to, and if it was by bytes, the user may */ 54302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have specified a number of bytes that wasn't a multiple of the */ 54402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size, so we really didn't send what he asked for ;-) */ 54502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = ((double) send_size * (double) nummessages) + (double) len; 54702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = calc_thruput(bytes_sent); 54802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 55002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 55102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) */ 55202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course, some of the information might be bogus because */ 55302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was no idle counter in the kernel(s). We need to make */ 55402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a note of this for the user's benefit...*/ 55502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 55602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_rate == 0.0) { 55702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 55802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "WARNING WARNING WARNING WARNING WARNING WARNING WARNING!\n"); 55902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 56002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Local CPU usage numbers based on process information only!\n"); 56102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 56202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 56302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 56402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand(bytes_sent, 56502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 56602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 56702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 56802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 56902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 57002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = -1.0; 57102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = -1.0; 57202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 57302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 57402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 57502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_rate == 0.0) { 57602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 57702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "DANGER DANGER DANGER DANGER DANGER DANGER DANGER!\n"); 57802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 57902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Remote CPU usage numbers based on process information only!\n"); 58002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 58102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 58202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = dlpi_co_stream_result->cpu_util; 58302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand(bytes_sent, 58402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 58502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 58602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_result->num_cpus); 58702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 58802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 58902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = -1.0; 59002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = -1.0; 59102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 59202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 59402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 59502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 59602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 59702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 59802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 59902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 60002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 60102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 60302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 60402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 60502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 60602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 60702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand); 60802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 60902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 61002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 61102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 61202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 61302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 61402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 61502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 61602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 61702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 61802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1, /* the format string */ 61902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size, /* remote recvbuf size */ 62002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 62102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 62202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 62302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, /* what was the xfer rate */ 62402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 62502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 62602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 62702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); /* remote service demand */ 62802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 62902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 63002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 63102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 63202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 63302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 63402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 63502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 63602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 63702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput); 63802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 63902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 64002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 64102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 64202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1, /* the format string */ 64302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size, /* remote recvbuf size */ 64402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 64502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 64602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 64702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput);/* how fast did it go */ 64802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 64902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 65002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 65102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 65302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 65402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 65502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 65602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 65702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 65902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 66002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 66102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* TCP statistics, the alignments of the sends and receives */ 66202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 66302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 66402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 66502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt, 66602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 66702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 66802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 66902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 67002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_align, 67102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset, 67202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_offset, 67302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent, 67402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)nummessages, 67502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages, 67602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)dlpi_co_stream_result->recv_calls, 67702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_result->recv_calls); 67802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 67902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 68102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This is the server-side routine for the tcp stream test. It is */ 68402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* implemented as one routine. I could break things-out somewhat, but */ 68502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* didn't feel it was necessary. */ 68602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 68802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_dlpi_co_stream() 68902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 69002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 69102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int data_descriptor; 69202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 69302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int measure_cpu; 69402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_received; 69502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int receive_calls; 69602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 69702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 69802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *recv_ring; 69902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message_ptr; 70002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 70102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *message_int_ptr; 70202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 70302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dirty_count; 70402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int clean_count; 70502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 70602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_request_struct *dlpi_co_stream_request; 70802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_response_struct *dlpi_co_stream_response; 70902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_stream_results_struct *dlpi_co_stream_results; 71002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 71102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request = (struct dlpi_co_stream_request_struct *)netperf_request.content.test_specific_data; 71202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response = (struct dlpi_co_stream_response_struct *)netperf_response.content.test_specific_data; 71302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_results = (struct dlpi_co_stream_results_struct *)netperf_response.content.test_specific_data; 71402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 71502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 71602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_dlpi_co_stream: entered...\n"); 71702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 71802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 71902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen socket with all the desired */ 72102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 72202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 72302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the socket sizes cannot be changed, then we will */ 72402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 72502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 72602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 72702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 72902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 73002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 73102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 73202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = DLPI_CO_STREAM_RESPONSE; 73402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variable to be at the desired */ 73602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignment with the desired offset. */ 73702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 73902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_stream: requested alignment of %d\n", 74002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->recv_alignment); 74102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 74202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 74302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 74402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 74502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Grab a descriptor to listen on, and then listen on it. */ 74602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 74702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 74802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_stream: grabbing a descriptor...\n"); 74902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 75002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 75102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 75202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 75302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 75402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 75502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 75602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 75702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 75802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 75902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 76002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 76102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 76202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 76302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 76402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 76502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 76602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 76702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_co_stream_request->dlpi_device; 76802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((dlpi_co_stream_request->dev_name_len + 3) / 4); 76902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 77002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 77102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 77202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 77302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 77402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = htonl(*charword); 77502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 77602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 77702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 77802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 77902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_descriptor = dl_open(dlpi_co_stream_request->dlpi_device, 78002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->ppa); 78102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (data_descriptor < 0) { 78202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 78302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 78402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 78502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 78602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 78702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Let's get an address assigned to this descriptor so we can tell the */ 78802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initiator how to reach the data descriptor. There may be a desire to */ 78902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nail this descriptor to a specific address in a multi-homed, */ 79002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* multi-connection situation, but for now, we'll ignore the issue */ 79102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and concentrate on single connection testing. */ 79202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 79302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the sap and retrieve the dlsap assigned by the system */ 79402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->station_addr_len = 14; /* arbitrary */ 79502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(data_descriptor, 79602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_request->sap, 79702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DL_CODLS, 79802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)dlpi_co_stream_response->station_addr, 79902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &dlpi_co_stream_response->station_addr_len) != 0) { 80002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_stream: bind failure\n"); 80102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 80202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 80302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 80402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 80502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The initiator may have wished-us to modify the socket buffer */ 80602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes. We should give it a shot. If he didn't ask us to change the */ 80702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes, we should let him know what sizes were in use at this end. */ 80802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If none of this code is compiled-in, then we will tell the */ 80902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initiator that we were unable to play with the socket buffer by */ 81002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* setting the size in the response to -1. */ 81102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 81202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 81302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 81402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_stream_request->recv_win_size) { 81502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 81602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 81702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 81802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 81902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* the system won't let us play with the buffers */ 82102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->recv_win_size = -1; 82302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 82502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what sort of sizes did we end-up with? */ 82702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this bit of code whould default to the Interface MTU */ 82802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_stream_request->receive_size == 0) { 82902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = 1024; 83002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 83102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 83202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = dlpi_co_stream_request->receive_size; 83302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 83402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 83502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* tell the other fellow what our receive size became */ 83602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->receive_size = recv_size; 83702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 83802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just a little prep work for when we may have to behave like the */ 83902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sending side... */ 84002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = (char *)malloc(recv_size * 2); 84102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (message == NULL) { 84202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", recv_size * 2); 84302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 84402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 84502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 84602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_ptr = ALIGN_BUFFER(message, dlpi_co_stream_request->recv_alignment, dlpi_co_stream_request->recv_offset); 84702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = recv_size; 84802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 84902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = message_ptr; 85002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 85202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 85302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_stream: receive alignment and offset set...\n"); 85402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 85502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 85602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 85802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 86002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 86102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 86202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a -1 to */ 86302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 86402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->cpu_rate = 0.0; /* assume no cpu */ 86602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_stream_request->measure_cpu) { 86702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->measure_cpu = 1; 86802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_response->cpu_rate = 86902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calibrate_local_cpu(dlpi_co_stream_request->cpu_rate); 87002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 87102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 87302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* accept a connection on this file descriptor. at some point, */ 87502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* dl_accept will "do the right thing" with the last two parms, but */ 87602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* for now it ignores them, so we will pass zeros. */ 87702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(dl_accept(data_descriptor, 0, 0) != 0) { 87902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 88002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_stream: error in accept, errno %d\n", 88102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 88202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 88302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 88402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 88502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 88602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 88702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 88802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 88902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver:recv_dlpi_co_stream: connection accepted\n"); 89002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 89102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 89202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 89402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start grabbing. */ 89502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(dlpi_co_stream_request->measure_cpu); 89702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 89902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to dirty some number of consecutive integers in the buffer */ 90002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are about to recv. we may also want to bring some number of */ 90102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them cleanly into the cache. The clean ones will follow any dirty */ 90202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ones into the cache. */ 90302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_count = dlpi_co_stream_request->dirty_count; 90502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project clean_count = dlpi_co_stream_request->clean_count; 90602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr = (int *)message_ptr; 90702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < dirty_count; i++) { 90802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *message_int_ptr = rand(); 90902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 91002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 91102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < clean_count; i++) { 91202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_count = *message_int_ptr; 91302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 91402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 91502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 91602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 91702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = recv_size; 91802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (recv_message.len == recv_size) { 91902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getmsg(data_descriptor, 92002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 92102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 92202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags) != 0) { 92302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 92402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 92502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 92602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 92702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received += recv_message.len; 92802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls++; 92902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 93102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 93202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netserver:recv_dlpi_co_stream: getmsg accepted %d bytes\n", 93302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len); 93402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 93502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 93602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 93902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr = (int *)message_ptr; 94002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < dirty_count; i++) { 94102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *message_int_ptr = rand(); 94202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 94302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 94402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < clean_count; i++) { 94502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dirty_count = *message_int_ptr; 94602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 94702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 94802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 94902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 95102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop now exits due to zero bytes received. */ 95302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should perform a disconnect to signal the sender that */ 95402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have received all the data sent. */ 95502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (close(data_descriptor) == -1) { 95702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 95802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 95902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 96002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 96102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(dlpi_co_stream_request->measure_cpu,&elapsed_time); 96302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 96502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 96702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 96802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_stream: got %d bytes\n", 96902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received); 97002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 97102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_stream: got %d recvs\n", 97202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls); 97302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 97402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 97502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 97602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_results->bytes_received = bytes_received; 97702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_results->elapsed_time = elapsed_time; 97802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_results->recv_calls = receive_calls; 97902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_stream_request->measure_cpu) { 98102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_stream_results->cpu_util = calc_cpu_util(0.0); 98202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 98302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 98502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 98602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_stream: test complete, sending results.\n"); 98702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 98802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 98902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 99102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 99202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/*********************************/ 99402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint send_dlpi_co_rr(char remote_host[]) 99602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 99702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 99902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Local /Remote\n\ 100002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Window Size Request Resp. Elapsed Trans.\n\ 100102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Send Recv Size Size Time Rate \n\ 100202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project frames frames bytes bytes secs. per sec \n\n"; 100302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 100502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f\n"; 100602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_1 = "\ 100802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project %-6d %-6d %-6d %-6d %-6.2f %7.2f \n"; 100902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_2 = "\ 101002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project %-6d %-6d\n"; 101102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 101202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 101302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Local /Remote\n\ 101402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Window Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem\n\ 101502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Send Recv Size Size Time Rate local remote local remote\n\ 101602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project frames frames bytes bytes secs. per sec %% %% us/Tr us/Tr\n\n"; 101702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 101802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 101902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f\n"; 102002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_1 = "\ 102202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project %-6d %-6d %-6d %-6d %-6.2f %-6.2f %-6.2f %-6.2f %-6.3f %-6.3f\n"; 102302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_2 = "\ 102502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project %-6d %-6d\n"; 102602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\ 102802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Alignment Offset\n\ 102902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Local Remote Local Remote\n\ 103002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Send Recv Send Recv\n\ 103102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project %5d %5d %5d %5d\n"; 103202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 103302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 103402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int timed_out = 0; 103502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 103602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dlsap_len; 103702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char dlsap[BUFSIZ]; 103802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 103902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 104002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *send_message_ptr; 104102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *recv_message_ptr; 104202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_message_ptr; 104302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 104402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 104502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 104602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int nummessages; 104702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int send_descriptor; 104802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 104902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_xferd; 105002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int rsp_bytes_left; 105202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we assume that station adresses fit within two ints */ 105402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int remote_address[1]; 105502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 105702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 105802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 105902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 106002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 106102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 106202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_request_struct *dlpi_co_rr_request; 106302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_response_struct *dlpi_co_rr_response; 106402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_results_struct *dlpi_co_rr_result; 106502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 106602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request = 106702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_rr_request_struct *)netperf_request.content.test_specific_data; 106802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response = 106902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_rr_response_struct *)netperf_response.content.test_specific_data; 107002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_result = 107102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_co_rr_results_struct *)netperf_response.content.test_specific_data; 107202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 107302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since we are now disconnected from the code that established the */ 107402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control socket, and since we want to be able to use different */ 107502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* protocols and such, we are passed the name of the remote host and */ 107602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* must turn that into the test specific addressing information. */ 107702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 107802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 107902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DLPI CO REQUEST/RESPONSE TEST\n"); 108002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) 108102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,cpu_title,format_units()); 108202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 108302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 108402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 108502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 108602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters */ 108702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 108802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 108902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = 0.0; 109002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 109102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 109202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffers with the requested alignment and offset */ 109302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = (char *)malloc(req_size+MAXALIGNMENT+MAXOFFSET); 109402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_message_ptr == NULL) { 109502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", req_size+MAXALIGNMENT+MAXOFFSET); 109602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 109702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 109802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = (char *)(( (long) temp_message_ptr + 109902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long) local_send_align - 1) & 110002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long) local_send_align - 1)); 110102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = send_message_ptr + local_send_offset; 110202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = req_size+MAXALIGNMENT+MAXOFFSET; 110302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = req_size; 110402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_message_ptr; 110502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 110602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = (char *)malloc(rsp_size+MAXALIGNMENT+MAXOFFSET); 110702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_message_ptr == NULL) { 110802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", rsp_size+MAXALIGNMENT+MAXOFFSET); 110902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 111002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 111102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = (char *)(( (long) temp_message_ptr + 111202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long) local_recv_align - 1) & 111302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long) local_recv_align - 1)); 111402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = recv_message_ptr + local_recv_offset; 111502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = rsp_size+MAXALIGNMENT+MAXOFFSET; 111602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 111702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = send_message_ptr; 111802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 111902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data socket */ 112002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 112102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_descriptor = dl_open(loc_dlpi_device,loc_ppa); 112202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_descriptor < 0){ 112302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_dlpi_co_rr: tcp stream data descriptor"); 112402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 112502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 112602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 112702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 112802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_co_rr: send_descriptor obtained...\n"); 112902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 113002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the puppy and get the assigned dlsap */ 113202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap_len = BUFSIZ; 113402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(send_descriptor, 113502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap, DL_CODLS, dlsap, &dlsap_len) != 0) { 113602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_co_rr: bind failure\n"); 113702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 113802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 113902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 114002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 114102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Modify the local socket size. The reason we alter the send buffer */ 114202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size here rather than when the connection is made is to take care */ 114302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of decreases in buffer size. Decreasing the window size after */ 114402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connection establishment is a TCP no-no. Also, by setting the */ 114502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffer (window) size before the connection is established, we can */ 114602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control the TCP MSS (segment size). The MSS is never more that 1/2 */ 114702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the minimum receive buffer size at each half of the connection. */ 114802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This is why we are altering the receive buffer size on the sending */ 114902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size of a unidirectional transfer. If the user has not requested */ 115002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that the socket buffers be altered, we will try to find-out what */ 115102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* their values are. If we cannot touch the socket buffer in any way, */ 115202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we will set the values to -1 to indicate that. */ 115302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 115402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 115502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsw_size > 0) { 115602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 115702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_co_rr: socket send size altered from system default...\n"); 115802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d\n",lsw_size); 115902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lrw_size > 0) { 116202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 116302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_co_rr: socket recv size altered from system default...\n"); 116402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," recv: %d\n",lrw_size); 116502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 116702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 116802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 116902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 117002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 117102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 117202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 117302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 117402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 117502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_co_rr: socket sizes determined...\n"); 117602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d recv: %d\n",lsw_size,lrw_size); 117702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 117802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 117902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* DL_HP_SET_LOCAL_WIN_REQ */ 118002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size = -1; 118202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size = -1; 118302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 118502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 118702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 118802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 118902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 119002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 119102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back.*/ 119202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 119302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 119402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 119502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 119602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 119702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the socket */ 119802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* paramters on the other side at this point, hence the reason for */ 119902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the values being passed in the setup message. If the user did */ 120002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not specify any of the parameters, they will be passed as 0, which */ 120102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will indicate to the remote that no changes beyond the system's */ 120202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* default should be used. Alignment is the exception, it will */ 120302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* default to 8, which will be no alignment alterations. */ 120402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 120502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_DLPI_CO_RR; 120602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->recv_win_size = rrw_size; 120702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->send_win_size = rsw_size; 120802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->recv_alignment = remote_recv_align; 120902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->recv_offset = remote_recv_offset; 121002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->send_alignment = remote_send_align; 121102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->send_offset = remote_send_offset; 121202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->request_size = req_size; 121302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->response_size = rsp_size; 121402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->measure_cpu = remote_cpu_usage; 121502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->cpu_rate = remote_cpu_rate; 121602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->ppa = rem_ppa; 121702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->sap = dlpi_sap; 121802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->dev_name_len = strlen(rem_dlpi_device); 121902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(dlpi_co_rr_request->dlpi_device, 122002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_dlpi_device); 122102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 122202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 122302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 122402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 122502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 122602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 122702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 122802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 122902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 123002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 123102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 123202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 123302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 123402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_co_rr_request->dlpi_device; 123502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((strlen(rem_dlpi_device) + 3) / 4); 123602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 123702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 123802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 123902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 124002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 124102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = ntohl(*charword); 124202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 124502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 124602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 124702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->test_length = test_time; 124802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 124902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 125002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->test_length = test_trans * -1; 125102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 125202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 125302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 125402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_co_rr: requesting TCP stream test\n"); 125502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 125602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 125702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 125802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 125902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant */ 126002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket parameters for this test type. We will put them back into */ 126102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the variables here so they can be displayed if desired. The */ 126202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote will have calibrated CPU if necessary, and will have done */ 126302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the needed set-up we will have calibrated the cpu locally */ 126402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before sending the request, and will grab the counter value right */ 126502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the connect returns. The remote will grab the counter right */ 126602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the accept call. This saves the hassle of extra messages */ 126702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* being sent for the TCP tests. */ 126802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 126902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 127002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 127102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 127202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 127302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 127402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size = dlpi_co_rr_response->recv_win_size; 127502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size = dlpi_co_rr_response->send_win_size; 127602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage= dlpi_co_rr_response->measure_cpu; 127702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = dlpi_co_rr_response->cpu_rate; 127802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 127902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 128002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 128102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 128202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 128302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 128502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 128602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*Connect up to the remote port on the data descriptor */ 128802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(dl_connect(send_descriptor, 129002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->station_addr, 129102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->station_addr_len) != 0) { 129202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_co_rr: connect failure\n"); 129302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 129402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 129502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 129702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either the */ 129802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connect would have failed, or the previous response would have */ 129902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indicated a problem. I failed to see the value of the extra */ 130002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message after the accept on the remote. If it failed, we'll see it */ 130102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here. If it didn't, we might as well start pumping data. */ 130202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 130302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a request/response test, they */ 130402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can be either time or transaction based. */ 130502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 130602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 130702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 130802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 130902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 131002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 131102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 131202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 131302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to send a number of bytes. */ 131402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = test_bytes; 131502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 131602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 131702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 131902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 132002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 132102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 132202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 132302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 132402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We use an "OR" to control test execution. When the test is */ 132502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* controlled by time, the byte count check will always return false. */ 132602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* When the test is controlled by byte count, the time test will */ 132702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* always return false. When the test is finished, the whole */ 132802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* expression will go false and we will stop sending data. I think I */ 132902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just arbitrarily decrement trans_remaining for the timed test, but */ 133002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will not do that just yet... One other question is whether or not */ 133102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the send buffer and the receive buffer should be the same buffer. */ 133202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 133402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the request */ 133502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((putmsg(send_descriptor, 133602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 133702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 133802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != 0) { 133902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 134002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we hit the end of a */ 134102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timed test. */ 134202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 134302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 134402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 134502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_co_rr: putmsg error"); 134602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 134702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 134802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 134902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 135002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_message.len %d\n",recv_message.len); 135102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_message.len %d\n",send_message.len); 135202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 135302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 135402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 135502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the response */ 135602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this needs some work with streams buffers if we are going to */ 135702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* support requests and responses larger than the MTU of the */ 135802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* network, but this can wait until later */ 135902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_bytes_left = rsp_size; 136002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = rsp_size; 136102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while(rsp_bytes_left > 0) { 136202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((getmsg(send_descriptor, 136302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 136402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 136502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags)) < 0) { 136602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 136702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We hit the end of a timed test. */ 136802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 136902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 137002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 137102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_co_rr: data recv error"); 137202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 137302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 137402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_bytes_left -= recv_message.len; 137502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 137602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 137702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (timed_out) { 137802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may have been in a nested while loop - we need */ 137902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* another call to break. */ 138002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 138102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 138202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 138302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 138402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 138502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 138602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 138702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 138802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 3) { 138902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 139002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Transaction %d completed\n", 139102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages); 139202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 139302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 139402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 139502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 139602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* At this point we used to call shutdown onthe data socket to be */ 139702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sure all the data was delivered, but this was not germane in a */ 139802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* request/response test, and it was causing the tests to "hang" when */ 139902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* they were being controlled by time. So, I have replaced this */ 140002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* shutdown call with a call to close that can be found later in the */ 140102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* procedure. */ 140202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 140302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the elapsed time for the test, and */ 140402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will also store-away the necessaries for cpu utilization */ 140502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 140602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being measured? */ 140702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how long did we really run? */ 140802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 140902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have */ 141002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calculated service demand and all those interesting things. If it */ 141102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* wasn't supposed to care, it will return obvious values. */ 141202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 141402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 141502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 141602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 141702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 141802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 141902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 142002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 142102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 142202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 142302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 142402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 142502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our thruput was for the test. In the future, */ 142602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may want to include a calculation of the thruput measured by */ 142702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the remote, but it should be the case that for a TCP stream test, */ 142802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that the two numbers should be *very* close... We calculate */ 142902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bytes_sent regardless of the way the test length was controlled. */ 143002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If it was time, we needed to, and if it was by bytes, the user may */ 143102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have specified a number of bytes that wasn't a multiple of the */ 143202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size, so we really didn't send what he asked for ;-) We use */ 143302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Kbytes/s as the units of thruput for a TCP stream test, where K = */ 143402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 1024. A future enhancement *might* be to choose from a couple of */ 143502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* unit selections. */ 143602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 143702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = (req_size * nummessages) + (rsp_size * nummessages); 143802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = calc_thruput(bytes_xferd); 143902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 144002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 144102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 144202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) */ 144302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course, some of the information might be bogus because */ 144402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was no idle counter in the kernel(s). We need to make */ 144502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a note of this for the user's benefit...*/ 144602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 144702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_rate == 0.0) { 144802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"WARNING WARNING WARNING WARNING WARNING WARNING WARNING!\n"); 144902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Local CPU usage numbers based on process information only!\n"); 145002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 145102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 145202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 145302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will */ 145402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* multiply the number of transaction by 1024 to get */ 145502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "good" numbers */ 145602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand((double) nummessages*1024, 145702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 145802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 145902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 146002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 146102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 146202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = -1.0; 146302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = -1.0; 146402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 146502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 146602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 146702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_rate == 0.0) { 146802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DANGER DANGER DANGER DANGER DANGER DANGER DANGER!\n"); 146902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Remote CPU usage numbers based on process information only!\n"); 147002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 147102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 147202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = dlpi_co_rr_result->cpu_util; 147302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will */ 147402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* multiply the number of transaction by 1024 to get */ 147502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "good" numbers */ 147602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand((double) nummessages*1024, 147702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 147802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 147902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_result->num_cpus); 148002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 148102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 148202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = -1.0; 148302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = -1.0; 148402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 148502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 148602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 148702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 148802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 148902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 149002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 149102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 149202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 149302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 149402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 149502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 149602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 149702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 149802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 149902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 150002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand); 150102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 150202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 150302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 150402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 150502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 150602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 150702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 150802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 150902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 151002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_1, /* the format string */ 151102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 151202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size, 151302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 151402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* guess */ 151502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 151602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time, 151702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 151802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 151902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 152002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); /* remote service demand */ 152102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 152202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_2, 152302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size, 152402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size); 152502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 152602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 152702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 152802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 152902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 153002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 153102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 153202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 153302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 153402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time); 153502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 153602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 153702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 153802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_1, /* the format string */ 153902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, 154002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size, 154102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 154202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* how large were the responses */ 154302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 154402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time); 154502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 154602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_2, 154702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size, /* remote recvbuf size */ 154802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size); 154902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 155002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 155102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 155202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 155302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 155402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 155502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 155602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 155702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 155802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 155902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 156002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 156102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 156202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 156302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* TCP statistics, the alignments of the sends and receives */ 156402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 156502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 156602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 156702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt); 156802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 156902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test is over. Kill the data descriptor */ 157002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 157102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (close(send_descriptor) == -1) { 157202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_co_rr: cannot shutdown tcp stream descriptor"); 157302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 157402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 157502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 157602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 157702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 157802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_dlpi_cl_stream(char remote_host[]) 157902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 158002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /************************************************************************/ 158102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 158202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* UDP Unidirectional Send Test */ 158302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* */ 158402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /************************************************************************/ 158502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = 158602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Window Message Elapsed Messages \n\ 158702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Time Okay Errors Throughput\n\ 158802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes bytes secs # # %s/sec\n\n"; 158902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 159102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f\n"; 159202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1 = 159402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%5d %5d %-7.2f %7d %6d %7.2f\n\ 159502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %-7.2f %7d %7.2f\n\n"; 159602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = 159902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Window Message Elapsed Messages CPU Service\n\ 160002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Time Okay Errors Throughput Util Demand\n\ 160102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes bytes secs # # %s/sec %% us/KB\n\n"; 160202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 160302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 160402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.2f\n"; 160502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 160602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1 = 160702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%5d %5d %-7.2f %7d %6d %7.1f %-6.2f %-6.3f\n\ 160802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %-7.2f %7d %7.1f %-6.2f %-6.3f\n\n"; 160902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 161002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int messages_recvd; 161102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time, 161202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, 161302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization; 161402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 161502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand, remote_service_demand; 161602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double local_thruput, remote_thruput; 161702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_sent; 161802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_recvd; 161902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *message_int_ptr; 162202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message_ptr; 162302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 162402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char sctl_data[BUFSIZ]; 162502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 162602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf sctl_message; 162702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_req_t *data_req = (dl_unitdata_req_t *)sctl_data; 162802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char dlsap[BUFSIZ]; 163002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dlsap_len; 163102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int message_offset; 163202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int message_max_offset; 163302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int failed_sends; 163402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int failed_cows; 163502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int messages_sent; 163602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int data_descriptor; 163702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 164002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int interval_count; 164102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 164202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 164302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int i; 164402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 164502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 164602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_request_struct *dlpi_cl_stream_request; 164702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_response_struct *dlpi_cl_stream_response; 164802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_results_struct *dlpi_cl_stream_results; 164902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 165002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request = (struct dlpi_cl_stream_request_struct *)netperf_request.content.test_specific_data; 165102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response = (struct dlpi_cl_stream_response_struct *)netperf_response.content.test_specific_data; 165202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results = (struct dlpi_cl_stream_results_struct *)netperf_response.content.test_specific_data; 165302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 165402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 165502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("DLPI CL UNIDIRECTIONAL SEND TEST\n"); 165602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) 165702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf(cpu_title,format_units()); 165802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 165902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf(tput_title,format_units()); 166002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 166102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project failed_sends = 0; 166302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_sent = 0; 166402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 166502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data descriptor */ 166702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_descriptor = dl_open(loc_dlpi_device,loc_ppa); 166902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (data_descriptor < 0){ 167002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_cl_stream: data descriptor"); 167102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 167202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 167302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 167402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the puppy and get the assigned dlsap */ 167502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap_len = BUFSIZ; 167602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(data_descriptor, 167702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap, DL_CLDLS, dlsap, &dlsap_len) != 0) { 167802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_stream: bind failure\n"); 167902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 168002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 168102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 168202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 168302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Modify the local socket size (SNDBUF size) */ 168402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 168502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 168602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsw_size > 0) { 168702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 168802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_stream: descriptor send size altered from system default...\n"); 168902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d\n",lsw_size); 169002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lrw_size > 0) { 169302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 169402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_stream: descriptor recv size altered from system default...\n"); 169502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," recv: %d\n",lrw_size); 169602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 169902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 170102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 170202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 170302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* DL_HP_SET_LOCAL_WIN_REQ */ 170502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size = -1; 170702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size = -1; 170802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 171002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now, we want to see if we need to set the send_size */ 171202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_size == 0) { 171302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = 1024; 171402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 171502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset, */ 171802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* most of the numbers here are just a hack to pick something nice */ 171902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and big in an attempt to never try to send a buffer a second time */ 172002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before it leaves the node...unless the user set the width */ 172102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* explicitly. */ 172202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) send_width = 32; 172302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = (char *)malloc(send_size * (send_width + 1) + local_send_align + local_send_offset); 172402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (message == NULL) { 172502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", send_size * (send_width + 1) + local_send_align + local_send_offset); 172602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 172702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 172802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_ptr = (char *)(( (long) message + 172902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long) local_send_align - 1) & 173002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long) local_send_align - 1)); 173102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_ptr = message_ptr + local_send_offset; 173202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = message_ptr; 173302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = send_size; 173402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = send_size; 173502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = message; 173602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.maxlen = BUFSIZ; 173802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = 0; 173902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.buf = sctl_data; 174002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if the user supplied a cpu rate, this call will complete rather */ 174202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* quickly, otherwise, the cpu rate will be retured to us for */ 174302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* possible display. The Library will keep it's own copy of this data */ 174402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* for use elsewhere. We will only display it. (Does that make it */ 174502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "opaque" to us?) */ 174602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) 174802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 174902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 175002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to set up the data connection. The server */ 175102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sends back the port number and alters the socket parameters there. */ 175202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course this is a datagram service so no connection is actually */ 175302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set up, the server just sets up the socket and binds it. */ 175402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 175502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_DLPI_CL_STREAM; 175602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->recv_win_size = rrw_size; 175702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->message_size = send_size; 175802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->recv_alignment = remote_recv_align; 175902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->recv_offset = remote_recv_offset; 176002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->measure_cpu = remote_cpu_usage; 176102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->cpu_rate = remote_cpu_rate; 176202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->ppa = rem_ppa; 176302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->sap = dlpi_sap; 176402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->dev_name_len = strlen(rem_dlpi_device); 176502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(dlpi_cl_stream_request->dlpi_device, 176602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_dlpi_device); 176702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 176802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 176902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 177002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 177102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 177202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 177302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 177402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 177502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 177602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 177702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 177802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 177902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 178002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_cl_stream_request->dlpi_device; 178202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((strlen(rem_dlpi_device) + 3) / 4); 178302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 178502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 178602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 178702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = ntohl(*charword); 178902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 179002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 179102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 179202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 179302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 179402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->test_length = test_time; 179502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 179602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 179702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->test_length = test_bytes * -1; 179802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 179902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 180202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 180402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 180602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 180702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_stream: remote data connection done.\n"); 180802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 180902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 181002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 181102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_cl_stream: error on remote"); 181202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 181302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 181402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 181502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* place some of the remote's addressing information into the send */ 181602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* structure so our sends can be sent to the correct place. Also get */ 181702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* some of the returned socket buffer information for user display. */ 181802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 181902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the destination addressing control info */ 182002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_primitive = DL_UNITDATA_REQ; 182102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)(dlpi_cl_stream_response->station_addr), 182202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((char *)data_req + sizeof(dl_unitdata_req_t)), 182302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->station_addr_len); 182402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_offset = sizeof(dl_unitdata_req_t); 182502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_length = dlpi_cl_stream_response->station_addr_len; 182602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there is a dl_priority structure too, but I am ignoring it for */ 182702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the time being. */ 182802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* however... it is best to put some value in there lest some code 182902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project get grumpy about it - fix from Nicolas Thomas */ 183002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_min = DL_QOS_DONT_CARE; 183102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_max = DL_QOS_DONT_CARE; 183202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = sizeof(dl_unitdata_req_t) + 183402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_length; 183502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size = dlpi_cl_stream_response->recv_win_size; 183702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size = dlpi_cl_stream_response->send_win_size; 183802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = dlpi_cl_stream_response->cpu_rate; 183902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set up the timer to call us after test_time */ 184202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 184302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the start count for the idle counter and the start time */ 184502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 184702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 184902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project interval_count = interval_burst; 185002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 185102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 185202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Send datagrams like there was no tomorrow */ 185302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (!times_up) { 185402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 185502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to dirty some number of consecutive integers in the buffer */ 185602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are about to send. we may also want to bring some number of */ 185702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them cleanly into the cache. The clean ones will follow any dirty */ 185802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ones into the cache. */ 185902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr = (int *)message_ptr; 186002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < loc_dirty_count; i++) { 186102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *message_int_ptr = 4; 186202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 186302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 186402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (i = 0; i < loc_clean_count; i++) { 186502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_dirty_count = *message_int_ptr; 186602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_int_ptr++; 186702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 186802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 186902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (putmsg(data_descriptor, 187002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sctl_message, 187102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 187202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0) != 0) { 187302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 187402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 187502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 187602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == ENOBUFS) { 187702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we might not ever hit this with STREAMS, it would probably */ 187802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be better to do a getinfo request at the end of the test to */ 187902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* get all sorts of gory statistics. in the meantime, we will */ 188002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* keep this code in place. */ 188102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project failed_sends++; 188202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project continue; 188302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 188402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_cl_stream: data send error"); 188502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 188602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"messages_sent %u\n",messages_sent); 188702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 188802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 188902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 189002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 189102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_sent++; 189202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now we want to move our pointer to the next position in the */ 189402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* data buffer...since there was a successful send */ 189502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 189802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in this case, the interval count is the count-down couter */ 189902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to decide to sleep for a little bit */ 190002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((interval_burst) && (--interval_count == 0)) { 190102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* call the sleep routine for some milliseconds, if our */ 190202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timer popped while we were in there, we want to */ 190302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* break out of the loop. */ 190402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (msec_sleep(interval_wate)) { 190502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 190602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 190702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project interval_count = interval_burst; 190802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 190902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 191102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 191302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This is a timed test, so the remote will be returning to us after */ 191502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a time. We should not need to send any "strange" messages to tell */ 191602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the remote that the test is completed, unless we decide to add a */ 191702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* number of messages to the test. */ 191802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test is over, so get stats and stuff */ 192002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage, 192102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &elapsed_time); 192202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 192302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end */ 192402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 192502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 192602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 192702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_stream: remote results obtained\n"); 192802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 192902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 193002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 193102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_cl_stream: error on remote"); 193202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 193302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 193402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = send_size * messages_sent; 193602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_thruput = calc_thruput(bytes_sent); 193702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_recvd = dlpi_cl_stream_results->messages_recvd; 193902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_recvd = send_size * messages_recvd; 194002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we asume that the remote ran for as long as we did */ 194202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_thruput = calc_thruput(bytes_recvd); 194402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* print the results for this descriptor and message size */ 194602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 194802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 194902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) We pass zeros for the local */ 195002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* cpu utilization and elapsed time to tell the routine to use */ 195102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the libraries own values for those. */ 195202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 195302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_rate == 0.0) { 195402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"WARNING WARNING WARNING WARNING WARNING WARNING WARNING!\n"); 195502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Local CPU usage numbers based on process information only!\n"); 195602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 195702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 195802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 195902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 196002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand(bytes_sent, 196102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 196202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 196302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 196402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 196502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 196602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = -1.0; 196702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = -1.0; 196802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 196902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 197002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The local calculations could use variables being kept by */ 197102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the local netlib routines. The remote calcuations need to */ 197202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have a few things passed to them. */ 197302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 197402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_rate == 0.0) { 197502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DANGER DANGER DANGER DANGER DANGER DANGER DANGER!\n"); 197602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"REMOTE CPU usage numbers based on process information only!\n"); 197702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 197802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 197902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 198002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = dlpi_cl_stream_results->cpu_util; 198102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand(bytes_recvd, 198202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 198302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 198402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->num_cpus); 198502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 198602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 198702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = -1.0; 198802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = -1.0; 198902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 199002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 199102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 199202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 199302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 199402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 199502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 199602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 199702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 199802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 199902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 200002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 200102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 200202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 200302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 200402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 200502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand); 200602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 200702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 200802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 200902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 201002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 201102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 201202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 201302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 201402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 201502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1, /* the format string */ 201602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 201702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 201802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 201902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_sent, 202002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project failed_sends, 202102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_thruput, /* what was the xfer rate */ 202202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 202302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 202402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size, 202502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 202602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_recvd, 202702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_thruput, 202802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 202902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); /* remote service demand */ 203002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 203102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 203202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 203302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 203402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 203502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 203602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 203702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 203802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 203902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_thruput); 204002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 204102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 204202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 204302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1, /* the format string */ 204402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 204502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 204602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 204702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_sent, 204802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project failed_sends, 204902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_thruput, 205002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size, /* remote recvbuf size */ 205102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 205202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_recvd, 205302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_thruput 205402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ); 205502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 205602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 205702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 205802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 205902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 206102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_dlpi_cl_stream() 206202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 206302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 206502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int data_descriptor; 206602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 206702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message_ptr; 206802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char rctl_data[BUFSIZ]; 206902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 207002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf rctl_message; 207102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 207202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* these are to make reading some of the DLPI control messages easier */ 207302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_ind_t *data_ind = (dl_unitdata_ind_t *)rctl_data; 207402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_uderror_ind_t *uder_ind = (dl_uderror_ind_t *)rctl_data; 207502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 207602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_received = 0; 207702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 207802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 207902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int message_size; 208002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int messages_recvd = 0; 208102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int measure_cpu; 208202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_request_struct *dlpi_cl_stream_request; 208402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_response_struct *dlpi_cl_stream_response; 208502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_stream_results_struct *dlpi_cl_stream_results; 208602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request = (struct dlpi_cl_stream_request_struct *)netperf_request.content.test_specific_data; 208802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response = (struct dlpi_cl_stream_response_struct *)netperf_response.content.test_specific_data; 208902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results = (struct dlpi_cl_stream_results_struct *)netperf_response.content.test_specific_data; 209002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 209102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 209202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_dlpi_cl_stream: entered...\n"); 209302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 209402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 209502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 209602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen descriptor with all the desired */ 209702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 209802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 209902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the socket sizes cannot be changed, then we will */ 210002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 210102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 210202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 210302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 210402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 210502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 210602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 210702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 210802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 210902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 211002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: setting the response type...\n"); 211102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 211202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 211302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = DLPI_CL_STREAM_RESPONSE; 211502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 2) { 211702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: the response type is set...\n"); 211802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 211902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 212002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset */ 212202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = (char *)malloc(DATABUFFERLEN); 212302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (message == NULL) { 212402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", DATABUFFERLEN); 212502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 212602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 212702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variable to be at the desired */ 212902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignment with the desired offset. */ 213002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 213202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: requested alignment of %d\n", 213302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->recv_alignment); 213402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 213502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 213602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_ptr = ALIGN_BUFFER(message, dlpi_cl_stream_request->recv_alignment, dlpi_cl_stream_request->recv_offset); 213802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_stream_request->message_size > 0) { 214002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = dlpi_cl_stream_request->message_size; 214102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 214202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 214302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = 4096; 214402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 214502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 214602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = message_ptr; 214702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.maxlen = BUFSIZ; 214902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.len = 0; 215002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.buf = rctl_data; 215102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 215302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 215402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_stream: receive alignment and offset set...\n"); 215502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 215602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 215702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 215902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: grabbing a descriptor...\n"); 216002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 216102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 216202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 216302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 216402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 216502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 216602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 216702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 216802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 216902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 217002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 217102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 217202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 217302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 217402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 217502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 217602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_cl_stream_request->dlpi_device; 217702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((dlpi_cl_stream_request->dev_name_len + 3) / 4); 217802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 217902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 218002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 218102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 218202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = htonl(*charword); 218402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 218502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 218602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 218702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_descriptor = dl_open(dlpi_cl_stream_request->dlpi_device, 218902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->ppa); 219002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (data_descriptor < 0) { 219102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 219202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 219302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 219402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 219502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 219602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The initiator may have wished-us to modify the window */ 219702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes. We should give it a shot. If he didn't ask us to change the */ 219802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes, we should let him know what sizes were in use at this end. */ 219902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If none of this code is compiled-in, then we will tell the */ 220002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initiator that we were unable to play with the sizes by */ 220102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* setting the size in the response to -1. */ 220202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 220402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_stream_request->recv_win_size) { 220602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->recv_win_size = -1; 220702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 220802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* the system won't let us play with the buffers */ 221002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->recv_win_size = -1; 221202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 221402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->test_length = dlpi_cl_stream_request->test_length; 221602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the sap and retrieve the dlsap assigned by the system */ 221802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->station_addr_len = 14; /* arbitrary */ 221902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(data_descriptor, 222002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_request->sap, 222102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DL_CLDLS, 222202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)dlpi_cl_stream_response->station_addr, 222302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &dlpi_cl_stream_response->station_addr_len) != 0) { 222402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_stream: bind failure\n"); 222502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 222602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 222702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 222802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 222902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 223002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 223102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 223202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 223302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 223402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a -1 to */ 223502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 223602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 223702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->cpu_rate = 0.0; /* assume no cpu */ 223802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_stream_request->measure_cpu) { 223902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We will pass the rate into the calibration routine. If the */ 224002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user did not specify one, it will be 0.0, and we will do a */ 224102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "real" calibration. Otherwise, all it will really do is */ 224202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* store it away... */ 224302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->measure_cpu = 1; 224402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_response->cpu_rate = calibrate_local_cpu(dlpi_cl_stream_request->cpu_rate); 224502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 224602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 224702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message_size = dlpi_cl_stream_request->message_size; 224802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_time = dlpi_cl_stream_request->test_length; 224902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 225102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 225302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start grabbing. */ 225402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(dlpi_cl_stream_request->measure_cpu); 225602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop will exit when the timer pops, or if we happen to recv a */ 225802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message of less than send_size bytes... */ 225902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 226102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time + PAD_TIME); 226202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 226402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: about to enter inner sanctum.\n"); 226502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 226602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 226702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (!times_up) { 226902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((getmsg(data_descriptor, 227002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &rctl_message, 227102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 227202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags) != 0) || 227302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (data_ind->dl_primitive != DL_UNITDATA_IND)) { 227402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 227502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Again, we have likely hit test-end time */ 227602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 227702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 227802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 227902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "dlpi_recv_cl_stream: getmsg failure: errno %d primitive 0x%x\n", 228002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 228102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_ind->dl_primitive); 228202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 228302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 996; 228402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 228502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 228602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 228702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project messages_recvd++; 228802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 228902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 229102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: got %d messages.\n",messages_recvd); 229202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 229302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 229402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop now exits due timer or < send_size bytes received. */ 229702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(dlpi_cl_stream_request->measure_cpu,&elapsed_time); 229902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (times_up) { 230102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we ended on a timer, subtract the PAD_TIME */ 230202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time -= (float)PAD_TIME; 230302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 230402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 230502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project stop_timer(); 230602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 230702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 230902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_stream: test ended in %f seconds.\n",elapsed_time); 231002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 231102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 231202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We will count the "off" message */ 231502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received = (messages_recvd * message_size) + len; 231602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 231802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 232002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 232102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_stream: got %d bytes\n", 232202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received); 232302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 232402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 232502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = DLPI_CL_STREAM_RESULTS; 232702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->bytes_received = bytes_received; 232802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->messages_recvd = messages_recvd; 232902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->elapsed_time = elapsed_time; 233002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_stream_request->measure_cpu) { 233102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->cpu_util = calc_cpu_util(elapsed_time); 233202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 233302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 233402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_stream_results->cpu_util = -1.0; 233502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 233602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 233702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 233802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 233902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_stream: test complete, sending results.\n"); 234002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 234102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 234202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 234402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 234602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 234702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint send_dlpi_cl_rr(char remote_host[]) 234802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 234902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 235102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal /Remote\n\ 235202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectWindow Size Request Resp. Elapsed Trans.\n\ 235302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Size Size Time Rate \n\ 235402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes frames bytes bytes secs. per sec \n\n"; 235502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 235702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f\n"; 235802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_1 = "\ 236002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d %-6d %-6d %-6.2f %7.2f \n"; 236102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_2 = "\ 236202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d\n"; 236302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 236502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal /Remote\n\ 236602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectWindow Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem\n\ 236702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Size Size Time Rate local remote local remote\n\ 236802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectframes frames bytes bytes secs. per sec %% %% us/Tr us/Tr\n\n"; 236902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 237102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f\n"; 237202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_1 = "\ 237402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d %-6d %-6d %-6.2f %-6.2f %-6.2f %-6.2f %-6.3f %-6.3f\n"; 237502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_2 = "\ 237702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d\n"; 237802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\ 238002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectAlignment Offset\n\ 238102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal Remote Local Remote\n\ 238202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Send Recv\n\ 238302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %5d %5d %5d\n"; 238402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 238702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int dlsap_len; 238902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 239002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *send_message_ptr; 239102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *recv_message_ptr; 239202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_message_ptr; 239302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char sctl_data[BUFSIZ]; 239402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char rctl_data[BUFSIZ]; 239502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char dlsap[BUFSIZ]; 239602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 239702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 239802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf sctl_message; 239902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf rctl_message; 240002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* these are to make reading some of the DLPI control messages easier */ 240202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_ind_t *data_ind = (dl_unitdata_ind_t *)rctl_data; 240302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_req_t *data_req = (dl_unitdata_req_t *)sctl_data; 240402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_uderror_ind_t *uder_ind = (dl_uderror_ind_t *)rctl_data; 240502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int nummessages; 240702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int send_descriptor; 240802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 240902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_xferd; 241002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 241202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 241302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 241402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 241502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 241602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 241802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timing stuff */ 241902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define MAX_KEPT_TIMES 1024 242002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int time_index = 0; 242102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int unused_buckets; 242202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int kept_times[MAX_KEPT_TIMES]; 242302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sleep_usecs; 242402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int total_times=0; 242502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timezone dummy_zone; 242602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval send_time; 242702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval recv_time; 242802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval sleep_timeval; 242902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 243002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 243102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_request_struct *dlpi_cl_rr_request; 243202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_response_struct *dlpi_cl_rr_response; 243302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_results_struct *dlpi_cl_rr_result; 243402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 243502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request = 243602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_request_struct *)netperf_request.content.test_specific_data; 243702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response = 243802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_response_struct *)netperf_response.content.test_specific_data; 243902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_result = 244002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_results_struct *)netperf_response.content.test_specific_data; 244102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to zero out the times, so we can detect unused entries. */ 244302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 244402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index = 0; 244502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (time_index < MAX_KEPT_TIMES) { 244602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kept_times[time_index] = 0; 244702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index += 1; 244802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 244902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index = 0; 245002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 245102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 245202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 245302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DLPI CL REQUEST/RESPONSE TEST\n"); 245402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) 245502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,cpu_title,format_units()); 245602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 245702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 245802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 245902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 246002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters */ 246102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 246202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 246302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = 0; 246402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 246502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 246602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset */ 246702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = (char *)malloc(req_size+MAXALIGNMENT+MAXOFFSET); 246802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_message_ptr == NULL) { 246902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", req_size+MAXALIGNMENT+MAXOFFSET); 247002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 247102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 247202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = (char *)(( (long)temp_message_ptr + 247302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long) local_send_align - 1) & 247402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long) local_send_align - 1)); 247502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = send_message_ptr + local_send_offset; 247602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = req_size; 247702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = req_size; 247802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_message_ptr; 247902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 248002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = (char *)malloc(rsp_size+MAXALIGNMENT+MAXOFFSET); 248102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (temp_message_ptr == NULL) { 248202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", rsp_size+MAXALIGNMENT+MAXOFFSET); 248302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 248402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 248502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = (char *)(( (long)temp_message_ptr + 248602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (long) local_recv_align - 1) & 248702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ~((long) local_recv_align - 1)); 248802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = recv_message_ptr + local_recv_offset; 248902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = rsp_size; 249002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 249102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = recv_message_ptr; 249202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.maxlen = BUFSIZ; 249402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = 0; 249502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.buf = sctl_data; 249602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.maxlen = BUFSIZ; 249802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.len = 0; 249902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.buf = rctl_data; 250002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 250102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* lets get ourselves a file descriptor */ 250202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 250302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_descriptor = dl_open(loc_dlpi_device,loc_ppa); 250402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_descriptor < 0){ 250502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_dlpi_cl_rr: dlpi cl rr send descriptor"); 250602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 250702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 250802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 250902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 251002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_rr: send_descriptor obtained...\n"); 251102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 251202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 251302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the sap to the descriptor and get the dlsap */ 251402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap_len = BUFSIZ; 251502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(send_descriptor, 251602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap, 251702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DL_CLDLS, 251802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlsap, 251902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &dlsap_len) != 0) { 252002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_rr: bind failure\n"); 252102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 252202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 252302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 252402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 252502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Modify the local socket size. If the user has not requested that */ 252602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the socket buffers be altered, we will try to find-out what their */ 252702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* values are. If we cannot touch the socket buffer in any way, we */ 252802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will set the values to -1 to indicate that. The receive socket */ 252902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* must have enough space to hold addressing information so += a */ 253002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizeof struct sockaddr_in to it. */ 253102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 253202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is actually nothing code, and should be replaced with the */ 253302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alalagous calls in the STREAM test where the window size is set */ 253402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with the HP DLPI Extension. raj 8/94 */ 253502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_SNDBUF 253602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsw_size > 0) { 253702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 253802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_rr: local window size altered from system default...\n"); 253902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," window: %d\n",lsw_size); 254002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lrw_size > 0) { 254302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 254402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_rr: remote window size altered from system default...\n"); 254502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," remote: %d\n",lrw_size); 254602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 254902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the size actually became, and report */ 255102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that back to the user. If the call fails, we will just report a -1 */ 255202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the recv buffer size. */ 255302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 255502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_rr: socket sizes determined...\n"); 255602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where," send: %d recv: %d\n",lsw_size,lrw_size); 255702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 255802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* SO_SNDBUF */ 256002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 256102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size = -1; 256202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size = -1; 256302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 256402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* SO_SNDBUF */ 256502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 256602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 256702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 256802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 256902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 257002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 257102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back. If */ 257202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there is no idle counter in the kernel idle loop, the */ 257302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local_cpu_rate will be set to -1. */ 257402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 257502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 257602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 257702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 257802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 257902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the socket */ 258002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* paramters on the other side at this point, hence the reason for */ 258102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the values being passed in the setup message. If the user did */ 258202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not specify any of the parameters, they will be passed as 0, which */ 258302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will indicate to the remote that no changes beyond the system's */ 258402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* default should be used. Alignment is the exception, it will */ 258502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* default to 8, which will be no alignment alterations. */ 258602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 258702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_DLPI_CL_RR; 258802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->recv_win_size = rrw_size; 258902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->send_win_size = rsw_size; 259002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->recv_alignment = remote_recv_align; 259102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->recv_offset = remote_recv_offset; 259202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->send_alignment = remote_send_align; 259302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->send_offset = remote_send_offset; 259402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->request_size = req_size; 259502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->response_size = rsp_size; 259602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->measure_cpu = remote_cpu_usage; 259702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->cpu_rate = remote_cpu_rate; 259802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->ppa = rem_ppa; 259902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->sap = dlpi_sap; 260002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->dev_name_len = strlen(rem_dlpi_device); 260102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(dlpi_cl_rr_request->dlpi_device, 260202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_dlpi_device); 260302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 260402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 260502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 260602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 260702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 260802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 260902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 261002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 261102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 261202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 261302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 261402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 261502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 261602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 261702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_cl_rr_request->dlpi_device; 261802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((strlen(rem_dlpi_device) + 3) / 4); 261902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 262102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 262202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 262302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = ntohl(*charword); 262502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 262602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 262702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 262802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 262902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 263002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->test_length = test_time; 263102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 263202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 263302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->test_length = test_trans * -1; 263402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 263502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 263602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 263702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_dlpi_cl_rr: requesting DLPI CL request/response test\n"); 263802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 263902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 264002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 264102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 264202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant */ 264302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket parameters for this test type. We will put them back into */ 264402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the variables here so they can be displayed if desired. The */ 264502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote will have calibrated CPU if necessary, and will have done */ 264602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the needed set-up we will have calibrated the cpu locally */ 264702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before sending the request, and will grab the counter value right */ 264802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the connect returns. The remote will grab the counter right */ 264902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* after the accept call. This saves the hassle of extra messages */ 265002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* being sent for the tests. */ 265102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 265202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 265302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 265402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 265502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 265602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 265702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size = dlpi_cl_rr_response->recv_win_size; 265802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size = dlpi_cl_rr_response->send_win_size; 265902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage= dlpi_cl_rr_response->measure_cpu; 266002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = dlpi_cl_rr_response->cpu_rate; 266102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 266202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the destination addressing control info */ 266302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_primitive = DL_UNITDATA_REQ; 266402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)(dlpi_cl_rr_response->station_addr), 266502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((char *)data_req + sizeof(dl_unitdata_req_t)), 266602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->station_addr_len); 266702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_offset = sizeof(dl_unitdata_req_t); 266802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_length = dlpi_cl_rr_response->station_addr_len; 266902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there is a dl_priority structure too, but I am ignoring it for */ 267002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the time being. */ 267102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = sizeof(dl_unitdata_req_t) + 267202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_length; 267302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* famous last words - some DLPI providers get unhappy if the 267402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project priority stuff is not initialized. fix from Nicolas Thomas. */ 267502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_min = DL_QOS_DONT_CARE; 267602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_max = DL_QOS_DONT_CARE; 267702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 267802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 267902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 268002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 268102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 268202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 268302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 268402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 268502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either the */ 268602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connect would have failed, or the previous response would have */ 268702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indicated a problem. I failed to see the value of the extra */ 268802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message after the accept on the remote. If it failed, we'll see it */ 268902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here. If it didn't, we might as well start pumping data. */ 269002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 269102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a request/response test, they */ 269202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can be either time or transaction based. */ 269302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 269402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 269502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 269602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 269702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 269802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 269902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 270002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 270102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to send a number of bytes. */ 270202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = test_bytes; 270302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 270402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 270502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 270602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 270702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 270802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 270902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 271002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 271102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 271202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We use an "OR" to control test execution. When the test is */ 271302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* controlled by time, the byte count check will always return false. */ 271402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* When the test is controlled by byte count, the time test will */ 271502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* always return false. When the test is finished, the whole */ 271602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* expression will go false and we will stop sending data. I think I */ 271702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just arbitrarily decrement trans_remaining for the timed test, but */ 271802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will not do that just yet... One other question is whether or not */ 271902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the send buffer and the receive buffer should be the same buffer. */ 272002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 272102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the request */ 272202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 272302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gettimeofday(&send_time,&dummy_zone); 272402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 272502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(putmsg(send_descriptor, 272602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sctl_message, 272702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 272802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0) != 0) { 272902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 273002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We likely hit */ 273102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* test-end time. */ 273202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 273302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there is more we could do here, but it can wait */ 273502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_dlpi_cl_rr: data send error"); 273602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 273702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 273902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the response. at some point, we will need to handle */ 274002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sending responses which are greater than the datalink MTU. we */ 274102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* may also want to add some DLPI error checking, but for now we */ 274202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will ignore that and just let errors stop the test with little */ 274302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indication of what might actually be wrong. */ 274402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 274502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((getmsg(send_descriptor, 274602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &rctl_message, 274702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 274802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags) != 0) || 274902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (data_ind->dl_primitive != DL_UNITDATA_IND)) { 275002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 275102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Again, we have likely hit test-end time */ 275202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 275302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 275402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 275502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "send_dlpi_cl_rr: recv error: errno %d primitive 0x%x\n", 275602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 275702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_ind->dl_primitive); 275802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 275902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 276002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 276102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 276202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project gettimeofday(&recv_time,&dummy_zone); 276302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 276402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now we do some arithmatic on the two timevals */ 276502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_time.tv_usec < send_time.tv_usec) { 276602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we wrapped around a second */ 276702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_time.tv_usec += 1000000; 276802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_time.tv_sec -= 1; 276902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 277002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and store it away */ 277202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kept_times[time_index] = (recv_time.tv_sec - send_time.tv_sec) * 1000000; 277302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kept_times[time_index] += (recv_time.tv_usec - send_time.tv_usec); 277402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we may wish to sleep for some period of */ 277602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* time, so we see how long that last transaction just took, */ 277702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and sleep for the difference of that and the interval. We */ 277802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will not sleep if the time would be less than a */ 277902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* millisecond. */ 278002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (interval_usecs > 0) { 278102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep_usecs = interval_usecs - kept_times[time_index]; 278202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sleep_usecs > 1000) { 278302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we sleep */ 278402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep_timeval.tv_sec = sleep_usecs / 1000000; 278502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep_timeval.tv_usec = sleep_usecs % 1000000; 278602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project select(0, 278702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 278802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 278902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 279002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sleep_timeval); 279102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 279202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 279302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 279402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now up the time index */ 279502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index = (time_index +1)%MAX_KEPT_TIMES; 279602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 279702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 279802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 279902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 280002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 280202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 3) { 280302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Transaction %d completed\n",nummessages); 280402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 280502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 280702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 280902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the elapsed time for the test, and */ 281002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will also store-away the necessaries for cpu utilization */ 281102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 281202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being measured? */ 281302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how long did we really run? */ 281402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 281502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have */ 281602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calculated service demand and all those interesting things. If it */ 281702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* wasn't supposed to care, it will return obvious values. */ 281802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 281902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 282002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 282102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 282202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 282302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 282402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 282502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 282602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: remote error"); 282702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 282802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 282902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 283002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 283102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our thruput was for the test. In the future, */ 283202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may want to include a calculation of the thruput measured by */ 283302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the remote, but it should be the case that for a UDP stream test, */ 283402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that the two numbers should be *very* close... We calculate */ 283502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bytes_sent regardless of the way the test length was controlled. */ 283602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If it was time, we needed to, and if it was by bytes, the user may */ 283702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have specified a number of bytes that wasn't a multiple of the */ 283802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size, so we really didn't send what he asked for ;-) We use */ 283902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = (req_size * nummessages) + (rsp_size * nummessages); 284102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = calc_thruput(bytes_xferd); 284202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 284402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 284502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) */ 284602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course, some of the information might be bogus because */ 284702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was no idle counter in the kernel(s). We need to make */ 284802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a note of this for the user's benefit...*/ 284902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 285002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_rate == 0.0) { 285102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"WARNING WARNING WARNING WARNING WARNING WARNING WARNING!\n"); 285202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Local CPU usage numbers based on process information only!\n"); 285302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 285402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 285502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 285602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will */ 285702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* multiply the number of transaction by 1024 to get */ 285802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "good" numbers */ 285902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand((double) nummessages*1024, 286002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 286102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 286202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 286302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 286402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 286502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = -1.0; 286602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = -1.0; 286702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 286802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 286902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 287002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_rate == 0.0) { 287102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"DANGER DANGER DANGER DANGER DANGER DANGER DANGER!\n"); 287202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"Remote CPU usage numbers based on process information only!\n"); 287302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 287402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 287502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = dlpi_cl_rr_result->cpu_util; 287602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will */ 287702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* multiply the number of transaction by 1024 to get */ 287802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "good" numbers */ 287902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand((double) nummessages*1024, 288002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 288102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 288202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_result->num_cpus); 288302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 288402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 288502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = -1.0; 288602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = -1.0; 288702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 288802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 288902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 289002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 289102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 289202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 289302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 289402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 289502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 289602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 289702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 289802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 289902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 290002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 290102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 290202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 290302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand); 290402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 290502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 290602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 290702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 290802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 290902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 291002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 291102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 291202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 291302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 291402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_1, /* the format string */ 291502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, /* local sendbuf size */ 291602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size, 291702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 291802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* guess */ 291902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 292002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time, 292102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 292202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 292302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 292402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); /* remote service demand */ 292502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 292602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_2, 292702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size, 292802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size); 292902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 293002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 293102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 293202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 293302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 293402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 293502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 293602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 293702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 293802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time); 293902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 294002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 294102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 294202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 294302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_1, /* the format string */ 294402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size, 294502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size, 294602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 294702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* how large were the responses */ 294802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 294902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages/elapsed_time); 295002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 295102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_2, 295202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size, /* remote recvbuf size */ 295302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size); 295402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 295602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 295702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 295802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 296002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 296102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 296202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 296302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 296402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 296502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 296602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 296702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 296802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* UDP statistics, the alignments of the sends and receives */ 296902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 297002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 297102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 297202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kept_times[MAX_KEPT_TIMES] = 0; 297302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index = 0; 297402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (time_index < MAX_KEPT_TIMES) { 297502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (kept_times[time_index] > 0) { 297602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project total_times += kept_times[time_index]; 297702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 297802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else 297902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unused_buckets++; 298002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_index += 1; 298102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 298202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project total_times /= (MAX_KEPT_TIMES-unused_buckets); 298302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 298402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Average response time %d usecs\n", 298502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project total_times); 298602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 298702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 298802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 298902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 299102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_dlpi_cl_rr() 299202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 299302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 299502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int data_descriptor; 299602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 299702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int measure_cpu; 299802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *recv_message_ptr; 300002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *send_message_ptr; 300102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char sctl_data[BUFSIZ]; 300202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char rctl_data[BUFSIZ]; 300302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char dlsap[BUFSIZ]; 300402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 300502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 300602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf sctl_message; 300702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf rctl_message; 300802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 300902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* these are to make reading some of the DLPI control messages easier */ 301002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_ind_t *data_ind = (dl_unitdata_ind_t *)rctl_data; 301102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_unitdata_req_t *data_req = (dl_unitdata_req_t *)sctl_data; 301202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dl_uderror_ind_t *uder_ind = (dl_uderror_ind_t *)rctl_data; 301302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_received; 301502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 301602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 301702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_request_struct *dlpi_cl_rr_request; 301902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_response_struct *dlpi_cl_rr_response; 302002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_cl_rr_results_struct *dlpi_cl_rr_results; 302102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request = 302302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_request_struct *)netperf_request.content.test_specific_data; 302402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response = 302502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_response_struct *)netperf_response.content.test_specific_data; 302602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_results = 302702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct dlpi_cl_rr_results_struct *)netperf_response.content.test_specific_data; 302802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 303002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_dlpi_cl_rr: entered...\n"); 303102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 303202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 303302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 303402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen descriptor with all the desired */ 303502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 303602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 303702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the descriptor sizes cannot be changed, then we will */ 303802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 303902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 304002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 304102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 304302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 304402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 304502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 304602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 304802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_rr: setting the response type...\n"); 304902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 305002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 305102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 305202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = DLPI_CL_RR_RESPONSE; 305302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 305402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 305502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_rr: the response type is set...\n"); 305602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 305702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 305802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 305902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset */ 306002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = (char *)malloc(DATABUFFERLEN); 306102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (message == NULL) { 306202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", DATABUFFERLEN); 306302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 306402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 306502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 306602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variables to be at the desired */ 306702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignments with the desired offsets. */ 306802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 306902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 307002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 307102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_rr: requested recv alignment of %d offset %d\n", 307202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->recv_alignment, 307302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->recv_offset); 307402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 307502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_rr: requested send alignment of %d offset %d\n", 307602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->send_alignment, 307702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->send_offset); 307802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 307902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 308002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = ALIGN_BUFFER(message, dlpi_cl_rr_request->recv_alignment, dlpi_cl_rr_request->recv_offset); 308202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = dlpi_cl_rr_request->request_size; 308302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 308402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = recv_message_ptr; 308502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = ALIGN_BUFFER(message, dlpi_cl_rr_request->send_alignment, dlpi_cl_rr_request->send_offset); 308702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = dlpi_cl_rr_request->response_size; 308802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = dlpi_cl_rr_request->response_size; 308902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_message_ptr; 309002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.maxlen = BUFSIZ; 309202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = 0; 309302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.buf = sctl_data; 309402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.maxlen = BUFSIZ; 309602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.len = 0; 309702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rctl_message.buf = rctl_data; 309802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 310002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_rr: receive alignment and offset set...\n"); 310102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_cl_rr: grabbing a socket...\n"); 310202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 310302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 310402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 310502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 310602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 310702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 310802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 310902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 311002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 311102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 311202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 311302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 311402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 311502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 311602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 311702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 311802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 311902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_cl_rr_request->dlpi_device; 312002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((dlpi_cl_rr_request->dev_name_len + 3) / 4); 312102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 312302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 312402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 312502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = htonl(*charword); 312702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 312802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 312902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 313002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_descriptor = dl_open(dlpi_cl_rr_request->dlpi_device, 313202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->ppa); 313302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (data_descriptor < 0) { 313402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 313502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 313602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 313702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 313802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The initiator may have wished-us to modify the window */ 314102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes. We should give it a shot. If he didn't ask us to change the */ 314202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes, we should let him know what sizes were in use at this end. */ 314302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If none of this code is compiled-in, then we will tell the */ 314402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initiator that we were unable to play with the sizes by */ 314502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* setting the size in the response to -1. */ 314602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 314802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_rr_request->recv_win_size) { 315002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 315102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_rr_request->send_win_size) { 315302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 315402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the sizes actually became, and report */ 315602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them back to the user. If the calls fail, we will just report a -1 */ 315702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the buffer size. */ 315802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* the system won't let us play with the buffers */ 316002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->recv_win_size = -1; 316202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->send_win_size = -1; 316302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 316502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the sap and retrieve the dlsap assigned by the system */ 316702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->station_addr_len = 14; /* arbitrary */ 316802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(data_descriptor, 316902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->sap, 317002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DL_CLDLS, 317102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)dlpi_cl_rr_response->station_addr, 317202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &dlpi_cl_rr_response->station_addr_len) != 0) { 317302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_dlpi_cl_rr: bind failure\n"); 317402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 317502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 317602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 317702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 317802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 317902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 318102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 318202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 318302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a 0.0 to */ 318402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 318502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->cpu_rate = 0.0; /* assume no cpu */ 318702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_rr_request->measure_cpu) { 318802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->measure_cpu = 1; 318902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_response->cpu_rate = calibrate_local_cpu(dlpi_cl_rr_request->cpu_rate); 319002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 319102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 319302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 319502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start receiving. */ 319602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(dlpi_cl_rr_request->measure_cpu); 319802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_rr_request->test_length > 0) { 320002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 320102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 320202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(dlpi_cl_rr_request->test_length + PAD_TIME); 320302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 320402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectelse { 320502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 320602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = dlpi_cl_rr_request->test_length * -1; 320702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 320802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 320902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 321002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 321102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the request from the other side. at some point we need */ 321202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to handle "logical" requests and responses which are larger */ 321302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* than the data link MTU */ 321402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 321502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((getmsg(data_descriptor, 321602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &rctl_message, 321702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 321802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags) != 0) || 321902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (data_ind->dl_primitive != DL_UNITDATA_IND)) { 322002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 322102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Again, we have likely hit test-end time */ 322202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 322302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 322402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 322502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "dlpi_recv_cl_rr: getmsg failure: errno %d primitive 0x%x\n", 322602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno, 322702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_ind->dl_primitive); 322802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 322902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " recevied %u transactions\n", 323002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 323102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 323202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 995; 323302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 323402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 323502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 323602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 323702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, send the response to the remote. first copy the dlsap */ 323802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* information from the receive to the sending control message */ 323902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 324002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_offset = sizeof(dl_unitdata_req_t); 324102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bcopy((char *)data_ind + data_ind->dl_src_addr_offset, 324202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)data_req + data_req->dl_dest_addr_offset, 324302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_ind->dl_src_addr_length); 324402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_dest_addr_length = data_ind->dl_src_addr_length; 324502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_primitive = DL_UNITDATA_REQ; 324602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* be sure to initialize the priority fields. fix from Nicholas 324702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Thomas */ 324802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_min = DL_QOS_DONT_CARE; 324902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_req->dl_priority.dl_max = DL_QOS_DONT_CARE; 325002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sctl_message.len = sizeof(dl_unitdata_req_t) + 325202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data_ind->dl_src_addr_length; 325302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(putmsg(data_descriptor, 325402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sctl_message, 325502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 325602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0) != 0) { 325702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 325802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We likely hit */ 325902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* test-end time. */ 326002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 326102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 326202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there is more we could do here, but it can wait */ 326302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 326402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "dlpi_recv_cl_rr: putmsg failure: errno %d\n", 326502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 326602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 326702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 993; 326802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 326902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 327002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 327102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 327202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received++; 327302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 327402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 327502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 327602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 327702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 327802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 327902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_rr: Transaction %d complete.\n", 328002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 328102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 328202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 328302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 328502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop now exits due to timeout or transaction count being */ 328802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reached */ 328902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 329002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(dlpi_cl_rr_request->measure_cpu,&elapsed_time); 329102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 329202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (times_up) { 329302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we ended the test by time, which was at least 2 seconds */ 329402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* longer than we wanted to run. so, we want to subtract */ 329502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* PAD_TIME from the elapsed_time. */ 329602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time -= PAD_TIME; 329702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 329802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 329902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 330102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 330202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_rr: got %d transactions\n", 330302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 330402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 330502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 330602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_results->bytes_received = (trans_received * 330802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (dlpi_cl_rr_request->request_size + 330902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_request->response_size)); 331002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_results->trans_received = trans_received; 331102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_results->elapsed_time = elapsed_time; 331202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_cl_rr_request->measure_cpu) { 331302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_cl_rr_results->cpu_util = calc_cpu_util(elapsed_time); 331402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 331502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 331602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 331702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 331802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_cl_rr: test complete, sending results.\n"); 331902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 332002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 332102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 332302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 332502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint 332702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_dlpi_co_rr() 332802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 332902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *message; 333102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET s_listen,data_descriptor; 333202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int measure_cpu; 333402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int flags = 0; 333602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *recv_message_ptr; 333702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *send_message_ptr; 333802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf send_message; 333902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct strbuf recv_message; 334002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 334102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_received; 334202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 334302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int request_bytes_remaining; 334402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int timed_out = 0; 334502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 334602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 334702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_request_struct *dlpi_co_rr_request; 334802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_response_struct *dlpi_co_rr_response; 334902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct dlpi_co_rr_results_struct *dlpi_co_rr_results; 335002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request = (struct dlpi_co_rr_request_struct *)netperf_request.content.test_specific_data; 335202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response = (struct dlpi_co_rr_response_struct *)netperf_response.content.test_specific_data; 335302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_results = (struct dlpi_co_rr_results_struct *)netperf_response.content.test_specific_data; 335402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 335602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_dlpi_co_rr: entered...\n"); 335702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 335802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 335902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 336002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen socket with all the desired */ 336102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 336202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 336302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the socket sizes cannot be changed, then we will */ 336402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 336502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 336602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 336702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 336802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 336902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 337002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 337102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 337202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 337402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: setting the response type...\n"); 337502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 337602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 337702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = DLPI_CO_RR_RESPONSE; 337902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 338002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 338102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: the response type is set...\n"); 338202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 338302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 338402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 338502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer with the requested alignment and offset */ 338602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message = (char *)malloc(DATABUFFERLEN); 338702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (message == NULL) { 338802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("malloc(%d) failed!\n", DATABUFFERLEN); 338902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 339002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 339102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variables to be at the desired */ 339302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignments with the desired offsets. */ 339402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 339602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 339702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: requested recv alignment of %d offset %d\n", 339802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->recv_alignment, 339902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->recv_offset); 340002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 340102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: requested send alignment of %d offset %d\n", 340202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->send_alignment, 340302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->send_offset); 340402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 340502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 340602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 340702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message_ptr = ALIGN_BUFFER(message, dlpi_co_rr_request->recv_alignment, dlpi_co_rr_request->recv_offset); 340802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.maxlen = dlpi_co_rr_request->request_size; 340902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.len = 0; 341002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf = recv_message_ptr; 341102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 341202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message_ptr = ALIGN_BUFFER(message, dlpi_co_rr_request->send_alignment, dlpi_co_rr_request->send_offset); 341302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.maxlen = dlpi_co_rr_request->response_size; 341402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.len = dlpi_co_rr_request->response_size; 341502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf = send_message_ptr; 341602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 341702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 341802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: receive alignment and offset set...\n"); 341902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: send_message.buf %x .len %d .maxlen %d\n", 342002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_message.buf,send_message.len,send_message.maxlen); 342102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: recv_message.buf %x .len %d .maxlen %d\n", 342202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_message.buf,recv_message.len,recv_message.maxlen); 342302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 342402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 342502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 342602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Let's clear-out our sockaddr for the sake of cleanlines. Then we */ 342702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can put in OUR values !-) At some point, we may want to nail this */ 342802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket to a particular network-level address, but for now, */ 342902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* INADDR_ANY should be just fine. */ 343002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 343102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Grab a socket to listen on, and then listen on it. */ 343202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 343302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 343402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_dlpi_co_rr: grabbing a socket...\n"); 343502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 343602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 343702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 343802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* lets grab a file descriptor for a particular link */ 343902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 344002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __alpha 344102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 344202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ok - even on a DEC box, strings are strings. I din't really want */ 344302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to ntohl the words of a string. since I don't want to teach the */ 344402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_ and recv_ _request and _response routines about the types, */ 344502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* I will put "anti-ntohl" calls here. I imagine that the "pure" */ 344602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* solution would be to use XDR, but I am still leary of being able */ 344702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to find XDR libs on all platforms I want running netperf. raj */ 344802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 344902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *charword; 345002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *initword; 345102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int *lastword; 345202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 345302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initword = (int *) dlpi_co_rr_request->dlpi_device; 345402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lastword = initword + ((dlpi_co_rr_request->dev_name_len + 3) / 4); 345502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 345602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project for (charword = initword; 345702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword < lastword; 345802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project charword++) { 345902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 346002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *charword = htonl(*charword); 346102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 346202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 346302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __alpha */ 346402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 346502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((data_descriptor = dl_open(dlpi_co_rr_request->dlpi_device, 346602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->ppa)) < 0) { 346702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 346802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 346902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 347002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 347102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 347202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* bind the file descriptor to a sap and get the resultant dlsap */ 347302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->station_addr_len = 14; /*arbitrary needs fixing */ 347402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dl_bind(data_descriptor, 347502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->sap, 347602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DL_CODLS, 347702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)dlpi_co_rr_response->station_addr, 347802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &dlpi_co_rr_response->station_addr_len) != 0) { 347902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 348002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 348102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 348202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 348302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 348402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The initiator may have wished-us to modify the socket buffer */ 348502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes. We should give it a shot. If he didn't ask us to change the */ 348602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sizes, we should let him know what sizes were in use at this end. */ 348702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If none of this code is compiled-in, then we will tell the */ 348802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initiator that we were unable to play with the socket buffer by */ 348902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* setting the size in the response to -1. */ 349002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 349102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DL_HP_SET_LOCAL_WIN_REQ 349202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 349302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->recv_win_size) { 349402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* SMOP */ 349502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 349602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 349702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->send_win_size) { 349802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* SMOP */ 349902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 350002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 350102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, we will find-out what the sizes actually became, and report */ 350202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them back to the user. If the calls fail, we will just report a -1 */ 350302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* back to the initiator for the buffer size. */ 350402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 350502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* the system won't let us play with the buffers */ 350602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 350702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->recv_win_size = -1; 350802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->send_win_size = -1; 350902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DL_HP_SET_LOCAL_WIN_REQ */ 351102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may have been requested to enable the copy avoidance features. */ 351302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can we actually do this with DLPI, the world wonders */ 351402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 351502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->so_rcvavoid) { 351602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_RCV_COPYAVOID 351702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->so_rcvavoid = 0; 351802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 351902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it wasn't compiled in... */ 352002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->so_rcvavoid = 0; 352102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 352202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 352302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 352402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->so_sndavoid) { 352502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_SND_COPYAVOID 352602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->so_sndavoid = 0; 352702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 352802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it wasn't compiled in... */ 352902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->so_sndavoid = 0; 353002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 353102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 353202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 353302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 353402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 353502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 353602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 353702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 353802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a 0.0 to */ 353902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 354002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->cpu_rate = 0.0; /* assume no cpu */ 354202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->measure_cpu) { 354302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->measure_cpu = 1; 354402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_response->cpu_rate = calibrate_local_cpu(dlpi_co_rr_request->cpu_rate); 354502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 354602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 354802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 354902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* accept a connection on this file descriptor. at some point, */ 355002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* dl_accept will "do the right thing" with the last two parms, but */ 355102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* for now it ignores them, so we will pass zeros. */ 355202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 355302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if(dl_accept(data_descriptor, 0, 0) != 0) { 355402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 355502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: error in accept, errno %d\n", 355602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 355702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 355802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 355902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 356002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 356102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 356202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 356302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 356402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 356502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: accept completes on the data connection.\n"); 356602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 356702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 356802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 356902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 357002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start grabbing. */ 357102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(dlpi_co_rr_request->measure_cpu); 357302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop will exit when the sender does a shutdown, which will */ 357502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return a length of zero */ 357602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 357702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->test_length > 0) { 357802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 357902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 358002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(dlpi_co_rr_request->test_length + PAD_TIME); 358102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 358202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectelse { 358302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 358402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = dlpi_co_rr_request->test_length * -1; 358502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 358602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 358702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 358802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_bytes_remaining = dlpi_co_rr_request->request_size; 358902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 359002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the request from the other side. there needs to be some */ 359102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* more login in place for handling messages larger than link mtu, */ 359202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but that can wait for later */ 359302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while(request_bytes_remaining > 0) { 359402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((getmsg(data_descriptor, 359502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 359602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &recv_message, 359702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &flags)) < 0) { 359802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 359902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the timer popped */ 360002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 360102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 360202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 360302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 360402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 360502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"failed getmsg call errno %d\n",errno); 360602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_message.len %d\n",recv_message.len); 360702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_message.len %d\n",send_message.len); 360802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 360902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 361102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 361202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 361302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 361402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 361602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_bytes_remaining -= recv_message.len; 361702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 361902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 362002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (timed_out) { 362102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we hit the end of the test based on time - lets bail out of */ 362202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here now... */ 362302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 362402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 362502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 362602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 362702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_message.len %d\n",recv_message.len); 362802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_message.len %d\n",send_message.len); 362902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 363002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 363102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 363202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, send the response to the remote */ 363302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((putmsg(data_descriptor, 363402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0, 363502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &send_message, 363602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != 0) { 363702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (errno == EINTR) { 363802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test timer has popped */ 363902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 364002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 364102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 364202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 994; 364302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 364402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 364502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 364602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 364702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received++; 364802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 364902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 365002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 365102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 365202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 365302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 365402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: Transaction %d complete\n", 365502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 365602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 365702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 365802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 365902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 366002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 366102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop now exits due to timeout or transaction count being */ 366202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reached */ 366302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 366402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(dlpi_co_rr_request->measure_cpu,&elapsed_time); 366502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 366602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (timed_out) { 366702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we ended the test by time, which was at least 2 seconds */ 366802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* longer than we wanted to run. so, we want to subtract */ 366902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* PAD_TIME from the elapsed_time. */ 367002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time -= PAD_TIME; 367102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 367202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 367302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 367402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 367502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 367602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: got %d transactions\n", 367702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 367802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 367902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 368002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 368102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_results->bytes_received = (trans_received * 368202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (dlpi_co_rr_request->request_size + 368302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_request->response_size)); 368402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_results->trans_received = trans_received; 368502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_results->elapsed_time = elapsed_time; 368602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (dlpi_co_rr_request->measure_cpu) { 368702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_co_rr_results->cpu_util = calc_cpu_util(elapsed_time); 368802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 368902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 369102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 369202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_dlpi_co_rr: test complete, sending results.\n"); 369302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 369402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 369502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 369702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 369802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 369902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* this routine will display the usage string for the DLPI tests */ 370102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 370202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_dlpi_usage() 370302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 370502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fwrite(dlpi_usage, sizeof(char), strlen(dlpi_usage), stdout); 370602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 370702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 370902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* this routine will scan the command line for DLPI test arguments */ 371002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 371102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project scan_dlpi_args(int argc, char *argv[]) 371202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 371302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project extern int optind, opterrs; /* index of first unused arg */ 371402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project extern char *optarg; /* pointer to option string */ 371502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 371602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int c; 371702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 371802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char arg1[BUFSIZ], /* argument holders */ 371902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project arg2[BUFSIZ]; 372002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 372102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (no_control) { 372202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 372302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "The DLPI tests do not know how to run with no control connection\n"); 372402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 372502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 372602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 372702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Go through all the command line arguments and break them */ 372802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* out. For those options that take two parms, specifying only */ 372902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the first will set both to that value. Specifying only the */ 373002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* second will leave the first untouched. To change only the */ 373102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first, use the form first, (see the routine break_args.. */ 373202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 373302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define DLPI_ARGS "D:hM:m:p:r:s:W:w:" 373402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 373502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((c= getopt(argc, argv, DLPI_ARGS)) != EOF) { 373602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (c) { 373702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case '?': 373802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'h': 373902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_dlpi_usage(); 374002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 374102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'D': 374202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the dlpi device file name(s) */ 374302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 374402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 374502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(loc_dlpi_device,arg1); 374602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 374702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(rem_dlpi_device,arg2); 374802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 374902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 375002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the send size */ 375102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = atoi(optarg); 375202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 375302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 375402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the recv size */ 375502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = atoi(optarg); 375602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 375702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'p': 375802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the local/remote ppa */ 375902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 376002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 376102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_ppa = atoi(arg1); 376202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 376302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_ppa = atoi(arg2); 376402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 376502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'r': 376602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the request/response sizes */ 376702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 376802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 376902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size = atoi(arg1); 377002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 377102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size = atoi(arg2); 377202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 377302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 's': 377402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the 802.2 sap for the test */ 377502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project dlpi_sap = atoi(optarg); 377602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 377702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'w': 377802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set local window sizes */ 377902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 378002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 378102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsw_size = atoi(arg1); 378202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 378302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lrw_size = atoi(arg2); 378402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 378502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'W': 378602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set remote window sizes */ 378702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 378802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 378902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsw_size = atoi(arg1); 379002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 379102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rrw_size = atoi(arg2); 379202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 379302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 379402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 379502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 379602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 379702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 379802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_DLPI */ 3799