tstamp->tv_sec, tstamp->tv_nsec/1000);
}
-void print_msg_info(struct msg_info *mi)
+void msg_info_print(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))
if (num_interfaces == 2)
- printf("%s -> %s (%s) = %s (%s)\n",
- S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
+ fprintf(f, "%ld: %s -> %s (%s) = %s (%s)\n",
+ num, S(mi->ts_sent), S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
DIFF(mi->ts_sent, mi->ts_rx_final_kern),
DIFF(mi->ts_sent, mi->ts_rx_final));
else
- printf("%s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
- S(mi->ts_sent),
+ fprintf(f, "%ld: %s -> %s (%s) -> %s (%s) = %s (%s), %s (%s)\n",
+ num, S(mi->ts_sent),
S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire),
S(mi->ts_rx_final_kern), S(mi->ts_rx_final),
DIFF(mi->ts_sent, mi->ts_rx_onwire_kern),
DIFF(mi->ts_rx_onwire, mi->ts_rx_final));
#undef S
#undef DIFF
+ num++;
talloc_free (local);
}
{
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))
if (num_interfaces == 2)
- fprintf(f, "%d %d %s\n",
- mi->id, mi->length,
+ fprintf(f, "%ld %d %d %s\n",
+ num, mi->id, mi->length,
DIFF(mi->ts_sent, mi->ts_rx_final_kern));
else
- fprintf(f, "%d %d %s\n",
- mi->id, mi->length,
+ fprintf(f, "%ld %d %d %s\n",
+ num, mi->id, mi->length,
DIFF(mi->ts_rx_onwire_kern, mi->ts_rx_final_kern));
#undef S
#undef DIFF
signal(SIGTERM, term_handler);
if (opt.histogram) {
- histogram_init(&histogram, 1000000, 1);
+ histogram_init(&histogram, 5000000, 1);
}
ret = pipe(completion_pipe);
struct timespec next, now, diff;
clock_gettime(CLOCK_MONOTONIC, &next);
- while (!finish_flag && (opt.count == 0 || count < opt.count)) {
+ int completed = 0;
+ while (!finish_flag && (opt.count == 0 || completed < opt.count)) {
struct pollfd pfd[1];
pfd[0].fd = completion_pipe[0];
pfd[0].events = POLLIN;
error(1, errno, "poll main");
if (ret > 0 && (pfd[0].revents & POLLIN)) {
struct msg_info *mi;
- read(completion_pipe[0], &mi, sizeof(mi));
+ int ret;
+ ret = read(completion_pipe[0], &mi, sizeof(mi));
+ if (ret < sizeof(mi))
+ error(1, errno, "read completion returned %d", ret);
if (opt.file)
- msg_info_store(opt.file, mi);
+ msg_info_print(opt.file, mi);
msg_info_free(mi);
+ completed++;
}
clock_gettime(CLOCK_MONOTONIC, &now);