/*************************************************************************** * DBS: Distributed Benchmark System * Copyright (c) 1995, 1996, 1997 Yukio Murayama * Copyright (c) 1995, 1996, 1997 Nara Institute of Science and Technology * All rights reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided only with the following * conditions are satisfied: * * 1. Both the copyright notice and this permission notice appear in * all copies of the software, derivative works or modified versions, * and any portions thereof, and that both notices appear in * supporting documentation. * 2. All advertising materials mentioning features or use of this * software must display the following acknowledgement: * This product includes software developed by Nara Institute of * Science and Technology and its contributors. * 3. Neither the name of Nara Institute of Science and Technology nor * the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND NARA * INSTITUTE OF SCIENCE AND TECHNOLOGY DISCLAIMS ANY LIABILITY OF * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF * THIS SOFTWARE. ALSO, THERE IS NO WARRANTY IMPLIED OR OTHERWISE, * NOR IS SUPPORT PROVIDED. * * Feedback of the results generated from any improvements or * extensions made to this software would be much appreciated. * Any such feedback should be sent to: * * Yukio Murayama * E-mail: * URL: * Address: Graduate School of Information Science, * Nara Institute of Science and Technology, * Takayama 8916-5, Ikoma, Nara, Japan * * Nara Institute of Science and Technology has the rights to * redistribute these changes. ***************************************************************************/ /****************************************************************** * Distributed Benchmark System * DBS Header File * $Revision: 1.27 $ * $Date: 1997/07/11 00:54:34 $ * $Author: yukio-m $ *****************************************************************/ #ifdef __P #undef __P #endif #if (defined(sun) && !defined(__svr4__)) || defined(__hpux) #define __P(prots) () #else #define __P(prots) prots #endif #include /* * Defines */ #define DBS_VERSION "DBS Version 1.1.5" /* dbs-1.1.5 */ #define DBS_MAJOR_VERSION 1 #define DBS_MINOR_VERSION 1 #define DBS_PATCH_VERSION ".5" #define OFF 0 #define ON 1 #define BEFORE 11 #define AFTER 12 #define TCP 1 #define UDP 2 #define SEND 1 #define RECEIVE 2 #define SERVER RECEIVE #define CLIENT SEND #define STREAM 1 #define PACKET 2 #define MAXHOSTNAME 256 #define LISTEN_NUM 10 #define MAX_COLUMN 1024 #define CHAR_ARRAY 256 #define RECV_DELAY_OFFSET 1.0 #define START_TIME_OFFSET 10.0 #define END_TIME_OFFSET1 5 #define END_TIME_OFFSET2 5 /*#define END_TIME_OFFSET (END_TIME_OFFSET1+END_TIME_OFFSET2)*/ #define WARN_TIME_SYNC 0.1 #define MAX_TIME_SYNC 10.0 #define WARN_END_TIME 600.0 #define MAX_END_TIME 3600.0 #define DEFAULT_PORT 10710 /* * Definition of Grobal Variable */ /* * Error Code */ #define NORMAL 0 #define ABNORMAL 1 #define BIND 2 #define GETHOSTBYNAME 3 #define SOCKET 4 #define ACCEPT 5 #define FORK 6 #define ACCESSDENY 7 #define MALLOC 8 #define TIME 9 #define CONNECT 10 #define SOSNDBUF 11 #define SORCVBUF 12 #define SODEBUG 13 #define TCPNODELAY 14 #define RECVERROR 15 #define RECVFROM 16 #define SIGNAL 17 #define TCPDEBUG 18 #define TIMESYNC 19 #define TIMEOUT 20 #define TCPMAXSEG 21 #define INTERNALERROR 22 #ifdef DBSC static char *errmsg[] = { "NORMAL", /* 0 */ "ABNORMAL", /* 1 */ "bind error (Address already in use)", /* 2 */ "gethostbyname error", /* 3 */ "socket error", /* 4 */ "accept error", /* 5 */ "fork error", /* 6 */ "DBS Daemon Access Denyed", /* 7 */ "malloc error", /* 8 */ "TIME is Wrong", /* 9 */ "connect error", /* 10 */ "SO_SNDBUF error", /* 11 */ "SO_RCVBUF error", /* 12 */ "SO_DEBUG error", /* 13 */ "TCP_NODELAY error", /* 14 */ "recv error", /* 15 */ "recvfrom error", /* 16 */ "signal error", /* 17 */ "TCP DEBUG error", /* 18 */ "TIME SYNC error", /* 19 */ "TIME OUT", /* 20 */ "Set MSS error", /* 21 */ "Internal Error!!!!!!!!!! I'm Sorry." /* 22 */ }; #endif /* * DBS Macro Program */ #define RECV(FD, ADDR, SIZE) {\ int _i, _r, _n;\ _r = (SIZE), _i=0;\ while(_r > 0){\ if((_n=recv((FD), (char *)(ADDR)+_i, _r, 0)) < 0){\ perror("RECV DATA");\ exit(1);\ }\ _r -= _n;\ _i += _n;\ }\ } #if !defined(MIN) #define MIN(A,B) (((A)<(B))?(A):(B)) #endif #if !defined(MAX) #define MAX(A,B) (((A)>(B))?(A):(B)) #endif #define GET_IP_ADDR(A,B) (0xff & ((A) >> ((B-1)*8))) #define DEBUGMSG(A,B) if(debug >= (A)) fprintf(stderr, B), fflush(stderr); #define DEBUGMSG2(A,B) if(debug >= (A)) {B; fflush(stderr);} #if !defined(__SVR4) && !defined(__svr4) && !defined(SYSTYPE_SVR4) #define SIGNAL_INIT int oldmask, mask=(sigmask(SIGINT)|sigmask(SIGPIPE)|sigmask(SIGQUIT)) #define BEGIN_CRITICAL_REGION oldmask=sigblock(mask) #define END_CRITICAL_REGION sigsetmask(oldmask) #else #define SIGNAL_INIT (0) #define BEGIN_CRITICAL_REGION (sighold(SIGINT),sighold(SIGPIPE),sighold(SIGQUIT)) #define END_CRITICAL_REGION (sigrelse(SIGINT),sigrelse(SIGPIPE),sigrelse(SIGQUIT)) #endif #define timeval_get(tp) ((double)tp.tv_sec + (double)tp.tv_usec/1000000.0) void timeval_cp __P(( struct timeval *origin_time, struct timeval *current_time )); void timeval_add __P(( struct timeval *origin_time, struct timeval *offset_time )); void timeval_put __P(( struct timeval *tp, double a )); void timeval_cp __P(( struct timeval *tp1, struct timeval *tp2 )); void timeval_add __P(( struct timeval *tp1, struct timeval *tp2 )); void timeval_sub __P(( struct timeval *tp1, struct timeval *tp2 )); void timeval_add_double __P(( struct timeval *tp, double time )); double timeval2double __P(( struct timeval *tp1 )); /* * Grobal Variable */ #if defined(DBSC) || defined(DBSD) int debug = 0 ; /* ON or OFF (default OFF) */ #else extern int debug; #endif /* * Grobal Function */ #if defined(sun) && !defined(__svr4__) extern sys_nerr; extern *sys_errlist[]; #define strerror(err) (*sys_errlist[err]) /*#define volatile */ #endif