今回は受信側を実装していく
NICドライバからダミープロセスまで
なぜかiovだと通信できなくて、kvecだと通信できた。
sendtoのコード見ても
なぜiovじゃだめなのかわからん。
ちなみにubufもだめだった。
多分この先でcopy_from_userとかしてるんだろうと想像(見てないけど)
ver5のときは普通にsock_sendmsgで通信できたんだけどなぁ。。。
ビルド&実行して
./run.sh 1
pingを打つと
ダミープロセスにarpリクエストが飛んでいることが見て取れる
virtether$ ping -w1 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
echoback.c(160) recv_main cond signal
echoback.c(82) main queue:0x7fce74000b70
echoback.c(86) main ff ff ff ff ff ff fe 93 21 0d 69 88 08 06 00 01
08 00 06 04 00 01 fe 93 21 0d 69 88 c0 a8 64 01
00 00 00 00 00 00 c0 a8 64 02
echoback.c(218) send_callback write:42
echoback.c(82) main queue:(nil)
--- 192.168.100.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
ダミープロセスからQEMUへの送信
以下の赤部分
これはユーザ空間で普通にUDP通信するだけなので大したことはしていない。
qemu立ち上げて
CORTEX_M3_MPS2_QEMU_GCC$ sudo /home/voyager/workspace/oss/build_qemu/qemu-system-arm -machine mps2-an385 -m 16 -monitor null -semihosting --semihosting-config enable=on,target=native -kernel ./build/RTOSDemo.axf -serial stdio -nographic | tee qemu.log
ビルド&実行して
virtether$ ./run.sh 1
gcc -g -O0 echoback.c -o echoback
make -C /lib/modules/6.5.6-300.fc39.x86_64/build M=/home/voyager/workspace/freertos/virtether modules
make[1]: Entering directory '/usr/src/kernels/6.5.6-300.fc39.x86_64'
CC [M] /home/voyager/workspace/freertos/virtether/virtether.o
MODPOST /home/voyager/workspace/freertos/virtether/Module.symvers
CC [M] /home/voyager/workspace/freertos/virtether/virtether.mod.o
LD [M] /home/voyager/workspace/freertos/virtether/virtether.ko
BTF [M] /home/voyager/workspace/freertos/virtether/virtether.ko
Skipping BTF generation for /home/voyager/workspace/freertos/virtether/virtether.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/kernels/6.5.6-300.fc39.x86_64'
EXTRA_CLAGS="-g -DDEBUG"
try:
ping -w1 192.168.100.2
sudo echo "aiueo" > /dev/veth_cdev
pingを打つと
virtether$ ping -w1 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
echoback.c(262) send_udp sendto(42): 42
--- 192.168.100.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
qemu側でARPパケットを受け取れていることが確認出来る。
mps2.c(801) udp_recvfromdummy TODO: irq fire n:42
mps2.c(801) udp_recvfromdummy TODO: irq fire n:42
mps2.c(801) udp_recvfromdummy TODO: irq fire n:42
参考