From 4dfed603d7350f31bc27eac347eb824cafaf0c42 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Fri, 10 Dec 2010 00:37:18 +0100 Subject: [PATCH] latester: Support single interface operation latester only generates traffic and does not measure anything. This is planned to be used for CAN load generator. --- latester/latester.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/latester/latester.c b/latester/latester.c index d5d7b4b..fb299aa 100644 --- a/latester/latester.c +++ b/latester/latester.c @@ -163,12 +163,14 @@ void msg_info_print(FILE *f, struct msg_info *mi) #define S(ts) tstamp_str(local, &ts) #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff)) - if (num_interfaces == 2) + switch (num_interfaces) { + case 2: 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 + break; + case 3: 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), @@ -177,6 +179,8 @@ void msg_info_print(FILE *f, struct msg_info *mi) DIFF(mi->ts_sent, mi->ts_rx_onwire), DIFF(mi->ts_rx_onwire_kern, mi->ts_rx_final_kern), DIFF(mi->ts_rx_onwire, mi->ts_rx_final)); + break; + } #undef S #undef DIFF num++; @@ -192,14 +196,18 @@ int msg_info_store(FILE *f, struct msg_info *mi) #define S(ts) tstamp_str(local, &ts) #define DIFF(a, b) (timespec_subtract(&diff, &b, &a), S(diff)) - if (num_interfaces == 2) + 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)); - else + 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); @@ -242,16 +250,22 @@ void dbg_print_timespec(char *msg, struct timespec *tv) static inline unsigned get_msg_latency_us(struct msg_info *mi) { struct timespec diff; - if (num_interfaces == 3) + switch (num_interfaces) { + case 2: 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); - else + break; + case 3: 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); + break; + default: + return 0; + } return diff.tv_sec * 1000000 + diff.tv_nsec/1000; } @@ -388,7 +402,7 @@ int send_frame(int socket) ret = write(socket, &frame, sizeof(frame)); trace_off(ret); - if (ret == -1) + if (ret == -1 || num_interfaces == 1) msg_info_free(mi); return ret; } @@ -661,8 +675,8 @@ int parse_options(int argc, const char *argv[]) poptBadOption(optCon, POPT_BADOPTION_NOALIAS), poptStrerror(c)); - if (num_interfaces < 2 || num_interfaces > 3) - error(1, 0, "-d option must be given exactly 2 or 3 times"); + if (num_interfaces < 1 || num_interfaces > 3) + error(1, 0, "-d option must only be given one, two or three times"); if (opt.oneattime && opt.period_us) error(1, 0, "oneattime and period cannot be specified at the same time"); @@ -696,7 +710,10 @@ int parse_options(int argc, const char *argv[]) void print_progress() { if (! opt.quiet) { - printf("\rSent %5d, in progress %5d", count, msg_in_progress); + if (num_interfaces > 1) + printf("\rSent %5d, in progress %5d", count, msg_in_progress); + else + printf("\rSent %5d", count); fflush(stdout); } } -- 2.39.2