mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
selftests/vsock: use ss to wait for listeners instead of /proc/net
Replace /proc/net parsing with ss(8) for detecting listening sockets in wait_for_listener() functions and add support for TCP, VSOCK, and Unix socket protocols. The previous implementation parsed /proc/net/tcp using awk to detect listening sockets, but this approach could not support vsock because vsock does not export socket information to /proc/net/. Instead, use ss so that we can detect listeners on tcp, vsock, and unix. The protocol parameter is now required for all wait_for_listener family functions (wait_for_listener, vm_wait_for_listener, host_wait_for_listener) to explicitly specify which socket type to wait for. ss is added to the dependency check in check_deps(). Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Bobby Eshleman <bobbyeshleman@meta.com> Link: https://patch.msgid.link/20260121-vsock-vmtest-v16-8-2859a7512097@meta.com Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
4e870ac81d
commit
7418f3bb3a
|
|
@ -182,7 +182,7 @@ check_args() {
|
|||
}
|
||||
|
||||
check_deps() {
|
||||
for dep in vng ${QEMU} busybox pkill ssh; do
|
||||
for dep in vng ${QEMU} busybox pkill ssh ss; do
|
||||
if [[ ! -x $(command -v "${dep}") ]]; then
|
||||
echo -e "skip: dependency ${dep} not found!\n"
|
||||
exit "${KSFT_SKIP}"
|
||||
|
|
@ -337,21 +337,32 @@ wait_for_listener()
|
|||
local port=$1
|
||||
local interval=$2
|
||||
local max_intervals=$3
|
||||
local protocol=tcp
|
||||
local pattern
|
||||
local protocol=$4
|
||||
local i
|
||||
|
||||
pattern=":$(printf "%04X" "${port}") "
|
||||
|
||||
# for tcp protocol additionally check the socket state
|
||||
[ "${protocol}" = "tcp" ] && pattern="${pattern}0A"
|
||||
|
||||
for i in $(seq "${max_intervals}"); do
|
||||
if awk -v pattern="${pattern}" \
|
||||
'BEGIN {rc=1} $2" "$4 ~ pattern {rc=0} END {exit rc}' \
|
||||
/proc/net/"${protocol}"*; then
|
||||
case "${protocol}" in
|
||||
tcp)
|
||||
if ss --listening --tcp --numeric | grep -q ":${port} "; then
|
||||
break
|
||||
fi
|
||||
;;
|
||||
vsock)
|
||||
if ss --listening --vsock --numeric | grep -q ":${port} "; then
|
||||
break
|
||||
fi
|
||||
;;
|
||||
unix)
|
||||
# For unix sockets, port is actually the socket path
|
||||
if ss --listening --unix | grep -q "${port}"; then
|
||||
break
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unknown protocol: ${protocol}" >&2
|
||||
break
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
sleep "${interval}"
|
||||
done
|
||||
}
|
||||
|
|
@ -359,23 +370,25 @@ wait_for_listener()
|
|||
vm_wait_for_listener() {
|
||||
local ns=$1
|
||||
local port=$2
|
||||
local protocol=$3
|
||||
|
||||
vm_ssh "${ns}" <<EOF
|
||||
$(declare -f wait_for_listener)
|
||||
wait_for_listener ${port} ${WAIT_PERIOD} ${WAIT_PERIOD_MAX}
|
||||
wait_for_listener ${port} ${WAIT_PERIOD} ${WAIT_PERIOD_MAX} ${protocol}
|
||||
EOF
|
||||
}
|
||||
|
||||
host_wait_for_listener() {
|
||||
local ns=$1
|
||||
local port=$2
|
||||
local protocol=$3
|
||||
|
||||
if [[ "${ns}" == "init_ns" ]]; then
|
||||
wait_for_listener "${port}" "${WAIT_PERIOD}" "${WAIT_PERIOD_MAX}"
|
||||
wait_for_listener "${port}" "${WAIT_PERIOD}" "${WAIT_PERIOD_MAX}" "${protocol}"
|
||||
else
|
||||
ip netns exec "${ns}" bash <<-EOF
|
||||
$(declare -f wait_for_listener)
|
||||
wait_for_listener ${port} ${WAIT_PERIOD} ${WAIT_PERIOD_MAX}
|
||||
wait_for_listener ${port} ${WAIT_PERIOD} ${WAIT_PERIOD_MAX} ${protocol}
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
|
@ -422,7 +435,7 @@ vm_vsock_test() {
|
|||
return $rc
|
||||
fi
|
||||
|
||||
vm_wait_for_listener "${ns}" "${port}"
|
||||
vm_wait_for_listener "${ns}" "${port}" "tcp"
|
||||
rc=$?
|
||||
fi
|
||||
set +o pipefail
|
||||
|
|
@ -463,7 +476,7 @@ host_vsock_test() {
|
|||
return $rc
|
||||
fi
|
||||
|
||||
host_wait_for_listener "${ns}" "${port}"
|
||||
host_wait_for_listener "${ns}" "${port}" "tcp"
|
||||
rc=$?
|
||||
fi
|
||||
set +o pipefail
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user