mirror of
https://github.com/torvalds/linux.git
synced 2026-04-30 04:22:32 -04:00
This v0.11.0 version introduces SC2329: Warn when (non-escaping) functions are never invoked. Except that, similar to SC2317, ShellCheck is currently unable to figure out functions that are invoked via trap, or indirectly, when calling functions via variables. It is then needed to disable this new SC2329. Reviewed-by: Geliang Tang <geliang@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20250908-net-mptcp-misc-fixes-6-17-rc5-v1-3-5f2168a66079@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
275 lines
6.0 KiB
Bash
Executable File
275 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
. "$(dirname "${0}")/mptcp_lib.sh"
|
|
|
|
ret=0
|
|
|
|
usage() {
|
|
echo "Usage: $0 [ -i ] [ -h ]"
|
|
echo -e "\t-i: use 'ip mptcp' instead of 'pm_nl_ctl'"
|
|
echo -e "\t-h: help"
|
|
}
|
|
|
|
optstring=hi
|
|
while getopts "$optstring" option;do
|
|
case "$option" in
|
|
"h")
|
|
usage "$0"
|
|
exit ${KSFT_PASS}
|
|
;;
|
|
"i")
|
|
mptcp_lib_set_ip_mptcp
|
|
;;
|
|
"?")
|
|
usage "$0"
|
|
exit ${KSFT_FAIL}
|
|
;;
|
|
esac
|
|
done
|
|
|
|
ns1=""
|
|
err=$(mktemp)
|
|
|
|
# This function is used in the cleanup trap
|
|
#shellcheck disable=SC2317,SC2329
|
|
cleanup()
|
|
{
|
|
rm -f "${err}"
|
|
mptcp_lib_ns_exit "${ns1}"
|
|
}
|
|
|
|
mptcp_lib_check_mptcp
|
|
mptcp_lib_check_tools ip
|
|
|
|
trap cleanup EXIT
|
|
|
|
mptcp_lib_ns_init ns1
|
|
|
|
format_limits() {
|
|
local accept="${1}"
|
|
local subflows="${2}"
|
|
|
|
if mptcp_lib_is_ip_mptcp; then
|
|
# with a space at the end
|
|
printf "add_addr_accepted %d subflows %d \n" "${accept}" "${subflows}"
|
|
else
|
|
printf "accept %d\nsubflows %d\n" "${accept}" "${subflows}"
|
|
fi
|
|
}
|
|
|
|
get_limits() {
|
|
if mptcp_lib_is_ip_mptcp; then
|
|
ip -n "${ns1}" mptcp limits
|
|
else
|
|
ip netns exec "${ns1}" ./pm_nl_ctl limits
|
|
fi
|
|
}
|
|
|
|
format_endpoints() {
|
|
mptcp_lib_pm_nl_format_endpoints "${@}"
|
|
}
|
|
|
|
# This function is invoked indirectly
|
|
#shellcheck disable=SC2317,SC2329
|
|
get_endpoint() {
|
|
mptcp_lib_pm_nl_get_endpoint "${ns1}" "${@}"
|
|
}
|
|
|
|
change_address() {
|
|
local addr=${1}
|
|
local flags=${2}
|
|
|
|
if mptcp_lib_is_ip_mptcp; then
|
|
ip -n "${ns1}" mptcp endpoint change "${addr}" "${flags}"
|
|
else
|
|
ip netns exec "${ns1}" ./pm_nl_ctl set "${addr}" flags "${flags}"
|
|
fi
|
|
}
|
|
|
|
set_limits()
|
|
{
|
|
mptcp_lib_pm_nl_set_limits "${ns1}" "${@}"
|
|
}
|
|
|
|
add_endpoint()
|
|
{
|
|
mptcp_lib_pm_nl_add_endpoint "${ns1}" "${@}"
|
|
}
|
|
|
|
del_endpoint()
|
|
{
|
|
mptcp_lib_pm_nl_del_endpoint "${ns1}" "${@}"
|
|
}
|
|
|
|
flush_endpoint()
|
|
{
|
|
mptcp_lib_pm_nl_flush_endpoint "${ns1}"
|
|
}
|
|
|
|
show_endpoints()
|
|
{
|
|
mptcp_lib_pm_nl_show_endpoints "${ns1}"
|
|
}
|
|
|
|
change_endpoint()
|
|
{
|
|
mptcp_lib_pm_nl_change_endpoint "${ns1}" "${@}"
|
|
}
|
|
|
|
check()
|
|
{
|
|
local cmd="$1"
|
|
local expected="$2"
|
|
local msg="$3"
|
|
local rc=0
|
|
|
|
mptcp_lib_print_title "$msg"
|
|
mptcp_lib_check_output "${err}" "${cmd}" "${expected}" || rc=${?}
|
|
if [ ${rc} -eq 2 ]; then
|
|
mptcp_lib_result_fail "${msg} # error ${rc}"
|
|
ret=${KSFT_FAIL}
|
|
elif [ ${rc} -eq 0 ]; then
|
|
mptcp_lib_print_ok "[ OK ]"
|
|
mptcp_lib_result_pass "${msg}"
|
|
elif [ ${rc} -eq 1 ]; then
|
|
mptcp_lib_result_fail "${msg} # different output"
|
|
ret=${KSFT_FAIL}
|
|
fi
|
|
}
|
|
|
|
mptcp_lib_subtests_last_ts_reset
|
|
|
|
check "show_endpoints" "" "defaults addr list"
|
|
|
|
default_limits="$(get_limits)"
|
|
if mptcp_lib_expect_all_features; then
|
|
check "get_limits" "$(format_limits 0 2)" "defaults limits"
|
|
fi
|
|
|
|
add_endpoint 10.0.1.1
|
|
add_endpoint 10.0.1.2 flags subflow dev lo
|
|
add_endpoint 10.0.1.3 flags signal,backup
|
|
check "get_endpoint 1" "$(format_endpoints "1,10.0.1.1")" "simple add/get addr"
|
|
|
|
check "show_endpoints" \
|
|
"$(format_endpoints "1,10.0.1.1" \
|
|
"2,10.0.1.2,subflow,lo" \
|
|
"3,10.0.1.3,signal backup")" "dump addrs"
|
|
|
|
del_endpoint 2
|
|
check "get_endpoint 2" "" "simple del addr"
|
|
check "show_endpoints" \
|
|
"$(format_endpoints "1,10.0.1.1" \
|
|
"3,10.0.1.3,signal backup")" "dump addrs after del"
|
|
|
|
add_endpoint 10.0.1.3 2>/dev/null
|
|
check "get_endpoint 4" "" "duplicate addr"
|
|
|
|
add_endpoint 10.0.1.4 flags signal
|
|
check "get_endpoint 4" "$(format_endpoints "4,10.0.1.4,signal")" "id addr increment"
|
|
|
|
for i in $(seq 5 9); do
|
|
add_endpoint "10.0.1.${i}" flags signal >/dev/null 2>&1
|
|
done
|
|
check "get_endpoint 9" "$(format_endpoints "9,10.0.1.9,signal")" "hard addr limit"
|
|
check "get_endpoint 10" "" "above hard addr limit"
|
|
|
|
del_endpoint 9
|
|
for i in $(seq 10 255); do
|
|
add_endpoint 10.0.0.9 id "${i}"
|
|
del_endpoint "${i}"
|
|
done
|
|
check "show_endpoints" \
|
|
"$(format_endpoints "1,10.0.1.1" \
|
|
"3,10.0.1.3,signal backup" \
|
|
"4,10.0.1.4,signal" \
|
|
"5,10.0.1.5,signal" \
|
|
"6,10.0.1.6,signal" \
|
|
"7,10.0.1.7,signal" \
|
|
"8,10.0.1.8,signal")" "id limit"
|
|
|
|
flush_endpoint
|
|
check "show_endpoints" "" "flush addrs"
|
|
|
|
set_limits 9 1 2>/dev/null
|
|
check "get_limits" "${default_limits}" "rcv addrs above hard limit"
|
|
|
|
set_limits 1 9 2>/dev/null
|
|
check "get_limits" "${default_limits}" "subflows above hard limit"
|
|
|
|
set_limits 8 8
|
|
flush_endpoint ## to make sure it doesn't affect the limits
|
|
check "get_limits" "$(format_limits 8 8)" "set limits"
|
|
|
|
flush_endpoint
|
|
add_endpoint 10.0.1.1
|
|
add_endpoint 10.0.1.2
|
|
add_endpoint 10.0.1.3 id 100
|
|
add_endpoint 10.0.1.4
|
|
add_endpoint 10.0.1.5 id 254
|
|
add_endpoint 10.0.1.6
|
|
add_endpoint 10.0.1.7
|
|
add_endpoint 10.0.1.8
|
|
check "show_endpoints" \
|
|
"$(format_endpoints "1,10.0.1.1" \
|
|
"2,10.0.1.2" \
|
|
"3,10.0.1.7" \
|
|
"4,10.0.1.8" \
|
|
"100,10.0.1.3" \
|
|
"101,10.0.1.4" \
|
|
"254,10.0.1.5" \
|
|
"255,10.0.1.6")" "set ids"
|
|
|
|
flush_endpoint
|
|
add_endpoint 10.0.0.1
|
|
add_endpoint 10.0.0.2 id 254
|
|
add_endpoint 10.0.0.3
|
|
add_endpoint 10.0.0.4
|
|
add_endpoint 10.0.0.5 id 253
|
|
add_endpoint 10.0.0.6
|
|
add_endpoint 10.0.0.7
|
|
add_endpoint 10.0.0.8
|
|
check "show_endpoints" \
|
|
"$(format_endpoints "1,10.0.0.1" \
|
|
"2,10.0.0.4" \
|
|
"3,10.0.0.6" \
|
|
"4,10.0.0.7" \
|
|
"5,10.0.0.8" \
|
|
"253,10.0.0.5" \
|
|
"254,10.0.0.2" \
|
|
"255,10.0.0.3")" "wrap-around ids"
|
|
|
|
flush_endpoint
|
|
add_endpoint 10.0.1.1 flags subflow
|
|
change_address 10.0.1.1 backup
|
|
check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup")" \
|
|
"set flags (backup)"
|
|
change_address 10.0.1.1 nobackup
|
|
check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow")" \
|
|
" (nobackup)"
|
|
|
|
# fullmesh support has been added later
|
|
change_endpoint 1 fullmesh 2>/dev/null
|
|
if show_endpoints | grep -q "fullmesh" ||
|
|
mptcp_lib_expect_all_features; then
|
|
check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow fullmesh")" \
|
|
" (fullmesh)"
|
|
change_endpoint 1 nofullmesh
|
|
check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow")" \
|
|
" (nofullmesh)"
|
|
change_endpoint 1 backup,fullmesh
|
|
check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup fullmesh")" \
|
|
" (backup,fullmesh)"
|
|
else
|
|
for st in fullmesh nofullmesh backup,fullmesh; do
|
|
st=" (${st})"
|
|
mptcp_lib_print_title "${st}"
|
|
mptcp_lib_pr_skip
|
|
mptcp_lib_result_skip "${st}"
|
|
done
|
|
fi
|
|
|
|
mptcp_lib_result_print_all_tap
|
|
exit $ret
|