It's now possible to filter for EFF/RTR frames AND to filter not for them
explicitely (when CAN_EFF_FLAG or CAN_RTR_FLAG is set in the can_mask and
cleared in the can_id). This is indeed more straight and is what i intended
to have ...
hartkopp [Wed, 14 Feb 2007 14:56:39 +0000 (14:56 +0000)]
Fixed memory leak in Kernel 2.4 VCAN source when unloading the module.
Even if no one ever want's to unload this fancy code ;-)
Setting DO_LOOPBACK default OFF (analogue to Kernel 2.6 tree). Cosmetics.
hartkopp [Mon, 12 Feb 2007 08:36:38 +0000 (08:36 +0000)]
Added Option -l ('l'oop) to make the canplayer replay a given file more than
one time. To replay a given file infinitely say '-l i'. Of course it is not
possible/reasonable to define '-l' when reading from stdin ...
hartkopp [Fri, 9 Feb 2007 09:53:16 +0000 (09:53 +0000)]
Removed possibility to terminate candump with an input from stdin.
Therefore it can be used in scripts now, e.g. for CAN-frame bridging:
candump can1 -mFFF -v123 -b can3 -s 2 &
Use CTRL-C to terminate candump.
thuermann [Thu, 8 Feb 2007 13:00:54 +0000 (13:00 +0000)]
Lock the receive lists when removing in can_exit().
Disable soft-IRQs (traditionally aka bottom halves) when working on receive
lists, since can_notifier() is called in interrupt context.
hartkopp [Thu, 1 Feb 2007 09:15:00 +0000 (09:15 +0000)]
Complete reworked and beautified the Broadcast Manager (bcm)
The BCM now supports the binding to ifindex 0 like the raw socket does.
The first implementation of the BCM was from September 2003 and therefore
many historic stuff (e.g. unusual error reporting) was removed.
The support of ifindex 0 leads to the possibility to read from several
interfaces via one BCM-socket using sendto() / recvfrom().
See new test-apps tst-bcm-?x-sendto.c
The update of RX/TX_SETUPs 'on the run' are only possible with a smaller or
eval size of parameters now, as it is very complex in locking to provide the
other case and there was really now use-case for it ...
hartkopp [Tue, 30 Jan 2007 08:57:08 +0000 (08:57 +0000)]
Removed dynamic memory allocation inside bcm.c for bcm_opt.
Added init function analogue to behaviour in raw.c.
Renamed all the user_data stuff to bcm_opt.
Comming soon: Ability to bind the BCM socket to any CAN device (ifindex=0)
hartkopp [Fri, 26 Jan 2007 07:36:33 +0000 (07:36 +0000)]
Updated vcan.c to support the new loopback functionality in af_can.c.
Added Makefile parameters to allow to set the RAW and BCM capabilities at
compiletime, e.g. make RAWCAP=-DCONFIG_CAN_RAW_USER
hartkopp [Wed, 10 Jan 2007 17:18:01 +0000 (17:18 +0000)]
Fixed typo in log2asc.c
Added asc2log.c to convert existing CANoe/CANalyser logfiles into socketcan
logfiles (with absolute and full qualified timestamps).
The date and the other settings (dec/hex absolute/relative) are taken from
the head of the ASC files.
OK, maybe it would be reasonable to write a short program for this application.
But for some tests all this can be done with existing commandline tools.
In addition the filtering possibilities of candump can be used here.
hartkopp [Sat, 6 Jan 2007 15:43:12 +0000 (15:43 +0000)]
Minor fix and cosmetics in color handling in candump.c .
Added new tool 'canplayer' to replay logfiles generated by candump -l .
Features of canplayer:
- Input from stdin or file.
- throttling of the replay to get nearly original timestamps / message gaps
- mapping and selection of CAN interfaces (assignment)
e.g. canplay -I logfile vcan2=can2 vcan0=can1 can2=can3
means: send frames received on can1 in the logfile to vcan0 and so on ...
- if no assignment is made the original interfaces are used for replay
- handling of multiple CAN interfaces simultaneously (if in logfile)
- option: throttle disable (do not look on timestamps => very FAST replay!)
- option: change the 'sleep time' in milli seconds
Remarks:
canplayer uses nanosleep() for throttling which means that the resolution of
the canplayer is about 1ms (Kernel HZ = 1000) or 10ms (Kernel HZ = 100).
After each nanosleep() all the CAN frames are send that had to be transmitted
until the timestamp at the current time. Giving e.g. the option '-g 500' for
500ms let's you see the behaviour. Using nanosleep() makes canplay a very
performant tool with minimum CPU load.
To transfer CAN frames over a TCP/IP network you may now say something like:
candump -> netcat -> netcat -> canplayer
hartkopp [Mon, 1 Jan 2007 18:29:52 +0000 (18:29 +0000)]
- added error frame support in lib.c
- added sprint_* functions for CAN-frame output in lib.c / lib.h
- added comments / cosmetics
candump.c:
- removed support for the output in ASC representation (moved to log2asc.c)
- added option '-l' for logfile creation e.g. 'candump-2007-01-01_164123.log'
- added funtionality to terminate candump by pressing [ENTER] (not only ^C)
- added error frame support
- added color support even when reading from 'any'
- three different color levels (e.g. -c -c -c)
- making use if lib.c
cangen.c:
- CAN frames generator for testing purposes (e.g. on vcanx)
(nice when you're on vacancy at the baltic sea and have no real CAN source :)
log2long.c:
- convert compact CAN frame representation into user readable representation
log2asc.c:
- convert compact CAN frame logfile to ASC logfile for 3rd party CAN tools
Next step: Create a tool to replay candump logfiles.
hartkopp [Wed, 13 Dec 2006 07:47:34 +0000 (07:47 +0000)]
Preventing procfs output to overflow PAGE_SIZE.
Cosmetics in 2.4 af_can.c (looked broken & is unusual in the Kernel even when
it's ok for the compiler).
thuermann [Tue, 12 Dec 2006 11:37:28 +0000 (11:37 +0000)]
in 2.4, make rx_alldev_list part of the rx_dev_list.
in 2.4, remove dynamically allocated dev_recv_lists on module unload.
add comment about possibly missing locking.
hartkopp [Thu, 7 Dec 2006 13:06:14 +0000 (13:06 +0000)]
Backported current functionality in Kernel 2.6 path to Kernel 2.4 path.
Changes:
- support for new sockopts CAN_RAW_LOOPBACK & CAN_RAW_RECV_OWN_MSGS
- allow raw socket filter with zero length
- check for alloc_skb failure
- DNAME macro in proc.c as preparation for rx_alldev_list changes
TODO:
- perform rx_alldev_list changes from revision 112/113
- remove device receive lists when unloading can.o from revision 115
hartkopp [Wed, 6 Dec 2006 10:42:02 +0000 (10:42 +0000)]
Made the device receive list for sockets that are bound to 'any' interfaces an
element of the rx_dev_list due to a discussion with Urs.
This has the effects:
1. The 'any' entries are shown in the procfs
2. remove of obsolete code
3. fix of debugging output (NULL pointer dereferencing)
4. preparation for removing the device receive lists in can_exit()
TODO: see point 4: The unloading of can.ko does not remove device receive
lists for devices that are currently registered.
hartkopp [Sat, 2 Dec 2006 11:49:02 +0000 (11:49 +0000)]
Renamed #include<linux/config.h> to autoconf.h as config.h
is no longer supported in Kernel 2.6.19.
In former Kernels config.h only included autoconf.h ...
hartkopp [Wed, 29 Nov 2006 14:36:49 +0000 (14:36 +0000)]
Introduced return values for socketcan internal functions can_rx_register()
and can_rx_unregister().
Background: When hot-unplugging CAN netdevices (like CAN USB devices) the
device structures are removed due to the notifier in af_can.c.
As this notification is passed to the user-app, the user-app closes the socket
which causes the socket to remove the already nonexistent RX-entries.
This 'usual' unplugging event lead to a kernel error logging ...
Now the retval of the (un)register-functions gives the information to be
handled (if sensefull).
thuermann [Mon, 27 Nov 2006 19:34:34 +0000 (19:34 +0000)]
add and change some comments.
simplify the code for CAN_RAW_FILTER socket option.
don't remove filters in CAN_RAW_FILTER when an invalid address for a single
filter was given causing -EFAULT.
bug fix in CAN_RAW_FILTER: changed & to &&.
disallow optlen == 0 for CAN_RAW_LOOPBACK and CAN_RAW_RECV_OWN_MSGS.
remove a couple unnecessary type casts.
change prefix "af_can" to "CAN" in printk message.
thuermann [Mon, 27 Nov 2006 11:45:55 +0000 (11:45 +0000)]
backport from the 2.6 version:
- add 'loop' parameter to can_send().
- do loopback only if the interface hasn't IFF_LOOPBACK set.
- add struct can_proto and use that in can_proto_{,un}register().
- define type, protocol, and capability fields in struct can_proto instead
of doing a switch() on type and proto in can_create().
- call protocol init function if defined.
- split off new function find_dev_rcv_lists() from find_rcv_list().
- rename struct rcv_list and rcv_dev_list to receiver and dev_rcv_lists.
- move memory allocation out of spin-locked region.
- rename struct notifier_list to notifier, and variable nlist to notifier_list.
- use kernel list implementation for notifier_list.
- protect access to notifier list by holding notifier_lock.
- use kmem_caches for struct receiver instead of kmalloc.
- do allocation/freeing of dev_rcv_lists in NETDEV_{,UN}REGISTER.
+ new element pprev in struct dev_rcv_lists to ease removal of list elements.
- rename CAN_MAX to CAN_NPROTO.
- rename some local variables for readability.
- rename raw_{init,exit}() to raw_module_{init,exit}().
- new function raw_init() to be called from can_create().
- return EINVAL from raw_bind() if already bound.
still TODO
- new ioctl's in raw.c: CAN_RAW_LOOPBACK, CAN_RAW_RECV_OWN_MSGS.
- allow setsockopt in raw.c to set 0 filters.
hartkopp [Wed, 22 Nov 2006 19:36:42 +0000 (19:36 +0000)]
Added debugging info to BCM procfs output to detect dataloss due to
socket-queue overflow to the userspace application.
E.g. when the user-app is not able to deal with the (fast) data-updates from
the CAN-bus.
hartkopp [Fri, 17 Nov 2006 15:55:09 +0000 (15:55 +0000)]
Added the possibility to set _no_ RX filter in CAN_RAW sockets as requested
by Wolfgang Grandegger on the socketcan-core mailinglist.
Updated tst-raw-filter testtool to checkout the functionality.
Indeed the setting of the default filter turned out to be much clearer in the
source code of raw.c. There's no swap-back to any default if the filter was
once changed by the user-space. Just a straight behavior. Tnx Wolfgang.
hartkopp [Tue, 31 Oct 2006 10:41:21 +0000 (10:41 +0000)]
Added include <sys/socket.h> to lib.c after discussion on commit-mailing-list.
Fixed comments.
Fixed Makefile (remove all *.o files / added empty line at end of file).
hartkopp [Mon, 30 Oct 2006 13:14:36 +0000 (13:14 +0000)]
Added tiny tool cansend and a library to parse ASCII CAN frames (e.g. from
the command line) that are defined in one concatenated string.
This is a requirement for the comming command line tool 'bcmsend' that allows
to send more than one CAN frame at a time.
hartkopp [Wed, 25 Oct 2006 15:44:50 +0000 (15:44 +0000)]
Fixed compiler warning & memory leak from Urs' last change.
Reworked rx-packet counting: Only count the rx-path on performed loopback
operation (in vcan.c or af_can.c). This gives the rx-counter a usable
content ...
hartkopp [Wed, 25 Oct 2006 07:53:31 +0000 (07:53 +0000)]
Added support for interfaces that can perform the loopback inside the driver.
If so, set the IFF_LOOPBACK flag in your device.
If not, the loopback is still performed in af_can.c .
thuermann [Tue, 24 Oct 2006 13:55:43 +0000 (13:55 +0000)]
changed user space programs to use new include files.
added missing include file <net/if.h> in most programs.
added volatile modifier to "int running" in candump.c.
thuermann [Tue, 24 Oct 2006 13:49:12 +0000 (13:49 +0000)]
reorganized kernel include files:
- move code from af_can.h to can.h
- move can.h to include/linux
- rename can_error.h and can_ioctl.h to error.h and ioctl.h
- changed all include directives accordingly
user space programs now include only linux/can.h, and linux/can/{raw,bcm.h}.
Move type, proto, and capability information about CAN protocols into
struct can_proto. This simplifies can_create() significantly and allows
future CAN protocols to be loaded without the need to change af_can.c
Rename CAN_MAX to CAN_NPROTO.
Check for protocol numbers that are out of range in can_create().
Use find_dev_rcv_lists() in can_rcv() instead of scanning the list on our own.
Move comment on scanning the hlist.
alloc/free dev_rcv_lists struct in device notifier for NETDEV_(UN)REGISTER
instead of can_rx_(un)register.
WARNING: the code compiles but is untested. Test results appreciated.
cleanup in kernel 2.4 sources to prepare backporting from 2.6.
white-space change: indentation and line breaks, moved some comments.
remove false semicolons after function bodies.
rename structs and variables to improve readability.
minor bug fix: don't accidentally free a random receiver list item in
can_rx_unregister(), when no one was found because of a bug in a CAN
protocol implementation.
thuermann [Tue, 29 Aug 2006 11:49:49 +0000 (11:49 +0000)]
support calling init functions when creating a new socket.
rename raw_{init,exit} functions to raw_module_{init,exit}.
add raw_init() function to initialize the raw_opt structure
of newly created CAN_RAW sockets.
hartkopp [Tue, 29 Aug 2006 08:57:05 +0000 (08:57 +0000)]
Added discussed sockopts() for RAW-sockets to control the CAN-frames loopback
and the receiption of self created CAN-frames.
Added Kconfig option for capabilities on BCM sockets.
TODO: Set loopback as default with sock_init-function (under construction).
hartkopp [Tue, 22 Aug 2006 12:27:04 +0000 (12:27 +0000)]
added sja1000_mem due to hint of Pavel Pisa.
fixed bcm.c handling of error frames.
added CAN_RAW_USER in Kconfig
added include of linux/config.h in most files and therefore
changed some local DEBUG-defines in CONFIG_CAN_DEBUG_*
removed MODULE_PARM-macros.
Added CAN_ERR_BUSERROR and CAN_ERR_RESTARTED to can_error.h
Sorted the CAN_ERR_* defines of the error class mask.
Introduced CAN_ERR_CRTL_[RT]X_PASSIVE defines due to discussion.
Changed the procfs-directory from /proc/sys/net/can back to /proc/net/can.
Remove remnants of the projects VW history (Email addresses, Makefile targets).
Move version.h to include/linux/can.
Fix Makefiles to include raw.ko and bcm.ko in compilation and to make
vcan compile again.
Change ioctl names in SJA1000 driver to make it compile again.
Add parenthesis around assignment in vcan.c to eliminate gcc warning.
thuermann [Fri, 23 Jun 2006 07:17:39 +0000 (07:17 +0000)]
changes compile but are untested. no functional changes.
add some missing static declarations.
minor changes to improve readability, reduce indentation level,
improve performance and reduce code size.