285 lines
7.6 KiB
C
285 lines
7.6 KiB
C
/*
|
|
|
|
Copyright (C) 1993-2007 Hewlett-Packard Company
|
|
ALL RIGHTS RESERVED.
|
|
|
|
The enclosed software and documentation includes copyrighted works
|
|
of Hewlett-Packard Co. For as long as you comply with the following
|
|
limitations, you are hereby authorized to (i) use, reproduce, and
|
|
modify the software and documentation, and to (ii) distribute the
|
|
software and documentation, including modifications, for
|
|
non-commercial purposes only.
|
|
|
|
1. The enclosed software and documentation is made available at no
|
|
charge in order to advance the general development of
|
|
high-performance networking products.
|
|
|
|
2. You may not delete any copyright notices contained in the
|
|
software or documentation. All hard copies, and copies in
|
|
source code or object code form, of the software or
|
|
documentation (including modifications) must contain at least
|
|
one of the copyright notices.
|
|
|
|
3. The enclosed software and documentation has not been subjected
|
|
to testing and quality control and is not a Hewlett-Packard Co.
|
|
product. At a future time, Hewlett-Packard Co. may or may not
|
|
offer a version of the software and documentation as a product.
|
|
|
|
4. THE SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS".
|
|
HEWLETT-PACKARD COMPANY DOES NOT WARRANT THAT THE USE,
|
|
REPRODUCTION, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
|
|
DOCUMENTATION WILL NOT INFRINGE A THIRD PARTY'S INTELLECTUAL
|
|
PROPERTY RIGHTS. HP DOES NOT WARRANT THAT THE SOFTWARE OR
|
|
DOCUMENTATION IS ERROR FREE. HP DISCLAIMS ALL WARRANTIES,
|
|
EXPRESS AND IMPLIED, WITH REGARD TO THE SOFTWARE AND THE
|
|
DOCUMENTATION. HP SPECIFICALLY DISCLAIMS ALL WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
5. HEWLETT-PACKARD COMPANY WILL NOT IN ANY EVENT BE LIABLE FOR ANY
|
|
DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
|
|
(INCLUDING LOST PROFITS) RELATED TO ANY USE, REPRODUCTION,
|
|
MODIFICATION, OR DISTRIBUTION OF THE SOFTWARE OR DOCUMENTATION.
|
|
|
|
*/
|
|
char netperf_id[]="\
|
|
@(#)netperf.c (c) Copyright 1993-2007 Hewlett-Packard Company. Version 2.4.3";
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#ifdef HAVE_STRINGS_H
|
|
#include <strings.h>
|
|
#endif
|
|
|
|
/* FreeBSD doesn't like socket.h before types are set. */
|
|
#if __FreeBSD__
|
|
# include <sys/types.h>
|
|
#endif
|
|
|
|
#ifndef WIN32
|
|
/* this should only be temporary */
|
|
#include <sys/socket.h>
|
|
#endif
|
|
|
|
#ifdef WIN32
|
|
#include <winsock2.h>
|
|
#include <windows.h>
|
|
#endif /* WIN32 */
|
|
|
|
#include "netsh.h"
|
|
#include "netlib.h"
|
|
#include "nettest_bsd.h"
|
|
|
|
#ifdef WANT_UNIX
|
|
#include "nettest_unix.h"
|
|
#endif /* WANT_UNIX */
|
|
|
|
#ifdef WANT_XTI
|
|
#include "nettest_xti.h"
|
|
#endif /* WANT_XTI */
|
|
|
|
#ifdef WANT_DLPI
|
|
#include "nettest_dlpi.h"
|
|
#endif /* WANT_DLPI */
|
|
|
|
#ifdef WANT_SDP
|
|
#include "nettest_sdp.h"
|
|
#endif
|
|
|
|
/* The DNS tests have been removed from netperf2. Those wanting to do
|
|
DNS_RR tests should use netperf4 instead. */
|
|
|
|
#ifdef DO_DNS
|
|
#error DNS tests have been removed from netperf. Use netperf4 instead
|
|
#endif /* DO_DNS */
|
|
|
|
#ifdef WANT_SCTP
|
|
#include "nettest_sctp.h"
|
|
#endif
|
|
|
|
/* this file contains the main for the netperf program. all the other */
|
|
/* routines can be found in the file netsh.c */
|
|
|
|
|
|
int _cdecl
|
|
main(int argc, char *argv[])
|
|
{
|
|
|
|
#ifdef WIN32
|
|
WSADATA wsa_data ;
|
|
|
|
/* Initialize the winsock lib ( version 2.2 ) */
|
|
if ( WSAStartup(MAKEWORD(2,2), &wsa_data) == SOCKET_ERROR ){
|
|
printf("WSAStartup() failed : %d\n", GetLastError()) ;
|
|
return 1 ;
|
|
}
|
|
#endif /* WIN32 */
|
|
|
|
netlib_init();
|
|
set_defaults();
|
|
scan_cmd_line(argc,argv);
|
|
|
|
if (debug) {
|
|
dump_globals();
|
|
install_signal_catchers();
|
|
}
|
|
|
|
if (debug) {
|
|
printf("remotehost is %s and port %s\n",host_name,test_port);
|
|
fflush(stdout);
|
|
}
|
|
|
|
|
|
if (!no_control) {
|
|
establish_control(host_name,test_port,address_family,
|
|
local_host_name,local_test_port,local_address_family);
|
|
}
|
|
|
|
if (strcasecmp(test_name,"TCP_STREAM") == 0) {
|
|
send_tcp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"TCP_MAERTS") == 0) {
|
|
send_tcp_maerts(host_name);
|
|
}
|
|
#ifdef HAVE_ICSC_EXS
|
|
else if (strcasecmp(test_name,"EXS_TCP_STREAM") == 0) {
|
|
send_exs_tcp_stream(host_name);
|
|
}
|
|
#endif /* HAVE_ICSC_EXS */
|
|
#ifdef HAVE_SENDFILE
|
|
else if (strcasecmp(test_name,"TCP_SENDFILE") == 0) {
|
|
sendfile_tcp_stream(host_name);
|
|
}
|
|
#endif /* HAVE_SENDFILE */
|
|
else if (strcasecmp(test_name,"TCP_RR") == 0) {
|
|
send_tcp_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"TCP_CRR") == 0) {
|
|
send_tcp_conn_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"TCP_CC") == 0) {
|
|
send_tcp_cc(host_name);
|
|
}
|
|
#ifdef DO_1644
|
|
else if (strcasecmp(test_name,"TCP_TRR") == 0) {
|
|
send_tcp_tran_rr(host_name);
|
|
}
|
|
#endif /* DO_1644 */
|
|
#ifdef DO_NBRR
|
|
else if (strcasecmp(test_name,"TCP_NBRR") == 0) {
|
|
send_tcp_nbrr(host_name);
|
|
}
|
|
#endif /* DO_NBRR */
|
|
else if (strcasecmp(test_name,"UDP_STREAM") == 0) {
|
|
send_udp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"UDP_RR") == 0) {
|
|
send_udp_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"LOC_CPU") == 0) {
|
|
loc_cpu_rate();
|
|
}
|
|
else if (strcasecmp(test_name,"REM_CPU") == 0) {
|
|
rem_cpu_rate();
|
|
}
|
|
#ifdef WANT_DLPI
|
|
else if (strcasecmp(test_name,"DLCO_RR") == 0) {
|
|
send_dlpi_co_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"DLCL_RR") == 0) {
|
|
send_dlpi_cl_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"DLCO_STREAM") == 0) {
|
|
send_dlpi_co_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"DLCL_STREAM") == 0) {
|
|
send_dlpi_cl_stream(host_name);
|
|
}
|
|
#endif /* WANT_DLPI */
|
|
#ifdef WANT_UNIX
|
|
else if (strcasecmp(test_name,"STREAM_RR") == 0) {
|
|
send_stream_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"DG_RR") == 0) {
|
|
send_dg_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"STREAM_STREAM") == 0) {
|
|
send_stream_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"DG_STREAM") == 0) {
|
|
send_dg_stream(host_name);
|
|
}
|
|
#endif /* WANT_UNIX */
|
|
#ifdef WANT_XTI
|
|
else if (strcasecmp(test_name,"XTI_TCP_STREAM") == 0) {
|
|
send_xti_tcp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"XTI_TCP_RR") == 0) {
|
|
send_xti_tcp_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"XTI_UDP_STREAM") == 0) {
|
|
send_xti_udp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"XTI_UDP_RR") == 0) {
|
|
send_xti_udp_rr(host_name);
|
|
}
|
|
#endif /* WANT_XTI */
|
|
|
|
#ifdef WANT_SCTP
|
|
else if (strcasecmp(test_name, "SCTP_STREAM") == 0) {
|
|
send_sctp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name, "SCTP_RR") == 0) {
|
|
send_sctp_rr(host_name);
|
|
}
|
|
else if (strcasecmp(test_name, "SCTP_STREAM_MANY") == 0) {
|
|
send_sctp_stream_1toMany(host_name);
|
|
}
|
|
else if (strcasecmp(test_name, "SCTP_RR_MANY") == 0) {
|
|
send_sctp_stream_1toMany(host_name);
|
|
}
|
|
#endif
|
|
|
|
#ifdef DO_DNS
|
|
else if (strcasecmp(test_name,"DNS_RR") == 0) {
|
|
fprintf(stderr,
|
|
"DNS tests can now be found in netperf4.\n");
|
|
fflush(stderr);
|
|
exit(-1);
|
|
}
|
|
#endif /* DO_DNS */
|
|
#ifdef WANT_SDP
|
|
else if (strcasecmp(test_name,"SDP_STREAM") == 0) {
|
|
send_sdp_stream(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"SDP_MAERTS") == 0) {
|
|
send_sdp_maerts(host_name);
|
|
}
|
|
else if (strcasecmp(test_name,"SDP_RR") == 0) {
|
|
send_sdp_rr(host_name);
|
|
}
|
|
#endif /* WANT_SDP */
|
|
else {
|
|
printf("The test you requested is unknown to this netperf.\n");
|
|
printf("Please verify that you have the correct test name, \n");
|
|
printf("and that test family has been compiled into this netperf.\n");
|
|
exit(1);
|
|
}
|
|
|
|
if (!no_control) {
|
|
shutdown_control();
|
|
}
|
|
|
|
#ifdef WIN32
|
|
/* Cleanup the winsock lib */
|
|
WSACleanup();
|
|
#endif
|
|
|
|
return(0);
|
|
}
|
|
|
|
|