public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top
Subject: [PATCH 11/18] tests: Use socat instead of netcat
Date: Fri, 15 Jul 2022 15:21:34 +1000	[thread overview]
Message-ID: <20220715052141.890703-12-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20220715052141.890703-1-david@gibson.dropbear.id.au>

[-- Attachment #1: Type: text/plain, Size: 47597 bytes --]

Commit 41c02e10 ("tests: Use nmap-ncat instead of openbsd netcat for pasta
tests") updated the pasta tests to use the nmap version of ncat instead of
the openbsd version, for greater portability.

For some upcoming changes, however, we'll be wanting to use socat.
"socat" can do everything "ncat" can and more, so let's move all the
tests using host tools (either directly on the host or via mbuto
generated images) to using socat instead.

Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
---
 test/README.md        |   2 +-
 test/demo/passt       |   8 +--
 test/demo/pasta       |  12 ++--
 test/passt.mbuto      |   2 +-
 test/tcp/passt        |  36 +++++------
 test/tcp/passt_in_ns  | 138 +++++++++++++++++++++---------------------
 test/tcp/pasta        |  58 +++++++++---------
 test/two_guests/basic |  22 +++----
 test/udp/passt        |  22 +++----
 test/udp/passt_in_ns  |  72 +++++++++++-----------
 test/udp/pasta        |  28 ++++-----
 11 files changed, 200 insertions(+), 200 deletions(-)

diff --git a/test/README.md b/test/README.md
index 201332b..581949a 100644
--- a/test/README.md
+++ b/test/README.md
@@ -29,7 +29,7 @@ on a system, i.e. common utilities such as a shell are not included here.
 Example for Debian, and possibly most Debian-based distributions:
 
     build-essential git jq strace iperf3 qemu-system-x86 tmux sipcalc bc
-    clang-tidy cppcheck isc-dhcp-common psmisc linux-cpupower ncat
+    clang-tidy cppcheck isc-dhcp-common psmisc linux-cpupower socat
     netcat-openbsd fakeroot lz4 lm-sensors qemu-system-arm qemu-system-ppc
     qemu-system-misc qemu-system-x86 valgrind
 
diff --git a/test/demo/passt b/test/demo/passt
index bcad718..dac8ac7 100644
--- a/test/demo/passt
+++ b/test/demo/passt
@@ -130,9 +130,9 @@ nl
 nl
 say	Let's try to communicate between host and guest.
 sleep	2
-guestb	nc -6 -l -p 5201
+guestb	socat TCP6-LISTEN:5201 STDIO
 sleep	2
-host	echo "Hello from the host" | nc -N ::1 5201
+host	echo "Hello from the host" | socat -u STDIN TCP6:[::1]:5201
 sleep	5
 
 nl
@@ -143,9 +143,9 @@ say	   the address of the default gateway.
 sleep	2
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
 sleep	5
-hostb	nc -l -p 31337
+hostb	socat TCP4-LISTEN:31337 STDIO
 sleep	2
-guest	echo "Hello from the guest" | nc -N __GW__ 31337
+guest	echo "Hello from the guest" | socat -u STDIN TCP4:__GW__:x31337
 sleep	3
 
 nl
diff --git a/test/demo/pasta b/test/demo/pasta
index f4b7da2..d84d856 100644
--- a/test/demo/pasta
+++ b/test/demo/pasta
@@ -99,9 +99,9 @@ nl
 say	  pasta detects bound ports and forwards them.
 sleep	3
 
-nsb	ncat -6 -l ::1 31337
+nsb	socat TCP6-LISTEN:31337,bind=[::1] STDOUT
 sleep	2
-host	echo "Hello from the host" | ncat ::1 31337
+host	echo "Hello from the host" | socat -u STDIN TCP6:[::1]:31337
 sleep	5
 
 nl
@@ -110,9 +110,9 @@ say	Now the other way around...
 nl
 say	  we can use a loopback address
 sleep	2
-hostb	ncat -l ::1 31337
+hostb	socat TCP6-LISTEN:31337,bind=[::1] STDIO
 sleep	2
-ns	echo "Hello from the namespace" | ncat ::1 31337
+ns	echo "Hello from the namespace" | socat -u STDIN TCP6:[::1]:31337
 sleep	5
 
 nl
@@ -120,9 +120,9 @@ say	  or the address of the default gateway.
 sleep	2
 nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
 sleep	5
-hostb	ncat -l 0.0.0.0 31337
+hostb	socat TCP4-LISTEN:31337 STDIO
 sleep	2
-ns	echo "Hello from the namespace" | ncat __GW__ 31337
+ns	echo "Hello from the namespace" | socat -u STDIN TCP4:__GW__:31337
 sleep	3
 
 nl
diff --git a/test/passt.mbuto b/test/passt.mbuto
index c515a0c..8b41674 100755
--- a/test/passt.mbuto
+++ b/test/passt.mbuto
@@ -12,7 +12,7 @@
 
 PROGS="${PROGS:-ash,dash,bash ip mount ls insmod mkdir ln cat chmod lsmod
        modprobe find grep mknod mv rm umount jq iperf3 dhclient hostname
-       sed tr chown sipcalc cut md5sum nc dd strace ping tail killall sleep
+       sed tr chown sipcalc cut md5sum socat dd strace ping tail killall sleep
        sysctl nproc tcp_rr tcp_crr udp_rr which tee seq bc}"
 
 KMODS="${KMODS:- virtio_net virtio_pci}"
diff --git a/test/tcp/passt b/test/tcp/passt
index 4baa610..6e65137 100644
--- a/test/tcp/passt
+++ b/test/tcp/passt
@@ -11,75 +11,75 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-gtools	nc ip jq cat md5sum cut
-htools	dd nc ip jq cat md5sum cut
+gtools	socat ip jq md5sum cut
+htools	dd socat ip jq md5sum cut
 
 test	TCP/IPv4: host to guest: big transfer
 temp	TEMP_BIG
-guestb	nc -4 -l 10001 > test_big.bin
+guestb	socat -u TCP4-LISTEN:10001,reuseaddr OPEN:test_big.bin,create,trunc
 host	dd if=/dev/urandom bs=1M count=10 > __TEMP_BIG__
-host	cat __TEMP_BIG__ | nc -N 127.0.0.1 10001
+host	socat -u OPEN:__TEMP_BIG__ TCP4:127.0.0.1:10001
 guestw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__HOST_MD5_BIG__" ]
 
 test	TCP/IPv4: guest to host: big transfer
-hostb	nc -4 -l 10003 > __TEMP_BIG__
+hostb	socat -u TCP4-LISTEN:10003,bind=127.0.0.1,reuseaddr OPEN:__TEMP_BIG__,create,trunc
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest	cat test_big.bin | nc -N __GW__ 10003
+guest	socat -u OPEN:test_big.bin TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__HOST_MD5_BIG__" ]
 
 test	TCP/IPv4: host to guest: small transfer
 temp	TEMP_SMALL
-guestb	nc -4 -l 10001 > test_small.bin
+guestb	socat -u TCP4-LISTEN:10001,reuseaddr OPEN:test_small.bin,create,trunc
 host	dd if=/dev/urandom bs=2k count=1 > __TEMP_SMALL__
-host	cat __TEMP_SMALL__ | nc -N 127.0.0.1 10001
+host	socat -u OPEN:__TEMP_SMALL__ TCP4:127.0.0.1:10001
 guestw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__HOST_MD5_SMALL__" ]
 
 test	TCP/IPv4: guest to host: small transfer
-hostb	nc -4 -l 10003 > __TEMP_SMALL__
+hostb	socat -u TCP4-LISTEN:10003,bind=127.0.0.1,reuseaddr OPEN:__TEMP_SMALL__,create,trunc
 sleep	1
-guest	cat test_small.bin | nc -N __GW__ 10003
+guest	socat -u OPEN:test_small.bin TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__HOST_MD5_SMALL__" ]
 
 
 test	TCP/IPv6: host to guest: big transfer
-guestb	nc -6 -l 10001 > test_big.bin
+guestb	socat -u TCP6-LISTEN:10001,reuseaddr OPEN:test_big.bin,create,trunc
 sleep	1
-host	cat __TEMP_BIG__ | nc -N ::1 10001
+host	socat -u OPEN:__TEMP_BIG__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__HOST_MD5_BIG__" ]
 
 test	TCP/IPv6: guest to host: big transfer
-hostb	nc -6 -l 10003 > __TEMP_BIG__
+hostb	socat -u TCP6-LISTEN:10003,bind=[::1],reuseaddr OPEN:__TEMP_BIG__,create,trunc
 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_big.bin | nc -N __GW6__%__IFNAME__ 10003
+guest	socat -u OPEN:test_big.bin TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__HOST_MD5_BIG__" ]
 
 test	TCP/IPv6: host to guest: small transfer
-guestb	nc -6 -l 10001 > test_small.bin
+guestb	socat -u TCP6-LISTEN:10001,reuseaddr OPEN:test_small.bin,create,trunc
 sleep	1
-host	cat __TEMP_SMALL__ | nc -N ::1 10001
+host	socat -u OPEN:__TEMP_SMALL__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__HOST_MD5_SMALL__" ]
 
 test	TCP/IPv6: guest to host: small transfer
-hostb	nc -6 -l 10003 > __TEMP_SMALL__
+hostb	socat -u TCP6-LISTEN:10003,bind=[::1],reuseaddr OPEN:__TEMP_SMALL__,create,trunc
 sleep	1
-guest	cat test_small.bin | nc -N __GW6__%__IFNAME__ 10003
+guest	socat -u OPEN:test_small.bin TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__HOST_MD5_SMALL__" ]
diff --git a/test/tcp/passt_in_ns b/test/tcp/passt_in_ns
index 2a11e0b..ab22485 100644
--- a/test/tcp/passt_in_ns
+++ b/test/tcp/passt_in_ns
@@ -11,15 +11,15 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-gtools	nc ip jq cat md5sum cut
-htools	dd nc ip jq cat md5sum cut
-nstools	nc ip jq cat md5sum cut
+gtools	socat ip jq md5sum cut
+htools	dd socat ip jq md5sum cut
+nstools	socat ip jq md5sum cut
 
 test	TCP/IPv4: host to guest: big transfer
 temp	TEMP_BIG
-guestb	nc -4 -l 10001 > test_big.bin
-host	dd if=/dev/urandom bs=1M count=10 > __TEMP_BIG__
-host	cat __TEMP_BIG__ | nc -N 127.0.0.1 10001
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_big.bin,create,trunc
+host	dd if=/dev/urandom bs=1M count=10 of=__TEMP_BIG__
+host	socat -u OPEN:__TEMP_BIG__ TCP4:127.0.0.1:10001
 guestw
 hout	MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
@@ -27,63 +27,63 @@ check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: host to ns: big transfer
 temp	TEMP_NS_BIG
-nsb	nc -4 -l 10002 > __TEMP_NS_BIG__
-host	cat __TEMP_BIG__ | nc -N 127.0.0.1 10002
+nsb	socat -u TCP4-LISTEN:10002 OPEN:__TEMP_NS_BIG__,create,trunc
+host	socat -u OPEN:__TEMP_BIG__ TCP4:127.0.0.1:10002
 nsw
 nsout	NS_MD5_BIG md5sum __TEMP_NS_BIG__ | cut -d' ' -f1
 check	[ "__NS_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: guest to host: big transfer
-hostb	nc -4 -l 10003 > __TEMP_BIG__
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest	cat test_big.bin | nc -N __GW__ 10003
+guest	socat -u OPEN:test_big.bin TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: guest to ns: big transfer
-nsb	nc -4 -l 10002 > __TEMP_BIG__
-guest	cat test_big.bin | nc -N __GW__ 10002
+nsb	socat -u TCP4-LISTEN:10002 OPEN:__TEMP_BIG__,create,trunc
+guest	socat -u OPEN:test_big.bin TCP4:__GW__:10002
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to host (spliced): big transfer
 sleep	1
-hostb	nc -4 -l 10003 > __TEMP_BIG__
-ns	cat __TEMP_NS_BIG__ | nc -N 127.0.0.1 10003
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to host (via tap): big transfer
-hostb	nc -4 -l 10003 > __TEMP_BIG__
-ns	cat __TEMP_NS_BIG__ | nc -N __GW__ 10003
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to guest (using loopback address): big transfer
-guestb	nc -4 -l 10001 > test_big.bin
-ns	cat __TEMP_NS_BIG__ | nc -N 127.0.0.1 10001
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_big.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:127.0.0.1:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to guest (using namespace address): big transfer
-guestb	nc -4 -l 10001 > test_big.bin
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_big.bin,create,trunc
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
 nsout	ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[0].local'
-ns	cat __TEMP_NS_BIG__ | nc -N __ADDR__ 10001
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:__ADDR__:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: host to guest: small transfer
 temp	TEMP_SMALL
-guestb	nc -4 -l 10001 > test_small.bin
-host	dd if=/dev/urandom bs=2k count=100 > __TEMP_SMALL__
-host	cat __TEMP_SMALL__ | nc -N 127.0.0.1 10001
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_small.bin,create,trunc
+host	dd if=/dev/urandom bs=2k count=100 of=__TEMP_SMALL__
+host	socat -u OPEN:__TEMP_SMALL__ TCP4:127.0.0.1:10001
 guestw
 hout	MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
@@ -91,171 +91,171 @@ check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: host to ns: small transfer
 temp	TEMP_NS_SMALL
-nsb	nc -4 -l 10002 > __TEMP_NS_SMALL__
-host	cat __TEMP_SMALL__ | nc -N 127.0.0.1 10002
+nsb	socat -u TCP4-LISTEN:10002 OPEN:__TEMP_NS_SMALL__,create,trunc
+host	socat -u OPEN:__TEMP_SMALL__ TCP4:127.0.0.1:10002
 nsw
 nsout	NS_MD5_SMALL md5sum __TEMP_NS_SMALL__ | cut -d' ' -f1
 check	[ "__NS_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: guest to host: small transfer
-hostb	nc -4 -l 10003 > __TEMP_SMALL__
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest	cat test_small.bin | nc -N __GW__ 10003
+guest	socat -u OPEN:test_small.bin TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: guest to ns: small transfer
-nsb	nc -4 -l 10002 > __TEMP_SMALL__
-guest	cat test_small.bin | nc -N __GW__ 10002
+nsb	socat -u TCP4-LISTEN:10002 OPEN:__TEMP_SMALL__,create,trunc
+guest	socat -u OPEN:test_small.bin TCP4:__GW__:10002
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to host (spliced): small transfer
 sleep	1
-hostb	nc -4 -l 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | nc -N 127.0.0.1 10003
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to host (via tap): small transfer
-hostb	nc -4 -l 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | nc -N __GW__ 10003
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to guest (using loopback address): small transfer
-guestb	nc -4 -l 10001 > test_small.bin
-ns	cat __TEMP_NS_SMALL__ | nc -N 127.0.0.1 10001
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_small.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP4:127.0.0.1:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to guest (using namespace address): small transfer
-guestb	nc -4 -l 10001 > test_small.bin
-ns	cat __TEMP_NS_SMALL__ | nc -N __ADDR__ 10001
+guestb	socat -u TCP4-LISTEN:10001 OPEN:test_small.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP4:__ADDR__:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: host to guest: big transfer
-guestb	nc -6 -l 10001 > test_big.bin
-host	cat __TEMP_BIG__ | nc -N ::1 10001
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_big.bin,create,trunc
+host	socat -u OPEN:__TEMP_BIG__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: host to ns: big transfer
-nsb	nc -6 -l 10002 > __TEMP_NS_BIG__
-host	cat __TEMP_BIG__ | nc -N ::1 10002
+nsb	socat -u TCP6-LISTEN:10002 OPEN:__TEMP_NS_BIG__,create,trunc
+host	socat -u OPEN:__TEMP_BIG__ TCP6:[::1]:10002
 nsw
 nsout	NS_MD5_BIG md5sum __TEMP_NS_BIG__ | cut -d' ' -f1
 check	[ "__NS_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: guest to host: big transfer
-hostb	nc -6 -l 10003 > __TEMP_BIG__
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
 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_big.bin | nc -N __GW6__%__IFNAME__ 10003
+guest	socat -u OPEN:test_big.bin TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: guest to ns: big transfer
-nsb	nc -6 -l 10002 > __TEMP_BIG__
-guest	cat test_big.bin | nc -N __GW6__%__IFNAME__ 10002
+nsb	socat -u TCP6-LISTEN:10002 OPEN:__TEMP_BIG__,create,trunc
+guest	socat -u OPEN:test_big.bin TCP6:[__GW6__%__IFNAME__]:10002
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: ns to host (spliced): big transfer
-hostb	nc -6 -l 10003 > __TEMP_BIG__
-ns	cat __TEMP_NS_BIG__ | nc -N ::1 10003
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[::1]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: ns to host (via tap): big transfer
-hostb	nc -6 -l 10003 > __TEMP_BIG__
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS_BIG__ | nc -N __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: ns to guest (using loopback address): big transfer
-guestb	nc -6 -l 10001 > test_big.bin
-ns	cat __TEMP_NS_BIG__ | nc -N ::1 10001
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_big.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: ns to guest (using namespace address): big transfer
-guestb	nc -6 -l 10001 > test_big.bin
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_big.bin,create,trunc
 nsout	ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[0].local'
-ns	cat __TEMP_NS_BIG__ | nc -N __ADDR6__ 10001
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[__ADDR6__]:10001
 guestw
 gout	GUEST_MD5_BIG md5sum test_big.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: host to guest: small transfer
-guestb	nc -6 -l 10001 > test_small.bin
-host	cat __TEMP_SMALL__ | nc -N ::1 10001
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_small.bin,create,trunc
+host	socat -u OPEN:__TEMP_SMALL__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: host to ns: small transfer
-nsb	nc -6 -l 10002 > __TEMP_NS_SMALL__
-host	cat __TEMP_SMALL__ | nc -N ::1 10002
+nsb	socat -u TCP6-LISTEN:10002 OPEN:__TEMP_NS_SMALL__,create,trunc
+host	socat -u OPEN:__TEMP_SMALL__ TCP6:[::1]:10002
 nsw
 nsout	NS_MD5_SMALL md5sum __TEMP_NS_SMALL__ | cut -d' ' -f1
 check	[ "__NS_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: guest to host: small transfer
-hostb	nc -6 -l 10003 > __TEMP_SMALL__
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
 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_small.bin | nc -N __GW6__%__IFNAME__ 10003
+guest	socat -u OPEN:test_small.bin TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: guest to ns: small transfer
-nsb	nc -6 -l 10002 > __TEMP_SMALL__
-guest	cat test_small.bin | nc -N __GW6__%__IFNAME__ 10002
+nsb	socat -u TCP6-LISTEN:10002 OPEN:__TEMP_SMALL__
+guest	socat -u OPEN:test_small.bin TCP6:[__GW6__%__IFNAME__]:10002
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to host (spliced): small transfer
-hostb	nc -6 -l 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | nc -N ::1 10003
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[::1]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to host (via tap): small transfer
-hostb	nc -6 -l 10003 > __TEMP_SMALL__
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS_SMALL__ | nc -N __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to guest (using loopback address): small transfer
-guestb	nc -6 -l 10001 > test_small.bin
-ns	cat __TEMP_NS_SMALL__ | nc -N ::1 10001
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_small.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[::1]:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to guest (using namespace address): small transfer
-guestb	nc -6 -l 10001 > test_small.bin
-ns	cat __TEMP_NS_SMALL__ | nc -N __ADDR6__ 10001
+guestb	socat -u TCP6-LISTEN:10001 OPEN:test_small.bin,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[__ADDR6__]:10001
 guestw
 gout	GUEST_MD5_SMALL md5sum test_small.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5_SMALL__" = "__MD5_SMALL__" ]
diff --git a/test/tcp/pasta b/test/tcp/pasta
index 068393a..0d6c729 100644
--- a/test/tcp/pasta
+++ b/test/tcp/pasta
@@ -11,31 +11,31 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-htools	dd ncat ip jq cat md5sum cut
-nstools	ncat ip jq cat md5sum cut
+htools	dd socat ip jq md5sum cut
+nstools	socat ip jq md5sum cut
 
 test	TCP/IPv4: host to ns: big transfer
 temp	TEMP_BIG
 temp	TEMP_NS_BIG
-nsb	ncat -4 -l 127.0.0.1 10002 > __TEMP_NS_BIG__
-host	dd if=/dev/urandom bs=1M count=10 > __TEMP_BIG__
-host	cat __TEMP_BIG__ | ncat 127.0.0.1 10002
+nsb	socat -u TCP4-LISTEN:10002,bind=127.0.0.1 OPEN:__TEMP_NS_BIG__,create,trunc
+host	dd if=/dev/urandom bs=1M count=10 of=__TEMP_BIG__
+host	socat -u OPEN:__TEMP_BIG__ TCP4:127.0.0.1:10002
 nsw
 hout	MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 nsout	NS_MD5_BIG md5sum __TEMP_NS_BIG__ | cut -d' ' -f1
 check	[ "__NS_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to host (spliced): big transfer
-hostb	ncat -4 -l 127.0.0.1 10003 > __TEMP_BIG__
-ns	cat __TEMP_NS_BIG__ | ncat 127.0.0.1 10003
+hostb	socat -u TCP4-LISTEN:10003,bind=127.0.0.1 OPEN:__TEMP_BIG__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv4: ns to host (via tap): big transfer
-hostb	ncat -4 -l 0.0.0.0 10003 > __TEMP_BIG__
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
 nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-ns	cat __TEMP_NS_BIG__ | ncat __GW__ 10003
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
@@ -43,50 +43,50 @@ check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 test	TCP/IPv4: host to ns: small transfer
 temp	TEMP_SMALL
 temp	TEMP_NS_SMALL
-nsb	ncat -4 -l 127.0.0.1 10002 > __TEMP_NS_SMALL__
-host	dd if=/dev/urandom bs=2k count=1 > __TEMP_SMALL__
-host	cat __TEMP_SMALL__ | ncat 127.0.0.1 10002
+nsb	socat -u TCP4-LISTEN:10002,bind=127.0.0.1 OPEN:__TEMP_NS_SMALL__,create,trunc
+host	dd if=/dev/urandom bs=2k count=1 of=__TEMP_SMALL__
+host	socat OPEN:__TEMP_SMALL__ TCP4:127.0.0.1:10002
 nsw
 hout	MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 nsout	NS_MD5_SMALL md5sum __TEMP_NS_SMALL__ | cut -d' ' -f1
 check	[ "__NS_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to host (spliced): small transfer
-hostb	ncat -4 -l 127.0.0.1 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | ncat 127.0.0.1 10003
+hostb	socat -u TCP4-LISTEN:10003,bind=127.0.0.1 OPEN:__TEMP_SMALL__,create,trunc
+ns	socat OPEN:__TEMP_NS_SMALL__ TCP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv4: ns to host (via tap): small transfer
-hostb	ncat -4 -l 0.0.0.0 10003 > __TEMP_SMALL__
+hostb	socat -u TCP4-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
 nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-ns	cat __TEMP_NS_SMALL__ | ncat __GW__ 10003
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP4:__GW__:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: host to ns: big transfer
-nsb	ncat -6 -l ::1 10002 > __TEMP_NS_BIG__
-host	cat __TEMP_BIG__ | ncat ::1 10002
+nsb	socat -u TCP6-LISTEN:10002,bind=[::1] OPEN:__TEMP_NS_BIG__,create,trunc
+host	socat -u OPEN:__TEMP_BIG__ TCP6:[::1]:10002
 nsw
 hout	MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 nsout	NS_MD5_BIG md5sum __TEMP_NS_BIG__ | cut -d' ' -f1
 check	[ "__NS_MD5_BIG__" = "__MD5_BIG__" ]
 
 test	TCP/IPv6: ns to host (spliced): big transfer
-hostb	ncat -6 -l ::1 10003 > __TEMP_BIG__
-ns	cat __TEMP_NS_BIG__ | ncat ::1 10003
+hostb	socat -u TCP6-LISTEN:10003,bind=[::1] OPEN:__TEMP_BIG__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[::1]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 nsw
 
 test	TCP/IPv6: ns to host (via tap): big transfer
-hostb	ncat -6 -l :: 10003 > __TEMP_BIG__
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_BIG__,create,trunc
 nsout	GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS_BIG__ | ncat __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS_BIG__ TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_BIG md5sum __TEMP_BIG__ | cut -d' ' -f1
 check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
@@ -94,24 +94,24 @@ check	[ "__HOST_MD5_BIG__" = "__MD5_BIG__" ]
 test	TCP/IPv6: host to ns: small transfer
 temp	TEMP_SMALL
 temp	TEMP_NS_SMALL
-nsb	ncat -6 -l ::1 10002 > __TEMP_NS_SMALL__
-host	dd if=/dev/urandom bs=2k count=1 > __TEMP_SMALL__
-host	cat __TEMP_SMALL__ | ncat ::1 10002
+nsb	socat -u TCP6-LISTEN:10002,bind=[::1] OPEN:__TEMP_NS_SMALL__,create,trunc
+host	dd if=/dev/urandom bs=2k count=1 of=__TEMP_SMALL__
+host	socat -u OPEN:__TEMP_SMALL__ TCP6:[::1]:10002
 nsw
 hout	MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 nsout	NS_MD5_SMALL md5sum __TEMP_NS_SMALL__ | cut -d' ' -f1
 check	[ "__NS_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to host (spliced): small transfer
-hostb	ncat -6 -l ::1 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | ncat ::1 10003
+hostb	socat -u TCP6-LISTEN:10003,bind=[::1] OPEN:__TEMP_SMALL__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[::1]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
 
 test	TCP/IPv6: ns to host (via tap): small transfer
-hostb	ncat -6 -l :: 10003 > __TEMP_SMALL__
-ns	cat __TEMP_NS_SMALL__ | ncat __GW6__%__IFNAME__ 10003
+hostb	socat -u TCP6-LISTEN:10003 OPEN:__TEMP_SMALL__,create,trunc
+ns	socat -u OPEN:__TEMP_NS_SMALL__ TCP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5_SMALL md5sum __TEMP_SMALL__ | cut -d' ' -f1
 check	[ "__HOST_MD5_SMALL__" = "__MD5_SMALL__" ]
diff --git a/test/two_guests/basic b/test/two_guests/basic
index 850a27b..cf0b975 100644
--- a/test/two_guests/basic
+++ b/test/two_guests/basic
@@ -11,9 +11,9 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-g1tools	ip jq dhclient nc cat
-g2tools	ip jq dhclient nc cat
-htools	ip jq cat md5sum cut
+g1tools	ip jq dhclient socat cat
+g2tools	ip jq dhclient socat cat
+htools	ip jq md5sum cut
 
 test	Interface names
 g1out	IFNAME1 ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
@@ -46,8 +46,8 @@ check	[ "__ADDR2_6__" = "__HOST_ADDR6__" ]
 
 test	TCP/IPv4: guest 1 > guest 2
 g1out	GW1 ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest2b	nc -4 -l 10004 > msg
-guest1	echo "Hello_from_guest_1" | nc -N __GW1__ 10004
+guest2b	socat -u TCP4-LISTEN:10004 OPEN:msg,create,trunc
+guest1	echo "Hello_from_guest_1" | socat -u STDIN TCP4:__GW1__:10004
 guest2w
 sleep	1
 g2out	MSG2 cat msg
@@ -55,24 +55,24 @@ check	[ "__MSG2__" = "Hello_from_guest_1" ]
 
 test	TCP/IPv6: guest 2 > guest 1
 g2out	GW2_6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest1b	nc -6 -l 10001 > msg
-guest2	echo "Hello_from_guest_2" | nc -N __GW2_6__%__IFNAME2__ 10001
+guest1b	socat -u TCP6-LISTEN:10001 OPEN:msg,create,trunc
+guest2	echo "Hello_from_guest_2" | socat -u STDIN TCP6:[__GW2_6__%__IFNAME2__]:10001
 guest1w
 sleep	1
 g1out	MSG1 cat msg
 check	[ "__MSG1__" = "Hello_from_guest_2" ]
 
 test	UDP/IPv4: guest 1 > guest 2
-guest2b	nc -u -W1 -4 -l 10004 > msg
-guest1	echo "Hello_from_guest_1" | nc -u -q1 __GW1__ 10004
+guest2b	socat -u TCP4-LISTEN:10004 OPEN:msg,create,trunc
+guest1	echo "Hello_from_guest_1" | socat -u STDIN TCP4:__GW1__:10004
 guest2w
 sleep	1
 g2out	MSG2 cat msg
 check	[ "__MSG2__" = "Hello_from_guest_1" ]
 
 test	UDP/IPv6: guest 2 > guest 1
-guest1b	nc -u -W1 -6 -l 10001 > msg
-guest2	echo "Hello_from_guest_2" | nc -u -q1 -N __GW2_6__%__IFNAME2__ 10001
+guest1b	socat -u TCP6-LISTEN:10001 OPEN:msg,create,trunc
+guest2	echo "Hello_from_guest_2" | socat -u STDIN TCP6:[__GW2_6__%__IFNAME2__]:10001
 guest1w
 sleep	1
 g1out	MSG1 cat msg
diff --git a/test/udp/passt b/test/udp/passt
index 9598d0e..ee575e0 100644
--- a/test/udp/passt
+++ b/test/udp/passt
@@ -11,15 +11,15 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-gtools	nc tee grep cat ip jq md5sum cut
-htools	printf dd nc tee grep cat ip jq md5sum cut
+gtools	socat tee grep cat ip jq md5sum cut
+htools	printf dd socat 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__))
+temp	SC_PID
+guestb	(socat -u UDP4-LISTEN:10001 STDOUT & echo $! > __SC_PID__) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
 host	dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__
-host	cat __TEMP__ | nc -u -q1 -N 127.0.0.1 10001
+host	socat -u OPEN:__TEMP__ UDP4:127.0.0.1:10001
 guestw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
@@ -27,27 +27,27 @@ 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__))
+hostb	(socat -u UDP4-LISTEN:10003,bind=127.0.0.1 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest	cat test.bin | nc -u -q1 -N __GW__ 10003
+guest	socat -u OPEN:test.bin UDP4:__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))
+guestb	(socat -u UDP6-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
 sleep	1
-host	cat __TEMP__ | nc -u -q1 -N ::1 10001
+host	socat -u OPEN:__TEMP__ UDP6:[::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__))
+hostb	(socat -u UDP6-LISTEN:10003,bind=[::1] STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_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
+guest	socat -u OPEN:test.bin UDP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__HOST_MD5__" ]
diff --git a/test/udp/passt_in_ns b/test/udp/passt_in_ns
index 3607251..3536298 100644
--- a/test/udp/passt_in_ns
+++ b/test/udp/passt_in_ns
@@ -11,16 +11,16 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-gtools	nc tee grep cat ip jq md5sum cut
-nstools	nc tee grep cat ip jq md5sum cut
-htools	printf dd nc tee grep cat ip jq md5sum cut
+gtools	socat tee grep cat ip jq md5sum cut
+nstools	socat tee grep cat ip jq md5sum cut
+htools	printf dd socat 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.pic) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pic))
+temp	SC_PID
+guestb	(socat -u UDP4-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
 host	dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__
-host	cat __TEMP__ | nc -u -q1 -N 127.0.0.1 10001
+host	socat -u OPEN:__TEMP__ UDP4:127.0.0.1:10001
 guestw
 hout	MD5 md5sum __TEMP__ | cut -d' ' -f1
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
@@ -29,25 +29,25 @@ check	[ "__GUEST_MD5__" = "__MD5__" ]
 test	UDP/IPv4: host to ns
 temp	TEMP_NS
 ns	:> __TEMP_NS__
-nsb	(nc -u -q1 -4 -l 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-host	cat __TEMP__ | nc -u -q1 -N 127.0.0.1 10002
+nsb	(socat -u UDP4-LISTEN:10002 STDOUT & echo $! > __SC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+host	socat -u OPEN:__TEMP__ UDP4:127.0.0.1:10002
 nsw
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
 check	[ "__NS_MD5__" = "__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__))
+hostb	(socat -u UDP4-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
 gout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-guest	cat test.bin | nc -u -q1 -N __GW__ 10003
+guest	socat -u OPEN:test.bin UDP4:__GW__:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: guest to ns
 ns	:> __TEMP_NS__
-nsb	(nc -u -q1 -4 -l 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-guest	cat test.bin | nc -u -q1 -N __GW__ 10002
+nsb	(socat -u UDP4-LISTEN:10002 STDOUT & echo $! > __SC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+guest	socat -u OPEN:test.bin UDP4:__GW__:10002
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
@@ -55,97 +55,97 @@ check	[ "__HOST_MD5__" = "__MD5__" ]
 test	UDP/IPv4: ns to host (recvmmsg/sendmmsg)
 sleep	1
 host	:> __TEMP__
-hostb	(nc -u -q1 -4 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-ns	cat __TEMP_NS__ | nc -u -q1 -N 127.0.0.1 10003
+hostb	(socat -u UDP4-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+ns	socat -u OPEN:__TEMP_NS__ UDP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to host (via tap)
 host	:> __TEMP__
-hostb	(nc -u -q1 -4 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-ns	cat __TEMP_NS__ | nc -u -q1 -N __GW__ 10003
+hostb	(socat -u UDP4-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+ns	socat -u OPEN:__TEMP_NS__ UDP4:__GW__:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to guest (using loopback address)
-guestb	(nc -u -q1 -4 -l 10001 & echo $! > nc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pid))
-ns	cat __TEMP_NS__ | nc -u -q1 -N 127.0.0.1 10001
+guestb	(socat -u UDP4-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
+ns	socat -u OPEN:__TEMP_NS__ UDP4:127.0.0.1:10001
 guestw
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to guest (using namespace address)
-guestb	(nc -u -q1 -4 -l 10001 & echo $! > nc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pid))
+guestb	(socat -u UDP4-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
 nsout	ADDR ip -j -4 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[0].local'
-ns	cat __TEMP_NS__ | nc -u -q1 -N __ADDR__ 10001
+ns	socat -u OPEN:__TEMP_NS__ UDP4:__ADDR__:10001
 guestw
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__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))
-host	cat __TEMP__ | nc -u -q1 -N ::1 10001
+guestb	(socat -u UDP6-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
+host	socat -u OPEN:__TEMP__ UDP6:[::1]:10001
 guestw
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: host to ns
 ns	:> __TEMP_NS__
-nsb	(nc -u -q1 -6 -l 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-host	cat __TEMP__ | nc -u -q1 -N ::1 10002
+nsb	(socat -u UDP6-LISTEN:10002 STDOUT & echo $! > __SC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+host	socat -u OPEN:__TEMP__ UDP6:[::1]:10002
 nsw
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
 check	[ "__NS_MD5__" = "__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__))
+hostb	(socat -u UDP6-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_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
+guest	socat -u OPEN:test.bin UDP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: guest to ns
 ns	:> __TEMP_NS__
-nsb	(nc -u -q1 -6 -l 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-guest	cat test.bin | nc -u -q1 -N __GW6__%__IFNAME__ 10002
+nsb	(socat -u UDP6-LISTEN:10002 STDOUT & echo $! > __SC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+guest	socat -u OPEN:test.bin UDP6:[__GW6__%__IFNAME__]:10002
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to host (recvmmsg/sendmmsg)
 host	:> __TEMP__
-hostb	(nc -u -q1 -6 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-ns	cat __TEMP_NS__ | nc -u -q1 -N ::1 10003
+hostb	(socat -u UDP6-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[::1]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to host (via tap)
 host	:> __TEMP__
-hostb	(nc -u -q1 -6 -l 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP6-LISTEN:10003 STDOUT & echo $! > __SC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __SC_PID__))
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS__ | nc -u -q1 -N __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to guest (using loopback address)
-guestb	(nc -u -q1 -6 -l 10001 & echo $! > nc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pid))
-ns	cat __TEMP_NS__ | nc -u -q1 -N ::1 10001
+guestb	(socat -u UDP6-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[::1]:10001
 guestw
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to guest (using namespace address)
-guestb	(nc -u -q1 -6 -l 10001 & echo $! > nc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat nc.pid))
+guestb	(socat -u UDP6-LISTEN:10001 STDOUT & echo $! > sc.pid) | tee test.bin | (grep -qm1 "END_OF_TEST" && kill $(cat sc.pid))
 nsout	ADDR6 ip -j -6 addr show|jq -rM '.[] | select(.ifname == "__IFNAME__").addr_info[0].local'
-ns	cat __TEMP_NS__ | nc -u -q1 -N __ADDR6__ 10001
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[__ADDR6__]:10001
 guestw
 gout	GUEST_MD5 md5sum test.bin | cut -d' ' -f1
 check	[ "__GUEST_MD5__" = "__MD5__" ]
diff --git a/test/udp/pasta b/test/udp/pasta
index a7e5015..43e0513 100644
--- a/test/udp/pasta
+++ b/test/udp/pasta
@@ -11,18 +11,18 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-nstools	ncat tee grep cat ip jq md5sum cut
-htools	printf dd ncat tee grep cat ip jq md5sum cut
+nstools	socat tee grep cat ip jq md5sum cut
+htools	printf dd socat tee grep cat ip jq md5sum cut
 
 test	UDP/IPv4: host to ns
 temp	TEMP
 temp	TEMP_NS
 temp	NC_PID
 ns	:> __TEMP_NS__
-nsb	(ncat -u -4 -l 127.0.0.1 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+nsb	(socat -u UDP4-LISTEN:10002,bind=127.0.0.1 STDOUT & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 host	dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__
 
-host	cat __TEMP__ | ncat -u 127.0.0.1 10002
+host	socat OPEN:__TEMP__ UDP4:127.0.0.1:10002
 nsw
 hout	MD5 md5sum __TEMP__ | cut -d' ' -f1
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
@@ -30,26 +30,26 @@ check	[ "__NS_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to host (recvmmsg/sendmmsg)
 host	:> __TEMP__
-hostb	(ncat -u -4 -l 127.0.0.1 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP4-LISTEN:10003,bind=127.0.0.1 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 sleep	1
-ns	cat __TEMP_NS__ | ncat -u 127.0.0.1 10003
+ns	socat OPEN:__TEMP_NS__ UDP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to host (via tap)
 host	:> __TEMP__
-hostb	(ncat -u -4 -l 0.0.0.0 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP4-LISTEN:10003 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-ns	cat __TEMP_NS__ | ncat -u __GW__ 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP4:__GW__:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: host to ns
 ns	:> __TEMP_NS__
-nsb	(ncat -u -6 -l ::1 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-host	cat __TEMP__ | ncat -u ::1 10002
+nsb	(socat -u UDP6-LISTEN:10002,bind=[::1] STDOUT & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+host	socat -u OPEN:__TEMP__ UDP6:[::1]:10002
 nsw
 hout	MD5 md5sum __TEMP__ | cut -d' ' -f1
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
@@ -57,9 +57,9 @@ check	[ "__NS_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to host (recvmmsg/sendmmsg)
 host	:> __TEMP__
-hostb	(ncat -u -6 -l ::1 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP6-LISTEN:10003,bind=[::1] STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 sleep	1
-ns	cat __TEMP_NS__ | ncat -u ::1 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[::1]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
@@ -67,10 +67,10 @@ nsw
 
 test	UDP/IPv6: ns to host (via tap)
 host	:> __TEMP__
-hostb	(ncat -u -6 -l :: 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP6-LISTEN:10003 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 nsout	GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS__ | ncat -u __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
-- 
@@ -11,18 +11,18 @@
 # Copyright (c) 2021 Red Hat GmbH
 # Author: Stefano Brivio <sbrivio(a)redhat.com>
 
-nstools	ncat tee grep cat ip jq md5sum cut
-htools	printf dd ncat tee grep cat ip jq md5sum cut
+nstools	socat tee grep cat ip jq md5sum cut
+htools	printf dd socat tee grep cat ip jq md5sum cut
 
 test	UDP/IPv4: host to ns
 temp	TEMP
 temp	TEMP_NS
 temp	NC_PID
 ns	:> __TEMP_NS__
-nsb	(ncat -u -4 -l 127.0.0.1 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+nsb	(socat -u UDP4-LISTEN:10002,bind=127.0.0.1 STDOUT & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 host	dd if=/dev/urandom bs=1k count=5 > __TEMP__ && printf "\nEND_OF_TEST\n" >> __TEMP__
 
-host	cat __TEMP__ | ncat -u 127.0.0.1 10002
+host	socat OPEN:__TEMP__ UDP4:127.0.0.1:10002
 nsw
 hout	MD5 md5sum __TEMP__ | cut -d' ' -f1
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
@@ -30,26 +30,26 @@ check	[ "__NS_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to host (recvmmsg/sendmmsg)
 host	:> __TEMP__
-hostb	(ncat -u -4 -l 127.0.0.1 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP4-LISTEN:10003,bind=127.0.0.1 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 sleep	1
-ns	cat __TEMP_NS__ | ncat -u 127.0.0.1 10003
+ns	socat OPEN:__TEMP_NS__ UDP4:127.0.0.1:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv4: ns to host (via tap)
 host	:> __TEMP__
-hostb	(ncat -u -4 -l 0.0.0.0 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP4-LISTEN:10003 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 nsout	GW ip -j -4 route show|jq -rM '.[] | select(.dst == "default").gateway'
-ns	cat __TEMP_NS__ | ncat -u __GW__ 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP4:__GW__:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: host to ns
 ns	:> __TEMP_NS__
-nsb	(ncat -u -6 -l ::1 10002 & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
-host	cat __TEMP__ | ncat -u ::1 10002
+nsb	(socat -u UDP6-LISTEN:10002,bind=[::1] STDOUT & echo $! > __NC_PID__) | tee __TEMP_NS__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+host	socat -u OPEN:__TEMP__ UDP6:[::1]:10002
 nsw
 hout	MD5 md5sum __TEMP__ | cut -d' ' -f1
 nsout	NS_MD5 md5sum __TEMP_NS__ | cut -d' ' -f1
@@ -57,9 +57,9 @@ check	[ "__NS_MD5__" = "__MD5__" ]
 
 test	UDP/IPv6: ns to host (recvmmsg/sendmmsg)
 host	:> __TEMP__
-hostb	(ncat -u -6 -l ::1 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP6-LISTEN:10003,bind=[::1] STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 sleep	1
-ns	cat __TEMP_NS__ | ncat -u ::1 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[::1]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
@@ -67,10 +67,10 @@ nsw
 
 test	UDP/IPv6: ns to host (via tap)
 host	:> __TEMP__
-hostb	(ncat -u -6 -l :: 10003 & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
+hostb	(socat -u UDP6-LISTEN:10003 STDOUT & echo $! > __NC_PID__) | tee __TEMP__ | (grep -qm1 "END_OF_TEST" && kill $(cat __NC_PID__))
 nsout	GW6 ip -j -6 route show|jq -rM '.[] | select(.dst == "default").gateway'
 nsout	IFNAME ip -j link show | jq -rM '.[] | select(.link_type == "ether").ifname'
-ns	cat __TEMP_NS__ | ncat -u __GW6__%__IFNAME__ 10003
+ns	socat -u OPEN:__TEMP_NS__ UDP6:[__GW6__%__IFNAME__]:10003
 hostw
 hout	HOST_MD5 md5sum __TEMP__ | cut -d' ' -f1
 check	[ "__HOST_MD5__" = "__MD5__" ]
-- 
2.36.1


  parent reply	other threads:[~2022-07-15  5:21 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-15  5:21 [PATCH 00/18] Test fixes, batch 5 David Gibson
2022-07-15  5:21 ` [PATCH 01/18] tests: Remove no longer needed /usr/bin/bash link David Gibson
2022-07-15  5:21 ` [PATCH 02/18] tests: Let Fedora find dhclient-script in /usr/sbin David Gibson
2022-07-15  5:21 ` [PATCH 03/18] tests: Add rudimentary debugging to dhclient-script David Gibson
2022-07-15  5:21 ` [PATCH 04/18] tests: Add some extra dhclient support directories to mbuto.img David Gibson
2022-07-15  5:21 ` [PATCH 05/18] tests: More robust parsing of resolv.conf for DHCP tests David Gibson
2022-07-15  5:21 ` [PATCH 06/18] tests: Handle the case of a nameserver on host localhost David Gibson
2022-07-15  5:21 ` [PATCH 07/18] tests: Correctly handle domain search list in dhclient-script David Gibson
2022-07-15  5:21 ` [PATCH 08/18] tests: Fix detection of empty 'hout' responses in passt{,_in_ns} tests David Gibson
2022-07-15  5:21 ` [PATCH 09/18] tests: Fix creation of test file in udp passt tests David Gibson
2022-07-15  5:21 ` [PATCH 10/18] valgrind needs futex David Gibson
2022-07-15  5:21 ` David Gibson [this message]
2022-07-15  5:21 ` [PATCH 12/18] tests: Remove unnecessary ^D in passt_in_ns teardown David Gibson
2022-07-15  5:21 ` [PATCH 13/18] tests: Remove unnecessary truncation of temporary files in udp tests David Gibson
2022-07-15  5:21 ` [PATCH 14/18] tests: Use dhclient --no-pid for namespaces in two_guests tests David Gibson
2022-07-15  5:21 ` [PATCH 15/18] tests: Clean up better after iperf tests David Gibson
2022-07-15  5:21 ` [PATCH 16/18] tests: No need to retrieve host ifname in ndp/pasta David Gibson
2022-07-15  5:21 ` [PATCH 17/18] tests: Correct determination of host interface name in tests David Gibson
2022-07-19  6:20   ` David Gibson
2022-07-19 19:05     ` Stefano Brivio
2022-07-20  2:47       ` David Gibson
2022-07-20  7:24         ` David Gibson
2022-07-20  8:23           ` Stefano Brivio
2022-07-20 10:33             ` David Gibson
2022-07-15  5:21 ` [PATCH 18/18] demo: Use git protocol downloads David Gibson
2022-07-21 12:13 ` [PATCH 00/18] Test fixes, batch 5 Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220715052141.890703-12-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).