⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settings.cpp

📁 在Linux/Unix环境下发包测试性能的工具
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                        ( mExtSettings->mMode == kTest_DualTest ?                          'd' : 'r' ) );                mExtSettings->mMode = kTest_Normal;            }            break;        case 'D': // Run as a daemon            setDaemon( mExtSettings );            break;        case 'F' : // Get the input for the data stream from a file            if ( mExtSettings->mThreadMode != kMode_Client ) {                fprintf( stderr, warn_invalid_server_option, option );                break;            }            setFileInput( mExtSettings );            mExtSettings->mFileName = new char[strlen(optarg)+1];            strcpy( mExtSettings->mFileName, optarg);            break;        case 'I' : // Set the stdin as the input source            if ( mExtSettings->mThreadMode != kMode_Client ) {                fprintf( stderr, warn_invalid_server_option, option );                break;            }            setFileInput( mExtSettings );            setSTDIN( mExtSettings );            mExtSettings->mFileName = new char[strlen("<stdin>")+1];            strcpy( mExtSettings->mFileName,"<stdin>");            break;        case 'L': // Listen Port (bidirectional testing client-side)            if ( mExtSettings->mThreadMode != kMode_Client ) {                fprintf( stderr, warn_invalid_server_option, option );                break;            }            mExtSettings->mListenPort = atoi( optarg );            break;        case 'M': // specify TCP MSS (maximum segment size)            Settings_GetUpperCaseArg(optarg,outarg);            mExtSettings->mMSS = byte_atoi( outarg );            break;        case 'N': // specify TCP nodelay option (disable Jacobson's Algorithm)            setNoDelay( mExtSettings );            break;        case 'P': // number of client threads#ifdef HAVE_THREAD            mExtSettings->mThreads = atoi( optarg );#else            if ( mExtSettings->mThreadMode != kMode_Server ) {                fprintf( stderr, warn_invalid_single_threaded, option );            } else {                mExtSettings->mThreads = atoi( optarg );            }#endif            break;        case 'R':            setRemoveService( mExtSettings );            break;        case 'S': // IP type-of-service            // TODO use a function that understands base-2            // the zero base here allows the user to specify            // "0x#" hex, "0#" octal, and "#" decimal numbers            mExtSettings->mTOS = strtol( optarg, NULL, 0 );            break;        case 'T': // time-to-live for multicast            mExtSettings->mTTL = atoi( optarg );            break;        case 'U': // single threaded UDP server            setSingleUDP( mExtSettings );            break;        case 'V': // IPv6 Domain            setIPV6( mExtSettings );            if ( mExtSettings->mThreadMode == kMode_Server                  && mExtSettings->mLocalhost != NULL ) {                // Test for Multicast                iperf_sockaddr temp;                SockAddr_setHostname( mExtSettings->mLocalhost, &temp, 1);                if ( SockAddr_isMulticast( &temp ) ) {                    setMulticast( mExtSettings );                }            } else if ( mExtSettings->mThreadMode == kMode_Client ) {                // Test for Multicast                iperf_sockaddr temp;                SockAddr_setHostname( mExtSettings->mHost, &temp, 1 );                if ( SockAddr_isMulticast( &temp ) ) {                    setMulticast( mExtSettings );                }            }            break;        case 'W' :            setSuggestWin( mExtSettings );            fprintf( stderr, "The -W option is not available in this release\n");            break;        default: // ignore unknown            break;    }} // end Interpretvoid Settings_GetUpperCaseArg(const char *inarg, char *outarg) {    int len = strlen(inarg);    strcpy(outarg,inarg);    if ( (len > 0) && (inarg[len-1] >='a')          && (inarg[len-1] <= 'z') )        outarg[len-1]= outarg[len-1]+'A'-'a';}void Settings_GetLowerCaseArg(const char *inarg, char *outarg) {    int len = strlen(inarg);    strcpy(outarg,inarg);    if ( (len > 0) && (inarg[len-1] >='A')          && (inarg[len-1] <= 'Z') )        outarg[len-1]= outarg[len-1]-'A'+'a';}/* * Settings_GenerateListenerSettings * Called to generate the settings to be passed to the Listener * instance that will handle dual testings from the client side * this should only return an instance if it was called on  * the thread_Settings instance generated from the command line  * for client side execution  */void Settings_GenerateListenerSettings( thread_Settings *client, thread_Settings **listener ) {    if ( !isCompat( client ) &&          (client->mMode == kTest_DualTest || client->mMode == kTest_TradeOff) ) {        *listener = new thread_Settings;        memcpy(*listener, client, sizeof( thread_Settings ));        setCompat( (*listener) );        unsetDaemon( (*listener) );        if ( client->mListenPort != 0 ) {            (*listener)->mPort   = client->mListenPort;        } else {            (*listener)->mPort   = client->mPort;        }        (*listener)->mFileName   = NULL;        (*listener)->mHost       = NULL;        (*listener)->mLocalhost  = NULL;        (*listener)->mOutputFileName = NULL;        (*listener)->mMode       = kTest_Normal;        (*listener)->mThreadMode = kMode_Listener;        if ( client->mHost != NULL ) {            (*listener)->mHost = new char[strlen( client->mHost ) + 1];            strcpy( (*listener)->mHost, client->mHost );        }        if ( client->mLocalhost != NULL ) {            (*listener)->mLocalhost = new char[strlen( client->mLocalhost ) + 1];            strcpy( (*listener)->mLocalhost, client->mLocalhost );        }    } else {        *listener = NULL;    }}/* * Settings_GenerateSpeakerSettings * Called to generate the settings to be passed to the Speaker * instance that will handle dual testings from the server side * this should only return an instance if it was called on  * the thread_Settings instance generated from the command line  * for server side execution. This should be an inverse operation * of GenerateClientHdr.  */void Settings_GenerateClientSettings( thread_Settings *server,                                       thread_Settings **client,                                      client_hdr *hdr ) {    int flags = ntohl(hdr->flags);    if ( (flags & HEADER_VERSION1) != 0 ) {        *client = new thread_Settings;        memcpy(*client, server, sizeof( thread_Settings ));        setCompat( (*client) );        (*client)->mTID = thread_zeroid();        (*client)->mPort       = (unsigned short) ntohl(hdr->mPort);        (*client)->mThreads    = ntohl(hdr->numThreads);        if ( hdr->bufferlen != 0 ) {            (*client)->mBufLen = ntohl(hdr->bufferlen);        }        if ( hdr->mWinBand != 0 ) {            if ( isUDP( server ) ) {                (*client)->mUDPRate = ntohl(hdr->mWinBand);            } else {                (*client)->mTCPWin = ntohl(hdr->mWinBand);            }        }        (*client)->mAmount     = ntohl(hdr->mAmount);        if ( ((*client)->mAmount & 0x80000000) > 0 ) {            setModeTime( (*client) );#ifndef WIN32            (*client)->mAmount |= 0xFFFFFFFF00000000LL;#else            (*client)->mAmount |= 0xFFFFFFFF00000000;#endif            (*client)->mAmount = -(*client)->mAmount;        }        (*client)->mFileName   = NULL;        (*client)->mHost       = NULL;        (*client)->mLocalhost  = NULL;        (*client)->mOutputFileName = NULL;        (*client)->mMode       = ((flags & RUN_NOW) == 0 ?                                   kTest_TradeOff : kTest_DualTest);        (*client)->mThreadMode = kMode_Client;        if ( server->mLocalhost != NULL ) {            (*client)->mLocalhost = new char[strlen( server->mLocalhost ) + 1];            strcpy( (*client)->mLocalhost, server->mLocalhost );        }        (*client)->mHost = new char[REPORT_ADDRLEN];        if ( ((sockaddr*)&server->peer)->sa_family == AF_INET ) {            inet_ntop( AF_INET, &((sockaddr_in*)&server->peer)->sin_addr,                        (*client)->mHost, REPORT_ADDRLEN);        }#ifdef HAVE_IPV6          else {            inet_ntop( AF_INET6, &((sockaddr_in6*)&server->peer)->sin6_addr,                        (*client)->mHost, REPORT_ADDRLEN);        }#endif    } else {        *client = NULL;    }}/* * Settings_GenerateClientHdr * Called to generate the client header to be passed to the * server that will handle dual testings from the server side * This should be an inverse operation of GenerateSpeakerSettings */void Settings_GenerateClientHdr( thread_Settings *client, client_hdr *hdr ) {    if ( client->mMode != kTest_Normal ) {        hdr->flags  = htonl(HEADER_VERSION1);    } else {        hdr->flags  = 0;    }    if ( isBuflenSet( client ) ) {        hdr->bufferlen = htonl(client->mBufLen);    } else {        hdr->bufferlen = 0;    }    if ( isUDP( client ) ) {        hdr->mWinBand  = htonl(client->mUDPRate);    } else {        hdr->mWinBand  = htonl(client->mTCPWin);    }    if ( client->mListenPort != 0 ) {        hdr->mPort  = htonl(client->mListenPort);    } else {        hdr->mPort  = htonl(client->mPort);    }    hdr->numThreads = htonl(client->mThreads);    if ( isModeTime( client ) ) {        hdr->mAmount    = htonl(-(long)client->mAmount);    } else {        hdr->mAmount    = htonl((long)client->mAmount);        hdr->mAmount &= htonl( 0x7FFFFFFF );    }    if ( client->mMode == kTest_DualTest ) {        hdr->flags |= htonl(RUN_NOW);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -