Skip to content

Commit b14f356

Browse files
henrikbrixandersencfriedt
authored andcommitted
drivers: can: loopback: check frame ID type and RTR bit in filters
Check the frame ID type and RTR bit when comparing loopback CAN frames against installed RX filters. Fixes: #47904 Signed-off-by: Henrik Brix Andersen <[email protected]>
1 parent 874d77b commit b14f356

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

drivers/can/can_loopback.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
#include "can_loopback.h"
1212

1313
#include <logging/log.h>
14+
15+
#include "can_utils.h"
16+
1417
LOG_MODULE_DECLARE(can_driver, CONFIG_CAN_LOG_LEVEL);
1518

1619
K_KERNEL_STACK_DEFINE(tx_thread_stack,
@@ -41,13 +44,6 @@ static void dispatch_frame(const struct zcan_frame *frame,
4144
filter->rx_cb(&frame_tmp, filter->cb_arg);
4245
}
4346

44-
static inline int check_filter_match(const struct zcan_frame *frame,
45-
const struct zcan_filter *filter)
46-
{
47-
return ((filter->id & filter->id_mask) ==
48-
(frame->id & filter->id_mask));
49-
}
50-
5147
void tx_thread(void *data_arg, void *arg2, void *arg3)
5248
{
5349
ARG_UNUSED(arg2);
@@ -63,7 +59,7 @@ void tx_thread(void *data_arg, void *arg2, void *arg3)
6359
for (int i = 0; i < CONFIG_CAN_MAX_FILTER; i++) {
6460
filter = &data->filters[i];
6561
if (filter->rx_cb &&
66-
check_filter_match(&frame.frame, &filter->filter)) {
62+
can_utils_filter_match(&frame.frame, &filter->filter) != 0) {
6763
dispatch_frame(&frame.frame, filter);
6864
}
6965
}

0 commit comments

Comments
 (0)