CAN-to-UDP forwarding tool
The CAN-to-UDP forwarding is a bridge between the CAN bus and UDP. It converts CAN frames to and from generic frames (as specified by CiA 315) and transmits these over UDP.
Synopsis
can2udp -h
can2udp --help
can2udp [-4 | --ipv4 | -6 | --ipv6] [-b | --broadcast] [-D | --no-daemon]
[-f | --flush] [-i n | --interface=n] [-k ms | --keep-alive=ms]
[-p local_port | --port=local_port] [-v | --verbose] [interface]
[address] [port]
Options
-4 , --ipv4 |
Use IPv4 for receiving UDP frames (default). |
-6 , --ipv6 |
Use IPv6 for receiving UDP frames. |
-b , --broadcast |
Send broadcast messages (IPv4 only). |
-D , --no-daemon |
Do not run as daemon. |
-f , --flush |
Flush the send buffer after every received CAN frame. |
-h , --help |
Display help. |
-i <n> , --interface=<n> |
Use WTM interface indicator <n> (in the range [1..127], default: 1). |
-k <ms> , --keep-alive=<ms> |
Sends a keep-alive message every <ms> milliseconds (default: 10000). |
-p <local port> , --port=<local port> |
Receive UDP frames on |
-v, --verbose |
Print sent and received CAN frames. |
Example
Linux supports virtual CAN interfaces (through
SocketCAN). This
allows a user to run CAN programs on machines (such as a developer PC) which do
not have a physical CAN bus. can2udp
makes it possible to connect the virtual
CAN interface to an actual CAN bus on a remote device, as long as there is an
IPv4/IPv6 connection.
Assuming the device with the physical CAN bus (can0
) has IP 192.168.0.100 and
the device with the virtual CAN bus (vcan0
) has IP 192.168.0.101, we can setup
the connection by running
can2udp -fp 6000 can0 192.168.0.101 6001
on the device with can0
, and
can2udp -fp 6001 vcan0 192.168.0.100 6000
on the device with a vcan0
. The first device listens on 192.168.0.100:6000 for
incoming UDP frames, and puts the CAN frames they contain on can0
. Frames
originating from the CAN bus are sent to 192.168.0.101:6001. The second device
receives those messages and puts them on vcan0
. In this way, CAN frames are
duplicated on can0
and vcan0
, effectively combining the two remote CAN
interfaces into a single CAN bus.
To monitor the CAN frames sent and received (like
candump
), run
can2udp -Dfvp 6001 vcan0 192.168.0.100 6000