1 /* 2 Copyright (C) 1993-2004 Hewlett-Packard Company 3 */ 4 5 /* This file contains the test-specific definitions for netperf's BSD */ 6 /* sockets tests */ 7 8 /* well boys and girls, seems that while AF_INET is "2" and AF_UNSPEC 9 is "0" the world over, AF_INET6 is different values depending on 10 the platform... grrr. On HP-UX 11i it is "22" and on Linux 2.6 it 11 is "10" sooooo... we have to define our own space for netperf to 12 enable us to pass values around from machine to machine. raj 13 2005-02-08 */ 14 #define NF_UNSPEC 0 15 #define NF_INET 4 16 #define NF_INET6 6 17 18 struct tcp_stream_request_struct { 19 int send_buf_size; 20 int recv_buf_size; /* how big does the client want it - the */ 21 /* receive socket buffer that is */ 22 int receive_size; /* how many bytes do we want to receive at one */ 23 /* time? */ 24 int recv_alignment; /* what is the alignment of the receive */ 25 /* buffer? */ 26 int recv_offset; /* and at what offset from that alignment? */ 27 int no_delay; /* do we disable the nagle algorithm for send */ 28 /* coalescing? */ 29 int measure_cpu; /* does the client want server cpu utilization */ 30 /* measured? */ 31 float cpu_rate; /* do we know how fast the cpu is already? */ 32 int test_length; /* how long is the test? */ 33 int so_rcvavoid; /* do we want the remote to avoid copies on */ 34 /* receives? */ 35 int so_sndavoid; /* do we want the remote to avoid send copies? */ 36 int dirty_count; /* how many integers in the receive buffer */ 37 /* should be made dirty before calling recv? */ 38 int clean_count; /* how many integers should be read from the */ 39 /* recv buffer before calling recv? */ 40 int port; /* the port to which the recv side should bind 41 to allow netperf to run through those evil 42 firewall things */ 43 int ipfamily; /* the address family of ipaddress */ 44 }; 45 46 struct tcp_stream_response_struct { 47 int recv_buf_size; /* how big does the client want it */ 48 int receive_size; 49 int no_delay; 50 int measure_cpu; /* does the client want server cpu */ 51 int test_length; /* how long is the test? */ 52 int send_buf_size; 53 int data_port_number; /* connect to me here */ 54 float cpu_rate; /* could we measure */ 55 int so_rcvavoid; /* could the remote avoid receive copies? */ 56 int so_sndavoid; /* could the remote avoid send copies? */ 57 }; 58 59 struct tcp_stream_results_struct { 60 double bytes_received; 61 unsigned int recv_calls; 62 float elapsed_time; /* how long the test ran */ 63 float cpu_util; /* -1 if not measured */ 64 float serv_dem; /* -1 if not measured */ 65 int cpu_method; /* how was cpu util measured? */ 66 int num_cpus; /* how many CPUs had the remote? */ 67 }; 68 69 struct tcp_maerts_request_struct { 70 int send_buf_size; 71 int recv_buf_size; /* how big does the client want it - the */ 72 /* receive socket buffer that is */ 73 int send_size; /* how many bytes do we want netserver to send 74 at one time? */ 75 int send_alignment; /* what is the alignment of the send */ 76 /* buffer? */ 77 int send_offset; /* and at what offset from that alignment? */ 78 int no_delay; /* do we disable the nagle algorithm for send */ 79 /* coalescing? */ 80 int measure_cpu; /* does the client want server cpu utilization */ 81 /* measured? */ 82 float cpu_rate; /* do we know how fast the cpu is already? */ 83 int test_length; /* how long is the test? */ 84 int so_rcvavoid; /* do we want the remote to avoid copies on */ 85 /* receives? */ 86 int so_sndavoid; /* do we want the remote to avoid send copies? */ 87 int dirty_count; /* how many integers in the send buffer */ 88 /* should be made dirty before calling recv? */ 89 int clean_count; /* how many integers should be read from the */ 90 /* recv buffer before calling recv? */ 91 int port; /* the port to which the recv side should bind 92 to allow netperf to run through those evil 93 firewall things */ 94 int ipfamily; 95 }; 96 97 struct tcp_maerts_response_struct { 98 int recv_buf_size; /* how big does the client want it */ 99 int send_size; 100 int no_delay; 101 int measure_cpu; /* does the client want server cpu */ 102 int test_length; /* how long is the test? */ 103 int send_buf_size; 104 int data_port_number; /* connect to me here */ 105 float cpu_rate; /* could we measure */ 106 int so_rcvavoid; /* could the remote avoid receive copies? */ 107 int so_sndavoid; /* could the remote avoid send copies? */ 108 }; 109 110 struct tcp_maerts_results_struct { 111 double bytes_sent; 112 unsigned int send_calls; 113 float elapsed_time; /* how long the test ran */ 114 float cpu_util; /* -1 if not measured */ 115 float serv_dem; /* -1 if not measured */ 116 int cpu_method; /* how was cpu util measured? */ 117 int num_cpus; /* how many CPUs had the remote? */ 118 }; 119 120 struct tcp_rr_request_struct { 121 int recv_buf_size; /* how big does the client want it */ 122 int send_buf_size; 123 int recv_alignment; 124 int recv_offset; 125 int send_alignment; 126 int send_offset; 127 int request_size; 128 int response_size; 129 int no_delay; 130 int measure_cpu; /* does the client want server cpu */ 131 float cpu_rate; /* do we know how fast the cpu is? */ 132 int test_length; /* how long is the test? */ 133 int so_rcvavoid; /* do we want the remote to avoid receive */ 134 /* copies? */ 135 int so_sndavoid; /* do we want the remote to avoid send copies? */ 136 int port; /* the port to which the recv side should bind 137 to allow netperf to run through those evil 138 firewall things */ 139 int ipfamily; 140 }; 141 142 struct tcp_rr_response_struct { 143 int recv_buf_size; /* how big does the client want it */ 144 int no_delay; 145 int measure_cpu; /* does the client want server cpu */ 146 int test_length; /* how long is the test? */ 147 int send_buf_size; 148 int data_port_number; /* connect to me here */ 149 float cpu_rate; /* could we measure */ 150 int so_rcvavoid; /* could the remote avoid receive copies? */ 151 int so_sndavoid; /* could the remote avoid send copies? */ 152 }; 153 154 struct tcp_rr_results_struct { 155 unsigned int bytes_received; /* ignored initially */ 156 unsigned int recv_calls; /* ignored initially */ 157 unsigned int trans_received; /* not ignored */ 158 float elapsed_time; /* how long the test ran */ 159 float cpu_util; /* -1 if not measured */ 160 float serv_dem; /* -1 if not measured */ 161 int cpu_method; /* how was cpu util measured? */ 162 int num_cpus; /* how many CPUs had the remote? */ 163 }; 164 165 struct tcp_conn_rr_request_struct { 166 int recv_buf_size; /* how big does the client want it */ 167 int send_buf_size; 168 int recv_alignment; 169 int recv_offset; 170 int send_alignment; 171 int send_offset; 172 int request_size; 173 int response_size; 174 int no_delay; 175 int measure_cpu; /* does the client want server cpu */ 176 float cpu_rate; /* do we know how fast the cpu is? */ 177 int test_length; /* how long is the test? */ 178 int so_rcvavoid; /* do we want the remote to avoid receive */ 179 /* copies? */ 180 int so_sndavoid; /* do we want the remote to avoid send copies? */ 181 int port; /* the port to which the recv side should bind 182 to allow netperf to run through those evil 183 firewall things */ 184 int ipfamily; 185 }; 186 187 188 struct tcp_conn_rr_response_struct { 189 int recv_buf_size; /* how big does the client want it */ 190 int no_delay; 191 int measure_cpu; /* does the client want server cpu */ 192 int test_length; /* how long is the test? */ 193 int send_buf_size; 194 int data_port_number; /* connect to me here */ 195 float cpu_rate; /* could we measure */ 196 int so_rcvavoid; /* could the remote avoid receive copies? */ 197 int so_sndavoid; /* could the remote avoid send copies? */ 198 }; 199 200 struct tcp_conn_rr_results_struct { 201 unsigned int bytes_received; /* ignored initially */ 202 unsigned int recv_calls; /* ignored initially */ 203 unsigned int trans_received; /* not ignored */ 204 float elapsed_time; /* how long the test ran */ 205 float cpu_util; /* -1 if not measured */ 206 float serv_dem; /* -1 if not measured */ 207 int cpu_method; /* how was cpu util measured? */ 208 int num_cpus; /* how many CPUs had the remote? */ 209 }; 210 211 struct tcp_tran_rr_request_struct { 212 int recv_buf_size; /* how big does the client want it */ 213 int send_buf_size; 214 int recv_alignment; 215 int recv_offset; 216 int send_alignment; 217 int send_offset; 218 int request_size; 219 int response_size; 220 int no_delay; 221 int measure_cpu; /* does the client want server cpu */ 222 float cpu_rate; /* do we know how fast the cpu is? */ 223 int test_length; /* how long is the test? */ 224 int so_rcvavoid; /* do we want the remote to avoid receive */ 225 /* copies? */ 226 int so_sndavoid; /* do we want the remote to avoid send copies? */ 227 int port; /* the port to which the recv side should bind 228 to allow netperf to run through those evil 229 firewall things */ 230 int ipfamily; 231 }; 232 233 234 struct tcp_tran_rr_response_struct { 235 int recv_buf_size; /* how big does the client want it */ 236 int no_delay; 237 int measure_cpu; /* does the client want server cpu */ 238 int test_length; /* how long is the test? */ 239 int send_buf_size; 240 int data_port_number; /* connect to me here */ 241 float cpu_rate; /* could we measure */ 242 int so_rcvavoid; /* could the remote avoid receive copies? */ 243 int so_sndavoid; /* could the remote avoid send copies? */ 244 }; 245 246 struct tcp_tran_rr_results_struct { 247 unsigned int bytes_received; /* ignored initially */ 248 unsigned int recv_calls; /* ignored initially */ 249 unsigned int trans_received; /* not ignored */ 250 float elapsed_time; /* how long the test ran */ 251 float cpu_util; /* -1 if not measured */ 252 float serv_dem; /* -1 if not measured */ 253 int cpu_method; /* how was cpu util measured? */ 254 int num_cpus; /* how many CPUs had the remote? */ 255 256 }; 257 258 struct udp_stream_request_struct { 259 int recv_buf_size; 260 int message_size; 261 int recv_connected; 262 int recv_alignment; 263 int recv_offset; 264 int checksum_off; 265 int measure_cpu; 266 float cpu_rate; 267 int test_length; 268 int so_rcvavoid; /* do we want the remote to avoid receive */ 269 /* copies? */ 270 int so_sndavoid; /* do we want the remote to avoid send copies? */ 271 int port; /* the port to which the recv side should bind 272 to allow netperf to run through those evil 273 firewall things */ 274 int ipfamily; 275 276 }; 277 278 struct udp_stream_response_struct { 279 int recv_buf_size; 280 int send_buf_size; 281 int measure_cpu; 282 int test_length; 283 int data_port_number; 284 float cpu_rate; 285 int so_rcvavoid; /* could the remote avoid receive copies? */ 286 int so_sndavoid; /* could the remote avoid send copies? */ 287 }; 288 289 struct udp_stream_results_struct { 290 unsigned int messages_recvd; 291 unsigned int bytes_received; 292 float elapsed_time; 293 float cpu_util; 294 int cpu_method; /* how was cpu util measured? */ 295 int num_cpus; /* how many CPUs had the remote? */ 296 }; 297 298 299 struct udp_rr_request_struct { 300 int recv_buf_size; /* how big does the client want it */ 301 int send_buf_size; 302 int recv_alignment; 303 int recv_offset; 304 int send_alignment; 305 int send_offset; 306 int request_size; 307 int response_size; 308 int no_delay; 309 int measure_cpu; /* does the client want server cpu */ 310 float cpu_rate; /* do we know how fast the cpu is? */ 311 int test_length; /* how long is the test? */ 312 int so_rcvavoid; /* do we want the remote to avoid receive */ 313 /* copies? */ 314 int so_sndavoid; /* do we want the remote to avoid send copies? */ 315 int port; /* the port to which the recv side should bind 316 to allow netperf to run through those evil 317 firewall things */ 318 int ipfamily; 319 }; 320 321 struct udp_rr_response_struct { 322 int recv_buf_size; /* how big does the client want it */ 323 int no_delay; 324 int measure_cpu; /* does the client want server cpu */ 325 int test_length; /* how long is the test? */ 326 int send_buf_size; 327 int data_port_number; /* connect to me here */ 328 float cpu_rate; /* could we measure */ 329 int so_rcvavoid; /* could the remote avoid receive copies? */ 330 int so_sndavoid; /* could the remote avoid send copies? */ 331 }; 332 333 struct udp_rr_results_struct { 334 unsigned int bytes_received; /* ignored initially */ 335 unsigned int recv_calls; /* ignored initially */ 336 unsigned int trans_received; /* not ignored */ 337 float elapsed_time; /* how long the test ran */ 338 float cpu_util; /* -1 if not measured */ 339 float serv_dem; /* -1 if not measured */ 340 int cpu_method; /* how was cpu util measured? */ 341 int num_cpus; /* how many CPUs had the remote? */ 342 }; 343 344 struct tcp_cc_request_struct { 345 int recv_buf_size; /* how big does the client want it */ 346 int send_buf_size; 347 int recv_alignment; 348 int recv_offset; 349 int send_alignment; 350 int send_offset; 351 int request_size; 352 int response_size; 353 int no_delay; 354 int measure_cpu; /* does the client want server cpu */ 355 float cpu_rate; /* do we know how fast the cpu is? */ 356 int test_length; /* how long is the test? */ 357 int so_rcvavoid; /* do we want the remote to avoid receive */ 358 /* copies? */ 359 int so_sndavoid; /* do we want the remote to avoid send copies? */ 360 int port; /* the port to which the recv side should bind 361 to allow netperf to run through those evil 362 firewall things */ 363 int ipfamily; 364 }; 365 366 367 struct tcp_cc_response_struct { 368 int recv_buf_size; /* how big does the client want it */ 369 int no_delay; 370 int measure_cpu; /* does the client want server cpu */ 371 int test_length; /* how long is the test? */ 372 int send_buf_size; 373 int data_port_number; /* connect to me here */ 374 float cpu_rate; /* could we measure */ 375 int so_rcvavoid; /* could the remote avoid receive copies? */ 376 int so_sndavoid; /* could the remote avoid send copies? */ 377 }; 378 379 struct tcp_cc_results_struct { 380 unsigned int bytes_received; /* ignored initially */ 381 unsigned int recv_calls; /* ignored initially */ 382 unsigned int trans_received; /* not ignored */ 383 float elapsed_time; /* how long the test ran */ 384 float cpu_util; /* -1 if not measured */ 385 float serv_dem; /* -1 if not measured */ 386 int cpu_method; /* how was cpu util measured? */ 387 int num_cpus; /* how many CPUs had the remote? */ 388 }; 389 390 extern int rss_size_req, /* requested remote socket send buffer size */ 391 rsr_size_req, /* requested remote socket recv buffer size */ 392 rss_size, /* remote socket send buffer size */ 393 rsr_size, /* remote socket recv buffer size */ 394 lss_size_req, /* requested local socket send buffer size */ 395 lsr_size_req, /* requested local socket recv buffer size */ 396 lss_size, /* local socket send buffer size */ 397 lsr_size, /* local socket recv buffer size */ 398 req_size, /* request size */ 399 rsp_size, /* response size */ 400 send_size, /* how big are individual sends */ 401 recv_size, /* how big are individual receives */ 402 loc_nodelay, /* don't/do use NODELAY locally */ 403 rem_nodelay, /* don't/do use NODELAY remotely */ 404 loc_sndavoid, /* avoid send copies locally */ 405 loc_rcvavoid, /* avoid recv copies locally */ 406 rem_sndavoid, /* avoid send copies remotely */ 407 rem_rcvavoid; /* avoid recv_copies remotely */ 408 409 410 extern void scan_sockets_args(int argc, char *argv[]); 411 extern struct addrinfo *complete_addrinfo(char *controlhost, 412 char *data_address, 413 char *port, 414 int family, 415 int type, 416 int protocol, 417 int flags); 418 extern void complete_addrinfos(struct addrinfo **remote, 419 struct addrinfo **local, 420 char remote_host[], 421 int type, 422 int protocol, 423 int flags); 424 extern int af_to_nf(int af); 425 extern int nf_to_af(int nf); 426 extern void print_top_test_header(char test_name[], 427 struct addrinfo *source, 428 struct addrinfo *destination); 429 extern void set_port_number(struct addrinfo *res, 430 unsigned short port); 431 extern void set_hostname_and_port(char *hostname, 432 char *portstr, 433 int family, 434 int port); 435 extern void send_tcp_stream(char remote_host[]); 436 extern void send_tcp_maerts(char remote_host[]); 437 extern void send_tcp_rr(char remote_host[]); 438 extern void send_tcp_conn_rr(char remote_host[]); 439 extern void send_tcp_cc(char remote_host[]); 440 extern void send_udp_stream(char remote_host[]); 441 extern void send_udp_rr(char remote_host[]); 442 443 extern void recv_tcp_stream(); 444 extern void recv_tcp_maerts(); 445 extern void recv_tcp_rr(); 446 extern void recv_tcp_conn_rr(); 447 extern void recv_tcp_cc(); 448 extern void recv_udp_stream(); 449 extern void recv_udp_rr(); 450 451 extern void loc_cpu_rate(); 452 extern void rem_cpu_rate(); 453 454 #ifdef HAVE_ICSC_EXS 455 extern void send_exs_tcp_stream(char remotehost[]); 456 #endif /* HAVE_ICSC_EXS */ 457 458 #ifdef HAVE_SENDFILE 459 extern void sendfile_tcp_stream(char remotehost[]); 460 #endif /* HAVE_SENDFILE */ 461 462 #if !defined(HAVE_STRUCT_SOCKADDR_STORAGE) && !defined(sockaddr_storage) 463 #define sockaddr_storage sockaddr_in 464 #endif 465 466 #ifdef DO_NBRR 467 extern void send_tcp_nbrr(char remote_host[]); 468 469 extern void recv_tcp_nbrr(); 470 #endif 471 472