Forwarding CAN Bus traffic to a Docker container using vxcan

1. vxcan 설치

sudo apt-get update
sudo apt-get install raspberrypi-kernel-headers can-utils 
mkdir vxcan
cd vxcan
wget "https://raw.githubusercontent.com/torvalds/linux/master/drivers/net/can/vxcan.c"

2. Makefile 만들기

obj-m += vxcan.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

3. uname -r로 커널버전 확인 후 아래 실행

make
sudo chown root:root vxcan.ko
sudo chmod 0644 vxcan.ko
sudo mv vxcan.ko /lib/modules/$your_kernel_version$/kernel/net/can/
sudo depmod -A
sudo modprobe vxcan
sudo modprobe can-gw

4. /etc/modules-load.d/can.conf 파일 만든 후 아래 입력하기

vxcan
can-gw

5. docker container 실행 후 can-utils 설치

apt-get update && apt-get install -y can-utils

6. container 밖에서 container와 vxcan network 연결하기

DOCKERPID=$(docker inspect -f '{{ .State.Pid }}' containername)
sudo ip link add vxcan0 type vxcan peer name vxcan1
sudo ip link set vxcan1 netns $DOCKERPID
sudo ip link set vxcan0 up
sudo nsenter -t $DOCKERPID -n ip link set vxcan1 up

7. Real can adapter와 vxcan 연결하기

sudo cangw -A -s can0 -d vxcan0 -e
sudo cangw -A -s vxcan0 -d can0 -e

8. 해당 규칙 삭제시

sudo ip link del vxcan0

'Auto Twin > ROS' 카테고리의 다른 글

Docker로 ROS2 환경 구성하기  (0) 2022.09.25

Docker로 ROS2를 사용하기 위해서는 network 모드를 host를 사용해야 한다.

하지만 VNC를 사용하고자 하여 network를 따로 만든 뒤 이를 연결하고자 한다.

macvlan 네트워크를 구성한다.

docker network create -d macvlan \
    --subnet=192.168.1.0/24 \
    --gateway=192.168.1.1 \
    --ip-range=192.168.1.64/27 \
    --attachable \
    -o parent=enp8s0 \
    macnet

sudo ip link add macnet-shim link eth0 type macvlan  mode bridge
sudo ip addr add 192.168.1.64/27 dev macnet-shim
sudo ip link set macnet-shim up

docker run --rm -d --net=macnet <IMAGE>

'Auto Twin > ROS' 카테고리의 다른 글

Scout을 위한 CAN 통신을 docker와 연결하기  (0) 2022.09.27

+ Recent posts