Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#! /bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4readonly KSFT_FAIL=1
5readonly KSFT_SKIP=4
6
7# SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES env var can be set when validating all
8# features using the last version of the kernel and the selftests to make sure
9# a test is not being skipped by mistake.
10mptcp_lib_expect_all_features() {
11 [ "${SELFTESTS_MPTCP_LIB_EXPECT_ALL_FEATURES:-}" = "1" ]
12}
13
14# $1: msg
15mptcp_lib_fail_if_expected_feature() {
16 if mptcp_lib_expect_all_features; then
17 echo "ERROR: missing feature: ${*}"
18 exit ${KSFT_FAIL}
19 fi
20
21 return 1
22}
23
24# $1: file
25mptcp_lib_has_file() {
26 local f="${1}"
27
28 if [ -f "${f}" ]; then
29 return 0
30 fi
31
32 mptcp_lib_fail_if_expected_feature "${f} file not found"
33}
34
35mptcp_lib_check_mptcp() {
36 if ! mptcp_lib_has_file "/proc/sys/net/mptcp/enabled"; then
37 echo "SKIP: MPTCP support is not available"
38 exit ${KSFT_SKIP}
39 fi
40}
41
42mptcp_lib_check_kallsyms() {
43 if ! mptcp_lib_has_file "/proc/kallsyms"; then
44 echo "SKIP: CONFIG_KALLSYMS is missing"
45 exit ${KSFT_SKIP}
46 fi
47}
48
49# Internal: use mptcp_lib_kallsyms_has() instead
50__mptcp_lib_kallsyms_has() {
51 local sym="${1}"
52
53 mptcp_lib_check_kallsyms
54
55 grep -q " ${sym}" /proc/kallsyms
56}
57
58# $1: part of a symbol to look at, add '$' at the end for full name
59mptcp_lib_kallsyms_has() {
60 local sym="${1}"
61
62 if __mptcp_lib_kallsyms_has "${sym}"; then
63 return 0
64 fi
65
66 mptcp_lib_fail_if_expected_feature "${sym} symbol not found"
67}
68
69# $1: part of a symbol to look at, add '$' at the end for full name
70mptcp_lib_kallsyms_doesnt_have() {
71 local sym="${1}"
72
73 if ! __mptcp_lib_kallsyms_has "${sym}"; then
74 return 0
75 fi
76
77 mptcp_lib_fail_if_expected_feature "${sym} symbol has been found"
78}
79
80# !!!AVOID USING THIS!!!
81# Features might not land in the expected version and features can be backported
82#
83# $1: kernel version, e.g. 6.3
84mptcp_lib_kversion_ge() {
85 local exp_maj="${1%.*}"
86 local exp_min="${1#*.}"
87 local v maj min
88
89 # If the kernel has backported features, set this env var to 1:
90 if [ "${SELFTESTS_MPTCP_LIB_NO_KVERSION_CHECK:-}" = "1" ]; then
91 return 0
92 fi
93
94 v=$(uname -r | cut -d'.' -f1,2)
95 maj=${v%.*}
96 min=${v#*.}
97
98 if [ "${maj}" -gt "${exp_maj}" ] ||
99 { [ "${maj}" -eq "${exp_maj}" ] && [ "${min}" -ge "${exp_min}" ]; }; then
100 return 0
101 fi
102
103 mptcp_lib_fail_if_expected_feature "kernel version ${1} lower than ${v}"
104}