Home | History | Annotate | Download | only in netperf
      1 /*
      2 
      3 	   Copyright (C) 1993-2007 Hewlett-Packard Company
      4                          ALL RIGHTS RESERVED.
      5 
      6   The enclosed software and documentation includes copyrighted works
      7   of Hewlett-Packard Co. For as long as you comply with the following
      8   limitations, you are hereby authorized to (i) use, reproduce, and
      9   modify the software and documentation, and to (ii) distribute the
     10   software and documentation, including modifications, for
     11   non-commercial purposes only.
     12 
     13   1.  The enclosed software and documentation is made available at no
     14       charge in order to advance the general development of
     15       high-performance networking products.
     16 
     17   2.  You may not delete any copyright notices contained in the
     18       software or documentation. All hard copies, and copies in
     19       source code or object code form, of the software or
     20       documentation (including modifications) must contain at least
     21       one of the copyright notices.
     22 
     23   3.  The enclosed software and documentation has not been subjected
     24       to testing and quality control and is not a Hewlett-Packard Co.
     25       product. At a future time, Hewlett-Packard Co. may or may not
     26       offer a version of the software and documentation as a product.
     27 
     28   4.  THE SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS".
     29       HEWLETT-PACKARD COMPANY DOES NOT WARRANT THAT THE USE,
     30       REPRODUCTION, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
     31       DOCUMENTATION WILL NOT INFRINGE A THIRD PARTY'S INTELLECTUAL
     32       PROPERTY RIGHTS. HP DOES NOT WARRANT THAT THE SOFTWARE OR
     33       DOCUMENTATION IS ERROR FREE. HP DISCLAIMS ALL WARRANTIES,
     34       EXPRESS AND IMPLIED, WITH REGARD TO THE SOFTWARE AND THE
     35       DOCUMENTATION. HP SPECIFICALLY DISCLAIMS ALL WARRANTIES OF
     36       MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
     37 
     38   5.  HEWLETT-PACKARD COMPANY WILL NOT IN ANY EVENT BE LIABLE FOR ANY
     39       DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
     40       (INCLUDING LOST PROFITS) RELATED TO ANY USE, REPRODUCTION,
     41       MODIFICATION, OR DISTRIBUTION OF THE SOFTWARE OR DOCUMENTATION.
     42 
     43 */
     44 char	netperf_id[]="\
     45 @(#)netperf.c (c) Copyright 1993-2007 Hewlett-Packard Company. Version 2.4.3";
     46 
     47 #ifdef HAVE_CONFIG_H
     48 #include "config.h"
     49 #endif
     50 
     51 #include <stdio.h>
     52 #include <stdlib.h>
     53 #ifdef HAVE_STRINGS_H
     54 #include <strings.h>
     55 #endif
     56 
     57 /* FreeBSD doesn't like socket.h before types are set. */
     58 #if __FreeBSD__
     59 # include <sys/types.h>
     60 #endif
     61 
     62 #ifndef WIN32
     63 /* this should only be temporary */
     64 #include <sys/socket.h>
     65 #endif
     66 
     67 #ifdef WIN32
     68 #include <winsock2.h>
     69 #include <windows.h>
     70 #endif /* WIN32 */
     71 
     72 #include "netsh.h"
     73 #include "netlib.h"
     74 #include "nettest_bsd.h"
     75 
     76 #ifdef WANT_UNIX
     77 #include "nettest_unix.h"
     78 #endif /* WANT_UNIX */
     79 
     80 #ifdef WANT_XTI
     81 #include "nettest_xti.h"
     82 #endif /* WANT_XTI */
     83 
     84 #ifdef WANT_DLPI
     85 #include "nettest_dlpi.h"
     86 #endif /* WANT_DLPI */
     87 
     88 #ifdef WANT_SDP
     89 #include "nettest_sdp.h"
     90 #endif
     91 
     92 /* The DNS tests have been removed from netperf2. Those wanting to do
     93    DNS_RR tests should use netperf4 instead. */
     94 
     95 #ifdef DO_DNS
     96 #error DNS tests have been removed from netperf. Use netperf4 instead
     97 #endif /* DO_DNS */
     98 
     99 #ifdef WANT_SCTP
    100 #include "nettest_sctp.h"
    101 #endif
    102 
    103  /* this file contains the main for the netperf program. all the other */
    104  /* routines can be found in the file netsh.c */
    105 
    106 
    107 int _cdecl
    108 main(int argc, char *argv[])
    109 {
    110 
    111 #ifdef WIN32
    112   WSADATA	wsa_data ;
    113 
    114   /* Initialize the winsock lib ( version 2.2 ) */
    115   if ( WSAStartup(MAKEWORD(2,2), &wsa_data) == SOCKET_ERROR ){
    116     printf("WSAStartup() failed : %d\n", GetLastError()) ;
    117     return 1 ;
    118   }
    119 #endif /* WIN32 */
    120 
    121   netlib_init();
    122   set_defaults();
    123   scan_cmd_line(argc,argv);
    124 
    125   if (debug) {
    126     dump_globals();
    127     install_signal_catchers();
    128   }
    129 
    130   if (debug) {
    131     printf("remotehost is %s and port %s\n",host_name,test_port);
    132     fflush(stdout);
    133   }
    134 
    135 
    136   if (!no_control) {
    137     establish_control(host_name,test_port,address_family,
    138 		      local_host_name,local_test_port,local_address_family);
    139   }
    140 
    141   if (strcasecmp(test_name,"TCP_STREAM") == 0) {
    142     send_tcp_stream(host_name);
    143   }
    144   else if (strcasecmp(test_name,"TCP_MAERTS") == 0) {
    145     send_tcp_maerts(host_name);
    146   }
    147 #ifdef HAVE_ICSC_EXS
    148   else if (strcasecmp(test_name,"EXS_TCP_STREAM") == 0) {
    149     send_exs_tcp_stream(host_name);
    150   }
    151 #endif /* HAVE_ICSC_EXS */
    152 #ifdef HAVE_SENDFILE
    153   else if (strcasecmp(test_name,"TCP_SENDFILE") == 0) {
    154     sendfile_tcp_stream(host_name);
    155   }
    156 #endif /* HAVE_SENDFILE */
    157   else if (strcasecmp(test_name,"TCP_RR") == 0) {
    158     send_tcp_rr(host_name);
    159   }
    160   else if (strcasecmp(test_name,"TCP_CRR") == 0) {
    161     send_tcp_conn_rr(host_name);
    162   }
    163   else if (strcasecmp(test_name,"TCP_CC") == 0) {
    164     send_tcp_cc(host_name);
    165   }
    166 #ifdef DO_1644
    167   else if (strcasecmp(test_name,"TCP_TRR") == 0) {
    168     send_tcp_tran_rr(host_name);
    169   }
    170 #endif /* DO_1644 */
    171 #ifdef DO_NBRR
    172   else if (strcasecmp(test_name,"TCP_NBRR") == 0) {
    173     send_tcp_nbrr(host_name);
    174   }
    175 #endif /* DO_NBRR */
    176   else if (strcasecmp(test_name,"UDP_STREAM") == 0) {
    177     send_udp_stream(host_name);
    178   }
    179   else if (strcasecmp(test_name,"UDP_RR") == 0) {
    180     send_udp_rr(host_name);
    181   }
    182   else if (strcasecmp(test_name,"LOC_CPU") == 0) {
    183     loc_cpu_rate();
    184   }
    185   else if (strcasecmp(test_name,"REM_CPU") == 0) {
    186     rem_cpu_rate();
    187   }
    188 #ifdef WANT_DLPI
    189   else if (strcasecmp(test_name,"DLCO_RR") == 0) {
    190     send_dlpi_co_rr(host_name);
    191   }
    192   else if (strcasecmp(test_name,"DLCL_RR") == 0) {
    193     send_dlpi_cl_rr(host_name);
    194   }
    195   else if (strcasecmp(test_name,"DLCO_STREAM") == 0) {
    196     send_dlpi_co_stream(host_name);
    197   }
    198   else if (strcasecmp(test_name,"DLCL_STREAM") == 0) {
    199     send_dlpi_cl_stream(host_name);
    200   }
    201 #endif /* WANT_DLPI */
    202 #ifdef WANT_UNIX
    203   else if (strcasecmp(test_name,"STREAM_RR") == 0) {
    204     send_stream_rr(host_name);
    205   }
    206   else if (strcasecmp(test_name,"DG_RR") == 0) {
    207     send_dg_rr(host_name);
    208   }
    209   else if (strcasecmp(test_name,"STREAM_STREAM") == 0) {
    210     send_stream_stream(host_name);
    211   }
    212   else if (strcasecmp(test_name,"DG_STREAM") == 0) {
    213     send_dg_stream(host_name);
    214   }
    215 #endif /* WANT_UNIX */
    216 #ifdef WANT_XTI
    217   else if (strcasecmp(test_name,"XTI_TCP_STREAM") == 0) {
    218     send_xti_tcp_stream(host_name);
    219   }
    220   else if (strcasecmp(test_name,"XTI_TCP_RR") == 0) {
    221     send_xti_tcp_rr(host_name);
    222   }
    223   else if (strcasecmp(test_name,"XTI_UDP_STREAM") == 0) {
    224     send_xti_udp_stream(host_name);
    225   }
    226   else if (strcasecmp(test_name,"XTI_UDP_RR") == 0) {
    227     send_xti_udp_rr(host_name);
    228   }
    229 #endif /* WANT_XTI */
    230 
    231 #ifdef WANT_SCTP
    232   else if (strcasecmp(test_name, "SCTP_STREAM") == 0) {
    233     send_sctp_stream(host_name);
    234   }
    235   else if (strcasecmp(test_name, "SCTP_RR") == 0) {
    236     send_sctp_rr(host_name);
    237   }
    238   else if (strcasecmp(test_name, "SCTP_STREAM_MANY") == 0) {
    239     send_sctp_stream_1toMany(host_name);
    240   }
    241   else if (strcasecmp(test_name, "SCTP_RR_MANY") == 0) {
    242     send_sctp_stream_1toMany(host_name);
    243   }
    244 #endif
    245 
    246 #ifdef DO_DNS
    247   else if (strcasecmp(test_name,"DNS_RR") == 0) {
    248     fprintf(stderr,
    249 	  "DNS tests can now be found in netperf4.\n");
    250     fflush(stderr);
    251     exit(-1);
    252   }
    253 #endif /* DO_DNS */
    254 #ifdef WANT_SDP
    255   else if (strcasecmp(test_name,"SDP_STREAM") == 0) {
    256     send_sdp_stream(host_name);
    257   }
    258   else if (strcasecmp(test_name,"SDP_MAERTS") == 0) {
    259     send_sdp_maerts(host_name);
    260   }
    261   else if (strcasecmp(test_name,"SDP_RR") == 0) {
    262     send_sdp_rr(host_name);
    263   }
    264 #endif /* WANT_SDP */
    265   else {
    266     printf("The test you requested is unknown to this netperf.\n");
    267     printf("Please verify that you have the correct test name, \n");
    268     printf("and that test family has been compiled into this netperf.\n");
    269     exit(1);
    270   }
    271 
    272   if (!no_control) {
    273     shutdown_control();
    274   }
    275 
    276 #ifdef WIN32
    277   /* Cleanup the winsock lib */
    278   WSACleanup();
    279 #endif
    280 
    281   return(0);
    282 }
    283 
    284 
    285