Hi, very nice idea! The SocketCAN version of our IXXAT CANopen Stack SW is currently compatible to the SysFS version. We need however to set CAN up and down directly from the Stack, not using the ifconfig. So I was forced to implement corresponding ioctl calls with IFF_UP etc. And netlink interface is quite more complex, if you cannon use "ip" and need to make CAN control stuff directly from your SW (I know, that is not UNIX-way, that's life)...
Such a user space component can make things really easier for me, as a CANopen SW maintainer under SocketCAN. If I can use someuser space library "libsocketcan" to: - start/stop CAN - set bitrate - recover from bus-off - ??? than I shall not worry about changing all my SW in case of changing of the corresponding interface any more (on my memory we had ioctl, sysfs and now netlink). The relevant stuff will be done in the lib. If that could be possible to had such a lib maintained as a user space extension for the SocketCAN, that would surely make life easier for all SocketCAN application developers. Thank you! Regards, Vladislav -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Luotao Fu Sent: Tuesday, November 24, 2009 3:14 PM To: [email protected] Cc: [email protected] Subject: [RFC] [ANNOUNCEMENT] libsocketcan-nl Hi folks, I was trying to integrate socketcan control in an application the last days and spent quite a lot of time getting clear how to deal with the netlink interface. Besides I just couldn't remember the correct order of parameter when using the iproute tool for can ;-). So I stripped some code from the iproute package and put them with some own stuffs together in a library to access can configuration functions with netlink, which I call libsocketcan-nl. (nl stand for netlink, not netherland ;-)). The library provides some simple APIs to do common CAN stuffs, lacking of a proper documentation I'll start here with the content of the header file: int scan_set_restart(const char *name); int scan_set_bitrate(const char *name, __u32 bitrate); int scan_set_restart_ms(const char *name, __u32 restart_ms); int scan_set_ctrlmode(const char *name, __u32 mode, __u32 flags); int scan_get_state(const char *name, int *state); int scan_get_restart_ms(const char *name, __u32 *restart_ms); int scan_get_bittiming(const char *name, struct can_bittiming *bt); int scan_get_ctrlmode(const char *name, struct can_ctrlmode *cm); Usage is quite straight forward. The functions await simply the name of the can interface and, if any, configuration values and return 0 for success and -1 if something went wrong. This library provides some benefits, which the hookup code in iproute doesn't do: * more clear error messages and takes care of special cases, e.g. restarting a device can only be done while the interface is in BUS_OFF. Neither kernel nor the iproute tool provides some useful hint if restarting failed. * simple portabilty * API for use in own applications. I updated the canutils tool to make use of this library. Now we can finally again use the canconfig tool with really simple parameters: r...@target:~ canconfig can0 can0 bitrate: 250000 can0 state: ACTIVE can0 restart_ms: 1000 can0 mode: loopback[OFF], listen-only[OFF], tripple-sampling[OFF] Setting works as well, usage is just like in the older versions: r...@target:~ canconfig can0 bitrate 125000 can0 bitrate: 125000 r...@target:~ canconfig can0 mode loopback on can0 mode: loopback[ON], listen-only[OFF], tripple-sampling[OFF] and so on. The repository of the library can be obtained at git://git.pengutronix.de/git/tools/libsocketcan-nl.git Repo of Canutils can be found at git://git.pengutronix.de/git/tools/canutils.git Additionally I put the recent version of the library and the tool in our ftp server. They might stay there only as long as as I don't have a proper webspace for the stuff: ftp://ftp.pengutronix.de/pub/socketcan/ The library is still not complete. For example there's still no documentation for this, also we are only able to set the bitrate, but not the bittimings. I will add these stuffs later. Comments, tests and reviews are highly welcome. Cheers Luotao Fu -- Pengutronix e.K. | Dipl.-Ing. Luotao Fu | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ Socketcan-core mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-core _______________________________________________ Socketcan-users mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-users
