On 03.05.2021 12:02:46, Marc Kleine-Budde wrote: > The SocketCAN API is a great initiative for standardizing the CAN > interface API. This request tries to extend this initiative for more use > cases. > > Context: > > The SocketCAN was adopted by libpcap and tcpdump as the standard format > for logging CAN Frames in PCAP and PCAP-NG. See: > > https://www.tcpdump.org/linktypes/LINKTYPE_CAN_SOCKETCAN.html > https://github.com/wireshark/wireshark/blob/master/epan/dissectors/packet-socketcan.c > https://www.wireshark.org/docs/dfref/c/can.html > > Problem: > Applications that perform logging, usually need more details that normal > applications, for the sake of debugging later on. Flags needs to be > reserved/allocated in the SocketCAN API, so that logging applications > can make use of them in the PCAP format. The flags does not need > necessary need to be implemented by SocketCAN, they just need to be > marked as reserved for such use case. > > Needed Flags: > FDF Flag > - Since CAN Frames and CAN-FD frames can co-exist in the same bus, > logging application needs to know if a normal CAN Frame was > transmitted on a CAN-FD bus, namely was the FDF bit set or not. I think someone asked for that some time ago. But that was never mainlined. I'll look for that old mail. > ACK bit in data frame > - Some logging hardware can act as a "spy", meaning that it records CAN > Frames, but does not set the ACK bit > - A way to know for a given frame (FD or not), was the ACK bit set or > not. > - Current API allow detecting missing ACK, but it does not report what > Frame had a missing ACK. This means the driver has to set a flag if it's configured in listen-only mode. That should be possible. I think we can make use of flags in the struct canfd_frame for this: | struct canfd_frame { | canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */ | __u8 len; /* frame payload length in byte */ | __u8 flags; /* additional flags for CAN FD */ | __u8 __res0; /* reserved / padding */ | __u8 __res1; /* reserved / padding */ | __u8 data[CANFD_MAX_DLEN] __attribute__((aligned(8))); | }; The struct can_frame doesn't have the flags member yet, but we can add it there. regards, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung West/Dortmund | Phone: +49-231-2826-924 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: PGP signature