mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
The current syntax of X=${X:=X} first evaluates the ${X:=Y} expression,
which either uses the existing value of $X if there is one, or uses the
value of "Y" as a fallback, and assigns it to X. The expression is then
replaced with the now-current value of $X. Assigning that value to X once
more is meaningless.
So avoid the outer X=... bit, and instead express the same idea though the
do-nothing ":" built-in as : "${X:=Y}". This also cleans up the block
nicely and makes it more readable.
Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Benjamin Poirier <bpoirier@nvidia.com>
Link: https://lore.kernel.org/r/1890ddc58420c2c0d5ba3154c87ecc6d9faf6947.1711464583.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
98 lines
1.7 KiB
Bash
98 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
##############################################################################
|
|
# Defines
|
|
|
|
: "${WAIT_TIMEOUT:=20}"
|
|
|
|
BUSYWAIT_TIMEOUT=$((WAIT_TIMEOUT * 1000)) # ms
|
|
|
|
# Kselftest framework requirement - SKIP code is 4.
|
|
ksft_skip=4
|
|
# namespace list created by setup_ns
|
|
NS_LIST=""
|
|
|
|
##############################################################################
|
|
# Helpers
|
|
busywait()
|
|
{
|
|
local timeout=$1; shift
|
|
|
|
local start_time="$(date -u +%s%3N)"
|
|
while true
|
|
do
|
|
local out
|
|
out=$("$@")
|
|
local ret=$?
|
|
if ((!ret)); then
|
|
echo -n "$out"
|
|
return 0
|
|
fi
|
|
|
|
local current_time="$(date -u +%s%3N)"
|
|
if ((current_time - start_time > timeout)); then
|
|
echo -n "$out"
|
|
return 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
cleanup_ns()
|
|
{
|
|
local ns=""
|
|
local errexit=0
|
|
local ret=0
|
|
|
|
# disable errexit temporary
|
|
if [[ $- =~ "e" ]]; then
|
|
errexit=1
|
|
set +e
|
|
fi
|
|
|
|
for ns in "$@"; do
|
|
ip netns delete "${ns}" &> /dev/null
|
|
if ! busywait $BUSYWAIT_TIMEOUT ip netns list \| grep -vq "^$ns$" &> /dev/null; then
|
|
echo "Warn: Failed to remove namespace $ns"
|
|
ret=1
|
|
fi
|
|
done
|
|
|
|
[ $errexit -eq 1 ] && set -e
|
|
return $ret
|
|
}
|
|
|
|
cleanup_all_ns()
|
|
{
|
|
cleanup_ns $NS_LIST
|
|
}
|
|
|
|
# setup netns with given names as prefix. e.g
|
|
# setup_ns local remote
|
|
setup_ns()
|
|
{
|
|
local ns=""
|
|
local ns_name=""
|
|
local ns_list=""
|
|
for ns_name in "$@"; do
|
|
# Some test may setup/remove same netns multi times
|
|
if unset ${ns_name} 2> /dev/null; then
|
|
ns="${ns_name,,}-$(mktemp -u XXXXXX)"
|
|
eval readonly ${ns_name}="$ns"
|
|
else
|
|
eval ns='$'${ns_name}
|
|
cleanup_ns "$ns"
|
|
|
|
fi
|
|
|
|
if ! ip netns add "$ns"; then
|
|
echo "Failed to create namespace $ns_name"
|
|
cleanup_ns "$ns_list"
|
|
return $ksft_skip
|
|
fi
|
|
ip -n "$ns" link set lo up
|
|
ns_list="$ns_list $ns"
|
|
done
|
|
NS_LIST="$NS_LIST $ns_list"
|
|
}
|