Suppress invalid or non-meaningful statistics - for example, without

time stamps on all packets in a set, you can't determine the start and
end time of the packets in the set (even one timestampless packet throws
the determination off - was that packet before the first time-stamped or
after the last time-stamped packet, or between them?).

svn path=/trunk/; revision=41187
This commit is contained in:
Guy Harris 2012-02-26 08:02:02 +00:00
parent 08d7ff268b
commit 30b86b7817
5 changed files with 291 additions and 150 deletions

View File

@ -43,48 +43,67 @@ tally_frame_data(frame_data *cur_frame, summary_tally *sum_tally)
{
double cur_time;
cur_time = nstime_to_sec(&cur_frame->abs_ts);
if (cur_time < sum_tally->start_time) {
sum_tally->start_time = cur_time;
}
if (cur_time > sum_tally->stop_time){
sum_tally->stop_time = cur_time;
}
sum_tally->bytes += cur_frame->pkt_len;
if (cur_frame->flags.passed_dfilter){
if (sum_tally->filtered_count==0){
sum_tally->filtered_start= cur_time;
sum_tally->filtered_stop = cur_time;
} else {
if (cur_time < sum_tally->filtered_start) {
sum_tally->filtered_start = cur_time;
}
if (cur_time > sum_tally->filtered_stop) {
sum_tally->filtered_stop = cur_time;
}
}
sum_tally->filtered_count++;
sum_tally->filtered_bytes += cur_frame->pkt_len ;
sum_tally->filtered_bytes += cur_frame->pkt_len;
}
if (cur_frame->flags.marked){
if (sum_tally->marked_count==0){
sum_tally->marked_start= cur_time;
sum_tally->marked_stop = cur_time;
} else {
if (cur_time < sum_tally->marked_start) {
sum_tally->marked_start = cur_time;
}
if (cur_time > sum_tally->marked_stop) {
sum_tally->marked_stop = cur_time;
}
}
sum_tally->marked_count++;
sum_tally->marked_bytes += cur_frame->pkt_len ;
sum_tally->marked_bytes += cur_frame->pkt_len;
}
if (cur_frame->flags.ignored){
sum_tally->ignored_count++;
}
if (cur_frame->flags.has_ts) {
/* This packet has a time stamp. */
cur_time = nstime_to_sec(&cur_frame->abs_ts);
sum_tally->packet_count_ts++;
if (cur_time < sum_tally->start_time) {
sum_tally->start_time = cur_time;
}
if (cur_time > sum_tally->stop_time){
sum_tally->stop_time = cur_time;
}
if (cur_frame->flags.passed_dfilter){
sum_tally->filtered_count_ts++;
/*
* If we've seen one filtered packet, this is the first
* one.
*/
if (sum_tally->filtered_count == 1){
sum_tally->filtered_start= cur_time;
sum_tally->filtered_stop = cur_time;
} else {
if (cur_time < sum_tally->filtered_start) {
sum_tally->filtered_start = cur_time;
}
if (cur_time > sum_tally->filtered_stop) {
sum_tally->filtered_stop = cur_time;
}
}
}
if (cur_frame->flags.marked){
sum_tally->marked_count_ts++;
/*
* If we've seen one marked packet, this is the first
* one.
*/
if (sum_tally->marked_count == 1){
sum_tally->marked_start= cur_time;
sum_tally->marked_stop = cur_time;
} else {
if (cur_time < sum_tally->marked_start) {
sum_tally->marked_start = cur_time;
}
if (cur_time > sum_tally->marked_stop) {
sum_tally->marked_stop = cur_time;
}
}
}
}
}
void
@ -95,14 +114,17 @@ summary_fill_in(capture_file *cf, summary_tally *st)
guint32 framenum;
wtapng_section_t* shb_inf;
st->packet_count_ts = 0;
st->start_time = 0;
st->stop_time = 0;
st->bytes = 0;
st->filtered_count = 0;
st->filtered_count_ts = 0;
st->filtered_start = 0;
st->filtered_stop = 0;
st->filtered_bytes = 0;
st->marked_count = 0;
st->marked_count_ts = 0;
st->marked_start = 0;
st->marked_stop = 0;
st->marked_bytes = 0;
@ -194,7 +216,7 @@ summary_fill_in_capture(capture_file *cf,capture_options *capture_opts, summary_
iface.linktype = wtapng_if_descr.link_type;
g_array_append_val(st->ifaces, iface);
}
g_free(idb_info);
g_free(idb_info);
}
}
#endif

View File

@ -33,45 +33,48 @@ typedef struct iface_options_tag {
char *name;
char *descr;
char *cfilter;
guint64 drops; /* number of packet drops */
guint64 drops; /* number of packet drops */
gboolean drops_known; /* TRUE if number of packet drops is known */
gboolean has_snap; /* TRUE if maximum capture packet length is known */
int snap; /* Maximum captured packet length */
int linktype; /* wiretap encapsulation type */
gboolean has_snap; /* TRUE if maximum capture packet length is known */
int snap; /* Maximum captured packet length */
int linktype; /* wiretap encapsulation type */
} iface_options;
typedef struct _summary_tally {
guint64 bytes; /**< total bytes */
double start_time; /**< seconds, with msec resolution */
double stop_time; /**< seconds, with msec resolution */
guint64 bytes; /**< total bytes */
double start_time; /**< seconds, with msec resolution */
double stop_time; /**< seconds, with msec resolution */
double elapsed_time; /**< seconds, with msec resolution,
includes time before first packet
and after last packet */
int marked_count; /**< number of marked packets */
includes time before first packet
and after last packet */
guint32 marked_count; /**< number of marked packets */
guint32 marked_count_ts; /**< number of time-stamped marked packets */
guint64 marked_bytes; /**< total bytes in the marked packets */
double marked_start; /**< time in seconds, with msec resolution */
double marked_stop; /**< time in seconds, with msec resolution */
int ignored_count; /**< number of ignored packets */
int packet_count; /**< total number of packets in trace */
int filtered_count; /**< number of filtered packets */
guint32 ignored_count; /**< number of ignored packets */
guint32 packet_count; /**< total number of packets in trace */
guint32 packet_count_ts; /**< total number of time-stamped packets in trace */
guint32 filtered_count; /**< number of filtered packets */
guint32 filtered_count_ts; /**< number of time-stamped filtered packets */
guint64 filtered_bytes; /**< total bytes in the filtered packets */
double filtered_start; /**< time in seconds, with msec resolution */
double filtered_stop; /**< time in seconds, with msec resolution */
const char *filename;
gint64 file_length; /**< file length in bytes */
int file_type; /**< wiretap file type */
int encap_type; /**< wiretap encapsulation type */
int file_type; /**< wiretap file type */
int encap_type; /**< wiretap encapsulation type */
gboolean has_snap; /**< TRUE if maximum capture packet length is known */
int snap; /**< Maximum captured packet length */
gboolean drops_known; /**< TRUE if number of packet drops is known */
int snap; /**< Maximum captured packet length */
gboolean drops_known; /**< TRUE if number of packet drops is known */
guint64 drops; /**< number of packet drops */
const char *dfilter; /**< display filter */
gboolean is_tempfile;
/* from SHB, use summary_fill_shb_inf() to get values */
gchar *opt_comment; /**< comment from SHB block */
gchar *shb_hardware; /**< Capture HW from SHB block */
gchar *shb_os; /**< The OS the capture was made on from SHB block */
gchar *shb_user_appl; /**< The application that made the capture from SHB block */
gchar *opt_comment; /**< comment from SHB block */
gchar *shb_hardware; /**< Capture HW from SHB block */
gchar *shb_os; /**< The OS the capture was made on from SHB block */
gchar *shb_user_appl; /**< The application that made the capture from SHB block */
/* capture related, use summary_fill_in_capture() to get values */
GArray *ifaces;
gboolean legacy;

View File

@ -90,7 +90,7 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
/* initialize the tally */
summary_fill_in(&cfile, &summary);
/* initial compututations */
/* initial computations */
seconds = summary.stop_time - summary.start_time;
sum_open_w = dlg_window_new("GSM MAP Statistics: Summary"); /* transient_for top_level */
@ -138,12 +138,21 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
gtk_container_add(GTK_CONTAINER(data_fr), data_box);
gtk_widget_show(data_box);
/* seconds */
g_snprintf(string_buff, SUM_STR_MAX, "Elapsed time: %.3f seconds", summary.elapsed_time);
add_string_to_box(string_buff, data_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* seconds */
g_snprintf(string_buff, SUM_STR_MAX, "Elapsed time: %.3f seconds", summary.elapsed_time);
add_string_to_box(string_buff, data_box);
g_snprintf(string_buff, SUM_STR_MAX, "Between first and last packet: %.3f seconds", seconds);
add_string_to_box(string_buff, data_box);
g_snprintf(string_buff, SUM_STR_MAX, "Between first and last packet: %.3f seconds", seconds);
add_string_to_box(string_buff, data_box);
}
/* Packet count */
g_snprintf(string_buff, SUM_STR_MAX, "Packet count: %i", summary.packet_count);
@ -178,12 +187,21 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Invokes: %u", tot_invokes);
add_string_to_box(string_buff, invoke_box);
/* Total number of invokes per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Invokes per second: %.2f", tot_invokes/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Invokes per second: N/A");
add_string_to_box(string_buff, invoke_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* Total number of invokes per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Invokes per second: %.2f", tot_invokes/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Invokes per second: N/A");
add_string_to_box(string_buff, invoke_box);
}
/* Total size of invokes */
g_snprintf(string_buff, SUM_STR_MAX, "Total number of bytes for Invokes: %.0f", tot_invokes_size);
@ -191,17 +209,26 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
/* Average size of invokes */
if (tot_invokes)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Invoke: %.2f", tot_invokes_size/tot_invokes);
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Invoke: %.2f", tot_invokes_size/tot_invokes);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Invoke: N/A");
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Invoke: N/A");
add_string_to_box(string_buff, invoke_box);
/* Average size of invokes per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: %.2f", tot_invokes_size/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: N/A");
add_string_to_box(string_buff, invoke_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* Average size of invokes per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: %.2f", tot_invokes_size/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: N/A");
add_string_to_box(string_buff, invoke_box);
}
/* Return Results frame */
rr_fr = gtk_frame_new("Return Results");
@ -216,12 +243,21 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Return Results: %u", tot_rr);
add_string_to_box(string_buff, rr_box);
/* Total number of return results per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Return Results per second: %.2f", tot_rr/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Return Results per second: N/A");
add_string_to_box(string_buff, rr_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* Total number of return results per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Return Results per second: %.2f", tot_rr/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of Return Results per second: N/A");
add_string_to_box(string_buff, rr_box);
}
/* Total size of return results */
g_snprintf(string_buff, SUM_STR_MAX, "Total number of bytes for Return Results: %.0f", tot_rr_size);
@ -229,17 +265,26 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
/* Average size of return results */
if (tot_rr)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Return Result: %.2f", tot_rr_size/tot_rr);
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Return Result: %.2f", tot_rr_size/tot_rr);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Return Result: N/A");
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per Return Result: N/A");
add_string_to_box(string_buff, rr_box);
/* Average size of return results per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: %.2f", tot_rr_size/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: N/A");
add_string_to_box(string_buff, rr_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* Average size of return results per second */
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: %.2f", tot_rr_size/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per second: N/A");
add_string_to_box(string_buff, rr_box);
}
/* Totals frame */
tot_fr = gtk_frame_new("Totals");
@ -254,30 +299,47 @@ void gsm_map_stat_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of GSM MAP messages: %u", tot_invokes + tot_rr);
add_string_to_box(string_buff, tot_box);
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of GSM MAP messages per second: %.2f",
(tot_invokes + tot_rr)/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of GSM MAP messages per second: N/A");
add_string_to_box(string_buff, tot_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Total number of GSM MAP messages per second: %.2f",
(tot_invokes + tot_rr)/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Total number of GSM MAP messages per second: N/A");
add_string_to_box(string_buff, tot_box);
}
g_snprintf(string_buff, SUM_STR_MAX, "Total number of bytes for GSM MAP messages: %.0f", tot_invokes_size + tot_rr_size);
add_string_to_box(string_buff, tot_box);
if (tot_invokes + tot_rr)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per GSM MAP messages: %.2f",
(tot_invokes_size + tot_rr_size)/(tot_invokes + tot_rr));
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per GSM MAP messages: %.2f",
(tot_invokes_size + tot_rr_size)/(tot_invokes + tot_rr));
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per GSM MAP messages: N/A");
add_string_to_box(string_buff, tot_box);
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes second: %.2f",
(tot_invokes_size + tot_rr_size)/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes second: N/A");
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes per GSM MAP messages: N/A");
add_string_to_box(string_buff, tot_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
if (seconds)
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes second: %.2f",
(tot_invokes_size + tot_rr_size)/seconds);
else
g_snprintf(string_buff, SUM_STR_MAX, "Average number of bytes second: N/A");
add_string_to_box(string_buff, tot_box);
}
/* Button row. */
bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);

View File

@ -286,7 +286,7 @@ void mtp3_sum_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
/* initialize the tally */
summary_fill_in(&cfile, &summary);
/* initial compututations */
/* initial computations */
seconds = summary.stop_time - summary.start_time;
sum_open_w = dlg_window_new("MTP3 Statistics: Summary"); /* transient_for top_level */
@ -335,12 +335,21 @@ void mtp3_sum_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
gtk_container_add(GTK_CONTAINER(data_fr), data_box);
gtk_widget_show(data_box);
/* seconds */
g_snprintf(string_buff, SUM_STR_MAX, "Elapsed time: %.3f seconds", summary.elapsed_time);
add_string_to_box(string_buff, data_box);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
/* seconds */
g_snprintf(string_buff, SUM_STR_MAX, "Elapsed time: %.3f seconds", summary.elapsed_time);
add_string_to_box(string_buff, data_box);
g_snprintf(string_buff, SUM_STR_MAX, "Between first and last packet: %.3f seconds", seconds);
add_string_to_box(string_buff, data_box);
g_snprintf(string_buff, SUM_STR_MAX, "Between first and last packet: %.3f seconds", seconds);
add_string_to_box(string_buff, data_box);
}
/* Packet count */
g_snprintf(string_buff, SUM_STR_MAX, "Packet count: %i", summary.packet_count);
@ -351,7 +360,7 @@ void mtp3_sum_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
gtk_container_add(GTK_CONTAINER(main_vb), table_fr);
gtk_widget_show(table_fr);
table = create_list();
table = create_list();
gtk_container_add(GTK_CONTAINER(table_fr), table);
gtk_widget_show(table);
@ -371,32 +380,50 @@ void mtp3_sum_gtk_sum_cb(GtkAction *action _U_, gpointer user_data _U_)
g_snprintf(string_buff, SUM_STR_MAX, "Total MSUs: %u", tot_num_msus);
add_string_to_box(string_buff, tot_box);
if (seconds) {
g_snprintf(string_buff, SUM_STR_MAX, "MSUs/second: %.2f", tot_num_msus/seconds);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
if (seconds) {
g_snprintf(string_buff, SUM_STR_MAX, "MSUs/second: %.2f", tot_num_msus/seconds);
}
else {
g_snprintf(string_buff, SUM_STR_MAX, "MSUs/second: N/A");
}
add_string_to_box(string_buff, tot_box);
}
else {
g_snprintf(string_buff, SUM_STR_MAX, "MSUs/second: N/A");
}
add_string_to_box(string_buff, tot_box);
g_snprintf(string_buff, SUM_STR_MAX, "Total Bytes: %.0f", tot_num_bytes);
add_string_to_box(string_buff, tot_box);
if (tot_num_msus) {
g_snprintf(string_buff, SUM_STR_MAX, "Average Bytes/MSU: %.2f", tot_num_bytes/tot_num_msus);
g_snprintf(string_buff, SUM_STR_MAX, "Average Bytes/MSU: %.2f", tot_num_bytes/tot_num_msus);
}
else {
g_snprintf(string_buff, SUM_STR_MAX, "Average Bytes/MSU: N/A");
g_snprintf(string_buff, SUM_STR_MAX, "Average Bytes/MSU: N/A");
}
add_string_to_box(string_buff, tot_box);
if (seconds) {
g_snprintf(string_buff, SUM_STR_MAX, "Bytes/second: %.2f", tot_num_bytes/seconds);
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least two time-stamped packets, in order for the elapsed
* time to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count_ts >= 2) {
if (seconds) {
g_snprintf(string_buff, SUM_STR_MAX, "Bytes/second: %.2f", tot_num_bytes/seconds);
}
else {
g_snprintf(string_buff, SUM_STR_MAX, "Bytes/second: N/A");
}
add_string_to_box(string_buff, tot_box);
}
else {
g_snprintf(string_buff, SUM_STR_MAX, "Bytes/second: N/A");
}
add_string_to_box(string_buff, tot_box);
/* Button row. */
bbox = dlg_button_row_new(GTK_STOCK_CLOSE, NULL);

View File

@ -170,6 +170,14 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
#ifdef HAVE_LIBPCAP
summary_fill_in_capture(&cfile, &global_capture_opts, &summary);
#endif
/*
* Note: the start and stop times are initialized to 0, so if we
* have zero or one packets of the type in question that have
* time stamps, the elapsed times will be zero, just as if we
* have both start and stop time stamps but they're the same.
* That means we can avoid some checks for whether we have more
* than one packet of the type in question with time stamps.
*/
seconds = summary.stop_time - summary.start_time;
disp_seconds = summary.filtered_stop - summary.filtered_start;
marked_seconds = summary.marked_stop - summary.marked_start;
@ -214,30 +222,43 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
add_string_to_table(table, &row, "Packet size limit:", string_buff);
}
/*
* We must have no un-time-stamped packets (i.e., the number of
* time-stamped packets must be the same as the number of packets),
* and at least one time-stamped packet, in order for the start
* and stop times to be valid.
*/
if (summary.packet_count_ts == summary.packet_count &&
summary.packet_count >= 1) {
/* Time */
add_string_to_table(table, &row, "", "");
add_string_to_table(table, &row, "Time", "");
/* Time */
add_string_to_table(table, &row, "", "");
add_string_to_table(table, &row, "Time", "");
/* start time */
time_to_string(string_buff, SUM_STR_MAX, (time_t)summary.start_time);
add_string_to_table(table, &row, "First packet:", string_buff);
/* start time */
time_to_string(string_buff, SUM_STR_MAX, (time_t)summary.start_time);
add_string_to_table(table, &row, "First packet:", string_buff);
/* stop time */
time_to_string(string_buff, SUM_STR_MAX, (time_t)summary.stop_time);
add_string_to_table(table, &row, "Last packet:", string_buff);
/* stop time */
time_to_string(string_buff, SUM_STR_MAX, (time_t)summary.stop_time);
add_string_to_table(table, &row, "Last packet:", string_buff);
/* elapsed seconds */
elapsed_time = (unsigned int)summary.elapsed_time;
if(elapsed_time/86400) {
g_snprintf(string_buff, SUM_STR_MAX, "%02u days %02u:%02u:%02u",
elapsed_time/86400, elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60);
} else {
g_snprintf(string_buff, SUM_STR_MAX, "%02u:%02u:%02u",
elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60);
/*
* We must have at least two time-stamped packets for the elapsed time
* to be valid.
*/
if (summary.packet_count_ts >= 2) {
/* elapsed seconds */
elapsed_time = (unsigned int)summary.elapsed_time;
if(elapsed_time/86400) {
g_snprintf(string_buff, SUM_STR_MAX, "%02u days %02u:%02u:%02u",
elapsed_time/86400, elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60);
} else {
g_snprintf(string_buff, SUM_STR_MAX, "%02u:%02u:%02u",
elapsed_time%86400/3600, elapsed_time%3600/60, elapsed_time%60);
}
add_string_to_table(table, &row, "Elapsed:", string_buff);
}
}
add_string_to_table(table, &row, "Elapsed:", string_buff);
/* Capture */
add_string_to_table(table, &row, "", "");
@ -395,7 +416,8 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
add_string_to_list(list, "Between first and last packet", string_buff, string_buff2, string_buff3);
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Between first and last packet", string_buff, string_buff2, string_buff3);
/* Packets per second */
if (seconds > 0) {
@ -413,6 +435,7 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Avg. packets/sec", string_buff, string_buff2, string_buff3);
/* Packet size */
@ -437,7 +460,8 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
add_string_to_list(list, "Avg. packet size", string_buff, string_buff2, string_buff3);
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Avg. packet size", string_buff, string_buff2, string_buff3);
/* Byte count */
g_snprintf(string_buff, SUM_STR_MAX, "%" G_GINT64_MODIFIER "u", summary.bytes);
@ -451,7 +475,8 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
add_string_to_list(list, "Bytes", string_buff, string_buff2, string_buff3);
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Bytes", string_buff, string_buff2, string_buff3);
/* Bytes per second */
if (seconds > 0){
@ -472,7 +497,8 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
add_string_to_list(list, "Avg. bytes/sec", string_buff, string_buff2, string_buff3);
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Avg. bytes/sec", string_buff, string_buff2, string_buff3);
/* MBit per second */
if (seconds > 0) {
@ -496,7 +522,8 @@ summary_open_cb(GtkWidget *w _U_, gpointer d _U_)
} else {
string_buff3[0] = '\0';
}
add_string_to_list(list, "Avg. MBit/sec", string_buff, string_buff2, string_buff3);
if (string_buff[0] != '\0' || string_buff2[0] != '\0' || string_buff3[0] != '\0')
add_string_to_list(list, "Avg. MBit/sec", string_buff, string_buff2, string_buff3);
/* Button row. */