When creating a bridge between can and virtual can, I am getting this error:
netlink error -95 (Operation not supported)
Steps that I followed:
Created a virtual can:
sudo modprobe -n --first-time vcanLoad it
sudo modprobe vcanadd it to type vcan
sudo ip link add dev vcan0 type vcanchange the status to up
sudo ip link set vcan0 upNow when creating bridge between can0 and vcan0 using can gateway using below commands, I am getting netlink error:
sudo cangw -A -s can0 -d vcan0 -e
sudo cangw -A -s vcan0 -d can0 -e
I also checked if can modules are enabled in kernel or not:
$ grep CAN /boot/config-$(uname -r)
CONFIG_CC_CAN_LINK=y
CONFIG_CC_CAN_LINK_STATIC=y
CONFIG_NET_EMATCH_CANID=m
CONFIG_CAN=m
CONFIG_CAN_RAW=m
CONFIG_CAN_BCM=m
CONFIG_CAN_GW=m
CONFIG_CAN_J1939=m
CONFIG_CAN_ISOTP=m
# CAN Device Drivers
CONFIG_CAN_VCAN=m
CONFIG_CAN_VXCAN=m
CONFIG_CAN_SLCAN=m
CONFIG_CAN_DEV=m
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_JANZ_ICAN3=m
CONFIG_CAN_KVASER_PCIEFD=m
CONFIG_CAN_C_CAN=m
CONFIG_CAN_C_CAN_PLATFORM=m
CONFIG_CAN_C_CAN_PCI=m
CONFIG_CAN_CC770=m
CONFIG_CAN_CC770_ISA=m
CONFIG_CAN_CC770_PLATFORM=m
CONFIG_CAN_IFI_CANFD=m
CONFIG_CAN_M_CAN=m
CONFIG_CAN_M_CAN_PCI=m
CONFIG_CAN_M_CAN_PLATFORM=m
CONFIG_CAN_M_CAN_TCAN4X5X=m
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_SJA1000=m
CONFIG_CAN_EMS_PCI=m
CONFIG_CAN_EMS_PCMCIA=m
CONFIG_CAN_F81601=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_PEAK_PCI=m
CONFIG_CAN_PEAK_PCIEC=y
CONFIG_CAN_PEAK_PCMCIA=m
CONFIG_CAN_PLX_PCI=m
CONFIG_CAN_SJA1000_ISA=m
CONFIG_CAN_SJA1000_PLATFORM=m
CONFIG_CAN_SOFTING=m
CONFIG_CAN_SOFTING_CS=m
# CAN SPI interfaces
CONFIG_CAN_HI311X=m
CONFIG_CAN_MCP251X=m
CONFIG_CAN_MCP251XFD=m
# CONFIG_CAN_MCP251XFD_SANITY is not set
# end of CAN SPI interfaces
# CAN USB interfaces
CONFIG_CAN_8DEV_USB=m
CONFIG_CAN_EMS_USB=m
CONFIG_CAN_ESD_USB2=m
CONFIG_CAN_ETAS_ES58X=m
CONFIG_CAN_F81604=m
CONFIG_CAN_GS_USB=m
CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_MCBA_USB=m
CONFIG_CAN_PEAK_USB=m
CONFIG_CAN_UCAN=m
# end of CAN USB interfaces
# CONFIG_CAN_DEBUG_DEVICES is not set
# end of CAN Device Drivers
CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_PINCTRL_CANNONLAKE=m
CONFIG_SND_SOC_SOF_CANNONLAKE=m
CONFIG_PHY_CAN_TRANSCEIVER=m
# CONFIG_TEST_SCANF is not set
Ubuntu version:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
I also cross checked if vcan0 is listing by using ip link show command:
$ ip link show
4: vcan0: <NOARP,UP,LOWER_UP> mtu 72 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/can
6: elmcan: <NOARP,UP,LOWER_UP> mtu 72 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/can
7: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can
One thing which I noticed here is state is coming as unknown. But when sending any message using cansend command to vcan0, I can see the command is getting captured in candump.
$ cansend vcan0 123#DEADBEEF
$ candump vcan0
vcan0 123 [4] DE AD BE EF
At this point, I am not sure what is missing here. Any suggestion/help would be appreciated.