Hi all,

beginning with 2.6.33 there will be the functionality to detect dropped
CAN frames that had not be consumed by the userspace application in time:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=3b885787ea4112eaa80945999ea0901bf742707f

By enabling the socket option SO_RXQ_OVFL a new control message can be passed
to the application that tells how many packets have been dropped in the
specific(!) sockets receive path until the last received CAN frame.

I added this functionality to the latest candump in the SocketCAN SVN rev 1111
and moved the formerly recvfrom() to recvmsg() to read CAN frames together
with the control-messages (cmsg) from the socket. See the diffs in:

http://svn.berlios.de/viewcvs/socketcan/trunk/can-utils/candump.c?r1=968&r2=1111

To check the functionality on your own, you can follow this example:

- use a 2.6.33-rcX Linux Kernel
- run e.g. 'cangen -g4 vcan0' on a separate console
- run 'candump -ta -d any' ('-d' is the new dropcount option)
- CAN traffic on vcan0 will show up
- type CTRL-Z to stop the candump process (will cause packets to drop)
- wait  3-5 seconds to surely overflow the sockets rx queue
- type 'fg <RETURN>' to (re)start candump and *directly* after that: CTRL-C

When you scroll up in the terminal, you'll see something like this:

...
 (1263646787.527205)  vcan1  2AB  [8] 7F C0 27 00 C3 BA DE 18
 (1263646787.532330)  vcan1   38  [8] 7B FC EF 62 BC F4 DC 25
 (1263646787.537472)  vcan1  5BA  [8] CE BD B4 64 C6 3C 1D 56
DROPCOUNT: dropped 67 CAN frames on 'any' socket (total drops 67)
 (1263646787.892871)  vcan1  7B6  [6] 60 54 0D 41 45 D8
 (1263646787.897970)  vcan1  16E  [8] AA AA D6 64 3A CD 40 1C
 (1263646787.903048)  vcan1  3FD  [8] C2 A5 A0 13 3E A8 E7 6C
...

I think this new functionality is a great improvement for CAN users to make
things inside the kernel transparent to the userspace application.

So always be aware to be able to process all the incoming CAN traffic in your
CAN application or use one of the in-kernel CAN filter mechanisms :-)

Have fun,

Oliver

ps. I created a backport of the referenced git commit for a 2.6.28.10 if
anyone is interested.

_______________________________________________
Socketcan-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-users

Reply via email to