unsigned enobufs;
unsigned overrun;
unsigned lost;
+ struct timespec tic, tac;
} stats;
int num_interfaces = 0;
talloc_free (local);
}
-int msg_info_store(FILE *f, struct msg_info *mi)
-{
- struct timespec diff;
- void *local = talloc_new (NULL);
- static long num = 0;
-
-#define S(ts) tstamp_str(local, &ts)
-#define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff))
-
- switch (num_interfaces) {
- case 2:
- fprintf(f, "%ld %d %d %s\n",
- num, mi->id, mi->length,
- DIFF(mi->ts_sent, mi->ts_rx_final_kern));
- break;
- case 3:
- fprintf(f, "%ld %d %d %s\n",
- num, mi->id, mi->length,
- DIFF(mi->ts_rx_onwire_kern, mi->ts_rx_final_kern));
- break;
- }
-#undef S
-#undef DIFF
- talloc_free (local);
-}
-
-
/* Subtract the `struct timespec' values X and Y, storing the result in
RESULT. Return 1 if the difference is negative, otherwise 0. */
{
struct timespec diff;
switch (num_interfaces) {
- case 2:
+ case 3:
if (opt.userhist)
timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_rx_onwire);
else
timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_rx_onwire_kern);
break;
- case 3:
+ case 2:
if (opt.userhist)
timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_sent);
else
if (opt.oneattime)
SEND();
+ get_tstamp(&stats.tic);
+
while (!finish_flag &&
(opt.count == 0 || count < opt.count || msg_in_progress != 0)) {
}
}
+ get_tstamp(&stats.tac);
+
for (i=0; i<num_interfaces; i++)
close(pfd[i].fd);
fclose(opt.f_hist);
fclose(opt.f_msgs);
+
+ fprintf(opt.f_stat, "cmdline='");
+ for (i=0; i<argc; i++)
+ fprintf(opt.f_stat, "%s%s", argv[i], i < argc-1 ? " " : "");
+ fprintf(opt.f_stat, "'\n");
+
+ timespec_subtract(&diff, &stats.tac, &stats.tic);
+ fprintf(opt.f_stat, "duration=%s # seconds\n", tstamp_str(NULL, &diff));
fprintf(opt.f_stat, "sent=%d\n", count);
fprintf(opt.f_stat, "overrun=%d\n", stats.overrun);