-
Notifications
You must be signed in to change notification settings - Fork 604
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CC-2174: modify CAN frame header structure to match updated struct ca… #1851
base: main
Are you sure you want to change the base?
Conversation
2cea27d
to
6bdf926
Compare
4feb261
to
3d602a3
Compare
@lumagi could you take a look at this? |
I'll try to take a look over the next couple of days. @eldadcool do you happen to have a link to the patch set in the kernel? |
@lumagi, sure: To configure the bus using "ip link" command you require a version of iproute2 5.12 or higher: https://lore.kernel.org/netdev/[email protected]/ use the command ip link set can0 down
ip link set type can cc-len8-dlc on
ip link set can0 up note: can-utils support this only since this patch linux-can/can-utils@11edd1d @hartkopp - please review my fix as well to make sure I did not misinterpret some edge cases regarding the new structure and that this will not break the usage of the old format. |
You can simply go with the latest can-utils where
I'm not sure whether I can really review the patch, as I'm not that familiar with Pythons packing concept. Many thanks, |
Actually, the DLC value in python-can relate directly to the data length. and it's not even verified to be a valid message by default. So potentially this could lead to sending a message with unexpected DLC value. Note the issue with socketcan only relevant for virtual can interfaces because physical interfaces does not allow FD frames with 10 bytes of data (only <8, 8, 12, 16, 20, 24, 32, 48 and 64) but it makes virtual interfaces behave differently than physical interfeces. |
Yes, this is intentional. Once the CAN frame content is given to a real CAN interface or received from them the functions
https://elixir.bootlin.com/linux/v6.11/source/include/linux/can/length.h#L290 |
Cool, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks fine to me. I only had some nit-picky stuff.
ping @eldadcool |
Hii sorry, I was not very available last month... |
@lumagi feel free to approve and merge |
|
||
# Allow deprecated can frames with old struct | ||
if ( | ||
data_len == constants.CAN_MAX_DLEN |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I took another final look at it, and I have one last request:
This feature only concerns CAN 2.0 so could you add another condition to this if clause that check that we're dealing with a non-FD frame?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Amm yes you are correct, maybe I should add tests for this case as well
This fix allow to send CLASSIC CAN frames with a DLC value larger than 8 using the socketcan interface.
In addition it allow to parse incoming socketcan messages with the updated format
#1780
@hartkopp