102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef lint 202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar nettest_sdp[]="\ 302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project@(#)nettest_sdp.c (c) Copyright 2007 Hewlett-Packard Co. Version 2.4.4"; 402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define DIRTY 602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define WANT_HISTOGRAM 702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define WANT_INTERVALS 802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* lint */ 902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* nettest_sdp.c */ 1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* scan_sdp_args() get the sdp command line args */ 1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the actual test routines... */ 1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_sdp_stream() perform a sdp stream test */ 2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_sdp_stream() */ 2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* send_sdp_rr() perform a sdp request/response */ 2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* recv_sdp_rr() */ 2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* */ 2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* relies on create_data_socket in nettest_bsd.c */ 2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/****************************************************************/ 2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if HAVE_CONFIG_H 2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <config.h> 2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WANT_SDP) 3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <fcntl.h> 3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <errno.h> 3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <signal.h> 3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h> 3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <string.h> 3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <time.h> 4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef NOSTDLIBH 4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <malloc.h> 4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* NOSTDLIBH */ 4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdlib.h> 4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* NOSTDLIBH */ 4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if !defined(__VMS) 4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/ipc.h> 4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* !defined(__VMS) */ 4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <unistd.h> 5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/types.h> 5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/socket.h> 5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netinet/in.h> 5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netinet/tcp.h> 5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <arpa/inet.h> 5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <netdb.h> 5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* would seem that not all sdp.h files define a MSG_EOF, but that 5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project MSG_EOF can be the same as MSG_FIN so lets work with that 5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project assumption. initial find by Jon Pedersen. raj 2006-02-01 */ 6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef MSG_EOF 6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef MSG_FIN 6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define MSG_EOF MSG_FIN 6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#error Must have either MSG_EOF or MSG_FIN defined 6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h" 6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h" 7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* get some of the functions from nettest_bsd.c */ 7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_bsd.h" 7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "nettest_sdp.h" 7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef __sgi 7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/time.h> 7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* __sgi */ 7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "hist.h" 7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectextern int first_burst_size; 8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_FIRST_BURST */ 8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* these variables are specific to SDP tests. declare */ 8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* them static to make them global only to this file. */ 8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic int 9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project msg_count = 0, /* number of messages to transmit on association */ 9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project non_block = 0, /* default to blocking sockets */ 9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_associations = 1; /* number of associations on the endpoint */ 9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic int confidence_iteration; 9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic char local_cpu_method; 9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic char remote_cpu_method; 9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic struct timeval time_one; 10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic struct timeval time_two; 10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic HIST time_hist; 10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar sdp_usage[] = "\n\ 10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectUsage: netperf [global options] -- [test options] \n\ 10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\ 10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSDP Sockets Test Options:\n\ 11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -b number Send number requests at the start of _RR tests\n\ 11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -D [L][,R] Set SDP_NODELAY locally and/or remotely\n\ 11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -h Display this text\n\ 11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -H name,fam Use name (or IP) and family as target of data connection\n\ 11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -L name,fam Use name (or IP) and family as source of data connextion\n\ 11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -m bytes Set the size of each sent message\n\ 11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -M bytes Set the size of each received messages\n\ 11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -P local[,remote] Set the local/remote port for the data socket\n\ 11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -r req,[rsp] Set request/response sizes (_RR tests)\n\ 11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -s send[,recv] Set local socket send/recv buffer sizes\n\ 12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -S send[,recv] Set remote socket send/recv buffer sizes\n\ 12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -V Enable copy avoidance if supported\n\ 12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -4 Use AF_INET (eg IPv4) on both ends of the data conn\n\ 12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project -6 Use AF_INET6 (eg IPv6) on both ends of the data conn\n\ 12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project\n\ 12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectFor those options taking two parms, at least one must be specified;\n\ 12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectspecifying one value without a comma will set both parms to that\n\ 12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvalue, specifying a value with a leading comma will set just the second\n\ 12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectparm, a value with a trailing comma will set just the first. To set\n\ 12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecteach parm to unique values, specify both and separate them with a\n\ 13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcomma.\n"; 13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This routine is intended to retrieve interesting aspects of sdp */ 13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* for the data connection. at first, it attempts to retrieve the */ 13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* maximum segment size. later, it might be modified to retrieve */ 13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other information, but it must be information that can be */ 13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* retrieved quickly as it is called during the timing of the test. */ 13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* for that reason, a second routine may be created that can be */ 13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* called outside of the timing loop */ 14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic 14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectget_sdp_info(int socket, int * mss) 14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef TCP_MAXSEG 14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_socklen_t sock_opt_len; 14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sock_opt_len = sizeof(netperf_socklen_t); 14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getsockopt(socket, 15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project getprotobyname("tcp")->p_proto, 15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project TCP_MAXSEG, 15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (char *)mss, 15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &sock_opt_len) == SOCKET_ERROR) { 15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: get_sdp_info: getsockopt TCP_MAXSEG: errno %d\n", 15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project errno); 15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *mss = -1; 15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project *mss = -1; 16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* TCP_MAXSEG */ 16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_sdp_stream(char remote_host[]) 16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send \n\ 17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Socket Message Elapsed \n\ 17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput \n\ 17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes bytes bytes secs. %s/sec \n\n"; 17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f %s\n"; 17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1 = 18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6d %6d %6d %-6.2f %7.2f %s\n"; 18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send Utilization Service Demand\n\ 18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Socket Message Elapsed Send Recv Send Recv\n\ 18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput local remote local remote\n\ 18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes bytes bytes secs. %-8.8s/s %% %c %% %c us/KB us/KB\n\n"; 18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f %c %s\n"; 19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1 = 19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6d %6d %6d %-6.2f %7.2f %-6.2f %-6.2f %-6.3f %-6.3f %s\n"; 19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\n\ 19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectAlignment Offset %-8.8s %-8.8s Sends %-8.8s Recvs\n\ 19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal Remote Local Remote Xfered Per Per\n\ 19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Send Recv Send (avg) Recv (avg)\n\ 19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %5d %5d %5d %6.4g %6.2f %6d %6.2f %6d\n"; 19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt2 = "\n\ 20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectMaximum\n\ 20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSegment\n\ 20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize (bytes)\n\ 20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%6d\n"; 20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what we want is to have a buffer space that is at least one */ 21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-size greater than our send window. this will insure that we */ 21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are never trying to re-use a buffer that may still be in the hands */ 21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the transport. This buffer will be malloc'd after we have found */ 21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the size of the local senc socket buffer. We will want to deal */ 21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with alignment and offset concerns as well. */ 21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *send_ring; 21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int nummessages = 0; 22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET send_socket; 22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_remaining; 22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sdp_mss = -1; /* possibly uninitialized on printf far below */ 22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with links like fddi, one can send > 32 bits worth of bytes */ 22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* during a test... ;-) at some point, this should probably become a */ 22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 64bit integral type, but those are not entirely common yet */ 22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned long long local_bytes_sent = 0; 22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_sent = 0.0; 23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *remote_res; 23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_request_struct *sdp_stream_request; 24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_response_struct *sdp_stream_response; 24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_results_struct *sdp_stream_result; 24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request = 24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_request_struct *)netperf_request.content.test_specific_data; 24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response = 24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_response_struct *)netperf_response.content.test_specific_data; 24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_result = 25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_results_struct *)netperf_response.content.test_specific_data; 25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_hist = HIST_new(); 25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since we are now disconnected from the code that established the */ 25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control socket, and since we want to be able to use different */ 25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* protocols and such, we are passed the name of the remote host and */ 26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* must turn that into the test specific addressing information. */ 26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* complete_addrinfos will either succede or exit the process */ 26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project complete_addrinfos(&remote_res, 26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_res, 26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_host, 26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_top_test_header("SDP STREAM TEST",local_res,remote_res); 27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = NULL; 27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration = 1; 27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project init_stat(); 27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have a great-big while loop which controls the number of times */ 27902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we run a particular test. this is for the calculation of a */ 28002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* confidence interval (I really should have stayed awake during */ 28102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* probstats :). If the user did not request confidence measurement */ 28202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (no confidence is the default) then we will only go though the */ 28302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* loop once. the confidence stuff originates from the folks at IBM */ 28402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 28502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (((confidence < 0) && (confidence_iteration < iteration_max)) || 28602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (confidence_iteration <= iteration_min)) { 28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 28802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters. we have to remember that we might be */ 28902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* going through the loop more than once. */ 29002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = 0.0; 29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 29402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data socket */ 29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 29802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_socket = create_data_socket(local_res); 30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_socket == INVALID_SOCKET){ 30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_sdp_stream: sdp stream data socket"); 30302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_sdp_stream: send_socket obtained...\n"); 30802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 30902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 31002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we have either retrieved the socket buffer sizes, */ 31102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* or have tried to set them, so now, we may want to set the send */ 31202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size based on that (because the user either did not use a -m */ 31302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* option, or used one with an argument of 0). If the socket buffer */ 31402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size is not available, we will set the send size to 4KB - no */ 31502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* particular reason, just arbitrary... */ 31602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_size == 0) { 31702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lss_size > 0) { 31802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = lss_size; 31902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 32002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 32102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = 4096; 32202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 32302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 32402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 32502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer ring with the requested alignment and offset. */ 32602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* note also that we have allocated a quantity */ 32702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of memory that is at least one send-size greater than our socket */ 32802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffer size. We want to be sure that there are at least two */ 32902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers allocated - this can be a bit of a problem when the */ 33002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size is bigger than the socket size, so we must check... the */ 33102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user may have wanted to explicitly set the "width" of our send */ 33202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers, we should respect that wish... */ 33302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) { 33402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_width = (lss_size/send_size) + 1; 33502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 1) send_width++; 33602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 33702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 33802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_ring == NULL) { 33902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* only allocate the send ring once. this is a networking test, */ 34002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not a memory allocation test. this way, we do not need a */ 34102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* deallocate_buffer_ring() routine, and I don't feel like */ 34202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* writing one anyway :) raj 11/94 */ 34302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = allocate_buffer_ring(send_width, 34402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 34502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 34602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset); 34702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 34802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 34902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 35002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 35102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 35202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 35302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 35402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back. */ 35502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 35602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 35702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 35802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 35902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 36002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 36102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the 36202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket paramters on the other side at this point, hence the 36302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project reason for all the values being passed in the setup 36402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message. If the user did not specify any of the parameters, 36502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project they will be passed as 0, which will indicate to the remote 36602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project that no changes beyond the system's default should be 36702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project used. Alignment is the exception, it will default to 1, which 36802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will be no alignment alterations. */ 36902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 37002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_SDP_STREAM; 37102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->send_buf_size = rss_size_req; 37202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_buf_size = rsr_size_req; 37302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->receive_size = recv_size; 37402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->no_delay = rem_nodelay; 37502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_alignment = remote_recv_align; 37602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_offset = remote_recv_offset; 37702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->measure_cpu = remote_cpu_usage; 37802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->cpu_rate = remote_cpu_rate; 37902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 38002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->test_length = test_time; 38102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 38202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 38302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->test_length = test_bytes; 38402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 38502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->so_rcvavoid = rem_rcvavoid; 38602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->so_sndavoid = rem_sndavoid; 38702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 38802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->dirty_count = rem_dirty_count; 38902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->clean_count = rem_clean_count; 39002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 39102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->port = atoi(remote_data_port); 39202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->ipfamily = af_to_nf(remote_res->ai_family); 39302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 39402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 39502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: send_sdp_stream: requesting SDP stream test\n"); 39602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 39702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 39802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 39902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 40002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant 40102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket parameters for this test type. We will put them back 40202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project into the variables here so they can be displayed if desired. 40302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project The remote will have calibrated CPU if necessary, and will 40402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project have done all the needed set-up we will have calibrated the 40502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu locally before sending the request, and will grab the 40602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter value right after the connect returns. The remote 40702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will grab the counter right after the accept call. This saves 40802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the hassle of extra messages being sent for the SDP 40902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tests. */ 41002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 41102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 41202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 41302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 41402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 41502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 41602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size = sdp_stream_response->recv_buf_size; 41702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size = sdp_stream_response->send_buf_size; 41802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_nodelay = sdp_stream_response->no_delay; 41902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage= sdp_stream_response->measure_cpu; 42002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = sdp_stream_response->cpu_rate; 42102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 42202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have to make sure that the server port number is in 42302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project network order */ 42402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_port_number(remote_res, 42502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (short)sdp_stream_response->data_port_number); 42602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 42702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_rcvavoid = sdp_stream_response->so_rcvavoid; 42802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_sndavoid = sdp_stream_response->so_sndavoid; 42902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 43002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 43102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 43202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 43302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: remote error %d", 43402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 43502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 43602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 43702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 43802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 43902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 44002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 44102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 44202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 44302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_STREAM_SETUP(lss_size,rsr_size) 44402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 44502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 44602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*Connect up to the remote port on the data socket */ 44702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (connect(send_socket, 44802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addr, 44902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addrlen) == INVALID_SOCKET){ 45002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_sdp_stream: data socket connect failed"); 45102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 45202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 45302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 45402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either */ 45502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the connect would have failed, or the previous response would */ 45602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have indicated a problem. I failed to see the value of the */ 45702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* extra message after the accept on the remote. If it failed, */ 45802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we'll see it here. If it didn't, we might as well start pumping */ 45902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* data. */ 46002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 46102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a stream test, they can be */ 46202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* either time or byte-count based. */ 46302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 46402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 46502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 46602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 46702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining = 0; 46802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in previous revisions, we had the same code repeated throught */ 46902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the test suites. this was unnecessary, and meant more */ 47002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* work for me when I wanted to switch to POSIX signals, so I */ 47102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have abstracted this out into a routine in netlib.c. if you */ 47202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are experiencing signal problems, you might want to look */ 47302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there. raj 11/94 */ 47402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 47502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 47602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 47702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to send a number of bytes. */ 47802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining = test_bytes; 47902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 48002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 48102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 48302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 48402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 48502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 48702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 48802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we only start the interval timer if we are using the 48902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timer-timed intervals rather than the sit and spin ones. raj 49002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2006-02-06 */ 49102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WANT_INTERVALS) 49202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_INIT(); 49302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 49402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 49502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before we start, initialize a few variables */ 49602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 49702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 49802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (demo_mode) { 49902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(demo_one_ptr); 50002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 50102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 50202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 50402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We use an "OR" to control test execution. When the test is */ 50502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* controlled by time, the byte count check will always return false. */ 50602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* When the test is controlled by byte count, the time test will */ 50702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* always return false. When the test is finished, the whole */ 50802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* expression will go false and we will stop sending data. */ 50902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 51002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (bytes_remaining > 0)) { 51102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 51202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 51302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project access_buffer(send_ring->buffer_ptr, 51402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 51502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_dirty_count, 51602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_clean_count); 51702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 51802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 51902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 52002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 52102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamp just before we go into send and then again just 52202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project after we come out raj 8/94 */ 52302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but lets only do this if there is going to be a histogram 52402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project displayed */ 52502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_one); 52602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 52702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 52802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 52902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((len=send(send_socket, 53002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring->buffer_ptr, 53102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 53202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != send_size) { 53302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((len >=0) || SOCKET_EINTR(len)) { 53402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test was interrupted, must be the end of test */ 53502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 53602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 53702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: data send error"); 53802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("len was %d\n",len); 53902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 54002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 54102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_bytes_sent += send_size; 54302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 54402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 54502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 54602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamp the exit from the send call and update the histogram */ 54702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_two); 54802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_add(time_hist,delta_micro(&time_one,&time_two)); 54902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 55002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 55102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 55202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 55302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_STREAM_INTERVAL(send_size) 55402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 55502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 55602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(WANT_INTERVALS) 55702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_WAIT(); 55802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 55902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 56002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now we want to move our pointer to the next position in the */ 56102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* data buffer...we may also want to wrap back to the "beginning" */ 56202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the bufferspace, so we will mod the number of messages sent */ 56302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* by the send width, and use that to calculate the offset to add */ 56402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to the base pointer. */ 56502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 56602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = send_ring->next; 56702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (bytes_remaining) { 56802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining -= send_size; 56902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 57002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 57102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 57202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test is over. Flush the buffers to the remote end. We do a */ 57302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* graceful release to insure that all data has been taken by the */ 57402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* remote. */ 57502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 57602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but first, if the verbosity is greater than 1, find-out what */ 57702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the SDP maximum segment_size was (if possible) */ 57802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 57902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_mss = -1; 58002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project get_sdp_info(send_socket,&sdp_mss); 58102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 58202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 58302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (shutdown(send_socket,SHUT_WR) == SOCKET_ERROR) { 58402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: cannot shutdown sdp stream socket"); 58502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 58602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 58702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 58802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* hang a recv() off the socket to block until the remote has */ 58902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* brought all the data up into the application. it will do a */ 59002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* shutdown to cause a FIN to be sent our way. We will assume that */ 59102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* any exit from the recv() call is good... raj 4/93 */ 59202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv(send_socket, send_ring->buffer_ptr, send_size, 0); 59402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the elapsed time for the test, and */ 59602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will also store-away the necessaries for cpu utilization */ 59702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 59802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being */ 59902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* measured and how */ 60002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* long did we really */ 60102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* run? */ 60202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are finished with the socket, so close it to prevent hitting */ 60402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the limit on maximum open files. */ 60502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(send_socket); 60702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 60802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 60902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have 61002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculated service demand and all those interesting 61102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project things. If it wasn't supposed to care, it will return obvious 61202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project values. */ 61302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 61402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 61502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 61602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 61702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 61802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 61902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 62002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 62102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 62202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: remote error %d", 62302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 62402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 62502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 62602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 62702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 62802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 62902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 63002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our thruput was for the test. In the 63102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project future, we may want to include a calculation of the thruput 63202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured by the remote, but it should be the case that for a 63302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SDP stream test, that the two numbers should be *very* 63402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close... We calculate bytes_sent regardless of the way the 63502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test length was controlled. If it was time, we needed to, 63602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project and if it was by bytes, the user may have specified a number 63702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of bytes that wasn't a multiple of the send_size, so we 63802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project really didn't send what he asked for ;-) */ 63902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = ntohd(sdp_stream_result->bytes_received); 64102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 64202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 64302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = (double)local_bytes_sent; 64402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 64502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = calc_thruput(bytes_sent); 64702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 64802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 64902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 65002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) */ 65102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course, some of the information might be bogus because */ 65202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was no idle counter in the kernel(s). We need to make */ 65302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a note of this for the user's benefit...*/ 65402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 65502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 65602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 65702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand(bytes_sent, 65802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 65902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 66002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 66102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 66202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 66302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 66402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 66502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 66602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 66702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 66802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 66902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = sdp_stream_result->cpu_util; 67002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand(bytes_sent, 67102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 67202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 67302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_result->num_cpus); 67402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 67502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 67602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 67702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 67802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 67902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 68002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 68102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we were not measuring cpu, for the confidence stuff, we */ 68202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should make it -1.0 */ 68302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 68402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 68502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 68602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 68702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 68802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 68902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we want to calculate the confidence information. */ 69002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if debugging is on, calculate_confidence will print-out the */ 69102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters we pass it */ 69202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 69302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculate_confidence(confidence_iteration, 69402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 69502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 69602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, 69702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 69802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 69902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 70002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration++; 70302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 70402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 70502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we have finished making all the runs that we */ 70602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will be making. so, we should extract what the calcuated values */ 70702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are for all the confidence stuff. we could make the values */ 70802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* global, but that seemed a little messy, and it did not seem worth */ 70902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the mucking with header files. so, we create a routine much */ 71002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* like calcualte_confidence, which just returns the mean values. */ 71102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* raj 11/94 */ 71202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 71302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project retrieve_confident_values(&elapsed_time, 71402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &thruput, 71502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_cpu_utilization, 71602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_cpu_utilization, 71702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_service_demand, 71802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_service_demand); 71902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 72102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 72202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 72302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 72402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 72502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 72602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 72702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 72802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 72902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (confidence < 0) { 73002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we did not hit confidence, but were we asked to look for it? */ 73102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (iteration_max > 1) { 73202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project display_confidence(); 73302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 73402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 73502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 73602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 73702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method = format_cpu_method(cpu_method); 73802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method = format_cpu_method(sdp_stream_result->cpu_method); 73902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 74002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 74102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 74202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 74302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 74402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 74502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 74602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 74702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 74802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 74902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 75002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 75102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 75202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 75302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, 75402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method, 75502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 75602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 75702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 75802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 75902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 76002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 76102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 76202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 76302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_title, 76402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project format_units(), 76502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 76602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method); 76702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 76802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 76902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 77002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1, /* the format string */ 77102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size, /* remote recvbuf size */ 77202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size, /* local sendbuf size */ 77302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 77402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 77502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, /* what was the xfer rate */ 77602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 77702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 77802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 77902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, /* remote service demand */ 78002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 78102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 78202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 78302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 78402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 78502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 78602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 78702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 78802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 78902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 79002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 79102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 79202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 79302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 79402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 79502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 79602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 79702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 79802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 79902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 80002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 80102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 80202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1, /* the format string */ 80302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size, /* remote recvbuf size */ 80402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size, /* local sendbuf size */ 80502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the sends */ 80602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 80702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, /* how fast did it go */ 80802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 80902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 81002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 81102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 81202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 81302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 81402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 81502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 81602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 81702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 81802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 81902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 82102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 82202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 82302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* SDP statistics, the alignments of the sends and receives */ 82402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 82502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this stuff needs to be worked-out in the presence of confidence */ 82702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* intervals and multiple iterations of the test... raj 11/94 */ 82802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 82902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 83002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt, 83102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 83202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 83302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 83402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 83502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_align, 83602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset, 83702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_offset, 83802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent, 83902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)nummessages, 84002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages, 84102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)sdp_stream_result->recv_calls, 84202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_result->recv_calls); 84302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 84402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt2, 84502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_mss); 84602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 84702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 84802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"\n\nHistogram of time spent in send() call.\n"); 84902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 85002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_report(time_hist); 85102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 85202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 85302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 85502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 85802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This routine implements the netperf-side SDP unidirectional data 85902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project transfer test (a.k.a. stream) for the sockets interface where the 86002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project data flow is from the netserver to the netperf. It receives its 86102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project parameters via global variables from the shell and writes its 86202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project output to the standard output. */ 86302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 86602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_sdp_maerts(char remote_host[]) 86702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 86802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 86902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 87002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send \n\ 87102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Socket Message Elapsed \n\ 87202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput \n\ 87302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes bytes bytes secs. %s/sec \n\n"; 87402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 87602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f %s\n"; 87702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 87802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1 = 87902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6d %6d %6d %-6.2f %7.2f \n %s"; 88002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 88102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 88202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Send Utilization Service Demand\n\ 88302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Socket Message Elapsed Send Recv Send Recv\n\ 88402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize Size Size Time Throughput local remote local remote\n\ 88502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes bytes bytes secs. %-8.8s/s %% %c %% %c us/KB us/KB\n\n"; 88602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 88702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 88802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f %c %s\n"; 88902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1 = 89102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6d %6d %6d %-6.2f %7.2f %-6.2f %-6.2f %-6.3f %-6.3f %s\n"; 89202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\n\ 89402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectAlignment Offset %-8.8s %-8.8s Recvs %-8.8s Sends\n\ 89502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal Remote Local Remote Xfered Per Per\n\ 89602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectRecv Send Recv Send Recv (avg) Send (avg)\n\ 89702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %5d %5d %5d %6.4g %6.2f %6d %6.2f %6d\n"; 89802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 89902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt2 = "\n\ 90002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectMaximum\n\ 90102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSegment\n\ 90202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSize (bytes)\n\ 90302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%6d\n"; 90402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 90702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 90802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what we want is to have a buffer space that is at least one */ 90902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* recv-size greater than our recv window. this will insure that we */ 91002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are never trying to re-use a buffer that may still be in the hands */ 91102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the transport. This buffer will be malloc'd after we have found */ 91202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the size of the local senc socket buffer. We will want to deal */ 91302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with alignment and offset concerns as well. */ 91402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 91502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *recv_ring; 91602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 91702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 91802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int nummessages = 0; 91902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET recv_socket; 92002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_remaining; 92102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sdp_mss = -1; /* possibly uninitialized on printf far below */ 92202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 92302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* with links like fddi, one can recv > 32 bits worth of bytes */ 92402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* during a test... ;-) at some point, this should probably become a */ 92502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 64bit integral type, but those are not entirely common yet */ 92602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_sent = 0.0; 92702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned long long local_bytes_recvd = 0; 92802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 92902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 93002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 93102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 93202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 93302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 93502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *remote_res; 93702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 93802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 93902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_request_struct *sdp_maerts_request; 94002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_response_struct *sdp_maerts_response; 94102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_results_struct *sdp_maerts_result; 94202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 94302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request = 94402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_request_struct *)netperf_request.content.test_specific_data; 94502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response = 94602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_response_struct *)netperf_response.content.test_specific_data; 94702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_result = 94802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_results_struct *)netperf_response.content.test_specific_data; 94902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 95002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 95102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 95202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_hist = HIST_new(); 95302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 95402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 95502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since we are now disconnected from the code that established the */ 95602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control socket, and since we want to be able to use different */ 95702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* protocols and such, we are passed the name of the remote host and */ 95802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* must turn that into the test specific addressing information. */ 95902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project complete_addrinfos(&remote_res, 96102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_res, 96202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_host, 96302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 96402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 96502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 96602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 96702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 96802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_top_test_header("SDP MAERTS TEST",local_res,remote_res); 96902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 97002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 97102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = NULL; 97202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration = 1; 97302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project init_stat(); 97402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 97502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have a great-big while loop which controls the number of times */ 97602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we run a particular test. this is for the calculation of a */ 97702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* confidence interval (I really should have stayed awake during */ 97802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* probstats :). If the user did not request confidence measurement */ 97902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (no confidence is the default) then we will only go though the */ 98002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* loop once. the confidence stuff originates from the folks at IBM */ 98102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (((confidence < 0) && (confidence_iteration < iteration_max)) || 98302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (confidence_iteration <= iteration_min)) { 98402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters. we have to remember that we might be */ 98602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* going through the loop more than once. */ 98702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 98802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 98902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = 0.0; 99002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 99102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data socket */ 99302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 99402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 99502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 99602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_socket = create_data_socket(local_res); 99702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 99802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_socket == INVALID_SOCKET){ 99902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_sdp_maerts: sdp stream data socket"); 100002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 100102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 100202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 100402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_sdp_maerts: recv_socket obtained...\n"); 100502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 100602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 100702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we have either retrieved the socket buffer sizes, */ 100802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* or have tried to set them, so now, we may want to set the recv */ 100902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size based on that (because the user either did not use a -m */ 101002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* option, or used one with an argument of 0). If the socket buffer */ 101102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* size is not available, we will set the recv size to 4KB - no */ 101202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* particular reason, just arbitrary... */ 101302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_size == 0) { 101402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsr_size > 0) { 101502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = lsr_size; 101602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 101702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 101802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = 4096; 101902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 102002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 102102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 102202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffer ring with the requested alignment and offset. */ 102302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* note also that we have allocated a quantity */ 102402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of memory that is at least one recv-size greater than our socket */ 102502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffer size. We want to be sure that there are at least two */ 102602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers allocated - this can be a bit of a problem when the */ 102702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* recv_size is bigger than the socket size, so we must check... the */ 102802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user may have wanted to explicitly set the "width" of our recv */ 102902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffers, we should respect that wish... */ 103002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 0) { 103102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_width = (lsr_size/recv_size) + 1; 103202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 1) recv_width++; 103302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 103402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 103502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_ring == NULL) { 103602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* only allocate the recv ring once. this is a networking test, */ 103702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not a memory allocation test. this way, we do not need a */ 103802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* deallocate_buffer_ring() routine, and I don't feel like */ 103902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* writing one anyway :) raj 11/94 */ 104002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = allocate_buffer_ring(recv_width, 104102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size, 104202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_align, 104302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_offset); 104402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 104502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 104602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 104702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 104802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 104902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 105002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 105102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back. */ 105202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 105402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 105502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 105602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 105702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 105802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the 105902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket paramters on the other side at this point, hence the 106002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project reason for all the values being passed in the setup 106102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message. If the user did not specify any of the parameters, 106202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project they will be passed as 0, which will indicate to the remote 106302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project that no changes beyond the system's default should be 106402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project used. Alignment is the exception, it will default to 1, which 106502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will be no alignment alterations. */ 106602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 106702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_SDP_MAERTS; 106802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_buf_size = rss_size_req; 106902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->recv_buf_size = rsr_size_req; 107002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_size = send_size; 107102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->no_delay = rem_nodelay; 107202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_alignment = remote_send_align; 107302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_offset = remote_send_offset; 107402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->measure_cpu = remote_cpu_usage; 107502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->cpu_rate = remote_cpu_rate; 107602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 107702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->test_length = test_time; 107802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 107902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 108002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->test_length = test_bytes; 108102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 108202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->so_rcvavoid = rem_rcvavoid; 108302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->so_sndavoid = rem_sndavoid; 108402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 108502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->dirty_count = rem_dirty_count; 108602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->clean_count = rem_clean_count; 108702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 108802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->port = atoi(remote_data_port); 108902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->ipfamily = af_to_nf(remote_res->ai_family); 109002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 109102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 109202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: send_sdp_maerts: requesting SDP maerts test\n"); 109302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 109402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 109502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 109602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 109702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant 109802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket parameters for this test type. We will put them back 109902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project into the variables here so they can be displayed if desired. 110002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project The remote will have calibrated CPU if necessary, and will 110102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project have done all the needed set-up we will have calibrated the 110202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu locally before sending the request, and will grab the 110302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter value right after the connect returns. The remote 110402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will grab the counter right after the accept call. This saves 110502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the hassle of extra messages being sent for the SDP 110602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tests. */ 110702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 110802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 110902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 111002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 111102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 111202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 111302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size = sdp_maerts_response->recv_buf_size; 111402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size = sdp_maerts_response->send_buf_size; 111502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_nodelay = sdp_maerts_response->no_delay; 111602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage= sdp_maerts_response->measure_cpu; 111702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = sdp_maerts_response->cpu_rate; 111802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = sdp_maerts_response->send_size; 111902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 112002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have to make sure that the server port number is in 112102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project network order */ 112202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_port_number(remote_res, 112302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (short)sdp_maerts_response->data_port_number); 112402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_rcvavoid = sdp_maerts_response->so_rcvavoid; 112502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_sndavoid = sdp_maerts_response->so_sndavoid; 112602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 112702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 112802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 112902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 113002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: remote error %d", 113102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 113202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 113302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 113402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 113602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 113702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 113802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 113902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 114002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_STREAM_SETUP(lsr_size,rss_size) 114102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 114202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 114302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*Connect up to the remote port on the data socket */ 114402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (connect(recv_socket, 114502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addr, 114602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addrlen) == INVALID_SOCKET){ 114702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_sdp_maerts: data socket connect failed"); 114802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 114902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 115002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 115102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either */ 115202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the connect would have failed, or the previous response would */ 115302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have indicated a problem. I failed to see the value of the */ 115402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* extra message after the accept on the remote. If it failed, */ 115502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we'll see it here. If it didn't, we might as well start pumping */ 115602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* data. */ 115702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 115802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a maerts test, they can be */ 115902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* either time or byte-count based. */ 116002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 116102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 116202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 116302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 116402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining = 0; 116502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* in previous revisions, we had the same code repeated throught */ 116602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the test suites. this was unnecessary, and meant more */ 116702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* work for me when I wanted to switch to POSIX signals, so I */ 116802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* have abstracted this out into a routine in netlib.c. if you */ 116902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are experiencing signal problems, you might want to look */ 117002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there. raj 11/94 */ 117102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 117202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is a netperf to netserver test, netserver will close 117302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project to tell us the test is over, so use PAD_TIME to avoid 117402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project causing the netserver fits. */ 117502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time + PAD_TIME); 117602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 117702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 117802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is a netperf to data source test, no PAD_TIME */ 117902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 118002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 118102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 118202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 118302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to recv a number of bytes. we don't do that 118402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project in a SDP_MAERTS test. sorry. raj 2002-06-21 */ 118502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("netperf: send_sdp_maerts: test must be timed\n"); 118602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 118702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 118802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 118902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 119002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 119102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 119202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 119302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 119402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 119502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 119602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_INIT(); 119702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 119802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 119902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before we start, initialize a few variables */ 120002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 120102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 120202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (demo_mode) { 120302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(demo_one_ptr); 120402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 120502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 120602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 120702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test will continue until we either get a zero-byte recv() 120802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project on the socket or our failsafe timer expires. most of the time 120902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project we trust that we get a zero-byte recieve from the socket. raj 121002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2002-06-21 */ 121102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 121202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 121302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 121402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamp just before we go into recv and then again just 121502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project after we come out raj 8/94 */ 121602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but only if we are actually going to display a histogram. raj 121702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2006-02-07 */ 121802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_one); 121902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 122002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 122102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 122202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) && (len=recv(recv_socket, 122302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring->buffer_ptr, 122402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size, 122502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) > 0 ) { 122602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 122702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 122802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 122902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamp the exit from the recv call and update the histogram */ 123002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_two); 123102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_add(time_hist,delta_micro(&time_one,&time_two)); 123202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 123302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 123402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 123502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 123602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project access_buffer(recv_ring->buffer_ptr, 123702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size, 123802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_dirty_count, 123902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_clean_count); 124002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 124102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 124202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 124302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_STREAM_INTERVAL(len); 124402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 124502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 124602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 124702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_WAIT(); 124802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 124902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 125002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now we want to move our pointer to the next position in the */ 125102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* data buffer...we may also want to wrap back to the "beginning" */ 125202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of the bufferspace, so we will mod the number of messages sent */ 125302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* by the recv width, and use that to calculate the offset to add */ 125402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* to the base pointer. */ 125502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 125602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = recv_ring->next; 125702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (bytes_remaining) { 125802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_remaining -= len; 125902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 126002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 126102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_bytes_recvd += len; 126202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 126302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 126402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 126502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure we timestamp just before we go into recv */ 126602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* raj 2004-06-15 */ 126702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_one); 126802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 126902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 127002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 127102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 127202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 127302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* an EINTR is to be expected when this is a no_control test */ 127402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (((len < 0) || SOCKET_EINTR(len)) && (!no_control)) { 127502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_sdp_maerts: data recv error"); 127602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("len was %d\n",len); 127702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 127802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 127902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if we get here, it must mean we had a recv return of 0 before 128102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the watchdog timer expired, or the watchdog timer expired and 128202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project this was a no_control test */ 128302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test is over. Flush the buffers to the remote end. We do a 128502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project graceful release to tell the remote we have all the data. */ 128602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 128702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but first, if the verbosity is greater than 1, find-out what */ 128802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the SDP maximum segment_size was (if possible) */ 128902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 129002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_mss = -1; 129102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project get_sdp_info(recv_socket,&sdp_mss); 129202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 129402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (shutdown(recv_socket,SHUT_WR) == SOCKET_ERROR) { 129502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: cannot shutdown sdp maerts socket"); 129602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 129702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 129802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 129902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project stop_timer(); 130002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 130102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the local elapsed time for the 130202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test, and will also store-away the necessaries for cpu 130302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project utilization */ 130402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 130502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being */ 130602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* measured and how */ 130702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* long did we really */ 130802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* run? */ 130902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are finished with the socket, so close it to prevent hitting */ 131102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the limit on maximum open files. */ 131202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(recv_socket); 131402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 131502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 131602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have 131702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculated service demand and all those interesting 131802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project things. If it wasn't supposed to care, it will return obvious 131902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project values. */ 132002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 132102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 132202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 132302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 132402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 132502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 132602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 132702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 132802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 132902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: remote error %d", 133002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 133102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 133202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 133302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 133502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 133602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 133702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our thruput was for the test. In the 133802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project future, we may want to include a calculation of the thruput 133902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project measured by the remote, but it should be the case that for a 134002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SDP maerts test, that the two numbers should be *very* 134102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close... We calculate bytes_sent regardless of the way the 134202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test length was controlled. If it was time, we needed to, 134302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project and if it was by bytes, the user may have specified a number 134402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of bytes that wasn't a multiple of the recv_size, so we 134502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project really didn't recv what he asked for ;-) */ 134602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 134702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = ntohd(sdp_maerts_result->bytes_sent); 134802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 134902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 135002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = (double)local_bytes_recvd; 135102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 135202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 135302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 135402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = calc_thruput(bytes_sent); 135502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 135602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 135702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu */ 135802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization for the system(s) */ 135902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Of course, some of the information might be bogus because */ 136002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there was no idle counter in the kernel(s). We need to make */ 136102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* a note of this for the user's benefit...*/ 136202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 136302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 136402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 136502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand(bytes_sent, 136602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 136702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 136802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 136902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 137002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 137102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 137202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 137302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 137402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 137502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 137602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 137702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = sdp_maerts_result->cpu_util; 137802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand(bytes_sent, 137902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 138002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 138102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_result->num_cpus); 138202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 138302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 138402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 138502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 138602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 138702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 138802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 138902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we were not measuring cpu, for the confidence stuff, we */ 139002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should make it -1.0 */ 139102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 139202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 139302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 139402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 139502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 139602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 139702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we want to calculate the confidence information. */ 139802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* if debugging is on, calculate_confidence will print-out the */ 139902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters we pass it */ 140002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 140102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculate_confidence(confidence_iteration, 140202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 140302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 140402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, 140502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 140602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 140702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 140802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 140902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration++; 141102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 141202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 141302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we have finished making all the runs that we */ 141402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will be making. so, we should extract what the calcuated values */ 141502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* are for all the confidence stuff. we could make the values */ 141602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* global, but that seemed a little messy, and it did not seem worth */ 141702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the mucking with header files. so, we create a routine much */ 141802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* like calcualte_confidence, which just returns the mean values. */ 141902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* raj 11/94 */ 142002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 142102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project retrieve_confident_values(&elapsed_time, 142202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &thruput, 142302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_cpu_utilization, 142402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_cpu_utilization, 142502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_service_demand, 142602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_service_demand); 142702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 142802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user */ 142902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* has specified zero-level verbosity, we will just print the */ 143002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* local service demand, or the remote service demand. If the */ 143102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* user has requested verbosity level 1, he will get the basic */ 143202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "streamperf" numbers. If the user has specified a verbosity */ 143302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* of greater than 1, we will display a veritable plethora of */ 143402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* background information from outside of this block as it it */ 143502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* not cpu_measurement specific... */ 143602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 143702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (confidence < 0) { 143802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we did not hit confidence, but were we asked to look for it? */ 143902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (iteration_max > 1) { 144002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project display_confidence(); 144102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 144202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 144302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 144402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 144502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method = format_cpu_method(cpu_method); 144602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method = format_cpu_method(sdp_maerts_result->cpu_method); 144702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 144802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 144902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 145002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 145102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 145202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 145302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 145402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 145502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 145602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 145702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 145802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 145902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 146002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 146102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, 146202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method, 146302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 146402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 146502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 146602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 146702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 146802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 146902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 147002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 147102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_title, 147202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project format_units(), 147302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 147402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method); 147502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 147602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 147702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 147802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1, /* the format string */ 147902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size, /* remote recvbuf size */ 148002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size, /* local sendbuf size */ 148102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the recvs */ 148202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 148302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, /* what was the xfer rate */ 148402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 148502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 148602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 148702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, /* remote service demand */ 148802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 148902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 149002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 149102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 149202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 149302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 149402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 149502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 149602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 149702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 149802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 149902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 150002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 150102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 150202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 150302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 150402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 150502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 150602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 150702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 150802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 150902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 151002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1, /* the format string */ 151102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size, /* local recvbuf size */ 151202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size, /* remot sendbuf size */ 151302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, /* how large were the recvs */ 151402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 151502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, /* how fast did it go */ 151602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 151702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 151802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 151902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 152002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 152102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 152202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 152302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 152402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 152502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 152602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 152702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 152802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 152902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 153002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 153102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* SDP statistics, the alignments of the sends and receives */ 153202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 153302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 153402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this stuff needs to be worked-out in the presence of confidence */ 153502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* intervals and multiple iterations of the test... raj 11/94 */ 153602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 153702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 153802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt, 153902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 154002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 154102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Bytes", 154202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_align, 154302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_align, 154402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_offset, 154502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_offset, 154602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent, 154702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)nummessages, 154802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages, 154902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent / (double)sdp_maerts_result->send_calls, 155002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_result->send_calls); 155102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 155202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt2, 155302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_mss); 155402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 155502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 155602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"\n\nHistogram of time spent in recv() call.\n"); 155702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 155802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_report(time_hist); 155902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 156002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 156102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 156202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 156302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This is the server-side routine for the sdp stream test. It is */ 156402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* implemented as one routine. I could break things-out somewhat, but */ 156502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* didn't feel it was necessary. */ 156602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 156702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 156802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_sdp_stream() 156902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 157002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 157102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sockaddr_in myaddr_in, peeraddr_in; 157202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET s_listen,s_data; 157302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_socklen_t addrlen; 157402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 157502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int receive_calls; 157602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 157702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_received; 157802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 157902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *recv_ring; 158002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 158102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 158202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char local_name[BUFSIZ]; 158302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char port_buffer[PORTBUFSIZE]; 158402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 158502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_SELECT 158602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fd_set readfds; 158702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct timeval timeout; 158802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_SELECT */ 158902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_request_struct *sdp_stream_request; 159102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_response_struct *sdp_stream_response; 159202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_stream_results_struct *sdp_stream_results; 159302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 159402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_SELECT 159502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FD_ZERO(&readfds); 159602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_sec = 1; 159702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timeout.tv_usec = 0; 159802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_SELECT */ 159902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 160002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request = 160102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_request_struct *)netperf_request.content.test_specific_data; 160202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response = 160302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_response_struct *)netperf_response.content.test_specific_data; 160402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results = 160502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_stream_results_struct *)netperf_response.content.test_specific_data; 160602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 160702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 160802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_sdp_stream: entered...\n"); 160902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 161002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 161102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 161202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen socket with all the desired */ 161302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 161402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 161502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the socket sizes cannot be changed, then we will */ 161602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 161702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 161802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 161902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 162102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 162202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 162302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 162402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 162502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 162602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_stream: setting the response type...\n"); 162702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 162802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 162902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = SDP_STREAM_RESPONSE; 163102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 163302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_stream: the response type is set...\n"); 163402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 163502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 163602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 163702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variable to be at the desired */ 163802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignment with the desired offset. */ 163902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 164002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 164102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_stream: requested alignment of %d\n", 164202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_alignment); 164302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 164402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 164502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 164602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* create_data_socket expects to find some things in the global */ 164702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* variables, so set the globals based on the values in the request. */ 164802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* once the socket has been created, we will set the response values */ 164902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* based on the updated value of those globals. raj 7/94 */ 165002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size_req = sdp_stream_request->send_buf_size; 165102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size_req = sdp_stream_request->recv_buf_size; 165202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_nodelay = sdp_stream_request->no_delay; 165302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_rcvavoid = sdp_stream_request->so_rcvavoid; 165402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sndavoid = sdp_stream_request->so_sndavoid; 165502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 165602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_hostname_and_port(local_name, 165702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 165802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_stream_request->ipfamily), 165902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->port); 166002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res = complete_addrinfo(local_name, 166202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_name, 166302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 166402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_stream_request->ipfamily), 166502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 166602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 166702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 166802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 166902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 167002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 167102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 167202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project s_listen = create_data_socket(local_res); 167302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 167402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (s_listen == INVALID_SOCKET) { 167502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 167602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 167702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 167802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 167902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 168002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 168102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test timer can fire during operations on the listening socket, 168202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project so to make the start_timer below work we have to move 168302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project it to close s_listen while we are blocked on accept. */ 168402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project win_kludge_socket2 = s_listen; 168502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 168602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 168702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what sort of sizes did we end-up with? */ 168802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_stream_request->receive_size == 0) { 168902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lsr_size > 0) { 169002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = lsr_size; 169102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 169302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = 4096; 169402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 169702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = sdp_stream_request->receive_size; 169802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 169902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to set-up our recv_ring in a manner analagous to what we */ 170102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* do on the sending side. this is more for the sake of symmetry */ 170202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* than for the needs of say copy avoidance, but it might also be */ 170302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* more realistic - this way one could conceivably go with a */ 170402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* double-buffering scheme when taking the data an putting it into */ 170502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the filesystem or something like that. raj 7/94 */ 170602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 170702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 0) { 170802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_width = (lsr_size/recv_size) + 1; 170902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 1) recv_width++; 171002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 171102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = allocate_buffer_ring(recv_width, 171302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size, 171402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_alignment, 171502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->recv_offset); 171602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 171702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 171802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_stream: receive alignment and offset set...\n"); 171902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 172002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 172102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 172202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, let's set-up the socket to listen for connections */ 172302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (listen(s_listen, 5) == SOCKET_ERROR) { 172402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 172502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 172602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 172702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 172802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 172902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 173002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 173202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now get the port number assigned by the system */ 173302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(myaddr_in); 173402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getsockname(s_listen, 173502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&myaddr_in, 173602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen) == SOCKET_ERROR){ 173702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 173802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 173902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 174002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 174202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 174302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now myaddr_in contains the port and the internet address this is */ 174502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* returned to the sender also implicitly telling the sender that the */ 174602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket buffer sizing has been done. */ 174702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 174802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->data_port_number = (int) ntohs(myaddr_in.sin_port); 174902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 175002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 175102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 175202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 175302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 175402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a -1 to */ 175502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 175602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 175702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->cpu_rate = (float)0.0; /* assume no cpu */ 175802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_stream_request->measure_cpu) { 175902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->measure_cpu = 1; 176002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->cpu_rate = 176102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calibrate_local_cpu(sdp_stream_request->cpu_rate); 176202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 176302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 176402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->measure_cpu = 0; 176502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 176602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 176702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before we send the response back to the initiator, pull some of */ 176802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the socket parms from the globals */ 176902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->send_buf_size = lss_size; 177002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->recv_buf_size = lsr_size; 177102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->no_delay = loc_nodelay; 177202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->so_rcvavoid = loc_rcvavoid; 177302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->so_sndavoid = loc_sndavoid; 177402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_response->receive_size = recv_size; 177502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 177602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 177702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 177802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(peeraddr_in); 177902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((s_data=accept(s_listen, 178102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&peeraddr_in, 178202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen)) == INVALID_SOCKET) { 178302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Let's just punt. The remote will be given some information */ 178402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 178502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 178602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 178702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 178802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef KLUDGE_SOCKET_OPTIONS 178902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is for those systems which *INCORRECTLY* fail to pass */ 179002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* attributes across an accept() call. Including this goes against */ 179102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* my better judgement :( raj 11/95 */ 179202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 179302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kludge_socket_options(s_data); 179402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 179502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* KLUDGE_SOCKET_OPTIONS */ 179602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 179702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 179802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start grabbing. */ 179902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(sdp_stream_request->measure_cpu); 180102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop will exit when the sender does a shutdown, which will */ 180302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return a length of zero */ 180402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 180502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* there used to be an #ifdef DIRTY call to access_buffer() here, 180602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project but we have switched from accessing the buffer before the recv() 180702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project call to accessing the buffer after the recv() call. The 180802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project accessing before was, IIRC, related to having dirty data when 180902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project doing page-flipping copy avoidance. */ 181002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 181102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received = 0; 181202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls = 0; 181302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 181402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((len = recv(s_data, recv_ring->buffer_ptr, recv_size, 0)) != 0) { 181502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (len == SOCKET_ERROR ) 181602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 181702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 181802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 181902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 182002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 182102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received += len; 182202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls++; 182302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 182402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 182502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we access the buffer after the recv() call now, rather than before */ 182602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project access_buffer(recv_ring->buffer_ptr, 182702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size, 182802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->dirty_count, 182902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_request->clean_count); 183002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 183102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* move to the next buffer in the recv_ring */ 183402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = recv_ring->next; 183502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 183602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef PAUSE 183702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sleep(1); 183802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* PAUSE */ 183902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DO_SELECT 184102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project FD_SET(s_data,&readfds); 184202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project select(s_data+1,&readfds,NULL,NULL,&timeout); 184302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DO_SELECT */ 184402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 184602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 184702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* perform a shutdown to signal the sender that */ 184802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have received all the data sent. raj 4/93 */ 184902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 185002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (shutdown(s_data,SHUT_WR) == SOCKET_ERROR) { 185102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 185202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 185302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 185402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 185502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 185602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(sdp_stream_request->measure_cpu,&elapsed_time); 185702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 185802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 185902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 186002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 186102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 186202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_stream: got %g bytes\n", 186302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received); 186402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 186502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_stream: got %d recvs\n", 186602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls); 186702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 186802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 186902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 187002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->bytes_received = htond(bytes_received); 187102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->elapsed_time = elapsed_time; 187202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->recv_calls = receive_calls; 187302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 187402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->cpu_method = cpu_method; 187502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->num_cpus = lib_num_loc_cpus; 187602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 187702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_stream_request->measure_cpu) { 187802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_stream_results->cpu_util = calc_cpu_util(0.0); 187902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 188002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 188102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 188202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 188302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_stream: test complete, sending results.\n"); 188402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 188502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " bytes_received %g receive_calls %d\n", 188602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_received, 188702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project receive_calls); 188802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 188902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " len %d\n", 189002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project len); 189102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 189202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 189302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 189502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 189602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are now done with the sockets */ 189702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_data); 189802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 189902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 190002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 190102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 190202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* This is the server-side routine for the sdp maerts test. It is 190302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project implemented as one routine. I could break things-out somewhat, but 190402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project didn't feel it was necessary. */ 190502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 190602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 190702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_sdp_maerts() 190802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 190902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sockaddr_in myaddr_in, peeraddr_in; 191102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 191202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char local_name[BUFSIZ]; 191302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char port_buffer[PORTBUFSIZE]; 191402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 191502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET s_listen,s_data; 191602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_socklen_t addrlen; 191702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 191802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unsigned int send_calls; 191902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 192002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_sent = 0.0 ; 192102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 192202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *send_ring; 192302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 192402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_request_struct *sdp_maerts_request; 192502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_response_struct *sdp_maerts_response; 192602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_maerts_results_struct *sdp_maerts_results; 192702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 192802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request = 192902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_request_struct *)netperf_request.content.test_specific_data; 193002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response = 193102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_response_struct *)netperf_response.content.test_specific_data; 193202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results = 193302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_maerts_results_struct *)netperf_response.content.test_specific_data; 193402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 193502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 193602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_sdp_maerts: entered...\n"); 193702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 193802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 193902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen socket with all the desired 194102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project parameters and then let the initiator know that all is ready. If 194202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket size defaults are to be used, then the initiator will have 194302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sent us 0's. If the socket sizes cannot be changed, then we will 194402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send-back what they are. If that information cannot be 194502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project determined, then we send-back -1's for the sizes. If things go 194602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project wrong for any reason, we will drop back ten yards and punt. */ 194702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 194802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It 194902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project would be best if the error that the remote reports to the user is 195002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the actual error we encountered, rather than some bogus 195102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project unexpected response type message. */ 195202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 195302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 195402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_maerts: setting the response type...\n"); 195502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 195602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 195702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 195802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = SDP_MAERTS_RESPONSE; 195902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 196002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 196102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_maerts: the response type is set...\n"); 196202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 196302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 196402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 196502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now alter the message_ptr variable to be at the desired */ 196602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* alignment with the desired offset. */ 196702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 196802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 196902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_maerts: requested alignment of %d\n", 197002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_alignment); 197102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 197202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 197302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 197402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Grab a socket to listen on, and then listen on it. */ 197502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 197602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 197702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_maerts: grabbing a socket...\n"); 197802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 197902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 198002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 198102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* create_data_socket expects to find some things in the global */ 198202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* variables, so set the globals based on the values in the request. */ 198302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* once the socket has been created, we will set the response values */ 198402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* based on the updated value of those globals. raj 7/94 */ 198502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size_req = sdp_maerts_request->send_buf_size; 198602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size_req = sdp_maerts_request->recv_buf_size; 198702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_nodelay = sdp_maerts_request->no_delay; 198802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_rcvavoid = sdp_maerts_request->so_rcvavoid; 198902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sndavoid = sdp_maerts_request->so_sndavoid; 199002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 199102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_hostname_and_port(local_name, 199202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 199302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_maerts_request->ipfamily), 199402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->port); 199502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 199602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res = complete_addrinfo(local_name, 199702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_name, 199802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 199902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_maerts_request->ipfamily), 200002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 200102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 200202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 200302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 200402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 200502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 200602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 200702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project s_listen = create_data_socket(local_res); 200802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 200902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (s_listen == INVALID_SOCKET) { 201002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 201102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 201202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 201302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 201402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 201502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 201602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test timer can fire during operations on the listening socket, 201702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project so to make the start_timer below work we have to move 201802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project it to close s_listen while we are blocked on accept. */ 201902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project win_kludge_socket2 = s_listen; 202002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 202102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 202202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 202302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* what sort of sizes did we end-up with? */ 202402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_maerts_request->send_size == 0) { 202502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (lss_size > 0) { 202602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = lss_size; 202702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 202802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 202902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = 4096; 203002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 203102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 203202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 203302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = sdp_maerts_request->send_size; 203402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 203502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 203602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to set-up our recv_ring in a manner analagous to what we */ 203702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* do on the recving side. this is more for the sake of symmetry */ 203802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* than for the needs of say copy avoidance, but it might also be */ 203902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* more realistic - this way one could conceivably go with a */ 204002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* double-buffering scheme when taking the data an putting it into */ 204102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the filesystem or something like that. raj 7/94 */ 204202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 204302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) { 204402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_width = (lsr_size/send_size) + 1; 204502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 1) send_width++; 204602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 204702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 204802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = allocate_buffer_ring(send_width, 204902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 205002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_alignment, 205102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->send_offset); 205202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 205302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 205402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_maerts: receive alignment and offset set...\n"); 205502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 205602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 205702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 205802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, let's set-up the socket to listen for connections */ 205902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (listen(s_listen, 5) == SOCKET_ERROR) { 206002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 206102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 206202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 206302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 206502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 206602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 206802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* now get the port number assigned by the system */ 206902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(myaddr_in); 207002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getsockname(s_listen, 207102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&myaddr_in, 207202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen) == SOCKET_ERROR){ 207302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 207402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 207502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 207602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 207702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 207802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 207902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now myaddr_in contains the port and the internet address this is */ 208102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* returned to the sender also implicitly telling the sender that the */ 208202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket buffer sizing has been done. */ 208302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->data_port_number = (int) ntohs(myaddr_in.sin_port); 208502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 208602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 208702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 208802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 208902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 209002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a -1 to */ 209102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 209202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 209302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->cpu_rate = (float)0.0; /* assume no cpu */ 209402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_maerts_request->measure_cpu) { 209502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->measure_cpu = 1; 209602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->cpu_rate = 209702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calibrate_local_cpu(sdp_maerts_request->cpu_rate); 209802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 209902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 210002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->measure_cpu = 0; 210102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 210202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 210302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before we send the response back to the initiator, pull some of */ 210402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the socket parms from the globals */ 210502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->send_buf_size = lss_size; 210602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->recv_buf_size = lsr_size; 210702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->no_delay = loc_nodelay; 210802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->so_rcvavoid = loc_rcvavoid; 210902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->so_sndavoid = loc_sndavoid; 211002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_response->send_size = send_size; 211102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 211302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(peeraddr_in); 211502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 211602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we will start the timer before the accept() to be somewhat 211702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project analagous to the starting of the timer before the connect() call 211802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project in the SDP_STREAM test. raj 2002-06-21 */ 211902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(sdp_maerts_request->test_length); 212102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will 212302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first grab the apropriate counters and then start grabbing. */ 212402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(sdp_maerts_request->measure_cpu); 212602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 212802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((s_data=accept(s_listen, 212902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&peeraddr_in, 213002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen)) == INVALID_SOCKET) { 213102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Let's just punt. The remote will be given some information */ 213202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 213302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 213402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 213502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef KLUDGE_SOCKET_OPTIONS 213702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 213802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is for those systems which *INCORRECTLY* fail to pass 213902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project attributes across an accept() call. Including this goes against 214002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project my better judgement :( raj 11/95 */ 214102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kludge_socket_options(s_data); 214302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* KLUDGE_SOCKET_OPTIONS */ 214502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop will exit when the sender does a shutdown, which will */ 214702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return a length of zero */ 214802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 214902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent = 0.0; 215002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_calls = 0; 215102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project len = 0; /* nt-lint; len is not initialized (printf far below) if 215302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up initially true.*/ 215402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; /* must remember to initialize this little beauty */ 215502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (!times_up) { 215602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 215702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef DIRTY 215802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to dirty some number of consecutive integers in the buffer */ 215902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are about to send. we may also want to bring some number of */ 216002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* them cleanly into the cache. The clean ones will follow any dirty */ 216102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* ones into the cache. */ 216202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 216302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project access_buffer(send_ring->buffer_ptr, 216402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 216502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->dirty_count, 216602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_request->clean_count); 216702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 216802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* DIRTY */ 216902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 217002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((len=send(s_data, 217102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring->buffer_ptr, 217202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size, 217302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != send_size) { 217402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((len >=0) || SOCKET_EINTR(len)) { 217502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test was interrupted, must be the end of test */ 217602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 217702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 217802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 217902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 218002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 218102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 218202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent += len; 218402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_calls++; 218502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* more to the next buffer in the send_ring */ 218702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = send_ring->next; 218802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 218902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 219002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 219102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* perform a shutdown to signal the sender that */ 219202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have received all the data sent. raj 4/93 */ 219302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 219402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (shutdown(s_data,SHUT_WR) == SOCKET_ERROR) { 219502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 219602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 219702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 219802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 219902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* hang a recv() off the socket to block until the remote has 220102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project brought all the data up into the application. it will do a 220202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project shutdown to cause a FIN to be sent our way. We will assume that 220302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project any exit from the recv() call is good... raj 4/93 */ 220402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv(s_data, send_ring->buffer_ptr, send_size, 0); 220602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 220802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(sdp_maerts_request->measure_cpu,&elapsed_time); 220902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 221102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 221202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 221302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 221402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_maerts: got %g bytes\n", 221502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent); 221602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 221702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_maerts: got %d sends\n", 221802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_calls); 221902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 222002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 222102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 222202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->bytes_sent = htond(bytes_sent); 222302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->elapsed_time = elapsed_time; 222402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->send_calls = send_calls; 222502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 222602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_maerts_request->measure_cpu) { 222702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->cpu_util = calc_cpu_util(0.0); 222802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 222902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 223002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 223102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 223202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_maerts: test complete, sending results.\n"); 223302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 223402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " bytes_sent %g send_calls %d\n", 223502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_sent, 223602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_calls); 223702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 223802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project " len %d\n", 223902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project len); 224002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 224102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 224202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 224302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->cpu_method = cpu_method; 224402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_maerts_results->num_cpus = lib_num_loc_cpus; 224502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 224602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 224702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are now done with the sockets */ 224802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_data); 224902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 225002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 225202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine implements the sending (netperf) side of the SDP_RR */ 225502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* test. */ 225602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 225702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 225802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectsend_sdp_rr(char remote_host[]) 225902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 226002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_title = "\ 226202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal /Remote\n\ 226302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Size Request Resp. Elapsed Trans.\n\ 226402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Size Size Time Rate \n\ 226502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes Bytes bytes bytes secs. per sec \n\n"; 226602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 226702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_0 = 226802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%7.2f %s\n"; 226902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 227002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_1 = "\ 227102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d %-6d %-6d %-6.2f %7.2f %s\n"; 227202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *tput_fmt_1_line_2 = "\ 227302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d\n"; 227402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 227502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_title = "\ 227602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal /Remote\n\ 227702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSocket Size Request Resp. Elapsed Trans. CPU CPU S.dem S.dem\n\ 227802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Size Size Time Rate local remote local remote\n\ 227902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectbytes bytes bytes bytes secs. per sec %% %c %% %c us/Tr us/Tr\n\n"; 228002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 228102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_0 = 228202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "%6.3f %c %s\n"; 228302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 228402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_1 = "\ 228502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d %-6d %-6d %-6.2f %-6.2f %-6.2f %-6.2f %-6.3f %-6.3f %s\n"; 228602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 228702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *cpu_fmt_1_line_2 = "\ 228802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%-6d %-6d\n"; 228902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *ksink_fmt = "\ 229102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectAlignment Offset\n\ 229202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectLocal Remote Local Remote\n\ 229302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source ProjectSend Recv Send Recv\n\ 229402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project%5d %5d %5d %5d\n"; 229502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 229702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int timed_out = 0; 229802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 229902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int len; 230102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_message_ptr; 230202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int nummessages; 230302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET send_socket; 230402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 230502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double bytes_xferd; 230602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 230702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *send_ring; 230802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *recv_ring; 230902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int rsp_bytes_left; 231102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int rsp_bytes_recvd; 231202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_cpu_utilization; 231402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float local_service_demand; 231502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_cpu_utilization; 231602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float remote_service_demand; 231702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project double thruput; 231802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 231902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 232002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *remote_res; 232102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_request_struct *sdp_rr_request; 232302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_response_struct *sdp_rr_response; 232402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_results_struct *sdp_rr_result; 232502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 232602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 232702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define REQUEST_CWND_INITIAL 2 232802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* "in the beginning..." the WANT_FIRST_BURST stuff was like both 232902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Unix and the state of New Jersey - both were simple an unspoiled. 233002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project then it was realized that some stacks are quite picky about 233102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project initial congestion windows and a non-trivial initial burst of 233202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests would not be individual segments even with TCP_NODELAY 233302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set. so, we have to start tracking a poor-man's congestion window 233402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project up here in window space because we want to try to make something 233502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project happen that frankly, we cannot guarantee with the specification 233602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of SDP. ain't that grand?-) raj 2006-01-30 */ 233702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int requests_outstanding = 0; 233802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int request_cwnd = REQUEST_CWND_INITIAL; /* we ass-u-me that having 233902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project three requests 234002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project outstanding at the 234102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project beginning of the test 234202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project is ok with SDP stacks 234302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project of interest. the first 234402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project two will come from our 234502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_burst loop, and 234602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the third from our 234702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project regularly scheduled 234802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send */ 234902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 235002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request = 235202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_request_struct *)netperf_request.content.test_specific_data; 235302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response= 235402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_response_struct *)netperf_response.content.test_specific_data; 235502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_result = 235602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_results_struct *)netperf_response.content.test_specific_data; 235702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 235802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 235902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 236002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time_hist = HIST_new(); 236102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 236202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 236302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since we are now disconnected from the code that established the */ 236502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* control socket, and since we want to be able to use different */ 236602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* protocols and such, we are passed the name of the remote host and */ 236702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* must turn that into the test specific addressing information. */ 236802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 236902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project complete_addrinfos(&remote_res, 237002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_res, 237102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_host, 237202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 237302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 237402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 237502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 237602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( print_headers ) { 237702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_top_test_header("SDP REQUEST/RESPONSE TEST",local_res,remote_res); 237802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 237902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters */ 238102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = NULL; 238302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = NULL; 238402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration = 1; 238502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project init_stat(); 238602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 238702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have a great-big while loop which controls the number of times */ 238802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we run a particular test. this is for the calculation of a */ 238902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* confidence interval (I really should have stayed awake during */ 239002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* probstats :). If the user did not request confidence measurement */ 239102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* (no confidence is the default) then we will only go though the */ 239202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* loop once. the confidence stuff originates from the folks at IBM */ 239302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 239402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while (((confidence < 0) && (confidence_iteration < iteration_max)) || 239502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (confidence_iteration <= iteration_min)) { 239602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 239702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* initialize a few counters. we have to remember that we might be */ 239802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* going through the loop more than once. */ 239902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages = 0; 240102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = 0.0; 240202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 240302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 0; 240402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 240502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 240602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 240702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have to remember to reset the number of transactions 240802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project outstanding and the "congestion window for each new 240902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project iteration. raj 2006-01-31 */ 241002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding = 0; 241102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_cwnd = REQUEST_CWND_INITIAL; 241202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 241302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set-up the data buffers with the requested alignment and offset. */ 241602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since this is a request/response test, default the send_width and */ 241702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* recv_width to 1 and not two raj 7/94 */ 241802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 241902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) send_width = 1; 242002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 0) recv_width = 1; 242102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 242202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_ring == NULL) { 242302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = allocate_buffer_ring(send_width, 242402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, 242502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 242602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset); 242702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 242802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 242902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_ring == NULL) { 243002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = allocate_buffer_ring(recv_width, 243102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, 243202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_align, 243302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_recv_offset); 243402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 243502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 243602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*set up the data socket */ 243702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 243802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 243902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 244002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_socket = create_data_socket(local_res); 244102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_socket == INVALID_SOCKET){ 244302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: send_sdp_rr: sdp stream data socket"); 244402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 244502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 244602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 244702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 244802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"send_sdp_rr: send_socket obtained...\n"); 244902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 245002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 245102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If the user has requested cpu utilization measurements, we must */ 245202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate the cpu(s). We will perform this task within the tests */ 245302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* themselves. If the user has specified the cpu rate, then */ 245402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* calibrate_local_cpu will return rather quickly as it will have */ 245502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* nothing to do. If local_cpu_rate is zero, then we will go through */ 245602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* all the "normal" calibration stuff and return the rate back.*/ 245702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 245802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 245902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_rate = calibrate_local_cpu(local_cpu_rate); 246002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 246102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 246202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 246302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Tell the remote end to do a listen. The server alters the 246402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket paramters on the other side at this point, hence the 246502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project reason for all the values being passed in the setup 246602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project message. If the user did not specify any of the parameters, 246702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project they will be passed as 0, which will indicate to the remote 246802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project that no changes beyond the system's default should be 246902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project used. Alignment is the exception, it will default to 8, which 247002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will be no alignment alterations. */ 247102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 247202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_request.content.request_type = DO_SDP_RR; 247302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_buf_size = rsr_size_req; 247402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_buf_size = rss_size_req; 247502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_alignment = remote_recv_align; 247602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_offset = remote_recv_offset; 247702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_alignment = remote_send_align; 247802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_offset = remote_send_offset; 247902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->request_size = req_size; 248002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->response_size = rsp_size; 248102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->no_delay = rem_nodelay; 248202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->measure_cpu = remote_cpu_usage; 248302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->cpu_rate = remote_cpu_rate; 248402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->so_rcvavoid = rem_rcvavoid; 248502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->so_sndavoid = rem_sndavoid; 248602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 248702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->test_length = test_time; 248802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 248902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 249002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->test_length = test_trans * -1; 249102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 249202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->port = atoi(remote_data_port); 249302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->ipfamily = af_to_nf(remote_res->ai_family); 249402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 1) { 249602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: send_sdp_rr: requesting SDP rr test\n"); 249702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 249802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 249902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_request(); 250002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 250102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The response from the remote will contain all of the relevant 250202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project socket parameters for this test type. We will put them back 250302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project into the variables here so they can be displayed if desired. 250402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project The remote will have calibrated CPU if necessary, and will 250502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project have done all the needed set-up we will have calibrated the 250602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu locally before sending the request, and will grab the 250702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project counter value right after the connect returns. The remote 250802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will grab the counter right after the accept call. This saves 250902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the hassle of extra messages being sent for the SDP 251002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tests. */ 251102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 251202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 251302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 251402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 251502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 251602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote listen done.\n"); 251702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size = sdp_rr_response->recv_buf_size; 251802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size = sdp_rr_response->send_buf_size; 251902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_nodelay = sdp_rr_response->no_delay; 252002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_usage = sdp_rr_response->measure_cpu; 252102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_rate = sdp_rr_response->cpu_rate; 252202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure that port numbers are in network order */ 252302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_port_number(remote_res,(short)sdp_rr_response->data_port_number); 252402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 252502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 252602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 252702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 252802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "netperf: remote error %d", 252902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 253002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 253102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 253202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 253302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 253402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 253502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 253602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 253702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 253802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_RR_SETUP(1000) 253902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 254002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 254102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /*Connect up to the remote port on the data socket */ 254202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (connect(send_socket, 254302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addr, 254402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_res->ai_addrlen) == INVALID_SOCKET){ 254502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("netperf: data socket connect failed"); 254602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 254702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 254802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 254902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Data Socket set-up is finished. If there were problems, either the */ 255102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* connect would have failed, or the previous response would have */ 255202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* indicated a problem. I failed to see the value of the extra */ 255302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* message after the accept on the remote. If it failed, we'll see it */ 255402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* here. If it didn't, we might as well start pumping data. */ 255502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Set-up the test end conditions. For a request/response test, they */ 255702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can be either time or transaction based. */ 255802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 255902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (test_time) { 256002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to end the test after a period of time. */ 256102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 256202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 256302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(test_time); 256402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 256502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 256602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester wanted to send a number of bytes. */ 256702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = test_bytes; 256802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 256902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 257002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 257102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The cpu_start routine will grab the current time and possibly */ 257202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* value of the idle counter for later use in measuring cpu */ 257302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* utilization and/or service demand and thruput. */ 257402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 257502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(local_cpu_usage); 257602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 257702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 257802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_INIT(); 257902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 258002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 258102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We use an "OR" to control test execution. When the test is */ 258202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* controlled by time, the byte count check will always return false. */ 258302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* When the test is controlled by byte count, the time test will */ 258402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* always return false. When the test is finished, the whole */ 258502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* expression will go false and we will stop sending data. I think I */ 258602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just arbitrarily decrement trans_remaining for the timed test, but */ 258702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* will not do that just yet... One other question is whether or not */ 258802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the send buffer and the receive buffer should be the same buffer. */ 258902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 259002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 259102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (demo_mode) { 259202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(demo_one_ptr); 259302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 259402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 259502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 259602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 259702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the request. we assume that if we use a blocking socket, */ 259802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the request will be sent at one shot. */ 259902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 260002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 260102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we can inject no more than request_cwnd, which will grow with 260202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project time, and no more than first_burst_size. we don't use <= to 260302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project account for the "regularly scheduled" send call. of course 260402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project that makes it more a "max_outstanding_ than a 260502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "first_burst_size" but for now we won't fix the names. also, 260602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project I suspect the extra check against < first_burst_size is 260702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project redundant since later I expect to make sure that request_cwnd 260802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project can never get larger than first_burst_size, but just at the 260902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project moment I'm feeling like a belt and suspenders kind of 261002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project programmer. raj 2006-01-30 */ 261102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((first_burst_size > 0) && 261202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (requests_outstanding < request_cwnd) && 261302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (requests_outstanding < first_burst_size)) { 261402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 261502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 261602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "injecting, req_outstndng %d req_cwnd %d burst %d\n", 261702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding, 261802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_cwnd, 261902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_burst_size); 262002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 262102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((len = send(send_socket, 262202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring->buffer_ptr, 262302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, 262402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != req_size) { 262502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we should never hit the end of the test in the first burst */ 262602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_sdp_rr: initial burst data send error"); 262702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 262802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 262902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding += 1; 263002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 263102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 263202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_FIRST_BURST */ 263302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 263402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 263502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 263602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timestamp just before our call to send, and then again just 263702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project after the receive raj 8/94 */ 263802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* but only if we are actually going to display one. raj 263902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 2007-02-07 */ 264002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 264102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_one); 264202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 264302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 264402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 264502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((len = send(send_socket, 264602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring->buffer_ptr, 264702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, 264802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) != req_size) { 264902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (SOCKET_EINTR(len) || (errno == 0)) { 265002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we hit the end of a */ 265102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* timed test. */ 265202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 265302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 265402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 265502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_sdp_rr: data send error"); 265602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 265702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 265802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = send_ring->next; 265902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 266002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 266102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding += 1; 266202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 266302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 266402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* receive the response */ 266502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_bytes_left = rsp_size; 266602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = recv_ring->buffer_ptr; 266702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while(rsp_bytes_left > 0) { 266802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((rsp_bytes_recvd=recv(send_socket, 266902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr, 267002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_bytes_left, 267102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) == SOCKET_ERROR) { 267202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ( SOCKET_EINTR(rsp_bytes_recvd) ) { 267302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We hit the end of a timed test. */ 267402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 267502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 267602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 267702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror("send_sdp_rr: data recv error"); 267802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 267902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 268002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_bytes_left -= rsp_bytes_recvd; 268102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr += rsp_bytes_recvd; 268202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 268302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = recv_ring->next; 268402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 268502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 268602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* so, since we've gotten a response back, update the 268702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bookkeeping accordingly. there is one less request 268802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project outstanding and we can put one more out there than before. */ 268902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding -= 1; 269002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (request_cwnd < first_burst_size) { 269102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_cwnd += 1; 269202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 269302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 269402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "incr req_cwnd to %d first_burst %d reqs_outstndng %d\n", 269502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_cwnd, 269602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_burst_size, 269702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requests_outstanding); 269802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 269902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 270002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 270102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (timed_out) { 270202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we may have been in a nested while loop - we need */ 270302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* another call to break. */ 270402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 270502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 270602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 270702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 270802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 270902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_timestamp(&time_two); 271002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_add(time_hist,delta_micro(&time_one,&time_two)); 271102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 271202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 271302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 271402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_DEMO 271502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project DEMO_RR_INTERVAL(1); 271602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 271702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 271802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_INTERVALS 271902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project INTERVALS_WAIT(); 272002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_INTERVALS */ 272102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 272202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages++; 272302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 272402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 272502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 272602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 272702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug > 3) { 272802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((nummessages % 100) == 0) { 272902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 273002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "Transaction %d completed\n", 273102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nummessages); 273202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 273302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 273602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 273702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* At this point we used to call shutdown on the data socket to be 273802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sure all the data was delivered, but this was not germane in a 273902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request/response test, and it was causing the tests to "hang" 274002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project when they were being controlled by time. So, I have replaced 274102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project this shutdown call with a call to close that can be found later 274202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project in the procedure. */ 274302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 274402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this call will always give us the elapsed time for the test, 274502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project and will also store-away the necessaries for cpu utilization */ 274602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 274702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(local_cpu_usage,&elapsed_time); /* was cpu being */ 274802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* measured? how long */ 274902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* did we really run? */ 275002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 275102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!no_control) { 275202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Get the statistics from the remote end. The remote will have 275302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculated CPU utilization. If it wasn't supposed to care, it 275402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project will return obvious values. */ 275502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 275602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_response(); 275702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (!netperf_response.content.serv_errno) { 275802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) 275902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"remote results obtained\n"); 276002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 276102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 276202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project Set_errno(netperf_response.content.serv_errno); 276302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netperf: remote error %d", 276402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno); 276502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project perror(""); 276602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 276702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 276802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 276902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 277002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We now calculate what our throughput was for the test. */ 277202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project bytes_xferd = (req_size * nummessages) + (rsp_size * nummessages); 277402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput = nummessages/elapsed_time; 277502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 277602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 277702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We must now do a little math for service demand and cpu 277802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project utilization for the system(s) Of course, some of the 277902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project information might be bogus because there was no idle counter in 278002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project the kernel(s). We need to make a note of this for the user's 278102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project benefit... */ 278202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 278302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = calc_cpu_util(0.0); 278402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will 278502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project multiply the number of transaction by 1024 to get "good" 278602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project numbers */ 278702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = calc_service_demand((double) nummessages*1024, 278802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 278902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 279002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 279102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 279202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 279302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 279402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 279502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 279602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 279702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (remote_cpu_usage) { 279802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = sdp_rr_result->cpu_util; 279902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* since calc_service demand is doing ms/Kunit we will 280002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project multiply the number of transaction by 1024 to get "good" 280102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project numbers */ 280202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = calc_service_demand((double) nummessages*1024, 280302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0.0, 280402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 280502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_result->num_cpus); 280602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 280702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 280802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 280902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 281002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 281102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 281202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 281302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 281402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we were not measuring cpu, for the confidence stuff, we */ 281502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* should make it -1.0 */ 281602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization = (float) -1.0; 281702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand = (float) -1.0; 281802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization = (float) -1.0; 281902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand = (float) -1.0; 282002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 282102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 282202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at this point, we want to calculate the confidence information. 282302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if debugging is on, calculate_confidence will print-out the 282402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project parameters we pass it */ 282502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 282602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project calculate_confidence(confidence_iteration, 282702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, 282802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 282902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, 283002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, 283102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 283202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand); 283302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 283402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 283502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project confidence_iteration++; 283602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 283702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are now done with the socket, so close it */ 283802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(send_socket); 283902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 284102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project retrieve_confident_values(&elapsed_time, 284302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &thruput, 284402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_cpu_utilization, 284502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_cpu_utilization, 284602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &local_service_demand, 284702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &remote_service_demand); 284802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 284902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We are now ready to print all the information. If the user has 285002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project specified zero-level verbosity, we will just print the local 285102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project service demand, or the remote service demand. If the user has 285202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project requested verbosity level 1, he will get the basic "streamperf" 285302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project numbers. If the user has specified a verbosity of greater than 1, 285402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project we will display a veritable plethora of background information 285502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project from outside of this block as it it not cpu_measurement 285602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project specific... */ 285702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 285802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (confidence < 0) { 285902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we did not hit confidence, but were we asked to look for it? */ 286002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (iteration_max > 1) { 286102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project display_confidence(); 286202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 286302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 286402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 286502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage || remote_cpu_usage) { 286602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method = format_cpu_method(cpu_method); 286702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method = format_cpu_method(sdp_rr_result->cpu_method); 286802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 286902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 287002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 287102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (local_cpu_usage) { 287202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 287302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 287402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, 287502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 287602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 287702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 287802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 287902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 288002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 288102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_0, 288202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, 288302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method, 288402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 288502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 288602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 288702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 288802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 288902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 289002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 289102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 289202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_title, 289302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_method, 289402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_method); 289502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 289602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 289702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 289802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_1, /* the format string */ 289902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size, /* local sendbuf size */ 290002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size, 290102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 290202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* guess */ 290302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long was the test */ 290402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 290502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_cpu_utilization, /* local cpu */ 290602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_cpu_utilization, /* remote cpu */ 290702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_service_demand, /* local service demand */ 290802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_service_demand, /* remote service demand */ 290902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 291002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 291102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 291202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_fmt_1_line_2, 291302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size, 291402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size); 291502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 291602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 291702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 291802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 291902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The tester did not wish to measure service demand. */ 292002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 292102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (verbosity) { 292202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 0: 292302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 292402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_0, 292502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 292602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 292702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 292802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 292902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 1: 293002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 2: 293102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (print_headers) { 293202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,tput_title,format_units()); 293302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 293402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 293502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 293602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_1, /* the format string */ 293702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size, 293802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size, 293902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size, /* how large were the requests */ 294002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size, /* how large were the responses */ 294102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time, /* how long did it take */ 294202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project thruput, 294302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ((print_headers) || 294402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (result_brand == NULL)) ? "" : result_brand); 294502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 294602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project tput_fmt_1_line_2, 294702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size, /* remote recvbuf size */ 294802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size); 294902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 295102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 295202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 295302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 295402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it would be a good thing to include information about some of the */ 295502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* other parameters that may have been set for this test, but at the */ 295602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* moment, I do not wish to figure-out all the formatting, so I will */ 295702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* just put this comment here to help remind me that it is something */ 295802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* that should be done at a later time. */ 295902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 296002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* how to handle the verbose information in the presence of */ 296102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* confidence intervals is yet to be determined... raj 11/94 */ 296202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (verbosity > 1) { 296302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The user wanted to know it all, so we will give it to him. */ 296402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* This information will include as much as we can find about */ 296502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* SDP statistics, the alignments of the sends and receives */ 296602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and all that sort of rot... */ 296702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 296802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 296902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project ksink_fmt, 297002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_align, 297102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_offset, 297202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_send_offset, 297302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_recv_offset); 297402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 297502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_HISTOGRAM 297602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"\nHistogram of request/response times\n"); 297702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 297802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project HIST_report(time_hist); 297902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_HISTOGRAM */ 298002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 298202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 298302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 298402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this routine implements the receive (netserver) side of a SDP_RR */ 298502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* test */ 298602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 298702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectrecv_sdp_rr() 298802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 298902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *send_ring; 299102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct ring_elt *recv_ring; 299202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct addrinfo *local_res; 299402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char local_name[BUFSIZ]; 299502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char port_buffer[PORTBUFSIZE]; 299602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 299702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sockaddr_in myaddr_in, 299802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project peeraddr_in; 299902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCKET s_listen,s_data; 300002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_socklen_t addrlen; 300102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *temp_message_ptr; 300202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_received; 300302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int trans_remaining; 300402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int bytes_sent; 300502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int request_bytes_recvd; 300602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int request_bytes_remaining; 300702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int timed_out = 0; 300802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int sock_closed = 0; 300902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project float elapsed_time; 301002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_request_struct *sdp_rr_request; 301202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_response_struct *sdp_rr_response; 301302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project struct sdp_rr_results_struct *sdp_rr_results; 301402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 301502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request = 301602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_request_struct *)netperf_request.content.test_specific_data; 301702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response = 301802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_response_struct *)netperf_response.content.test_specific_data; 301902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results = 302002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sdp_rr_results_struct *)netperf_response.content.test_specific_data; 302102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 302302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"netserver: recv_sdp_rr: entered...\n"); 302402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 302502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 302602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 302702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* We want to set-up the listen socket with all the desired */ 302802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* parameters and then let the initiator know that all is ready. If */ 302902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket size defaults are to be used, then the initiator will have */ 303002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* sent us 0's. If the socket sizes cannot be changed, then we will */ 303102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send-back what they are. If that information cannot be determined, */ 303202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we send-back -1's for the sizes. If things go wrong for any */ 303302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reason, we will drop back ten yards and punt. */ 303402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 303502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* If anything goes wrong, we want the remote to know about it. It */ 303602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* would be best if the error that the remote reports to the user is */ 303702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the actual error we encountered, rather than some bogus unexpected */ 303802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* response type message. */ 303902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 304102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: setting the response type...\n"); 304202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 304302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 304402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.response_type = SDP_RR_RESPONSE; 304602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 304702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 304802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: the response type is set...\n"); 304902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 305002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 305102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 305202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* allocate the recv and send rings with the requested alignments */ 305302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and offsets. raj 7/94 */ 305402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 305502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: requested recv alignment of %d offset %d\n", 305602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_alignment, 305702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_offset); 305802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: requested send alignment of %d offset %d\n", 305902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_alignment, 306002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_offset); 306102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 306202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 306302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 306402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* at some point, these need to come to us from the remote system */ 306502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (send_width == 0) send_width = 1; 306602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (recv_width == 0) recv_width = 1; 306702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 306802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = allocate_buffer_ring(send_width, 306902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->response_size, 307002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_alignment, 307102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->send_offset); 307202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = allocate_buffer_ring(recv_width, 307402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->request_size, 307502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_alignment, 307602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->recv_offset); 307702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 307902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Grab a socket to listen on, and then listen on it. */ 308002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 308202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: grabbing a socket...\n"); 308302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 308402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 308502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 308602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* create_data_socket expects to find some things in the global */ 308702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* variables, so set the globals based on the values in the request. */ 308802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* once the socket has been created, we will set the response values */ 308902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* based on the updated value of those globals. raj 7/94 */ 309002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size_req = sdp_rr_request->send_buf_size; 309102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size_req = sdp_rr_request->recv_buf_size; 309202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_nodelay = sdp_rr_request->no_delay; 309302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_rcvavoid = sdp_rr_request->so_rcvavoid; 309402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sndavoid = sdp_rr_request->so_sndavoid; 309502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 309602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project set_hostname_and_port(local_name, 309702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 309802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_rr_request->ipfamily), 309902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->port); 310002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 310102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res = complete_addrinfo(local_name, 310202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_name, 310302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project port_buffer, 310402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project nf_to_af(sdp_rr_request->ipfamily), 310502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project SOCK_STREAM, 310602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project IPPROTO_TCP, 310702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0); 310802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 310902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* fake things out by changing local_res->ai_family to AF_INET_SDP */ 311002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_family = AF_INET_SDP; 311102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_res->ai_protocol = 0; 311202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project s_listen = create_data_socket(local_res); 311302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 311402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (s_listen == INVALID_SOCKET) { 311502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 311602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 311702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 311802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 311902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 312002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 312302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The test timer can fire during operations on the listening socket, 312402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project so to make the start_timer below work we have to move 312502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project it to close s_listen while we are blocked on accept. */ 312602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project win_kludge_socket2 = s_listen; 312702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 312802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 312902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 313002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, let's set-up the socket to listen for connections */ 313102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (listen(s_listen, 5) == SOCKET_ERROR) { 313202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 313302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 313402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 313502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 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 /* now get the port number assigned by the system */ 314102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(myaddr_in); 314202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (getsockname(s_listen, 314302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&myaddr_in, 314402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen) == SOCKET_ERROR) { 314502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 314602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 314702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 314802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 314902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 315002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 315102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now myaddr_in contains the port and the internet address this is */ 315302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* returned to the sender also implicitly telling the sender that the */ 315402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* socket buffer sizing has been done. */ 315502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->data_port_number = (int) ntohs(myaddr_in.sin_port); 315702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 0; 315802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 315902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* But wait, there's more. If the initiator wanted cpu measurements, */ 316002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* then we must call the calibrate routine, which will return the max */ 316102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* rate back to the initiator. If the CPU was not to be measured, or */ 316202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* something went wrong with the calibration, we will return a 0.0 to */ 316302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the initiator. */ 316402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->cpu_rate = (float)0.0; /* assume no cpu */ 316602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->measure_cpu = 0; 316702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 316802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_rr_request->measure_cpu) { 316902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->measure_cpu = 1; 317002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->cpu_rate = calibrate_local_cpu(sdp_rr_request->cpu_rate); 317102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 317202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 317302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 317402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* before we send the response back to the initiator, pull some of */ 317502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the socket parms from the globals */ 317602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->send_buf_size = lss_size; 317702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->recv_buf_size = lsr_size; 317802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->no_delay = loc_nodelay; 317902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->so_rcvavoid = loc_rcvavoid; 318002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->so_sndavoid = loc_sndavoid; 318102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_response->test_length = sdp_rr_request->test_length; 318202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 318302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project addrlen = sizeof(peeraddr_in); 318502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 318602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((s_data = accept(s_listen, 318702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (struct sockaddr *)&peeraddr_in, 318802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project &addrlen)) == INVALID_SOCKET) { 318902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Let's just punt. The remote will be given some information */ 319002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 319102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 319302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 319402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 319502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef KLUDGE_SOCKET_OPTIONS 319602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is for those systems which *INCORRECTLY* fail to pass */ 319702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* attributes across an accept() call. Including this goes against */ 319802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* my better judgement :( raj 11/95 */ 319902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 320002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project kludge_socket_options(s_data); 320102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 320202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* KLUDGE_SOCKET_OPTIONS */ 320302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 320402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WIN32 320502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this is used so the timer thread can close the socket out from */ 320602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* under us, which to date is the easiest/cleanest/least */ 320702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Windows-specific way I can find to force the winsock calls to */ 320802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* return WSAEINTR with the test is over. anything that will run on */ 320902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* 95 and NT and is closer to what netperf expects from Unix signals */ 321002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* and such would be appreciated raj 1/96 */ 321102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project win_kludge_socket = s_data; 321202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WIN32 */ 321302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 321402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 321502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"recv_sdp_rr: accept completes on the data connection.\n"); 321602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 321702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 321802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 321902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now it's time to start receiving data on the connection. We will */ 322002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first grab the apropriate counters and then start grabbing. */ 322102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_start(sdp_rr_request->measure_cpu); 322302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop will exit when we hit the end of the test time, or when */ 322502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we have exchanged the requested number of transactions. */ 322602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 322702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_rr_request->test_length > 0) { 322802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 0; 322902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = 0; 323002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project start_timer(sdp_rr_request->test_length + PAD_TIME); 323102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 323202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 323302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project times_up = 1; 323402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining = sdp_rr_request->test_length * -1; 323502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 323602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 323702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received = 0; 323802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 323902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((!times_up) || (trans_remaining > 0)) { 324002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr = recv_ring->buffer_ptr; 324102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_bytes_remaining = sdp_rr_request->request_size; 324202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while(request_bytes_remaining > 0) { 324302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((request_bytes_recvd=recv(s_data, 324402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr, 324502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_bytes_remaining, 324602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) == SOCKET_ERROR) { 324702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (SOCKET_EINTR(request_bytes_recvd)) 324802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project { 324902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 325002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 325102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 325202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 325302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = errno; 325402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 325502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 325602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 325702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else if( request_bytes_recvd == 0 ) { 325802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 325902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"zero is my hero\n"); 326002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 326102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 326202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sock_closed = 1; 326302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 326402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 326502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project else { 326602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project request_bytes_remaining -= request_bytes_recvd; 326702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project temp_message_ptr += request_bytes_recvd; 326802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 326902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 327002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 327102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_ring = recv_ring->next; 327202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 327302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if ((timed_out) || (sock_closed)) { 327402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we hit the end of the test based on time - or the socket 327502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project closed on us along the way. bail out of here now... */ 327602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 327702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"yo5\n"); 327802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 327902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 328002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 328102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 328202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 328302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Now, send the response to the remote */ 328402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if((bytes_sent=send(s_data, 328502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring->buffer_ptr, 328602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->response_size, 328702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 0)) == SOCKET_ERROR) { 328802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (SOCKET_EINTR(bytes_sent)) { 328902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the test timer has popped */ 329002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project timed_out = 1; 329102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where,"yo6\n"); 329202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 329302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 329402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 329502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project netperf_response.content.serv_errno = 992; 329602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 329702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 329802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 329902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_ring = send_ring->next; 330102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received++; 330302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (trans_remaining) { 330402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_remaining--; 330502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 330602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 330702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 330902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* The loop now exits due to timeout or transaction count being */ 331002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* reached */ 331102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 331202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project cpu_stop(sdp_rr_request->measure_cpu,&elapsed_time); 331302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 331402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project stop_timer(); 331502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 331602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (timed_out) { 331702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we ended the test by time, which was at least 2 seconds */ 331802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* longer than we wanted to run. so, we want to subtract */ 331902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* PAD_TIME from the elapsed_time. */ 332002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project elapsed_time -= PAD_TIME; 332102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 332202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send the results to the sender */ 332402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 332502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 332602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 332702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_rr: got %d transactions\n", 332802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project trans_received); 332902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 333002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 333102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 333202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->bytes_received = (trans_received * 333302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project (sdp_rr_request->request_size + 333402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_request->response_size)); 333502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->trans_received = trans_received; 333602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->elapsed_time = elapsed_time; 333702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->cpu_method = cpu_method; 333802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->num_cpus = lib_num_loc_cpus; 333902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (sdp_rr_request->measure_cpu) { 334002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project sdp_rr_results->cpu_util = calc_cpu_util(elapsed_time); 334102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 334202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 334302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (debug) { 334402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 334502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "recv_sdp_rr: test complete, sending results.\n"); 334602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(where); 334702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 334802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 334902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we are now done with the sockets */ 335002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_data); 335102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project close(s_listen); 335202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_response(); 335402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 335602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 335902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 336002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectprint_sdp_usage() 336102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 336202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 336302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("%s",sdp_usage); 336402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 336502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 336602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 336702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid 336802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectscan_sdp_args(argc, argv) 336902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int argc; 337002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char *argv[]; 337102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{ 337302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define SOCKETS_ARGS "b:DhH:I:L:m:M:P:r:s:S:V46" 337502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project extern char *optarg; /* pointer to option string */ 337702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 337802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project int c; 337902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 338002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project char 338102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project arg1[BUFSIZ], /* argument holders */ 338202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project arg2[BUFSIZ]; 338302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 338402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (no_control) { 338502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(where, 338602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "The SDP tests do not know how to deal with no control tests\n"); 338702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 338802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 338902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(local_data_port,"0",sizeof(local_data_port)); 339102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(remote_data_port,"0",sizeof(remote_data_port)); 339202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* Go through all the command line arguments and break them */ 339402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* out. For those options that take two parms, specifying only */ 339502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* the first will set both to that value. Specifying only the */ 339602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* second will leave the first untouched. To change only the */ 339702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* first, use the form "first," (see the routine break_args.. */ 339802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 339902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project while ((c= getopt(argc, argv, SOCKETS_ARGS)) != EOF) { 340002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project switch (c) { 340102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case '?': 340202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case '4': 340302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_data_family = AF_INET; 340402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_data_family = AF_INET; 340502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 340602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case '6': 340702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if defined(AF_INET6) 340802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_data_family = AF_INET6; 340902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_data_family = AF_INET6; 341002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 341102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fprintf(stderr, 341202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project "This netperf was not compiled on an IPv6 capable host!\n"); 341302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project fflush(stderr); 341402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(-1); 341502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 341602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 341702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'h': 341802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project print_sdp_usage(); 341902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 342002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'b': 342102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef WANT_FIRST_BURST 342202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project first_burst_size = atoi(optarg); 342302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else /* WANT_FIRST_BURST */ 342402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("Initial request burst functionality not compiled-in!\n"); 342502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_FIRST_BURST */ 342602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 342702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'D': 342802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the nodelay flag */ 342902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_nodelay = 1; 343002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_nodelay = 1; 343102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 343202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'H': 343302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args_explicit(optarg,arg1,arg2); 343402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) { 343502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure we leave room for the NULL termination boys and 343602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project girls. raj 2005-02-82 */ 343702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_data_address = malloc(strlen(arg1)+1); 343802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(remote_data_address,arg1,strlen(arg1)); 343902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 344002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 344102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project remote_data_family = parse_address_family(arg2); 344202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 344302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'L': 344402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args_explicit(optarg,arg1,arg2); 344502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) { 344602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* make sure we leave room for the NULL termination boys and 344702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project girls. raj 2005-02-82 */ 344802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_data_address = malloc(strlen(arg1)+1); 344902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(local_data_address,arg1,strlen(arg1)); 345002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 345102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 345202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project local_data_family = parse_address_family(arg2); 345302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 345402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'P': 345502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the local and remote data port numbers for the tests to 345602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project allow them to run through those blankety blank end-to-end 345702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project breaking firewalls. raj 2004-06-15 */ 345802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 345902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 346002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(local_data_port,arg1,sizeof(local_data_port)); 346102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 346202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strncpy(remote_data_port,arg2,sizeof(remote_data_port)); 346302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 346402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 's': 346502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set local socket sizes */ 346602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 346702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 346802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lss_size_req = convert(arg1); 346902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 347002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project lsr_size_req = convert(arg2); 347102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 347202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'S': 347302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set remote socket sizes */ 347402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 347502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 347602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rss_size_req = convert(arg1); 347702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 347802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsr_size_req = convert(arg2); 347902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 348002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'r': 348102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the request/response sizes */ 348202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break_args(optarg,arg1,arg2); 348302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg1[0]) 348402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project req_size = convert(arg1); 348502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (arg2[0]) 348602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rsp_size = convert(arg2); 348702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 348802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'm': 348902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set size of the buffer for each sent message */ 349002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_size = convert(optarg); 349102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 349202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'M': 349302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the size of the buffer for each received message */ 349402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project recv_size = convert(optarg); 349502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 349602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 't': 349702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the test name */ 349802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project strcpy(test_name,optarg); 349902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 350002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'W': 350102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* set the "width" of the user space data */ 350202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* buffer. This will be the number of */ 350302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* send_size buffers malloc'd in the */ 350402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* *_STREAM test. It may be enhanced to set */ 350502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* both send and receive "widths" but for now */ 350602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it is just the sending *_STREAM. */ 350702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project send_width = convert(optarg); 350802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 350902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'V': 351002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* we want to do copy avoidance and will set */ 351102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* it for everything, everywhere, if we really */ 351202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* can. of course, we don't know anything */ 351302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* about the remote... */ 351402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_SND_COPYAVOID 351502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sndavoid = 1; 351602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 351702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_sndavoid = 0; 351802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("Local send copy avoidance not available.\n"); 351902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 352002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifdef SO_RCV_COPYAVOID 352102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_rcvavoid = 1; 352202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else 352302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project loc_rcvavoid = 0; 352402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("Local recv copy avoidance not available.\n"); 352502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif 352602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_sndavoid = 1; 352702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project rem_rcvavoid = 1; 352802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 352902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'N': 353002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project /* this opton allows the user to set the number of 353102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * messages to send. This in effect modifies the test 353202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * time. If we know the message size, then the we can 353302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project * express the test time as message_size * number_messages 353402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project */ 353502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project msg_count = convert (optarg); 353602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (msg_count > 0) 353702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project test_time = 0; 353802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 353902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'B': 354002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project non_block = 1; 354102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 354202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project case 'T': 354302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project num_associations = atoi(optarg); 354402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project if (num_associations <= 1) { 354502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project printf("Number of SDP associations must be >= 1\n"); 354602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project exit(1); 354702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 354802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project break; 354902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project }; 355002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project } 355102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} 355202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project 355302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* WANT_SDP */ 3554