unsigned lost;
struct timespec tic, tac;
unsigned timeouts;
+ unsigned invalid_frame;
} stats;
int num_interfaces = 0;
write(trace_fd, "0", 1);
}
-void msg_info_free(struct msg_info *mi)
+static inline void msg_info_free(struct msg_info *mi)
{
mi->id = -1;
}
+static inline bool msg_info_used(struct msg_info *mi)
+{
+ return mi->id != -1;
+}
+
int send_frame(int socket)
{
struct can_frame frame;
MEMSET_ZERO(frame);
i = curr_msg+1;
- while (msg_infos[i].id != -1 && i != curr_msg) {
+ while (msg_info_used(&msg_infos[i]) && i != curr_msg) {
i++;
if (i >= MAX_INFOS)
i = 0;
struct msg_info *mi;
receive(s, &frame, &ts_kern, &ts_user);
mi = frame2info(&frame);
- mi->ts_rx_onwire_kern = ts_kern;
- mi->ts_rx_onwire = ts_user;
+ if (msg_info_used(mi)) {
+ mi->ts_rx_onwire_kern = ts_kern;
+ mi->ts_rx_onwire = ts_user;
+ } else
+ stats.invalid_frame++;
}
fprintf(opt.f_stat, "timeouts=%d\n", stats.timeouts);
if (stats.timeouts && !opt.quiet)
printf("timeouts=%d\n", stats.timeouts);
+ fprintf(opt.f_stat, "invalid_frame=%d\n", stats.timeouts);
+ if (stats.timeouts && !opt.quiet)
+ printf("invalid_frame=%d\n", stats.timeouts);
fclose(opt.f_stat);