mirror of
https://github.com/linux-can/can-utils.git
synced 2026-09-20 14:29:55 +02:00
cansequence: add internal 32 bit sequence counter
This commit is contained in:
+16
-11
@@ -89,8 +89,11 @@ static void do_receive()
|
|||||||
};
|
};
|
||||||
const int dropmonitor_on = 1;
|
const int dropmonitor_on = 1;
|
||||||
bool sequence_init = true;
|
bool sequence_init = true;
|
||||||
unsigned int seq_wrap = 0;
|
unsigned int sequence_wrap = 0;
|
||||||
uint8_t sequence = 0;
|
uint32_t sequence_mask = 0xff;
|
||||||
|
uint32_t sequence_rx = 0;
|
||||||
|
uint32_t sequence_delta = 0;
|
||||||
|
uint32_t sequence = 0;
|
||||||
|
|
||||||
if (setsockopt(s, SOL_SOCKET, SO_RXQ_OVFL,
|
if (setsockopt(s, SOL_SOCKET, SO_RXQ_OVFL,
|
||||||
&dropmonitor_on, sizeof(dropmonitor_on)) < 0) {
|
&dropmonitor_on, sizeof(dropmonitor_on)) < 0) {
|
||||||
@@ -116,15 +119,15 @@ static void do_receive()
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sequence_rx = frame.data[0];
|
||||||
|
|
||||||
if (sequence_init) {
|
if (sequence_init) {
|
||||||
sequence_init = false;
|
sequence_init = false;
|
||||||
sequence = frame.data[0];
|
sequence = sequence_rx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbose > 1)
|
sequence_delta = (sequence_rx - sequence) & sequence_mask;
|
||||||
printf("received frame. sequence number: %d\n", frame.data[0]);
|
if (sequence_delta) {
|
||||||
|
|
||||||
if (frame.data[0] != sequence) {
|
|
||||||
struct cmsghdr *cmsg;
|
struct cmsghdr *cmsg;
|
||||||
uint32_t overflows = 0;
|
uint32_t overflows = 0;
|
||||||
|
|
||||||
@@ -140,17 +143,19 @@ static void do_receive()
|
|||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "[%d] received wrong sequence count. expected: %d, got: %d, socket overflows: %u\n",
|
fprintf(stderr, "[%d] received wrong sequence count. expected: %d, got: %d, socket overflows: %u\n",
|
||||||
drop_count, sequence, frame.data[0], overflows);
|
drop_count, sequence & sequence_mask, sequence_rx, overflows);
|
||||||
|
|
||||||
if (drop_count == drop_until_quit)
|
if (drop_count == drop_until_quit)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
sequence = frame.data[0];
|
sequence = sequence_rx;
|
||||||
|
} else if (verbose > 1) {
|
||||||
|
printf("sequence CNT: %6u, RX: %6u\n", sequence, sequence_rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
sequence++;
|
sequence++;
|
||||||
if (verbose && !sequence)
|
if (verbose && !(sequence & sequence_mask))
|
||||||
printf("sequence wrap around (%d)\n", seq_wrap++);
|
printf("sequence wrap around (%d)\n", sequence_wrap++);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user