/* * Prints reports conditionally */ int reporter_condprintstats( ReporterData *stats, MultiHeader *multireport, int force ) { if ( force != 0 ) { stats->info.cntOutofOrder = stats->cntOutofOrder; // assume most of the time out-of-order packets are not // duplicate packets, so conditionally subtract them from the lost packets. stats->info.cntError = stats->cntError; if ( stats->info.cntError > stats->info.cntOutofOrder ) { stats->info.cntError -= stats->info.cntOutofOrder; } stats->info.cntDatagrams = (isUDP(stats) ? stats->PacketID : stats->cntDatagrams); stats->info.TotalLen = stats->TotalLen; stats->info.startTime = 0; stats->info.endTime = TimeDifference( stats->packetTime, stats->startTime ); stats->info.free = 1; reporter_print( stats, TRANSFER_REPORT, force ); if ( isMultipleReport(stats) ) { reporter_handle_multiple_reports( multireport, &stats->info, force ); } } else while ((stats->intervalTime.tv_sec != 0 || stats->intervalTime.tv_usec != 0) && TimeDifference( stats->nextTime, stats->packetTime ) < 0 ) { stats->info.cntOutofOrder = stats->cntOutofOrder - stats->lastOutofOrder; stats->lastOutofOrder = stats->cntOutofOrder; // assume most of the time out-of-order packets are not // duplicate packets, so conditionally subtract them from the lost packets. stats->info.cntError = stats->cntError - stats->lastError; if ( stats->info.cntError > stats->info.cntOutofOrder ) { stats->info.cntError -= stats->info.cntOutofOrder; } stats->lastError = stats->cntError; stats->info.cntDatagrams = (isUDP( stats ) ? stats->PacketID - stats->lastDatagrams : stats->cntDatagrams - stats->lastDatagrams); stats->lastDatagrams = (isUDP( stats ) ? stats->PacketID : stats->cntDatagrams); stats->info.TotalLen = stats->TotalLen - stats->lastTotal; stats->lastTotal = stats->TotalLen; stats->info.startTime = stats->info.endTime; stats->info.endTime = TimeDifference( stats->nextTime, stats->startTime ); TimeAdd( stats->nextTime, stats->intervalTime ); stats->info.free = 0; reporter_print( stats, TRANSFER_REPORT, force ); if ( isMultipleReport(stats) ) { reporter_handle_multiple_reports( multireport, &stats->info, force ); } } return force; }
/* * Prints reports conditionally */ int reporter_condprintstats( ReporterData *stats, MultiHeader *multireport, int force ) { if ( force ) { #ifdef HAVE_STRUCT_TCP_INFO_TCPI_TOTAL_RETRANS gettcpistats(stats); #endif stats->info.cntOutofOrder = stats->cntOutofOrder; // assume most of the time out-of-order packets are not // duplicate packets, so conditionally subtract them from the lost packets. stats->info.cntError = stats->cntError; if ( stats->info.cntError > stats->info.cntOutofOrder ) { stats->info.cntError -= stats->info.cntOutofOrder; } stats->info.cntDatagrams = ((stats->info.mUDP == kMode_Server) ? stats->PacketID : stats->cntDatagrams); stats->info.TotalLen = stats->TotalLen; stats->info.startTime = 0; stats->info.endTime = TimeDifference( stats->packetTime, stats->startTime ); stats->info.transit.minTransit = stats->info.transit.totminTransit; stats->info.transit.maxTransit = stats->info.transit.totmaxTransit; stats->info.transit.cntTransit = stats->info.transit.totcntTransit; stats->info.transit.sumTransit = stats->info.transit.totsumTransit; stats->info.transit.meanTransit = stats->info.transit.totmeanTransit; stats->info.transit.m2Transit = stats->info.transit.totm2Transit; stats->info.transit.vdTransit = stats->info.transit.totvdTransit; if (stats->info.mTCP == kMode_Client) { stats->info.tcp.write.WriteErr = stats->info.tcp.write.totWriteErr; stats->info.tcp.write.WriteCnt = stats->info.tcp.write.totWriteCnt; stats->info.tcp.write.TCPretry = stats->info.tcp.write.totTCPretry; } if (stats->info.mTCP == kMode_Server) { int ix; stats->info.tcp.read.cntRead = stats->info.tcp.read.totcntRead; for (ix = 0; ix < 8; ix++) { stats->info.tcp.read.bins[ix] = stats->info.tcp.read.totbins[ix]; } } if (stats->info.endTime > 0) { stats->info.IPGcnt = (int) (stats->cntDatagrams / stats->info.endTime); } else { stats->info.IPGcnt = 0; } stats->info.IPGsum = 1; stats->info.free = 1; reporter_print( stats, TRANSFER_REPORT, force ); if ( isMultipleReport(stats) ) { reporter_handle_multiple_reports( multireport, &stats->info, force ); } } else while ((stats->intervalTime.tv_sec != 0 || stats->intervalTime.tv_usec != 0) && TimeDifference( stats->nextTime, stats->packetTime ) < 0 ) { #ifdef HAVE_STRUCT_TCP_INFO_TCPI_TOTAL_RETRANS gettcpistats(stats); #endif stats->info.cntOutofOrder = stats->cntOutofOrder - stats->lastOutofOrder; stats->lastOutofOrder = stats->cntOutofOrder; // assume most of the time out-of-order packets are not // duplicate packets, so conditionally subtract them from the lost packets. stats->info.cntError = stats->cntError - stats->lastError; if ( stats->info.cntError > stats->info.cntOutofOrder ) { stats->info.cntError -= stats->info.cntOutofOrder; } stats->lastError = stats->cntError; stats->info.cntDatagrams = ((stats->info.mUDP == kMode_Server) ? stats->PacketID - stats->lastDatagrams : stats->cntDatagrams - stats->lastDatagrams); stats->lastDatagrams = ((stats->info.mUDP == kMode_Server) ? stats->PacketID : stats->cntDatagrams); stats->info.TotalLen = stats->TotalLen - stats->lastTotal; stats->lastTotal = stats->TotalLen; stats->info.startTime = stats->info.endTime; stats->info.endTime = TimeDifference( stats->nextTime, stats->startTime ); TimeAdd( stats->nextTime, stats->intervalTime ); stats->info.free = 0; reporter_print( stats, TRANSFER_REPORT, force ); if ( isMultipleReport(stats) ) { reporter_handle_multiple_reports( multireport, &stats->info, force ); } // Reset stats used by SUM now that the SUM has been reported if (stats->info.mEnhanced) { if (stats->info.mUDP) { stats->info.IPGcnt = 0; stats->info.IPGsum = 0; } else if (stats->info.mTCP == (char)kMode_Client) { stats->info.tcp.write.WriteCnt = 0; stats->info.tcp.write.WriteErr = 0; } else if (stats->info.mTCP == (char)kMode_Server) { int ix; stats->info.tcp.read.cntRead = 0; for (ix = 0; ix < 8; ix++) { stats->info.tcp.read.bins[ix] = 0; } } } } return force; }