📄 reporter.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 + -