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

📄 reporter.h

📁 在Linux/Unix环境下发包测试性能的工具
💻 H
字号:
/*---------------------------------------------------------------  * Copyright (c) 1999,2000,2001,2002,2003                               * The Board of Trustees of the University of Illinois             * All Rights Reserved.                                            *---------------------------------------------------------------  * Permission is hereby granted, free of charge, to any person     * obtaining a copy of this software (Iperf) and associated        * documentation files (the "Software"), to deal in the Software   * without restriction, including without limitation the           * rights to use, copy, modify, merge, publish, distribute,         * sublicense, and/or sell copies of the Software, and to permit      * persons to whom the Software is furnished to do * so, subject to the following conditions:  * *      * Redistributions of source code must retain the above  * copyright notice, this list of conditions and  * the following disclaimers.  * *      * Redistributions in binary form must reproduce the above  * copyright notice, this list of conditions and the following  * disclaimers in the documentation and/or other materials  * provided with the distribution.  *  *      * Neither the names of the University of Illinois, NCSA,  * nor the names of its contributors may be used to endorse  * or promote products derived from this Software without * specific prior written permission.  *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  * NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR COPYRIGHT  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  * ________________________________________________________________ * National Laboratory for Applied Network Research  * National Center for Supercomputing Applications  * University of Illinois at Urbana-Champaign  * http://www.ncsa.uiuc.edu * ________________________________________________________________  * * Reporter.h * by Kevin Gibbs <kgibbs@nlanr.net> * * Since version 2.0 this handles all reporting. * ________________________________________________________________ */#ifndef REPORTER_H#define REPORTER_H#include "headers.h"#include "Mutex.h"struct thread_Settings;struct server_hdr;#include "Settings.hpp"#define NUM_REPORT_STRUCTS 700#define NUM_MULTI_SLOTS    5#ifdef __cplusplusextern "C" {#endif/* * This struct contains all important information from the sending or * recieving thread. */typedef struct ReportStruct {    int packetID;    int packetLen;    struct timeval packetTime;    struct timeval sentTime;} ReportStruct;/* * The type field of ReporterData is a bitmask * with one or more of the following */#define    TRANSFER_REPORT      0x00000001#define    SERVER_RELAY_REPORT  0x00000002#define    SETTINGS_REPORT      0x00000004#define    CONNECTION_REPORT    0x00000008#define    MULTIPLE_REPORT      0x00000010typedef struct Transfer_Info {    void *reserved_delay;    int transferID;    int groupID;    int cntError;    int cntOutofOrder;    int cntDatagrams;    // Hopefully int64_t's    max_size_t TotalLen;    double jitter;    double startTime;    double endTime;    // chars    char   mFormat;                 // -f    u_char mTTL;                    // -T    char   mUDP;    char   free;} Transfer_Info;typedef struct Connection_Info {    iperf_sockaddr peer;    Socklen_t size_peer;    iperf_sockaddr local;    Socklen_t size_local;} Connection_Info;typedef struct ReporterData {    char*  mHost;                   // -c    char*  mLocalhost;              // -B    // int's    int type;    int cntError;    int lastError;    int cntOutofOrder;    int lastOutofOrder;    int cntDatagrams;    int lastDatagrams;    int PacketID;    int mBufLen;                    // -l    int mMSS;                       // -M    int mTCPWin;                    // -w    /*   flags is a BitMask of old bools        bool   mBufLenSet;              // -l        bool   mCompat;                 // -C        bool   mDaemon;                 // -D        bool   mDomain;                 // -V        bool   mFileInput;              // -F or -I        bool   mNodelay;                // -N        bool   mPrintMSS;               // -m        bool   mRemoveService;          // -R        bool   mStdin;                  // -I        bool   mStdout;                 // -o        bool   mSuggestWin;             // -W        bool   mUDP;        bool   mMode_time;*/    int flags;     // enums (which should be special int's)    ThreadMode mThreadMode;         // -s or -c    ReportMode mode;    max_size_t TotalLen;    max_size_t lastTotal;    // doubles    double lastTransit;    // shorts    unsigned short mPort;           // -p    // structs or miscellaneous    Transfer_Info info;    Connection_Info connection;    struct timeval startTime;    struct timeval packetTime;    struct timeval nextTime;    struct timeval intervalTime;} ReporterData;typedef struct MultiHeader {    int reporterindex;    int agentindex;    int groupID;    int threads;    ReporterData *report;    Transfer_Info *data;    Condition barrier;    struct timeval startTime;} MultiHeader;typedef struct ReportHeader {    int reporterindex;    int agentindex;    ReporterData report;    ReportStruct *data;    MultiHeader *multireport;    struct ReportHeader *next;} ReportHeader;typedef void* (* report_connection)( Connection_Info*, int );typedef void (* report_settings)( ReporterData* );typedef void (* report_statistics)( Transfer_Info* );typedef void (* report_serverstatistics)( Connection_Info*, Transfer_Info* );MultiHeader* InitMulti( struct thread_Settings *agent, int inID );ReportHeader* InitReport( struct thread_Settings *agent );void ReportPacket( ReportHeader *agent, ReportStruct *packet );void CloseReport( ReportHeader *agent, ReportStruct *packet );void EndReport( ReportHeader *agent );Transfer_Info* GetReport( ReportHeader *agent );void ReportServerUDP( struct thread_Settings *agent, struct server_hdr *server );void ReportSettings( struct thread_Settings *agent );void ReportConnections( struct thread_Settings *agent );extern report_connection connection_reports[];extern report_settings settings_reports[];extern report_statistics statistics_reports[];extern report_serverstatistics serverstatistics_reports[];extern report_statistics multiple_reports[];extern char buffer[64]; // Buffer for printing#define rMillion 1000000#define TimeDifference( left, right ) (left.tv_sec  - right.tv_sec) +   \        (left.tv_usec - right.tv_usec) / ((double) rMillion)#define TimeAdd( left, right )  do {                                    \                                    left.tv_usec += right.tv_usec;      \                                    if ( left.tv_usec > rMillion ) {    \                                        left.tv_usec -= rMillion;       \                                        left.tv_sec++;                  \                                    }                                   \                                    left.tv_sec += right.tv_sec;        \                                } while ( 0 )#ifdef __cplusplus} /* end extern "C" */#endif#endif // REPORTER_H

⌨️ 快捷键说明

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