mirror of
https://github.com/linux-can/can-utils.git
synced 2026-09-21 07:19:58 +02:00
4855df9af73ebee4253abab89e5e33558647dff1
According to ISO 11783-13:2021 (sections C.3.4.2 and C.3.5.2), directory
operations differ significantly from standard file operations:
- The `Count` parameter in a "Read File" request represents the number of
directory entries to read, not the number of bytes.
- The `Offset` parameter in a "Seek File" request represents the logical
entry index, not a byte offset.
Previously, the implementation treated directories strictly as files,
using byte-based offsets and counts. This resulted in incorrect seeking
behavior and protocol violations when listing directories.
This patch aligns the implementation with the standard by:
1. Server side:
- Introducing `isobusfs_srv_dir_entry_visible()` to consistently
filter out invalid (unreadable, hidden, oversized) entries. This
ensures that entry indices remain stable.
- Implementing `isobusfs_srv_dir_skip_entries()` to advance the
directory stream by logical visible entries rather than bytes.
- Updating the "Read File" handler to interpret `count` as the
maximum number of entries and return the number of entries read
in the response header.
- Updating the "Seek File" handler to seek by entry index.
2. Client side:
- Calculating the request count based on the number of minimal-size
entries that fit into the maximum data length.
- Interpreting the response `count` as the number of entries received
rather than the byte length of the payload.
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
SocketCAN userspace utilities and tools
This repository contains some userspace utilities for Linux CAN subsystem (aka SocketCAN):
Basic tools to display, record, generate and replay CAN traffic
- candump : display, filter and log CAN data to files
- canplayer : replay CAN logfiles
- cansend : send a single frame
- cangen : generate (random) CAN traffic
- cansequence : send and check sequence of CAN frames with incrementing payload
- cansniffer : display CAN data content differences
CAN access via IP sockets
- canlogserver : log CAN frames and serves them
- bcmserver : interactive BCM configuration (remote/local)
- socketcand : use RAW/BCM/ISO-TP sockets via TCP/IP sockets
- cannelloni : UDP/SCTP based SocketCAN tunnel
CAN in-kernel gateway configuration
- cangw : CAN gateway userspace tool for netlink configuration
CAN bus measurement and testing
- canbusload : calculate and display the CAN busload
- can-calc-bit-timing : userspace version of in-kernel bitrate calculation
- canfdtest : Full-duplex test program (DUT and host part)
- canerrsim : CAN error message simulator
ISO-TP tools ISO15765-2:2016 for Linux
- isotpsend : send a single ISO-TP PDU
- isotprecv : receive ISO-TP PDU(s)
- isotpsniffer : 'wiretap' ISO-TP PDU(s)
- isotpdump : 'wiretap' and interpret CAN messages (CAN_RAW)
- isotpserver : IP server for simple TCP/IP <-> ISO 15765-2 bridging (ASCII HEX)
- isotpperf : ISO15765-2 protocol performance visualisation
- isotptun : create a bi-directional IP tunnel on CAN via ISO-TP
J1939/ISOBus tools
- j1939acd : address claim daemon
- j1939cat : take a file and send and receive it over CAN
- j1939spy : spy on J1939 messages using SOC_J1939
- j1939sr : send/recv from stdin or to stdout
- testj1939 : send/receive test packet
Follow the link to see examples on how this tools can be used: Kickstart guide to can-j1939 on linux
ISOBus File server tools
- isobusfs-cli : ISOBus file client
- isobusfs-srv : ISOBus file server
Log file converters
- asc2log : convert ASC logfile to compact CAN frame logfile
- log2asc : convert compact CAN frame logfile to ASC logfile
- log2long : convert compact CAN frame representation into user readable
Serial Line Discipline configuration (for slcan driver)
- slcan_attach : userspace tool for serial line CAN interface configuration
- slcand : daemon for serial line CAN interface configuration
- slcanpty : creates a pty for applications using the slcan ASCII protocol
CMake Project Generator
- Place your build folder anywhere, passing CMake the path. Relative or absolute.
- Some examples using a build folder under the source tree root:
- Android :
cmake -DCMAKE_TOOLCHAIN_FILE=~/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-21 -DANDROID_ABI=armeabi-v7a .. && make - Android Studio : Copy repo under your project's
appfolder, addadd_subdirectory(can-utils)to yourCMakeLists.txtfile aftercmake_minimum_required(). Generating project will build Debug/Release for all supported EABI types. ie. arm64-v8a, armeabi-v7a, x86, x86_64. - Raspberry Pi :
cmake -DCMAKE_TOOLCHAIN_FILE=~/rpi/tools/build/cmake/rpi.toolchain.cmake .. && make - Linux :
cmake -GNinja .. && ninja - Linux Eclipse Photon (Debug) :
CC=clang cmake -G"Eclipse CDT4 - Unix Makefiles" ../can-utils/ -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_VERSION=4.8.0 - To override the base installation directory use:
CMAKE_INSTALL_PREFIXie.CC=clang cmake -DCMAKE_INSTALL_PREFIX=./out .. && make install
Additional Information:
Languages
C
98.1%
CMake
0.7%
Makefile
0.6%
Shell
0.5%
