-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a lib.sh for net selftests. This file can be used to define commonly used variables and functions. Some commonly used functions can be moved from forwarding/lib.sh to this lib file. e.g. busywait(). Add function setup_ns() for user to create unique namespaces with given prefix name. Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
- Loading branch information
Hangbin Liu
authored and
Paolo Abeni
committed
Dec 5, 2023
1 parent
333f339
commit 25ae948
Showing
3 changed files
with
87 additions
and
27 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
|
||
############################################################################## | ||
# Defines | ||
|
||
# Kselftest framework requirement - SKIP code is 4. | ||
ksft_skip=4 | ||
|
||
############################################################################## | ||
# 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 2 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 | ||
} | ||
|
||
# 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 | ||
} |