/*---------------------------------------------------------------
* 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 __cplusplus
extern "C" {
#endif
/*
* This struct contains all important information from the sending or
* recieving thread .
*/
typedef struct ReportStruct {
int packetID;
max_size_t 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 0 x00000001
#define SERVER_RELAY_REPORT 0 x00000002
#define SETTINGS_REPORT 0 x00000004
#define CONNECTION_REPORT 0 x00000008
#define MULTIPLE_REPORT 0 x00000010
typedef 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
Messung V0.5 in Prozent C=86 H=96 G=90
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland