KansaiRobot
KansaiRobot

Reputation: 10022

Switching between can and vcan

I have read the documentation and I know that:

To enable a real can you do

 $ sudo ip link set can0 type can bitrate 125000
 $ sudo ip link set up can0

and to enable a vcan you do

 $ modprobe vcan
 $ sudo ip link add dev vcan0 type vcan
 $ sudo ip link set up vcan0

In my case, I even disable vcan before enabling can as in

 $ sudo ip link set dev vacn0 down
 $ sudo ip link set can0 type can bitrate 125000
 $ sudo ip link set up can0

My question is how about the opposite? (Going from can to vcan)? If my can is up , should I disable it before enabling vcan? and how? and also enabling vcan uses add not set... why?

Upvotes: 1

Views: 1981

Answers (1)

Ned Konz
Ned Konz

Reputation: 21

There is no connection between real CAN network devices and virtual CAN devices, other than they share the same socket interface.

What you've shown here is how you make either kind of CAN device (real or virtual) active and set it up.

How you'd switch between one and the other in your application should be as simple as using one or the other name for the network device.

You can have real CAN and virtual CAN devices available and up at the same time with no concerns.

As for why you need to add your vcan0 device but not to add your real can0 device, the operating system usually detects your CAN hardware and creates the device automatically.

One exception to this is if you're using a CAN-to-serial adapter with slcand, where you would need to run slcand first (and it will create devices named like slcan0):

 $ sudo slcand -o -s8 -t hw -S 3000000 /dev/ttyUSB0
 $ sudo ip link set up slcan0

Upvotes: 1

Related Questions