@@ -509,10 +509,10 @@ def capture_message(
509
509
# Fetching the Arb ID, DLC and Data
510
510
try :
511
511
if get_channel :
512
- cf , addr = sock .recvfrom (CANFD_MTU )
512
+ cf , _ , msg_flags , addr = sock .recvmsg (CANFD_MTU )
513
513
channel = addr [0 ] if isinstance (addr , tuple ) else addr
514
514
else :
515
- cf = sock .recv (CANFD_MTU )
515
+ cf , _ , msg_flags , _ = sock .recvmsg (CANFD_MTU )
516
516
channel = None
517
517
except socket .error as exc :
518
518
raise can .CanError ("Error receiving: %s" % exc )
@@ -539,6 +539,9 @@ def capture_message(
539
539
bitrate_switch = bool (flags & CANFD_BRS )
540
540
error_state_indicator = bool (flags & CANFD_ESI )
541
541
542
+ # Section 4.7.1: MSG_DONTROUTE: set when the received frame was created on the local host.
543
+ is_rx = not bool (msg_flags & socket .MSG_DONTROUTE )
544
+
542
545
if is_extended_frame_format :
543
546
# log.debug("CAN: Extended")
544
547
# TODO does this depend on SFF or EFF?
@@ -555,6 +558,7 @@ def capture_message(
555
558
is_remote_frame = is_remote_transmission_request ,
556
559
is_error_frame = is_error_frame ,
557
560
is_fd = is_fd ,
561
+ is_rx = is_rx ,
558
562
bitrate_switch = bitrate_switch ,
559
563
error_state_indicator = error_state_indicator ,
560
564
dlc = can_dlc ,
0 commit comments