From 2e75bcebbfbd7320dc4bfb03fb00b4e7df78ef24 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 4 Mar 2024 17:44:54 +0100 Subject: [PATCH] 6.7-stable patches added patches: selftests-mptcp-add-chk_subflows_total-helper.patch selftests-mptcp-add-evts_get_info-helper.patch selftests-mptcp-add-mptcp_lib_is_v6.patch selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch selftests-mptcp-update-userspace-pm-test-helpers.patch --- ...-mptcp-add-chk_subflows_total-helper.patch | 113 +++++++ ...tests-mptcp-add-evts_get_info-helper.patch | 298 ++++++++++++++++++ .../selftests-mptcp-add-mptcp_lib_is_v6.patch | 179 +++++++++++ ...tcp-rm-subflow-with-v4-v4mapped-addr.patch | 103 ++++++ ...tcp-update-userspace-pm-test-helpers.patch | 191 +++++++++++ queue-6.7/series | 5 + 6 files changed, 889 insertions(+) create mode 100644 queue-6.7/selftests-mptcp-add-chk_subflows_total-helper.patch create mode 100644 queue-6.7/selftests-mptcp-add-evts_get_info-helper.patch create mode 100644 queue-6.7/selftests-mptcp-add-mptcp_lib_is_v6.patch create mode 100644 queue-6.7/selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch create mode 100644 queue-6.7/selftests-mptcp-update-userspace-pm-test-helpers.patch diff --git a/queue-6.7/selftests-mptcp-add-chk_subflows_total-helper.patch b/queue-6.7/selftests-mptcp-add-chk_subflows_total-helper.patch new file mode 100644 index 00000000000..00345734daf --- /dev/null +++ b/queue-6.7/selftests-mptcp-add-chk_subflows_total-helper.patch @@ -0,0 +1,113 @@ +From stable+bounces-25927-greg=kroah.com@vger.kernel.org Mon Mar 4 14:39:52 2024 +From: "Matthieu Baerts (NGI0)" +Date: Mon, 4 Mar 2024 14:38:30 +0100 +Subject: selftests: mptcp: add chk_subflows_total helper +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Matthieu Baerts , Mat Martineau , Jakub Kicinski +Message-ID: <20240304133827.1989736-9-matttbe@kernel.org> + +From: Geliang Tang + +commit 80775412882e273b8ef62124fae861cde8e6fb3d upstream. + +This patch adds a new helper chk_subflows_total(), in it use the newly +added counter mptcpi_subflows_total to get the "correct" amount of +subflows, including the initial one. + +To be compatible with old 'ss' or kernel versions not supporting this +counter, get the total subflows by listing TCP connections that are +MPTCP subflows: + + ss -ti state state established state syn-sent state syn-recv | + grep -c tcp-ulp-mptcp. + +Reviewed-by: Matthieu Baerts +Signed-off-by: Geliang Tang +Signed-off-by: Mat Martineau +Link: https://lore.kernel.org/r/20231128-send-net-next-2023107-v4-3-8d6b94150f6b@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 42 +++++++++++++++++++++++- + 1 file changed, 41 insertions(+), 1 deletion(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -1843,7 +1843,7 @@ chk_mptcp_info() + local cnt2 + local dump_stats + +- print_check "mptcp_info ${info1:0:8}=$exp1:$exp2" ++ print_check "mptcp_info ${info1:0:15}=$exp1:$exp2" + + cnt1=$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value "$info1" "$info1") + cnt2=$(ss -N $ns2 -inmHM | mptcp_lib_get_info_value "$info2" "$info2") +@@ -1864,6 +1864,42 @@ chk_mptcp_info() + fi + } + ++# $1: subflows in ns1 ; $2: subflows in ns2 ++# number of all subflows, including the initial subflow. ++chk_subflows_total() ++{ ++ local cnt1 ++ local cnt2 ++ local info="subflows_total" ++ local dump_stats ++ ++ # if subflows_total counter is supported, use it: ++ if [ -n "$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value $info $info)" ]; then ++ chk_mptcp_info $info $1 $info $2 ++ return ++ fi ++ ++ print_check "$info $1:$2" ++ ++ # if not, count the TCP connections that are in fact MPTCP subflows ++ cnt1=$(ss -N $ns1 -ti state established state syn-sent state syn-recv | ++ grep -c tcp-ulp-mptcp) ++ cnt2=$(ss -N $ns2 -ti state established state syn-sent state syn-recv | ++ grep -c tcp-ulp-mptcp) ++ ++ if [ "$1" != "$cnt1" ] || [ "$2" != "$cnt2" ]; then ++ fail_test "got subflows $cnt1:$cnt2 expected $1:$2" ++ dump_stats=1 ++ else ++ print_ok ++ fi ++ ++ if [ "$dump_stats" = 1 ]; then ++ ss -N $ns1 -ti ++ ss -N $ns2 -ti ++ fi ++} ++ + chk_link_usage() + { + local ns=$1 +@@ -3407,10 +3443,12 @@ userspace_tests() + chk_join_nr 1 1 1 + chk_add_nr 1 1 + chk_mptcp_info subflows 1 subflows 1 ++ chk_subflows_total 2 2 + chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 + userspace_pm_rm_sf_addr_ns1 10.0.2.1 10 + chk_rm_nr 1 1 invert + chk_mptcp_info subflows 0 subflows 0 ++ chk_subflows_total 1 1 + kill_events_pids + mptcp_lib_kill_wait $tests_pid + fi +@@ -3427,9 +3465,11 @@ userspace_tests() + userspace_pm_add_sf 10.0.3.2 20 + chk_join_nr 1 1 1 + chk_mptcp_info subflows 1 subflows 1 ++ chk_subflows_total 2 2 + userspace_pm_rm_sf_addr_ns2 10.0.3.2 20 + chk_rm_nr 1 1 + chk_mptcp_info subflows 0 subflows 0 ++ chk_subflows_total 1 1 + kill_events_pids + mptcp_lib_kill_wait $tests_pid + fi diff --git a/queue-6.7/selftests-mptcp-add-evts_get_info-helper.patch b/queue-6.7/selftests-mptcp-add-evts_get_info-helper.patch new file mode 100644 index 00000000000..089faaba1c6 --- /dev/null +++ b/queue-6.7/selftests-mptcp-add-evts_get_info-helper.patch @@ -0,0 +1,298 @@ +From stable+bounces-25926-greg=kroah.com@vger.kernel.org Mon Mar 4 14:39:47 2024 +From: "Matthieu Baerts (NGI0)" +Date: Mon, 4 Mar 2024 14:38:29 +0100 +Subject: selftests: mptcp: add evts_get_info helper +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Matthieu Baerts , Mat Martineau , Jakub Kicinski +Message-ID: <20240304133827.1989736-8-matttbe@kernel.org> + +From: Geliang Tang + +commit 06848c0f341ee3f9226ed01e519c72e4d2b6f001 upstream. + +This patch adds a new helper get_info_value(), using 'sed' command to +parse the value of the given item name in the line with the given keyword, +to make chk_mptcp_info() and pedit_action_pkts() more readable. + +Also add another helper evts_get_info() to use get_info_value() to parse +the output of 'pm_nl_ctl events' command, to make all the userspace pm +selftests more readable, both in mptcp_join.sh and userspace_pm.sh. + +Reviewed-by: Matthieu Baerts +Signed-off-by: Geliang Tang +Signed-off-by: Mat Martineau +Link: https://lore.kernel.org/r/20231128-send-net-next-2023107-v4-2-8d6b94150f6b@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 19 ++-- + tools/testing/selftests/net/mptcp/mptcp_lib.sh | 10 ++ + tools/testing/selftests/net/mptcp/userspace_pm.sh | 86 +++++++++------------- + 3 files changed, 57 insertions(+), 58 deletions(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -1845,10 +1845,8 @@ chk_mptcp_info() + + print_check "mptcp_info ${info1:0:8}=$exp1:$exp2" + +- cnt1=$(ss -N $ns1 -inmHM | grep "$info1:" | +- sed -n 's/.*\('"$info1"':\)\([[:digit:]]*\).*$/\2/p;q') +- cnt2=$(ss -N $ns2 -inmHM | grep "$info2:" | +- sed -n 's/.*\('"$info2"':\)\([[:digit:]]*\).*$/\2/p;q') ++ cnt1=$(ss -N $ns1 -inmHM | mptcp_lib_get_info_value "$info1" "$info1") ++ cnt2=$(ss -N $ns2 -inmHM | mptcp_lib_get_info_value "$info2" "$info2") + # 'ss' only display active connections and counters that are not 0. + [ -z "$cnt1" ] && cnt1=0 + [ -z "$cnt2" ] && cnt2=0 +@@ -2824,13 +2822,13 @@ verify_listener_events() + return + fi + +- type=$(grep "type:$e_type," $evt | sed -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q') +- family=$(grep "type:$e_type," $evt | sed -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q') +- sport=$(grep "type:$e_type," $evt | sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q') ++ type=$(mptcp_lib_evts_get_info type "$evt" "$e_type") ++ family=$(mptcp_lib_evts_get_info family "$evt" "$e_type") ++ sport=$(mptcp_lib_evts_get_info sport "$evt" "$e_type") + if [ $family ] && [ $family = $AF_INET6 ]; then +- saddr=$(grep "type:$e_type," $evt | sed -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q') ++ saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" "$e_type") + else +- saddr=$(grep "type:$e_type," $evt | sed -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q') ++ saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" "$e_type") + fi + + if [ $type ] && [ $type = $e_type ] && +@@ -3225,8 +3223,7 @@ fastclose_tests() + pedit_action_pkts() + { + tc -n $ns2 -j -s action show action pedit index 100 | \ +- grep "packets" | \ +- sed 's/.*"packets":\([0-9]\+\),.*/\1/' ++ mptcp_lib_get_info_value \"packets\" packets + } + + fail_tests() +--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh +@@ -208,6 +208,16 @@ mptcp_lib_result_print_all_tap() { + done + } + ++# get the value of keyword $1 in the line marked by keyword $2 ++mptcp_lib_get_info_value() { ++ grep "${2}" | sed -n 's/.*\('"${1}"':\)\([0-9a-f:.]*\).*$/\2/p;q' ++} ++ ++# $1: info name ; $2: evts_ns ; $3: event type ++mptcp_lib_evts_get_info() { ++ mptcp_lib_get_info_value "${1}" "^type:${3:-1}," < "${2}" ++} ++ + # $1: PID + mptcp_lib_kill_wait() { + [ "${1}" -eq 0 ] && return 0 +--- a/tools/testing/selftests/net/mptcp/userspace_pm.sh ++++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh +@@ -238,14 +238,11 @@ make_connection() + local server_token + local server_serverside + +- client_token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") +- client_port=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") +- client_serverside=$(sed --unbuffered -n 's/.*\(server_side:\)\([[:digit:]]*\).*$/\2/p;q'\ +- "$client_evts") +- server_token=$(grep "type:1," "$server_evts" | +- sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q') +- server_serverside=$(grep "type:1," "$server_evts" | +- sed --unbuffered -n 's/.*\(server_side:\)\([[:digit:]]*\).*$/\2/p;q') ++ client_token=$(mptcp_lib_evts_get_info token "$client_evts") ++ client_port=$(mptcp_lib_evts_get_info sport "$client_evts") ++ client_serverside=$(mptcp_lib_evts_get_info server_side "$client_evts") ++ server_token=$(mptcp_lib_evts_get_info token "$server_evts") ++ server_serverside=$(mptcp_lib_evts_get_info server_side "$server_evts") + + print_test "Established IP${is_v6} MPTCP Connection ns2 => ns1" + if [ "$client_token" != "" ] && [ "$server_token" != "" ] && [ "$client_serverside" = 0 ] && +@@ -331,16 +328,16 @@ verify_announce_event() + local dport + local id + +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") ++ type=$(mptcp_lib_evts_get_info type "$evt" $e_type) ++ token=$(mptcp_lib_evts_get_info token "$evt" $e_type) + if [ "$e_af" = "v6" ] + then +- addr=$(sed --unbuffered -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt") ++ addr=$(mptcp_lib_evts_get_info daddr6 "$evt" $e_type) + else +- addr=$(sed --unbuffered -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt") ++ addr=$(mptcp_lib_evts_get_info daddr4 "$evt" $e_type) + fi +- dport=$(sed --unbuffered -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- id=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") ++ dport=$(mptcp_lib_evts_get_info dport "$evt" $e_type) ++ id=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type) + + check_expected "type" "token" "addr" "dport" "id" + } +@@ -358,7 +355,7 @@ test_announce() + $client_addr_id dev ns2eth1 > /dev/null 2>&1 + + local type +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ type=$(mptcp_lib_evts_get_info type "$server_evts") + print_test "ADD_ADDR 10.0.2.2 (ns2) => ns1, invalid token" + if [ "$type" = "" ] + then +@@ -437,9 +434,9 @@ verify_remove_event() + local token + local id + +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- id=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") ++ type=$(mptcp_lib_evts_get_info type "$evt" $e_type) ++ token=$(mptcp_lib_evts_get_info token "$evt" $e_type) ++ id=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type) + + check_expected "type" "token" "id" + } +@@ -457,7 +454,7 @@ test_remove() + $client_addr_id > /dev/null 2>&1 + print_test "RM_ADDR id:${client_addr_id} ns2 => ns1, invalid token" + local type +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ type=$(mptcp_lib_evts_get_info type "$server_evts") + if [ "$type" = "" ] + then + test_pass +@@ -470,7 +467,7 @@ test_remove() + ip netns exec "$ns2" ./pm_nl_ctl rem token "$client4_token" id\ + $invalid_id > /dev/null 2>&1 + print_test "RM_ADDR id:${invalid_id} ns2 => ns1, invalid id" +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ type=$(mptcp_lib_evts_get_info type "$server_evts") + if [ "$type" = "" ] + then + test_pass +@@ -574,19 +571,19 @@ verify_subflow_events() + fi + fi + +- type=$(sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- token=$(sed --unbuffered -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- family=$(sed --unbuffered -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- dport=$(sed --unbuffered -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- locid=$(sed --unbuffered -n 's/.*\(loc_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") +- remid=$(sed --unbuffered -n 's/.*\(rem_id:\)\([[:digit:]]*\).*$/\2/p;q' "$evt") ++ type=$(mptcp_lib_evts_get_info type "$evt" $e_type) ++ token=$(mptcp_lib_evts_get_info token "$evt" $e_type) ++ family=$(mptcp_lib_evts_get_info family "$evt" $e_type) ++ dport=$(mptcp_lib_evts_get_info dport "$evt" $e_type) ++ locid=$(mptcp_lib_evts_get_info loc_id "$evt" $e_type) ++ remid=$(mptcp_lib_evts_get_info rem_id "$evt" $e_type) + if [ "$family" = "$AF_INET6" ] + then +- saddr=$(sed --unbuffered -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt") +- daddr=$(sed --unbuffered -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q' "$evt") ++ saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" $e_type) ++ daddr=$(mptcp_lib_evts_get_info daddr6 "$evt" $e_type) + else +- saddr=$(sed --unbuffered -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt") +- daddr=$(sed --unbuffered -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evt") ++ saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" $e_type) ++ daddr=$(mptcp_lib_evts_get_info daddr4 "$evt" $e_type) + fi + + check_expected "type" "token" "daddr" "dport" "family" "saddr" "locid" "remid" +@@ -621,7 +618,7 @@ test_subflows() + mptcp_lib_kill_wait $listener_pid + + local sport +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW from server to client machine + :>"$server_evts" +@@ -659,7 +656,7 @@ test_subflows() + # Delete the listener from the client ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW6 from server to client machine + :>"$server_evts" +@@ -698,7 +695,7 @@ test_subflows() + # Delete the listener from the client ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$server_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$server_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW from server to client machine + :>"$server_evts" +@@ -736,7 +733,7 @@ test_subflows() + # Delete the listener from the server ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW from client to server machine + :>"$client_evts" +@@ -775,7 +772,7 @@ test_subflows() + # Delete the listener from the server ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW6 from client to server machine + :>"$client_evts" +@@ -812,7 +809,7 @@ test_subflows() + # Delete the listener from the server ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW from client to server machine + :>"$client_evts" +@@ -858,7 +855,7 @@ test_subflows_v4_v6_mix() + # Delete the listener from the server ns, if one was created + mptcp_lib_kill_wait $listener_pid + +- sport=$(sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q' "$client_evts") ++ sport=$(mptcp_lib_evts_get_info sport "$client_evts" $SUB_ESTABLISHED) + + # DESTROY_SUBFLOW from client to server machine + :>"$client_evts" +@@ -926,18 +923,13 @@ verify_listener_events() + print_test "CLOSE_LISTENER $e_saddr:$e_sport" + fi + +- type=$(grep "type:$e_type," $evt | +- sed --unbuffered -n 's/.*\(type:\)\([[:digit:]]*\).*$/\2/p;q') +- family=$(grep "type:$e_type," $evt | +- sed --unbuffered -n 's/.*\(family:\)\([[:digit:]]*\).*$/\2/p;q') +- sport=$(grep "type:$e_type," $evt | +- sed --unbuffered -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q') ++ type=$(mptcp_lib_evts_get_info type $evt $e_type) ++ family=$(mptcp_lib_evts_get_info family $evt $e_type) ++ sport=$(mptcp_lib_evts_get_info sport $evt $e_type) + if [ $family ] && [ $family = $AF_INET6 ]; then +- saddr=$(grep "type:$e_type," $evt | +- sed --unbuffered -n 's/.*\(saddr6:\)\([0-9a-f:.]*\).*$/\2/p;q') ++ saddr=$(mptcp_lib_evts_get_info saddr6 $evt $e_type) + else +- saddr=$(grep "type:$e_type," $evt | +- sed --unbuffered -n 's/.*\(saddr4:\)\([0-9.]*\).*$/\2/p;q') ++ saddr=$(mptcp_lib_evts_get_info saddr4 $evt $e_type) + fi + + check_expected "type" "family" "saddr" "sport" diff --git a/queue-6.7/selftests-mptcp-add-mptcp_lib_is_v6.patch b/queue-6.7/selftests-mptcp-add-mptcp_lib_is_v6.patch new file mode 100644 index 00000000000..0f579b8ba1b --- /dev/null +++ b/queue-6.7/selftests-mptcp-add-mptcp_lib_is_v6.patch @@ -0,0 +1,179 @@ +From stable+bounces-25929-greg=kroah.com@vger.kernel.org Mon Mar 4 14:39:55 2024 +From: "Matthieu Baerts (NGI0)" +Date: Mon, 4 Mar 2024 14:38:32 +0100 +Subject: selftests: mptcp: add mptcp_lib_is_v6 +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Matthieu Baerts , Mat Martineau , Jakub Kicinski +Message-ID: <20240304133827.1989736-11-matttbe@kernel.org> + +From: Geliang Tang + +commit b850f2c7dd85ecd14a333685c4ffd23f12665e94 upstream. + +To avoid duplicated code in different MPTCP selftests, we can add +and use helpers defined in mptcp_lib.sh. + +is_v6() helper is defined in mptcp_connect.sh, mptcp_join.sh and +mptcp_sockopt.sh, so export it into mptcp_lib.sh and rename it as +mptcp_lib_is_v6(). Use this new helper in all scripts. + +Reviewed-by: Matthieu Baerts +Signed-off-by: Geliang Tang +Signed-off-by: Mat Martineau +Link: https://lore.kernel.org/r/20231128-send-net-next-2023107-v4-10-8d6b94150f6b@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_connect.sh | 16 +++++----------- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 14 ++++---------- + tools/testing/selftests/net/mptcp/mptcp_lib.sh | 5 +++++ + tools/testing/selftests/net/mptcp/mptcp_sockopt.sh | 8 +------- + 4 files changed, 15 insertions(+), 28 deletions(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh +@@ -310,12 +310,6 @@ check_mptcp_disabled() + return 0 + } + +-# $1: IP address +-is_v6() +-{ +- [ -z "${1##*:*}" ] +-} +- + do_ping() + { + local listener_ns="$1" +@@ -324,7 +318,7 @@ do_ping() + local ping_args="-q -c 1" + local rc=0 + +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + $ipv6 || return 0 + ping_args="${ping_args} -6" + fi +@@ -620,12 +614,12 @@ run_tests_lo() + fi + + # skip if we don't want v6 +- if ! $ipv6 && is_v6 "${connect_addr}"; then ++ if ! $ipv6 && mptcp_lib_is_v6 "${connect_addr}"; then + return 0 + fi + + local local_addr +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + local_addr="::" + else + local_addr="0.0.0.0" +@@ -693,7 +687,7 @@ run_test_transparent() + TEST_GROUP="${msg}" + + # skip if we don't want v6 +- if ! $ipv6 && is_v6 "${connect_addr}"; then ++ if ! $ipv6 && mptcp_lib_is_v6 "${connect_addr}"; then + return 0 + fi + +@@ -726,7 +720,7 @@ EOF + fi + + local local_addr +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + local_addr="::" + r6flag="-6" + else +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -592,12 +592,6 @@ link_failure() + done + } + +-# $1: IP address +-is_v6() +-{ +- [ -z "${1##*:*}" ] +-} +- + # $1: ns, $2: port + wait_local_port_listen() + { +@@ -877,7 +871,7 @@ pm_nl_set_endpoint() + local id=10 + while [ $add_nr_ns1 -gt 0 ]; do + local addr +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + addr="dead:beef:$counter::1" + else + addr="10.0.$counter.1" +@@ -929,7 +923,7 @@ pm_nl_set_endpoint() + local id=20 + while [ $add_nr_ns2 -gt 0 ]; do + local addr +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + addr="dead:beef:$counter::2" + else + addr="10.0.$counter.2" +@@ -971,7 +965,7 @@ pm_nl_set_endpoint() + pm_nl_flush_endpoint ${connector_ns} + elif [ $rm_nr_ns2 -eq 9 ]; then + local addr +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + addr="dead:beef:1::2" + else + addr="10.0.1.2" +@@ -3339,7 +3333,7 @@ userspace_pm_rm_sf() + local cnt + + [ "$1" == "$ns2" ] && evts=$evts_ns2 +- if is_v6 $2; then ip=6; fi ++ if mptcp_lib_is_v6 $2; then ip=6; fi + tk=$(mptcp_lib_evts_get_info token "$evts") + da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t) + dp=$(mptcp_lib_evts_get_info dport "$evts" $t) +--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh +@@ -227,6 +227,11 @@ mptcp_lib_kill_wait() { + wait "${1}" 2>/dev/null + } + ++# $1: IP address ++mptcp_lib_is_v6() { ++ [ -z "${1##*:*}" ] ++} ++ + # $1: ns, $2: MIB counter + mptcp_lib_get_counter() { + local ns="${1}" +--- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +@@ -161,12 +161,6 @@ check_transfer() + return 0 + } + +-# $1: IP address +-is_v6() +-{ +- [ -z "${1##*:*}" ] +-} +- + do_transfer() + { + local listener_ns="$1" +@@ -183,7 +177,7 @@ do_transfer() + local mptcp_connect="./mptcp_connect -r 20" + + local local_addr ip +- if is_v6 "${connect_addr}"; then ++ if mptcp_lib_is_v6 "${connect_addr}"; then + local_addr="::" + ip=ipv6 + else diff --git a/queue-6.7/selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch b/queue-6.7/selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch new file mode 100644 index 00000000000..4eccc8ddb35 --- /dev/null +++ b/queue-6.7/selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch @@ -0,0 +1,103 @@ +From stable+bounces-25930-greg=kroah.com@vger.kernel.org Mon Mar 4 14:39:58 2024 +From: "Matthieu Baerts (NGI0)" +Date: Mon, 4 Mar 2024 14:38:33 +0100 +Subject: selftests: mptcp: rm subflow with v4/v4mapped addr +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Mat Martineau , Matthieu Baerts , Jakub Kicinski +Message-ID: <20240304133827.1989736-12-matttbe@kernel.org> + +From: Geliang Tang + +commit 7092dbee23282b6fcf1313fc64e2b92649ee16e8 upstream. + +Now both a v4 address and a v4-mapped address are supported when +destroying a userspace pm subflow, this patch adds a second subflow +to "userspace pm add & remove address" test, and two subflows could +be removed two different ways, one with the v4mapped and one with v4. + +Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/387 +Fixes: 48d73f609dcc ("selftests: mptcp: update userspace pm addr tests") +Cc: stable@vger.kernel.org +Signed-off-by: Geliang Tang +Reviewed-by: Mat Martineau +Reviewed-by: Matthieu Baerts (NGI0) +Signed-off-by: Matthieu Baerts (NGI0) +Link: https://lore.kernel.org/r/20240223-upstream-net-20240223-misc-fixes-v1-2-162e87e48497@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 28 +++++++++++++----------- + tools/testing/selftests/net/mptcp/mptcp_lib.sh | 4 +-- + 2 files changed, 18 insertions(+), 14 deletions(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -3328,16 +3328,17 @@ userspace_pm_rm_sf() + { + local evts=$evts_ns1 + local t=${3:-1} +- local ip=4 ++ local ip + local tk da dp sp + local cnt + + [ "$1" == "$ns2" ] && evts=$evts_ns2 +- if mptcp_lib_is_v6 $2; then ip=6; fi ++ [ -n "$(mptcp_lib_evts_get_info "saddr4" "$evts" $t)" ] && ip=4 ++ [ -n "$(mptcp_lib_evts_get_info "saddr6" "$evts" $t)" ] && ip=6 + tk=$(mptcp_lib_evts_get_info token "$evts") +- da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t) +- dp=$(mptcp_lib_evts_get_info dport "$evts" $t) +- sp=$(mptcp_lib_evts_get_info sport "$evts" $t) ++ da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t $2) ++ dp=$(mptcp_lib_evts_get_info dport "$evts" $t $2) ++ sp=$(mptcp_lib_evts_get_info sport "$evts" $t $2) + + cnt=$(rm_sf_count ${1}) + ip netns exec $1 ./pm_nl_ctl dsf lip $2 lport $sp \ +@@ -3424,20 +3425,23 @@ userspace_tests() + if reset_with_events "userspace pm add & remove address" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then + set_userspace_pm $ns1 +- pm_nl_set_limits $ns2 1 1 ++ pm_nl_set_limits $ns2 2 2 + speed=5 \ + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=$! + wait_mpj $ns1 + userspace_pm_add_addr $ns1 10.0.2.1 10 +- chk_join_nr 1 1 1 +- chk_add_nr 1 1 +- chk_mptcp_info subflows 1 subflows 1 +- chk_subflows_total 2 2 +- chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 ++ userspace_pm_add_addr $ns1 10.0.3.1 20 ++ chk_join_nr 2 2 2 ++ chk_add_nr 2 2 ++ chk_mptcp_info subflows 2 subflows 2 ++ chk_subflows_total 3 3 ++ chk_mptcp_info add_addr_signal 2 add_addr_accepted 2 + userspace_pm_rm_addr $ns1 10 + userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED +- chk_rm_nr 1 1 invert ++ userspace_pm_rm_addr $ns1 20 ++ userspace_pm_rm_sf $ns1 10.0.3.1 $SUB_ESTABLISHED ++ chk_rm_nr 2 2 invert + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 + kill_events_pids +--- a/tools/testing/selftests/net/mptcp/mptcp_lib.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_lib.sh +@@ -213,9 +213,9 @@ mptcp_lib_get_info_value() { + grep "${2}" | sed -n 's/.*\('"${1}"':\)\([0-9a-f:.]*\).*$/\2/p;q' + } + +-# $1: info name ; $2: evts_ns ; $3: event type ++# $1: info name ; $2: evts_ns ; [$3: event type; [$4: addr]] + mptcp_lib_evts_get_info() { +- mptcp_lib_get_info_value "${1}" "^type:${3:-1}," < "${2}" ++ grep "${4:-}" "${2}" | mptcp_lib_get_info_value "${1}" "^type:${3:-1}," + } + + # $1: PID diff --git a/queue-6.7/selftests-mptcp-update-userspace-pm-test-helpers.patch b/queue-6.7/selftests-mptcp-update-userspace-pm-test-helpers.patch new file mode 100644 index 00000000000..58da4a70788 --- /dev/null +++ b/queue-6.7/selftests-mptcp-update-userspace-pm-test-helpers.patch @@ -0,0 +1,191 @@ +From stable+bounces-25928-greg=kroah.com@vger.kernel.org Mon Mar 4 14:39:55 2024 +From: "Matthieu Baerts (NGI0)" +Date: Mon, 4 Mar 2024 14:38:31 +0100 +Subject: selftests: mptcp: update userspace pm test helpers +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Matthieu Baerts , Mat Martineau , Jakub Kicinski +Message-ID: <20240304133827.1989736-10-matttbe@kernel.org> + +From: Geliang Tang + +commit 757c828ce94905a2975873d5e90a376c701b2b90 upstream. + +This patch adds a new argument namespace to userspace_pm_add_addr() and +userspace_pm_add_sf() to make these two helper more versatile. + +Add two more versatile helpers for userspace pm remove subflow or address: +userspace_pm_rm_addr() and userspace_pm_rm_sf(). The original test helpers +userspace_pm_rm_sf_addr_ns1() and userspace_pm_rm_sf_addr_ns2() can be +replaced by these new helpers. + +Reviewed-by: Matthieu Baerts +Signed-off-by: Geliang Tang +Signed-off-by: Mat Martineau +Link: https://lore.kernel.org/r/20231128-send-net-next-2023107-v4-4-8d6b94150f6b@kernel.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + tools/testing/selftests/net/mptcp/mptcp_join.sh | 100 +++++++++++------------- + 1 file changed, 49 insertions(+), 51 deletions(-) + +--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh ++++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh +@@ -2824,6 +2824,7 @@ backup_tests() + fi + } + ++SUB_ESTABLISHED=10 # MPTCP_EVENT_SUB_ESTABLISHED + LISTENER_CREATED=15 #MPTCP_EVENT_LISTENER_CREATED + LISTENER_CLOSED=16 #MPTCP_EVENT_LISTENER_CLOSED + +@@ -3284,75 +3285,70 @@ fail_tests() + fi + } + ++# $1: ns ; $2: addr ; $3: id + userspace_pm_add_addr() + { +- local addr=$1 +- local id=$2 ++ local evts=$evts_ns1 + local tk + +- tk=$(grep "type:1," "$evts_ns1" | +- sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q') +- ip netns exec $ns1 ./pm_nl_ctl ann $addr token $tk id $id ++ [ "$1" == "$ns2" ] && evts=$evts_ns2 ++ tk=$(mptcp_lib_evts_get_info token "$evts") ++ ++ ip netns exec $1 ./pm_nl_ctl ann $2 token $tk id $3 + sleep 1 + } + +-userspace_pm_rm_sf_addr_ns1() ++# $1: ns ; $2: id ++userspace_pm_rm_addr() + { +- local addr=$1 +- local id=$2 +- local tk sp da dp +- local cnt_addr cnt_sf +- +- tk=$(grep "type:1," "$evts_ns1" | +- sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q') +- sp=$(grep "type:10" "$evts_ns1" | +- sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q') +- da=$(grep "type:10" "$evts_ns1" | +- sed -n 's/.*\(daddr6:\)\([0-9a-f:.]*\).*$/\2/p;q') +- dp=$(grep "type:10" "$evts_ns1" | +- sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q') +- cnt_addr=$(rm_addr_count ${ns1}) +- cnt_sf=$(rm_sf_count ${ns1}) +- ip netns exec $ns1 ./pm_nl_ctl rem token $tk id $id +- ip netns exec $ns1 ./pm_nl_ctl dsf lip "::ffff:$addr" \ +- lport $sp rip $da rport $dp token $tk +- wait_rm_addr $ns1 "${cnt_addr}" +- wait_rm_sf $ns1 "${cnt_sf}" ++ local evts=$evts_ns1 ++ local tk ++ local cnt ++ ++ [ "$1" == "$ns2" ] && evts=$evts_ns2 ++ tk=$(mptcp_lib_evts_get_info token "$evts") ++ ++ cnt=$(rm_addr_count ${1}) ++ ip netns exec $1 ./pm_nl_ctl rem token $tk id $2 ++ wait_rm_addr $1 "${cnt}" + } + ++# $1: ns ; $2: addr ; $3: id + userspace_pm_add_sf() + { +- local addr=$1 +- local id=$2 ++ local evts=$evts_ns1 + local tk da dp + +- tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") +- da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2") +- dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") +- ip netns exec $ns2 ./pm_nl_ctl csf lip $addr lid $id \ ++ [ "$1" == "$ns2" ] && evts=$evts_ns2 ++ tk=$(mptcp_lib_evts_get_info token "$evts") ++ da=$(mptcp_lib_evts_get_info daddr4 "$evts") ++ dp=$(mptcp_lib_evts_get_info dport "$evts") ++ ++ ip netns exec $1 ./pm_nl_ctl csf lip $2 lid $3 \ + rip $da rport $dp token $tk + sleep 1 + } + +-userspace_pm_rm_sf_addr_ns2() ++# $1: ns ; $2: addr $3: event type ++userspace_pm_rm_sf() + { +- local addr=$1 +- local id=$2 ++ local evts=$evts_ns1 ++ local t=${3:-1} ++ local ip=4 + local tk da dp sp +- local cnt_addr cnt_sf ++ local cnt ++ ++ [ "$1" == "$ns2" ] && evts=$evts_ns2 ++ if is_v6 $2; then ip=6; fi ++ tk=$(mptcp_lib_evts_get_info token "$evts") ++ da=$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t) ++ dp=$(mptcp_lib_evts_get_info dport "$evts" $t) ++ sp=$(mptcp_lib_evts_get_info sport "$evts" $t) + +- tk=$(sed -n 's/.*\(token:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") +- da=$(sed -n 's/.*\(daddr4:\)\([0-9.]*\).*$/\2/p;q' "$evts_ns2") +- dp=$(sed -n 's/.*\(dport:\)\([[:digit:]]*\).*$/\2/p;q' "$evts_ns2") +- sp=$(grep "type:10" "$evts_ns2" | +- sed -n 's/.*\(sport:\)\([[:digit:]]*\).*$/\2/p;q') +- cnt_addr=$(rm_addr_count ${ns2}) +- cnt_sf=$(rm_sf_count ${ns2}) +- ip netns exec $ns2 ./pm_nl_ctl rem token $tk id $id +- ip netns exec $ns2 ./pm_nl_ctl dsf lip $addr lport $sp \ ++ cnt=$(rm_sf_count ${1}) ++ ip netns exec $1 ./pm_nl_ctl dsf lip $2 lport $sp \ + rip $da rport $dp token $tk +- wait_rm_addr $ns2 "${cnt_addr}" +- wait_rm_sf $ns2 "${cnt_sf}" ++ wait_rm_sf $1 "${cnt}" + } + + userspace_tests() +@@ -3439,13 +3435,14 @@ userspace_tests() + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=$! + wait_mpj $ns1 +- userspace_pm_add_addr 10.0.2.1 10 ++ userspace_pm_add_addr $ns1 10.0.2.1 10 + chk_join_nr 1 1 1 + chk_add_nr 1 1 + chk_mptcp_info subflows 1 subflows 1 + chk_subflows_total 2 2 + chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 +- userspace_pm_rm_sf_addr_ns1 10.0.2.1 10 ++ userspace_pm_rm_addr $ns1 10 ++ userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED + chk_rm_nr 1 1 invert + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 +@@ -3462,11 +3459,12 @@ userspace_tests() + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=$! + wait_mpj $ns2 +- userspace_pm_add_sf 10.0.3.2 20 ++ userspace_pm_add_sf $ns2 10.0.3.2 20 + chk_join_nr 1 1 1 + chk_mptcp_info subflows 1 subflows 1 + chk_subflows_total 2 2 +- userspace_pm_rm_sf_addr_ns2 10.0.3.2 20 ++ userspace_pm_rm_addr $ns2 20 ++ userspace_pm_rm_sf $ns2 10.0.3.2 $SUB_ESTABLISHED + chk_rm_nr 1 1 + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 diff --git a/queue-6.7/series b/queue-6.7/series index 2cfee882032..36c220a91a3 100644 --- a/queue-6.7/series +++ b/queue-6.7/series @@ -155,3 +155,8 @@ x86-entry_32-add-verw-just-before-userspace-transition.patch x86-bugs-use-alternative-instead-of-mds_user_clear-static-key.patch kvm-vmx-use-bt-jnc-i.e.-eflags.cf-to-select-vmresume-vs.-vmlaunch.patch kvm-vmx-move-verw-closer-to-vmentry-for-mds-mitigation.patch +selftests-mptcp-add-evts_get_info-helper.patch +selftests-mptcp-add-chk_subflows_total-helper.patch +selftests-mptcp-update-userspace-pm-test-helpers.patch +selftests-mptcp-add-mptcp_lib_is_v6.patch +selftests-mptcp-rm-subflow-with-v4-v4mapped-addr.patch -- 2.47.2