Bug 1984733

Summary: [iproute][mptcp] please add set_flags and set_port
Product: Red Hat Enterprise Linux 8 Reporter: xmu
Component: iprouteAssignee: Andrea Claudi <aclaudi>
Status: CLOSED ERRATA QA Contact: xmu
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 8.5CC: atragler, jiji, mshi, network-qe
Target Milestone: betaKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: iproute-5.12.0-3.el8 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-11-09 19:37:07 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description xmu 2021-07-22 04:04:27 UTC
Description of problem:

please add set_flags and set_port for "ip mptcp", which are similar with pm_ml_ctl in mptcp kselftest.

like:
ip mptcp endpoint add ADDRESS [ dev NAME ] [ id ID ] [ FLAG-LIST ] [PORT]

ip mptcp endpoint set ADDRESS [backup|nobackup]

Version-Release number of selected component (if applicable):
iproute-5.12.0-1.el8.x86_64

How reproducible:
always

Steps to Reproduce:
1.ip mptcp help
2.
3.

Actual results:


Expected results:


Additional info:

Comment 1 Andrea Claudi 2021-08-09 13:21:13 UTC
Hi Mingyu, can you please consider to set itm and qa_ack+ for this issue? Thanks in advance!

Comment 6 xmu 2021-08-20 07:55:07 UTC
I checked the patch for this bug:
 mptcp: add support for port based endpoint (Andrea Claudi) [1984733]


add_addr_ports_tests_iproute(){
	# signal address with port
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 0 subflows 1
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 1 subflows 1
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 port 10100 signal
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "signal address with port" 1 1 1
	chk_add_nr 1 1 1

	# subflow and signal with port
	reset
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 port 10100 signal
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 0 subflows 2
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 1 subflows 2
	ip netns exec $ns2 ip mptcp endpoint add 10.0.3.2 subflow
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "subflow and signal with port" 2 2 2
	chk_add_nr 1 1 1

	# single address with port, remove
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 0 subflows 1
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 signal port 10100
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 1 subflows 1
	run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow
	chk_join_nr "remove single address with port" 1 1 1
	chk_add_nr 1 1 1
	chk_rm_nr 1 1 invert

	# subflow and signal with port, remove
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 0 subflows 2
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 signal port 10100
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 1 subflows 2
	ip netns exec $ns2 ip mptcp endpoint add 10.0.3.2 subflow
	run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow
	chk_join_nr "remove subflow and signal with port" 2 2 2
	chk_add_nr 1 1 1
	chk_rm_nr 1 1

	# subflows and signal with port, flush
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 0 subflows 3
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 signal port 10100
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 1 subflows 3
	ip netns exec $ns2 ip mptcp endpoint add 10.0.3.2 subflow
	ip netns exec $ns2 ip mptcp endpoint add 10.0.4.2 subflow
	run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
	chk_join_nr "flush subflows and signal with port" 3 3 3
	chk_add_nr 1 1
	chk_rm_nr 2 2

	# multiple addresses with port
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 2 subflows 2
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 signal port 10100
	ip netns exec $ns1 ip mptcp endpoint add 10.0.3.1 signal port 10100
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 2 subflows 2
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "multiple addresses with port" 2 2 2
	chk_add_nr 2 2 2

	# multiple addresses with ports
	reset
	ip netns exec $ns1 ip mptcp limits set add_addr_accepted 2 subflows 2
	ip netns exec $ns1 ip mptcp endpoint add 10.0.2.1 signal port 10100
	ip netns exec $ns1 ip mptcp endpoint add 10.0.3.1 signal port 10101
	ip netns exec $ns2 ip mptcp limits set add_addr_accepted 2 subflows 2
	ip netns exec $ns2 ./pm_nl_ctl limits 2 2
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "multiple addresses with ports" 2 2 2
	chk_add_nr 2 2 2

}

[root@localhost mptcp]# ./mptcp_join_iproute.sh -p
Created /tmp/tmp.poENcxp8Wq (size 1 KB) containing data sent by client
Created /tmp/tmp.DW8XTWOy6z (size 1 KB) containing data sent by server
Capturing traffic for test 1 into mp_join-01-ns1-0-UM6eKM.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
74 packets captured
74 packets received by filter
0 packets dropped by kernel
01 signal address with port             syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]
Capturing traffic for test 2 into mp_join-02-ns1-0-c3dYVr.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
93 packets captured
93 packets received by filter
0 packets dropped by kernel
02 subflow and signal with port         syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]
Capturing traffic for test 3 into mp_join-03-ns1-0-totOVB.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
168 packets captured
168 packets received by filter
0 packets dropped by kernel
03 remove single address with port      syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]
                                        rm [ ok ] - sf    [ ok ]
Capturing traffic for test 4 into mp_join-04-ns1-0-9cB67T.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
176 packets captured
176 packets received by filter
0 packets dropped by kernel
04 remove subflow and signal with port  syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]
                                        rm [ ok ] - sf    [ ok ]
Capturing traffic for test 5 into mp_join-05-ns1-0-aZk86y.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
186 packets captured
186 packets received by filter
0 packets dropped by kernel
05 flush subflows and signal with port  syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ]
                                        rm [ ok ] - sf    [ ok ]
Capturing traffic for test 6 into mp_join-06-ns1-0-aWJJ9w.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
90 packets captured
90 packets received by filter
0 packets dropped by kernel
06 multiple addresses with port         syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]
Capturing traffic for test 7 into mp_join-07-ns1-0-s2Z6wp.pcap
tcpdump: data link type LINUX_SLL2
tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
94 packets captured
94 packets received by filter
0 packets dropped by kernel
07 multiple addresses with ports        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        add[ ok ] - echo  [ ok ] - pt [ ok ]
                                        syn[ ok ] - synack[ ok ] - ack[ ok ]
                                        syn[ ok ] - ack   [ ok ]


[root@localhost mptcp]# tcpdump -r mp_join-07-ns1-0-s2Z6wp.pcap -nn tcp | grep "Flags \[S\]"
reading from file mp_join-07-ns1-0-s2Z6wp.pcap, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535
Warning: interface names might be incorrect
03:20:34.829025 eth2  In  IP 10.0.1.2.42554 > 10.0.1.1.10006: Flags [S], seq 1638319244, win 29200, options [mss 1460,sackOK,TS val 1714776571 ecr 0,nop,wscale 7,mptcp capable v1], length 0
03:20:34.829513 ?     In  IP 10.0.2.2.59583 > 10.0.2.1.10100: Flags [S], seq 3837322995, win 29200, options [mss 1460,sackOK,TS val 1813516878 ecr 0,nop,wscale 7,mptcp join id 0 token 0x24f8b91b nonce 0x7436dc7c], length 0
03:20:34.829668 ?     In  IP 10.0.3.2.33391 > 10.0.3.1.10101: Flags [S], seq 1770196718, win 29200, options [mss 1460,sackOK,TS val 1094635554 ecr 0,nop,wscale 7,mptcp join id 0 token 0x24f8b91b nonce 0xb5909af8], length 0

Comment 8 errata-xmlrpc 2021-11-09 19:37:07 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (iproute bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2021:4389