2 # SPDX-License-Identifier: GPL-2.0
4 .
"$(dirname "${0}")/mptcp_lib.sh"
9 echo "Usage: $0 [ -i ] [ -h ]"
10 echo -e "\t-i: use 'ip mptcp' instead of 'pm_nl_ctl'"
15 while getopts "$optstring" option
;do
22 mptcp_lib_set_ip_mptcp
34 # This function is used in the cleanup trap
35 #shellcheck disable=SC2317
39 mptcp_lib_ns_exit
"${ns1}"
43 mptcp_lib_check_tools ip
53 if mptcp_lib_is_ip_mptcp
; then
54 # with a space at the end
55 printf "add_addr_accepted %d subflows %d \n" "${accept}" "${subflows}"
57 printf "accept %d\nsubflows %d\n" "${accept}" "${subflows}"
62 if mptcp_lib_is_ip_mptcp
; then
63 ip
-n "${ns1}" mptcp limits
65 ip netns
exec "${ns1}" .
/pm_nl_ctl limits
70 mptcp_lib_pm_nl_format_endpoints
"${@}"
74 # shellcheck disable=SC2317 # invoked indirectly
75 mptcp_lib_pm_nl_get_endpoint
"${ns1}" "${@}"
82 if mptcp_lib_is_ip_mptcp
; then
83 ip
-n "${ns1}" mptcp endpoint change "${addr}" "${flags}"
85 ip netns
exec "${ns1}" ./pm_nl_ctl set "${addr}" flags "${flags}"
91 mptcp_lib_pm_nl_set_limits
"${ns1}" "${@}"
96 mptcp_lib_pm_nl_add_endpoint
"${ns1}" "${@}"
101 mptcp_lib_pm_nl_del_endpoint
"${ns1}" "${@}"
106 mptcp_lib_pm_nl_flush_endpoint
"${ns1}"
111 mptcp_lib_pm_nl_show_endpoints
"${ns1}"
116 mptcp_lib_pm_nl_change_endpoint
"${ns1}" "${@}"
126 mptcp_lib_print_title
"$msg"
127 mptcp_lib_check_output
"${err}" "${cmd}" "${expected}" || rc=${?}
128 if [ ${rc} -eq 2 ]; then
129 mptcp_lib_result_fail "${msg} # error ${rc}"
131 elif [ ${rc} -eq 0 ]; then
132 mptcp_lib_print_ok
"[ OK ]"
133 mptcp_lib_result_pass
"${msg}"
134 elif [ ${rc} -eq 1 ]; then
135 mptcp_lib_result_fail
"${msg} # different output"
140 mptcp_lib_subtests_last_ts_reset
142 check
"show_endpoints" "" "defaults addr list"
144 default_limits
="$(get_limits)"
145 if mptcp_lib_expect_all_features
; then
146 check
"get_limits" "$(format_limits 0 2)" "defaults limits"
149 add_endpoint
10.0.1.1
150 add_endpoint
10.0.1.2 flags subflow dev lo
151 add_endpoint
10.0.1.3 flags signal
,backup
152 check
"get_endpoint 1" "$(format_endpoints "1,10.0.1.1")" "simple add/get addr"
154 check
"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"
160 check
"get_endpoint 2" "" "simple del addr"
161 check
"show_endpoints" \
162 "$(format_endpoints "1,10.0.1.1" \
163 "3,10.0.1.3,signal backup
")" "dump addrs after del"
165 add_endpoint
10.0.1.3 2>/dev
/null
166 check
"get_endpoint 4" "" "duplicate addr"
168 add_endpoint
10.0.1.4 flags signal
169 check
"get_endpoint 4" "$(format_endpoints "4,10.0.1.4,signal
")" "id addr increment"
171 for i
in $
(seq 5 9); do
172 add_endpoint
"10.0.1.${i}" flags signal
>/dev
/null
2>&1
174 check
"get_endpoint 9" "$(format_endpoints "9,10.0.1.9,signal
")" "hard addr limit"
175 check
"get_endpoint 10" "" "above hard addr limit"
178 for i
in $
(seq 10 255); do
179 add_endpoint
10.0.0.9 id
"${i}"
182 check
"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"
192 check
"show_endpoints" "" "flush addrs"
194 set_limits
9 1 2>/dev
/null
195 check
"get_limits" "${default_limits}" "rcv addrs above hard limit"
197 set_limits
1 9 2>/dev
/null
198 check
"get_limits" "${default_limits}" "subflows above hard limit"
201 check
"get_limits" "$(format_limits 8 8)" "set limits"
204 add_endpoint
10.0.1.1
205 add_endpoint
10.0.1.2
206 add_endpoint
10.0.1.3 id
100
207 add_endpoint
10.0.1.4
208 add_endpoint
10.0.1.5 id
254
209 add_endpoint
10.0.1.6
210 add_endpoint
10.0.1.7
211 add_endpoint
10.0.1.8
212 check
"show_endpoints" \
213 "$(format_endpoints "1,10.0.1.1" \
220 "255,10.0.1.6")" "set ids"
223 add_endpoint
10.0.0.1
224 add_endpoint
10.0.0.2 id
254
225 add_endpoint
10.0.0.3
226 add_endpoint
10.0.0.4
227 add_endpoint
10.0.0.5 id
253
228 add_endpoint
10.0.0.6
229 add_endpoint
10.0.0.7
230 add_endpoint
10.0.0.8
231 check
"show_endpoints" \
232 "$(format_endpoints "1,10.0.0.1" \
239 "255,10.0.0.3")" "wrap-around ids"
242 add_endpoint
10.0.1.1 flags subflow
243 change_address
10.0.1.1 backup
244 check
"show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup
")" \
246 change_address
10.0.1.1 nobackup
247 check
"show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow
")" \
250 # fullmesh support has been added later
251 change_endpoint
1 fullmesh
2>/dev
/null
252 if show_endpoints |
grep -q "fullmesh" ||
253 mptcp_lib_expect_all_features
; then
254 check
"show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow fullmesh
")" \
256 change_endpoint
1 nofullmesh
257 check
"show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow
")" \
259 change_endpoint
1 backup
,fullmesh
260 check
"show_endpoints" "$(format_endpoints "1,10.0.1.1,subflow backup fullmesh
")" \
263 for st
in fullmesh nofullmesh backup
,fullmesh
; do
265 mptcp_lib_print_title
"${st}"
267 mptcp_lib_result_skip
"${st}"
271 mptcp_lib_result_print_all_tap