On 2024-02-12 16:53, Marc Kleine-Budde wrote:
On 12.02.2024 16:26:34, Oliver Hartkopp wrote:
I'm currently in discussion with Guy Harris who's working on the Linux-CAN
support in Wireshark.
We current have two approaches how to integrate the VCID into the struct
canxl_frame:
1. Add the VCID at a specific 16 bit offset (above the 11 bit Prio ID)
2. Create a endian-dependent data structure with a separate uint8 VCID
1: https://lore.kernel.org/linux-can/20240212151404.60828-1-socketcan@xxxxxxxxxxxx/
2: https://lore.kernel.org/linux-can/20240128183758.68401-1-socketcan@xxxxxxxxxxxx/
The endian-dependent data structure looks like this:
struct canxl_frame {
#if defined(__LITTLE_ENDIAN)
__u16 prio; /* 11 bit priority for arbitration */
__u8 vcid; /* virtual CAN network identifier */
__u8 __res0; /* reserved / padding must be set to zero */
#elif defined(__BIG_ENDIAN)
__u8 __res0; /* reserved / padding must be set to zero */
__u8 vcid; /* virtual CAN network identifier */
__u16 prio; /* 11 bit priority for arbitration */
#else
#error "Unknown endianness"
#endif
__u8 flags; /* additional flags for CAN XL */
__u8 sdt; /* SDU (service data unit) type */
__u16 len; /* frame payload length in byte */
__u32 af; /* acceptance field */
__u8 data[CANXL_MAX_DLEN];
};
@Guy: Besides the fact that suggestion 2 does not win a design prize I'm not
sure whether solution 1 or 2 are better to maintain over lifetime.
Feedback about the two suggestions is highly appreciated.
Then I'll skip the virtual CAN network identifier support patches for
now.
I assume the discussion to be resolved within a day or two.
Do you have a favorite patch?
Best regards,
Oliver