# SPDX-License-Identifier: AGPL-3.0-or-later # # PASST - Plug A Simple Socket Transport # for qemu/UNIX domain socket mode # # PASTA - Pack A Subtle Tap Abstraction # for network namespace/tap device mode # # test/udp/passt - Check UDP functionality in passt mode # # Copyright (c) 2021 Red Hat GmbH # Author: Stefano Brivio gtools nc tee grep cat ip jq md5sum cut htools printf dd nc tee grep cat ip jq md5sum cut test UDP/IPv4: host to guest temp TEMP temp NC_PID guestb (nc -u -q1 -4 -l 10001 & echo $! > __NC_PID__) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__)) host dd if=/dev/urandom bs=1k count=5 > __TEMP_BIG__ && printf "\nEND_OF_TEST\n" >> __TEMP__ host cat __TEMP__ | nc -u -q1 -N 127.0.0.1 10001 guestw hout HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1 gout GUEST_MD5 md5sum test.bin | cut -d' ' -f1 check [ "__GUEST_MD5__" = "__HOST_MD5__" ] test UDP/IPv4: guest to host host :> __TEMP__ hostb (nc -u -q1 -4 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__)) gout GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway' guest cat test.bin | nc -u -q1 -N __GW__ 10003 hostw hout HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1 check [ "__GUEST_MD5__" = "__HOST_MD5__" ] test UDP/IPv6: host to guest guestb (nc -u -q1 -6 -l 10001 & echo $! > nc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pid)) sleep 1 host cat __TEMP__ | nc -u -q1 -N ::1 10001 guestw gout GUEST_MD5 md5sum test.bin | cut -d' ' -f1 check [ "__GUEST_MD5__" = "__HOST_MD5__" ] test UDP/IPv6: guest to host host :> __TEMP__ hostb (nc -u -q1 -6 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__)) gout GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway' gout IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname' guest cat test.bin | nc -u -q1 -N __GW6__%__IFNAME__ 10003 hostw hout HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1 check [ "__GUEST_MD5__" = "__HOST_MD5__" ]