brintos

brintos / linux-shallow public Read only

0
0
Text · 6.0 KiB · 2e6648a Raw
273 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4. "$(dirname "${0}")/mptcp_lib.sh"5 6ret=07 8usage() {9	echo "Usage: $0 [ -i ] [ -h ]"10	echo -e "\t-i: use 'ip mptcp' instead of 'pm_nl_ctl'"11	echo -e "\t-h: help"12}13 14optstring=hi15while getopts "$optstring" option;do16	case "$option" in17	"h")18		usage "$0"19		exit ${KSFT_PASS}20		;;21	"i")22		mptcp_lib_set_ip_mptcp23		;;24	"?")25		usage "$0"26		exit ${KSFT_FAIL}27		;;28	esac29done30 31ns1=""32err=$(mktemp)33 34# This function is used in the cleanup trap35#shellcheck disable=SC231736cleanup()37{38	rm -f "${err}"39	mptcp_lib_ns_exit "${ns1}"40}41 42mptcp_lib_check_mptcp43mptcp_lib_check_tools ip44 45trap cleanup EXIT46 47mptcp_lib_ns_init ns148 49format_limits() {50	local accept="${1}"51	local subflows="${2}"52 53	if mptcp_lib_is_ip_mptcp; then54		# with a space at the end55		printf "add_addr_accepted %d subflows %d \n" "${accept}" "${subflows}"56	else57		printf "accept %d\nsubflows %d\n" "${accept}" "${subflows}"58	fi59}60 61get_limits() {62	if mptcp_lib_is_ip_mptcp; then63		ip -n "${ns1}" mptcp limits64	else65		ip netns exec "${ns1}" ./pm_nl_ctl limits66	fi67}68 69format_endpoints() {70	mptcp_lib_pm_nl_format_endpoints "${@}"71}72 73get_endpoint() {74	# shellcheck disable=SC2317 # invoked indirectly75	mptcp_lib_pm_nl_get_endpoint "${ns1}" "${@}"76}77 78change_address() {79	local addr=${1}80	local flags=${2}81 82	if mptcp_lib_is_ip_mptcp; then83		ip -n "${ns1}" mptcp endpoint change "${addr}" "${flags}"84	else85		ip netns exec "${ns1}" ./pm_nl_ctl set "${addr}" flags "${flags}"86	fi87}88 89set_limits()90{91	mptcp_lib_pm_nl_set_limits "${ns1}" "${@}"92}93 94add_endpoint()95{96	mptcp_lib_pm_nl_add_endpoint "${ns1}" "${@}"97}98 99del_endpoint()100{101	mptcp_lib_pm_nl_del_endpoint "${ns1}" "${@}"102}103 104flush_endpoint()105{106	mptcp_lib_pm_nl_flush_endpoint "${ns1}"107}108 109show_endpoints()110{111	mptcp_lib_pm_nl_show_endpoints "${ns1}"112}113 114change_endpoint()115{116	mptcp_lib_pm_nl_change_endpoint "${ns1}" "${@}"117}118 119check()120{121	local cmd="$1"122	local expected="$2"123	local msg="$3"124	local rc=0125 126	mptcp_lib_print_title "$msg"127	mptcp_lib_check_output "${err}" "${cmd}" "${expected}" || rc=${?}128	if [ ${rc} -eq 2 ]; then129		mptcp_lib_result_fail "${msg} # error ${rc}"130		ret=${KSFT_FAIL}131	elif [ ${rc} -eq 0 ]; then132		mptcp_lib_print_ok "[ OK ]"133		mptcp_lib_result_pass "${msg}"134	elif [ ${rc} -eq 1 ]; then135		mptcp_lib_result_fail "${msg} # different output"136		ret=${KSFT_FAIL}137	fi138}139 140mptcp_lib_subtests_last_ts_reset141 142check "show_endpoints" "" "defaults addr list"143 144default_limits="$(get_limits)"145if mptcp_lib_expect_all_features; then146	check "get_limits" "$(format_limits 0 2)" "defaults limits"147fi148 149add_endpoint 10.0.1.1150add_endpoint 10.0.1.2 flags subflow dev lo151add_endpoint 10.0.1.3 flags signal,backup152check "get_endpoint 1" "$(format_endpoints "1,10.0.1.1")" "simple add/get addr"153 154check "show_endpoints" \155	"$(format_endpoints "1,10.0.1.1" \156			    "2,10.0.1.2,subflow,lo" \157			    "3,10.0.1.3,signal backup")" "dump addrs"158 159del_endpoint 2160check "get_endpoint 2" "" "simple del addr"161check "show_endpoints" \162	"$(format_endpoints "1,10.0.1.1" \163			    "3,10.0.1.3,signal backup")" "dump addrs after del"164 165add_endpoint 10.0.1.3 2>/dev/null166check "get_endpoint 4" "" "duplicate addr"167 168add_endpoint 10.0.1.4 flags signal169check "get_endpoint 4" "$(format_endpoints "4,10.0.1.4,signal")" "id addr increment"170 171for i in $(seq 5 9); do172	add_endpoint "10.0.1.${i}" flags signal >/dev/null 2>&1173done174check "get_endpoint 9" "$(format_endpoints "9,10.0.1.9,signal")" "hard addr limit"175check "get_endpoint 10" "" "above hard addr limit"176 177del_endpoint 9178for i in $(seq 10 255); do179	add_endpoint 10.0.0.9 id "${i}"180	del_endpoint "${i}"181done182check "show_endpoints" \183	"$(format_endpoints "1,10.0.1.1" \184			    "3,10.0.1.3,signal backup" \185			    "4,10.0.1.4,signal" \186			    "5,10.0.1.5,signal" \187			    "6,10.0.1.6,signal" \188			    "7,10.0.1.7,signal" \189			    "8,10.0.1.8,signal")" "id limit"190 191flush_endpoint192check "show_endpoints" "" "flush addrs"193 194set_limits 9 1 2>/dev/null195check "get_limits" "${default_limits}" "rcv addrs above hard limit"196 197set_limits 1 9 2>/dev/null198check "get_limits" "${default_limits}" "subflows above hard limit"199 200set_limits 8 8201check "get_limits" "$(format_limits 8 8)" "set limits"202 203flush_endpoint204add_endpoint 10.0.1.1205add_endpoint 10.0.1.2206add_endpoint 10.0.1.3 id 100207add_endpoint 10.0.1.4208add_endpoint 10.0.1.5 id 254209add_endpoint 10.0.1.6210add_endpoint 10.0.1.7211add_endpoint 10.0.1.8212check "show_endpoints" \213	"$(format_endpoints "1,10.0.1.1" \214			    "2,10.0.1.2" \215			    "3,10.0.1.7" \216			    "4,10.0.1.8" \217			    "100,10.0.1.3" \218			    "101,10.0.1.4" \219			    "254,10.0.1.5" \220			    "255,10.0.1.6")" "set ids"221 222flush_endpoint223add_endpoint 10.0.0.1224add_endpoint 10.0.0.2 id 254225add_endpoint 10.0.0.3226add_endpoint 10.0.0.4227add_endpoint 10.0.0.5 id 253228add_endpoint 10.0.0.6229add_endpoint 10.0.0.7230add_endpoint 10.0.0.8231check "show_endpoints" \232	"$(format_endpoints "1,10.0.0.1" \233			    "2,10.0.0.4" \234			    "3,10.0.0.6" \235			    "4,10.0.0.7" \236			    "5,10.0.0.8" \237			    "253,10.0.0.5" \238			    "254,10.0.0.2" \239			    "255,10.0.0.3")" "wrap-around ids"240 241flush_endpoint242add_endpoint 10.0.1.1 flags subflow243change_address 10.0.1.1 backup244check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup")" \245	"set flags (backup)"246change_address 10.0.1.1 nobackup247check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow")" \248	"          (nobackup)"249 250# fullmesh support has been added later251change_endpoint 1 fullmesh 2>/dev/null252if show_endpoints | grep -q "fullmesh" ||253   mptcp_lib_expect_all_features; then254	check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow fullmesh")" \255		"          (fullmesh)"256	change_endpoint 1 nofullmesh257	check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow")" \258		"          (nofullmesh)"259	change_endpoint 1 backup,fullmesh260	check "show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup fullmesh")" \261		"          (backup,fullmesh)"262else263	for st in fullmesh nofullmesh backup,fullmesh; do264		st="          (${st})"265		mptcp_lib_print_title "${st}"266		mptcp_lib_pr_skip267		mptcp_lib_result_skip "${st}"268	done269fi270 271mptcp_lib_result_print_all_tap272exit $ret273