diff options
author | Dr. Lars Völker <lars.voelker@technica-engineering.de> | 2022-10-12 19:59:27 +0200 |
---|---|---|
committer | AndersBroman <a.broman58@gmail.com> | 2022-10-13 14:48:43 +0000 |
commit | 89a3c8679ce4a6254654b89e232e2ce054b52e10 (patch) | |
tree | ceb1c02b2376675fc476ab3e972d1648e21534d6 | |
parent | 883bc6ef290eb98020601b8409bc125ee98c8dce (diff) |
BLF: Fixing the interpretation of SRR and RTR
This fixes a bug in the canfdmessage64 encoding in BLF that leads to
CAN-FD frames being interpreted as Remote Frames instead of correctly
ignoring the SRR flag. Makes canfdmessage encoding more robust as well.
-rw-r--r-- | wiretap/blf.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/wiretap/blf.c b/wiretap/blf.c index 61ae4cd475..8f1cf0aa85 100644 --- a/wiretap/blf.c +++ b/wiretap/blf.c @@ -1202,7 +1202,7 @@ blf_read_canfdmessage(blf_params_t *params, int *err, gchar **err_info, gint64 b canid = canheader.id; - if ((canheader.flags & BLF_CANMESSAGE_FLAG_RTR) == BLF_CANMESSAGE_FLAG_RTR) { + if (!canfd && (canheader.flags & BLF_CANMESSAGE_FLAG_RTR) == BLF_CANMESSAGE_FLAG_RTR) { canid |= CAN_RTR_FLAG; payload_length_valid = 0; } @@ -1267,16 +1267,9 @@ blf_read_canfdmessage64(blf_params_t *params, int *err, gchar **err_info, gint64 canid = canheader.id; - if ((canid & CAN_EFF_FLAG) == CAN_EFF_FLAG) { - if ((canheader.flags & BLF_CANFDMESSAGE64_FLAG_SRR) == BLF_CANFDMESSAGE64_FLAG_SRR) { - canid |= CAN_RTR_FLAG; - payload_length_valid = 0; - } - } else { - if ((canheader.flags & BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME) == BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME) { - canid |= CAN_RTR_FLAG; - payload_length_valid = 0; - } + if (!canfd && (canheader.flags & BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME) == BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME) { + canid |= CAN_RTR_FLAG; + payload_length_valid = 0; } if (!blf_can_fill_buf_and_rec(params, err, err_info, canid, payload_length, payload_length_valid, data_start + sizeof(canheader), timestamp, canheader.channel)) { |