FILE *file;
FILE *histogram;
int length;
+ int userhist;
};
struct options opt = {
#define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff))
if (num_interfaces == 2)
- fprintf(f, "%ld: %s [%s] -> %s (%s) [%s] = %s (%s)\n",
+ fprintf(f, "%ld: %s %s -> %s (%s) %s = %s (%s)\n",
num, S(mi->ts_sent), sent, S(mi->ts_rx_final_kern), S(mi->ts_rx_final), received,
DIFF(mi->ts_sent, mi->ts_rx_final_kern),
DIFF(mi->ts_sent, mi->ts_rx_final));
else
- fprintf(f, "%ld: %s [%s] -> %s (%s) -> %s (%s) [%s] = %s (%s), %s (%s)\n",
+ fprintf(f, "%ld: %s %s -> %s (%s) -> %s (%s) %s = %s (%s), %s (%s)\n",
num, S(mi->ts_sent), sent,
S(mi->ts_rx_onwire_kern), S(mi->ts_rx_onwire),
S(mi->ts_rx_final_kern), S(mi->ts_rx_final), received,
{
struct timespec diff;
if (num_interfaces == 3)
- timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_rx_onwire_kern);
+ if (opt.userhist)
+ timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_rx_onwire_kern);
+ else
+ timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_rx_onwire);
else
- timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_sent);
+ if (opt.userhist)
+ timespec_subtract(&diff, &mi->ts_rx_final, &mi->ts_sent);
+ else
+ timespec_subtract(&diff, &mi->ts_rx_final_kern, &mi->ts_sent);
return diff.tv_sec * 1000000 + diff.tv_nsec/1000;
}
static inline get_tstamp(struct timespec *ts)
{
- clock_gettime(CLOCK_MONOTONIC, ts);
+ clock_gettime(CLOCK_REALTIME, ts);
}
int send_frame(int socket)
MEMSET_ZERO(frame);
i = curr_msg+1;
- while (msg_infos[i].id != 0 && i != curr_msg) {
+ while (msg_infos[i].id != -1 && i != curr_msg) {
i++;
if (i >= MAX_INFOS)
i = 0;
void msg_info_free(struct msg_info *mi)
{
- mi->id = 0;
+ mi->id = -1;
}
static inline void get_next_timeout(struct timespec *timeout)
{ "file", 'f', POPT_ARG_STRING, NULL, 'f', "File where to store results", "filename"},
{ "histogram", 'h', POPT_ARG_STRING, NULL, 'h', "Store histogram in file", "filename"},
{ "length", 'l', POPT_ARG_INT|POPT_ARGFLAG_SHOW_DEFAULT, &opt.length, 0, "The length of generated messages", "bytes"},
+ { "userhist", 'u', POPT_ARG_NONE, &opt.userhist, 0, "Generate histogram from userspace timestamps"},
POPT_AUTOHELP
{ NULL, 0, 0, NULL, 0 }
};
{
pthread_t thread;
sigset_t set;
- int ret;
+ int ret, i;
parse_options(argc, argv);
signal(SIGINT, term_handler);
signal(SIGTERM, term_handler);
+ for (i=0; i<MAX_INFOS; i++)
+ msg_infos[i].id = -1;
+
if (opt.histogram) {
histogram_init(&histogram, 5000000, 1);
}