diff mbox series

Re: [MPTCP][PATCH mptcp-next] selftests: mptcp: add command line arguments for mptcp_join.sh

Message ID CA+WQbwuLSRnODw4tKS3enehTDZU8XX0bidfWRaxJyp_VDeQn4A@mail.gmail.com
State Not Applicable, archived
Headers show
Series Re: [MPTCP][PATCH mptcp-next] selftests: mptcp: add command line arguments for mptcp_join.sh | expand

Commit Message

Geliang Tang Jan. 9, 2021, 1:51 a.m. UTC
Hi Mat,

Mat Martineau <mathew.j.martineau@linux.intel.com> 于2021年1月9日周六 上午9:25写道:
>
>
> On Tue, 5 Jan 2021, Geliang Tang wrote:
>
> > Since the mptcp_join script is becoming too big, this patch split it into
> > several smaller trunks, each of them has been defined in a function as a
> > individual test group for several related testcases.
> >
> > Using bash getopts function to parse command line arguments, and involk
> > each function to do the individual test group.
> >
> > Here are all the arguments:
> >  -f subflows_tests
> >  -s signal_address_tests
> >  -l link_failure_tests
> >  -t add_addr_timeout_tests
> >  -r remove_tests
> >  -a add_tests
> >  -6 ipv6_tests
> >  -4 v4mapped_tests
> >  -b backup_tests
> >  -p add_addr_ports_tests
> >  -c syncookies_tests
> >  -h help
> >
> > Run mptcp_join.sh with no argument will do all the testcases.
> >
>
> This seems like a good idea to me, but what patchset(s) do I need to apply
> first?
>

Sorry, here is the commit log with all my patches against
export/20210108T061525:

---

commit 25b58355f5ad79c2a623179060730b6b77d53cb2
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 25 14:16:19 2020 +0800

    selftests: mptcp: add add_addr_urgent testcases

    This patch added the multiple addresses testcases for add_addr_urgent in
    signal_address_tests and add_tests.

    It also set add_addr_urgent sysctl in add_addr_timeout testcase to fix
    the ADD_ADDR timeout issue like this:

     12 signal address, ADD_ADDR timeout syn[ ok ] - synack[ ok ] - ack[ ok ]
                                         add[fail] got 2 ADD_ADDR[s] expected 4
      - echo  [ ok ]
     Server ns stats
     MPTcpExtMPCapableSYNRX          1              0.0
     MPTcpExtMPCapableACKRX          1              0.0
     MPTcpExtMPJoinSynRx             1              0.0
     MPTcpExtMPJoinAckRx             1              0.0
     Client ns stats
     MPTcpExtMPJoinSynAckRx          1              0.0
     MPTcpExtAddAddr                 2              0.0
     13 remove single subflow            syn[ ok ] - synack[ ok ] - ack[ ok ]
                                         rm [ ok ] - sf    [ ok ]

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit e1638e90d6d18db9cb93ac6187d93c1bfdd97033
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Jan 6 14:53:16 2021 +0800

    mptcp: add urgent status for ADD_ADDR

    This patch added a new status named MPTCP_ADD_ADDR_URGENT in
    mptcp_addr_signal_status. If this status is set, a dedicated ADD_ADDR
    packet also needs to be sent out.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 2cd573236f30d2fe762f4f7d334a683f2dcf380d
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 25 14:11:27 2020 +0800

    mptcp: add a new sysctl add_addr_urgent

    This patch added a new sysctl named add_addr_urgent, to control whether
    the ADD_ADDR suboption can be sent out immediately in only one round trip.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 8212e277a0eb4c767bf6431fba41d3a56769cf00
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Jan 6 14:49:47 2021 +0800

    mptcp: simplify mptcp_pm_nl_add_addr_send_ack debug log

    Print out the debug log of mptcp_pm_nl_add_addr_send_ack in a single line
    when more than one mptcp_addr_signal_status are set.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 5d745ca0f9d9132b55563d27abdb204b6627255b
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Jan 6 14:46:56 2021 +0800

    mptcp: add mptcp_pm_should_add_signal_send_ack helper

    This patch added a new helper function named
    mptcp_pm_should_add_signal_send_ack, in it put together all the
    mptcp_addr_signal_status which need to send out a dedicated ADD_ADDR
    packet.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 3827ba4d862f4195d2d5e490f64525cf37e3e9e3
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 13:43:19 2020 +0800

    selftests: mptcp: add command line arguments for mptcp_join.sh

    Since the mptcp_join script is becoming too big, this patch split it into
    several smaller trunks, each of them has been defined in a function as a
    individual test group for several related testcases.

    Using bash getopts function to parse command line arguments, and involk
    each function to do the individual test group.

    Here are all the arguments:
      -f subflows_tests
      -s signal_address_tests
      -l link_failure_tests
      -t add_addr_timeout_tests
      -r remove_tests
      -a add_tests
      -6 ipv6_tests
      -4 v4mapped_tests
      -b backup_tests
      -p add_addr_ports_tests
      -c syncookies_tests
      -h help

    Run mptcp_join.sh with no argument will do all the testcases.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 1e997dbf540506cc21865c8fc922d971245a6db9
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 11 12:02:20 2020 +0800

    selftests: mptcp: add testcases for ADD_ADDR with port

    This patch added testcases for ADD_ADDR with port and the related MIB
    counters check in chk_add_nr. The output looks like this:

     24 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 ]
     25 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 ]
     26 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 ]

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 7f669efea704be47eb38537ca8909d4756c34d0d
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 14:53:25 2020 +0800

    mptcp: add the mibs for ADD_ADDR with port

    This patch added the mibs for ADD_ADDR with port:

    MPTCP_MIB_PORTADD for receiving of the ADD_ADDR suboption with a port
    number.

    MPTCP_MIB_PORTSYNRX, MPTCP_MIB_PORTSYNACKRX, MPTCP_MIB_PORTACKRX, for
    receiving of the MP_JOIN's SYN or SYN/ACK or ACK with a port number which
    is different from the msk's port number.

    MPTCP_MIB_MISMATCHPORTSYNRX and MPTCP_MIB_MISMATCHPORTACKRX, for
    receiving a SYN or ACK MP_JOIN with a mismatched port-number.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit e4e8712c5e5b03ce0f9869f081188351d646f261
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Oct 28 22:14:21 2020 +0800

    selftests: mptcp: add port argument for pm_nl_ctl

    This patch added a new argument for pm_nl_ctl tool. We can use it like
    this:

     # pm_nl_ctl add 10.0.2.1 flags signal port 10100
     # pm_nl_ctl dump
     id 1 flags signal 10.0.2.1 10100

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit fbc10581c0e470e93b24981dfafada66b08d8b44
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Oct 28 23:00:34 2020 +0800

    mptcp: deal with MPTCP_PM_ADDR_ATTR_PORT in PM netlink

    This patch added the MPTCP_PM_ADDR_ATTR_PORT filling and parsing in PM
    netlink.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 9e7157c8f67cdc5f23a28bfe60b98e985ba9fcd3
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Mon Nov 30 18:21:59 2020 +0800

    mptcp: enable use_port when invoke addresses_equal

    When dealing with the addresses list local_addr_list or anno_list, we
    should enable the function addresses_equal's parameter use_port. And
    enable it in address_zero too.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 2ab3740345b63c9a030425c532c4a961c7ae6c7b
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 14:45:54 2020 +0800

    mptcp: add port number check for MP_JOIN

    This patch adds two new helpers, subflow_use_different_sport and
    subflow_use_different_dport, to check whether the subflow's source or
    destination port number is different from the msk's port number. When
    receiving the MP_JOIN's SYN/SYNACK/ACK, we do these port number checks
    and print out the different port numbers.

    And furthermore, when receiving the MP_JOIN's SYN/ACK, we also use a new
    helper mptcp_pm_sport_in_anno_list to check whether this port number is
    announced. If it isn't, we need to abort this connection.

    This patch alse populates the local address's port field in local_address.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit da7e1d7f592b0a00110ea55a315a18fda4331359
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 25 16:44:06 2020 +0800

    mptcp: add a new helper subflow_req_create_thmac

    This patch added a new helper named subflow_req_create_thmac, which split
    from subflow_token_join_request. It initialized subflow_req's local_nonce
    and thmac fields, those are the more expensive to populate.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 4444585cd57ccadfd773e3d0d6c3fecdff7f5509
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 14:44:07 2020 +0800

    mptcp: drop unused skb in subflow_token_join_request

    This patch dropped the unused parameter skb in subflow_token_join_request.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit b63852ca9bdaa1d050b8b026809f43f3de3cf4b2
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 18 23:36:11 2020 +0800

    mptcp: create the listening socket for new port

    This patch created a listening socket when an address with a port-number
    is added by PM netlink. Then binded the new port to the socket, and
    listened for the connection.

    When the address is removed or the addresses are flushed by PM netlink,
    release the listening socket.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 497a817d7d99b3463fc347cdafc03b843a573662
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Dec 16 17:16:54 2020 +0800

    selftests: mptcp: add testcases for newly added addresses

    This patch added the testcases to create subflows or signal addresses
    for the newly added IPv4 or IPv6 addresses.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit c56c8d8024cc3eac386f5350d0b141ee99e49e0f
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Fri Dec 18 20:52:55 2020 +0800

    selftests: mptcp: use minus values for removing address numbers

    This patch changed the removing addresses numbers to minus values, left the
    plus values for the adding addresses numbers.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 659881b8bd01a9e1d42490734cc9eaec82c08c89
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 14:20:01 2020 +0800

    mptcp: create subflow or signal addr for newly added address

    Currently, when a new MPTCP endpoint is added, the existing MPTCP sockets
    are not affected.

    This patch implemented a new function mptcp_nl_add_subflow_or_signal_addr,
    invoked when an address is added from PM netlink. This function traversed
    the MPTCP sockets list and invoked mptcp_pm_create_subflow_or_signal_addr
    to try to create a subflow or signal an address for the newly added
    address, if local constraint allows that.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit b3c73cf0d34a4ff9479aadb763d5bfc71cc10b61
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Thu Dec 24 14:15:25 2020 +0800

    mptcp: drop *_max fields in mptcp_pm_data

    This patch dropped the per-msk values add_addr_signal_max,
    add_addr_accept_max, local_addr_max and subflows_max fields in struct
    mptcp_pm_data, used the pernet *_max values instead. And added four new
    helpers to get the pernet *_max values separately.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 934040e9277a1ae32db383c43726fd057c7c46f3
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Wed Jan 6 12:12:05 2021 +0800

    mptcp: use WRITE_ONCE/READ_ONCE for the pernet *_max

    This patch used WRITE_ONCE() and READ_ONCE for all the pernet
    add_addr_signal_max, add_addr_accept_max, local_addr_max and
    subflows_max fields in struct pm_nl_pernet.

    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 371bf6fd38a7c286e3c7459b33283e87ea69ba3f
Author: Geliang Tang <geliangtang@gmail.com>
Date:   Sat Dec 19 14:07:00 2020 +0100

    selftests: mptcp: add IPv4-mapped IPv6 testcases

    Here, we make sure we support IPv4-mapped in IPv6 addresses in different
    contexts:

    - a v4-mapped address is received by the PM and can be used as v4.
    - a v4 address is received by the PM and can be used even with a v4
      mapped socket.

    We also make sure we don't try to establish subflows between v4 and v6
    addresses, e.g. if a real v6 address ends with a valid v4 address.

    Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Signed-off-by: Geliang Tang <geliangtang@gmail.com>

commit 7f61fc1295b2b9f445a96d351fb55e25e21247ae
Author: Matthieu Baerts <matthieu.baerts@tessares.net>
Date:   Sat Dec 19 14:06:59 2020 +0100

    mptcp: pm nl: support IPv4 mapped in v6 addresses

    On one side, we can allow the creation of subflows between v4 mapped in
    v6 and v4 addresses. For that we look for v4mapped addresses between the
    local address we want to select and the remote one.

    On the other side, we also properly deal with received v4mapped
    addresses, either announced ones or set via Netlink.

    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/122
    Co-developed-by: Geliang Tang <geliangtang@gmail.com>
    Signed-off-by: Geliang Tang <geliangtang@gmail.com>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>

commit ef6cb8147e67a980ea2f3b2c7e792d495cb7889f
Author: Matthieu Baerts <matthieu.baerts@tessares.net>
Date:   Sat Dec 19 14:06:58 2020 +0100

    mptcp: support MPJoin with IPv4 mapped in v6 sk

    With an IPv4 mapped in v6 socket, we were trying to call inet6_bind()
    with an IPv4 address resulting in a -EINVAL error because the given
    addr_len -- size of the address structure -- was too short.

    We now make sure to use address structures for the same family as the
    MPTCP socket for both the bind() and the connect(). It means we convert
    v4 addresses to v4 mapped in v6 or the opposite if needed.

    Fixes: ec3edaa7ca6c ("mptcp: Add handling of outgoing MP_JOIN requests")
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/122
    Co-developed-by: Geliang Tang <geliangtang@gmail.com>
    Signed-off-by: Geliang Tang <geliangtang@gmail.com>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>

(export/20210108T061525)
commit a87127862c21202b8b464ae55397e607ba74a748
Author: Matthieu Baerts <matthieu.baerts@tessares.net>
Date:   Fri Jan 8 06:15:40 2021 +0000

    DO-NOT-MERGE: mptcp: enabled by default

    This commit is useful for automated builds, e.g. from Intel's kbuild.

    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>

---

The first three patches (IPv4mapped patchset) should be sent by Matt, I
only added them in the attachment.

Thanks.

-Geliang


>
> Mat
>
>
> > Signed-off-by: Geliang Tang <geliangtang@gmail.com>
> > ---
> > .../testing/selftests/net/mptcp/mptcp_join.sh | 1068 +++++++++--------
> > 1 file changed, 590 insertions(+), 478 deletions(-)
> >
> > diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> > index f32fa18b4695..540d98243a1e 100755
> > --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
> > +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
> > @@ -680,6 +680,551 @@ chk_prio_nr()
> >       fi
> > }
> >
> > +subflows_tests()
> > +{
> > +     reset
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "no JOIN" "0" "0" "0"
> > +
> > +     # subflow limited by client
> > +     reset
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "single subflow, limited by client" 0 0 0
> > +
> > +     # subflow limited by server
> > +     reset
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "single subflow, limited by server" 1 1 0
> > +
> > +     # subflow
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "single subflow" 1 1 1
> > +
> > +     # multiple subflows
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "multiple subflows" 2 2 2
> > +
> > +     # multiple subflows limited by serverf
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "multiple subflows, limited by server" 2 2 1
> > +}
> > +
> > +signal_address_tests()
> > +{
> > +     # add_address, unused
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "unused signal address" 0 0 0
> > +     chk_add_nr 1 1
> > +
> > +     # accept and use add_addr
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "signal address" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # accept and use add_addr with an additional subflow
> > +     # note: signal address in server ns and local addresses in client ns must
> > +     # belong to different subnets or one of the listed local address could be
> > +     # used for 'add_addr' subflow
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "subflow and signal" 2 2 2
> > +     chk_add_nr 1 1
> > +
> > +     # accept and use add_addr with additional subflows
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "multiple subflows and signal" 3 3 3
> > +     chk_add_nr 1 1
> > +}
> > +
> > +link_failure_tests()
> > +{
> > +     # accept and use add_addr with additional subflows and link loss
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 1
> > +     chk_join_nr "multiple flows, signal, link failure" 3 3 3
> > +     chk_add_nr 1 1
> > +}
> > +
> > +add_addr_timeout_tests()
> > +{
> > +     # add_addr timeout
> > +     reset_with_add_addr_timeout
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > +     chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1
> > +     chk_add_nr 4 0
> > +
> > +     # add_addr timeout IPv6
> > +     reset_with_add_addr_timeout 6
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > +     chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1
> > +     chk_add_nr 4 0
> > +}
> > +
> > +remove_tests()
> > +{
> > +     # single subflow, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow
> > +     chk_join_nr "remove single subflow" 1 1 1
> > +     chk_rm_nr 1 1
> > +
> > +     # multiple subflows, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow
> > +     chk_join_nr "remove multiple subflows" 2 2 2
> > +     chk_rm_nr 2 2
> > +
> > +     # single address, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow
> > +     chk_join_nr "remove single address" 1 1 1
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 0 0
> > +
> > +     # subflow and signal, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow
> > +     chk_join_nr "remove subflow and signal" 2 2 2
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 1 1
> > +
> > +     # subflows and signal, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow
> > +     chk_join_nr "remove subflows and signal" 3 3 3
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 2 2
> > +
> > +     # subflows and signal, flush
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
> > +     chk_join_nr "flush subflows and signal" 3 3 3
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 2 2
> > +}
> > +
> > +add_tests()
> > +{
> > +     # add single subflow
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow
> > +     chk_join_nr "add single subflow" 1 1 1
> > +
> > +     # add signal address
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow
> > +     chk_join_nr "add signal address" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # add multiple subflows
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow
> > +     chk_join_nr "add multiple subflows" 2 2 2
> > +
> > +     # add multiple subflows IPv6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow
> > +     chk_join_nr "add multiple subflows IPv6" 2 2 2
> > +
> > +     # add multiple addresses IPv6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 2 2
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow
> > +     chk_join_nr "add multiple addresses IPv6" 2 2 2
> > +     chk_add_nr 2 2
> > +}
> > +
> > +ipv6_tests()
> > +{
> > +     # subflow IPv6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > +     chk_join_nr "single subflow IPv6" 1 1 1
> > +
> > +     # add_address, unused IPv6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > +     chk_join_nr "unused signal address IPv6" 0 0 0
> > +     chk_add_nr 1 1
> > +
> > +     # signal address IPv6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > +     chk_join_nr "single address IPv6" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # single address IPv6, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow
> > +     chk_join_nr "remove single address IPv6" 1 1 1
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 0 0
> > +
> > +     # subflow and signal IPv6, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow
> > +     chk_join_nr "remove subflow and signal IPv6" 2 2 2
> > +     chk_add_nr 1 1
> > +     chk_rm_nr 1 1
> > +}
> > +
> > +v4mapped_tests()
> > +{
> > +     # subflow IPv4-mapped to IPv4-mapped
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
> > +     run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > +     chk_join_nr "single subflow IPv4-mapped" 1 1 1
> > +
> > +     # signal address IPv4-mapped with IPv4-mapped sk
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
> > +     run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > +     chk_join_nr "signal address IPv4-mapped" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # subflow v4-map-v6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > +     chk_join_nr "single subflow v4-map-v6" 1 1 1
> > +
> > +     # signal address v4-map-v6
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > +     chk_join_nr "signal address v4-map-v6" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # subflow v6-map-v4
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "single subflow v6-map-v4" 1 1 1
> > +
> > +     # signal address v6-map-v4
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "signal address v6-map-v4" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # no subflow fake IPv4-mapped
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > +     chk_join_nr "no JOIN with fake IPv4-mapped" 0 0 0
> > +
> > +     # no subflow IPv6 to v4 address
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > +     chk_join_nr "no JOIN with diff families v4-v6" 0 0 0
> > +
> > +     # no subflow IPv4 to v6 address
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > +     chk_join_nr "no JOIN with diff families v6-v4" 0 0 0
> > +}
> > +
> > +backup_tests()
> > +{
> > +     # single subflow, backup
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,backup
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup
> > +     chk_join_nr "single subflow, backup" 1 1 1
> > +     chk_prio_nr 0 1
> > +
> > +     # single address, backup
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
> > +     chk_join_nr "single address, backup" 1 1 1
> > +     chk_add_nr 1 1
> > +     chk_prio_nr 1 0
> > +}
> > +
> > +add_addr_ports_tests()
> > +{
> > +     # signal address with port
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     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 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags 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 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 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 0 0
> > +
> > +     # subflow and signal with port, remove
> > +     reset
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags 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 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags 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 ./pm_nl_ctl limits 2 2
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10100
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 2 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 ./pm_nl_ctl limits 2 2
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10101
> > +     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
> > +}
> > +
> > +syncookies_tests()
> > +{
> > +     # single subflow, syncookies
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "single subflow with syn cookies" 1 1 1
> > +
> > +     # multiple subflows with syn cookies
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "multiple subflows with syn cookies" 2 2 2
> > +
> > +     # multiple subflows limited by server
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "subflows limited by server w cookies" 2 2 1
> > +
> > +     # test signal address with cookies
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "signal address with syn cookies" 1 1 1
> > +     chk_add_nr 1 1
> > +
> > +     # test cookie with subflow and signal
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "subflow and signal w cookies" 2 2 2
> > +     chk_add_nr 1 1
> > +
> > +     # accept and use add_addr with additional subflows
> > +     reset_with_cookies
> > +     ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > +     ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > +     ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > +     ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > +     run_tests $ns1 $ns2 10.0.1.1
> > +     chk_join_nr "subflows and signal w. cookies" 3 3 3
> > +     chk_add_nr 1 1
> > +}
> > +
> > +all_tests()
> > +{
> > +     subflows_tests
> > +     signal_address_tests
> > +     link_failure_tests
> > +     add_addr_timeout_tests
> > +     remove_tests
> > +     add_tests
> > +     ipv6_tests
> > +     v4mapped_tests
> > +     backup_tests
> > +     add_addr_ports_tests
> > +     syncookies_tests
> > +}
> > +
> > +usage()
> > +{
> > +     echo "mptcp_join usage:"
> > +     echo "  -f subflows_tests"
> > +     echo "  -s signal_address_tests"
> > +     echo "  -l link_failure_tests"
> > +     echo "  -t add_addr_timeout_tests"
> > +     echo "  -r remove_tests"
> > +     echo "  -a add_tests"
> > +     echo "  -6 ipv6_tests"
> > +     echo "  -4 v4mapped_tests"
> > +     echo "  -b backup_tests"
> > +     echo "  -p add_addr_ports_tests"
> > +     echo "  -c syncookies_tests"
> > +     echo "  -h help"
> > +}
> > +
> > sin=$(mktemp)
> > sout=$(mktemp)
> > cin=$(mktemp)
> > @@ -690,483 +1235,50 @@ make_file "$cin" "client" 1
> > make_file "$sin" "server" 1
> > trap cleanup EXIT
> >
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "no JOIN" "0" "0" "0"
> > -
> > -# subflow limted by client
> > -reset
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "single subflow, limited by client" 0 0 0
> > -
> > -# subflow limted by server
> > -reset
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "single subflow, limited by server" 1 1 0
> > -
> > -# subflow
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "single subflow" 1 1 1
> > -
> > -# multiple subflows
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "multiple subflows" 2 2 2
> > -
> > -# multiple subflows limited by serverf
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "multiple subflows, limited by server" 2 2 1
> > -
> > -# add_address, unused
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "unused signal address" 0 0 0
> > -chk_add_nr 1 1
> > -
> > -# accept and use add_addr
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "signal address" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# accept and use add_addr with an additional subflow
> > -# note: signal address in server ns and local addresses in client ns must
> > -# belong to different subnets or one of the listed local address could be
> > -# used for 'add_addr' subflow
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "subflow and signal" 2 2 2
> > -chk_add_nr 1 1
> > -
> > -# accept and use add_addr with additional subflows
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "multiple subflows and signal" 3 3 3
> > -chk_add_nr 1 1
> > -
> > -# accept and use add_addr with additional subflows and link loss
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 1
> > -chk_join_nr "multiple flows, signal, link failure" 3 3 3
> > -chk_add_nr 1 1
> > -
> > -# add_addr timeout
> > -reset_with_add_addr_timeout
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > -chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1
> > -chk_add_nr 4 0
> > -
> > -# single subflow, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 -1 slow
> > -chk_join_nr "remove single subflow" 1 1 1
> > -chk_rm_nr 1 1
> > -
> > -# multiple subflows, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 -2 slow
> > -chk_join_nr "remove multiple subflows" 2 2 2
> > -chk_rm_nr 2 2
> > -
> > -# single address, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -run_tests $ns1 $ns2 10.0.1.1 0 -1 0 slow
> > -chk_join_nr "remove single address" 1 1 1
> > -chk_add_nr 1 1
> > -chk_rm_nr 0 0
> > -
> > -# subflow and signal, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 -1 -1 slow
> > -chk_join_nr "remove subflow and signal" 2 2 2
> > -chk_add_nr 1 1
> > -chk_rm_nr 1 1
> > -
> > -# subflows and signal, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 -1 -2 slow
> > -chk_join_nr "remove subflows and signal" 3 3 3
> > -chk_add_nr 1 1
> > -chk_rm_nr 2 2
> > -
> > -# subflows and signal, flush
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
> > -chk_join_nr "flush subflows and signal" 3 3 3
> > -chk_add_nr 1 1
> > -chk_rm_nr 2 2
> > -
> > -# add single subflow
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 1 slow
> > -chk_join_nr "add single subflow" 1 1 1
> > -
> > -# add signal address
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -run_tests $ns1 $ns2 10.0.1.1 0 1 0 slow
> > -chk_join_nr "add signal address" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# add multiple subflows
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 2 slow
> > -chk_join_nr "add multiple subflows" 2 2 2
> > -
> > -# add multiple subflows IPv6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 2 slow
> > -chk_join_nr "add multiple subflows IPv6" 2 2 2
> > -
> > -# add multiple addresses IPv6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 2 2
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow
> > -chk_join_nr "add multiple addresses IPv6" 2 2 2
> > -chk_add_nr 2 2
> > -
> > -# subflow IPv6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > -chk_join_nr "single subflow IPv6" 1 1 1
> > -
> > -# add_address, unused IPv6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > -chk_join_nr "unused signal address IPv6" 0 0 0
> > -chk_add_nr 1 1
> > -
> > -# signal address IPv6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > -chk_join_nr "single address IPv6" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# add_addr timeout IPv6
> > -reset_with_add_addr_timeout 6
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > -chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1
> > -chk_add_nr 4 0
> > -
> > -# single address IPv6, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 -1 0 slow
> > -chk_join_nr "remove single address IPv6" 1 1 1
> > -chk_add_nr 1 1
> > -chk_rm_nr 0 0
> > -
> > -# subflow and signal IPv6, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow
> > -chk_join_nr "remove subflow and signal IPv6" 2 2 2
> > -chk_add_nr 1 1
> > -chk_rm_nr 1 1
> > -
> > -# subflow IPv4-mapped to IPv4-mapped
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
> > -run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > -chk_join_nr "single subflow IPv4-mapped" 1 1 1
> > -
> > -# signal address IPv4-mapped with IPv4-mapped sk
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
> > -run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > -chk_join_nr "signal address IPv4-mapped" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# subflow v4-map-v6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > -chk_join_nr "single subflow v4-map-v6" 1 1 1
> > -
> > -# signal address v4-map-v6
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -run_tests $ns1 $ns2 "::ffff:10.0.1.1"
> > -chk_join_nr "signal address v4-map-v6" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# subflow v6-map-v4
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "single subflow v6-map-v4" 1 1 1
> > -
> > -# signal address v6-map-v4
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "signal address v6-map-v4" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# no subflow fake IPv4-mapped
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > -chk_join_nr "no JOIN with fake IPv4-mapped" 0 0 0
> > -
> > -# no subflow IPv6 to v4 address
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
> > -chk_join_nr "no JOIN with diff families v4-v6" 0 0 0
> > -
> > -# no subflow IPv4 to v6 address
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
> > -chk_join_nr "no JOIN with diff families v6-v4" 0 0 0
> > -
> > -# single subflow, backup
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow,backup
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow nobackup
> > -chk_join_nr "single subflow, backup" 1 1 1
> > -chk_prio_nr 0 1
> > -
> > -# single address, backup
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
> > -chk_join_nr "single address, backup" 1 1 1
> > -chk_add_nr 1 1
> > -chk_prio_nr 1 0
> > -
> > -# signal address with port
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -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 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags 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 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 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 0 0
> > -
> > -# subflow and signal with port, remove
> > -reset
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags 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 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags 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 ./pm_nl_ctl limits 2 2
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10100
> > -ip netns exec $ns2 ./pm_nl_ctl limits 2 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 ./pm_nl_ctl limits 2 2
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.3.1 flags signal port 10101
> > -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
> > -
> > -# single subflow, syncookies
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "single subflow with syn cookies" 1 1 1
> > -
> > -# multiple subflows with syn cookies
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "multiple subflows with syn cookies" 2 2 2
> > -
> > -# multiple subflows limited by server
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "subflows limited by server w cookies" 2 2 1
> > -
> > -# test signal address with cookies
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 1
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 1
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "signal address with syn cookies" 1 1 1
> > -chk_add_nr 1 1
> > -
> > -# test cookie with subflow and signal
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 2
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 2
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "subflow and signal w cookies" 2 2 2
> > -chk_add_nr 1 1
> > -
> > -# accept and use add_addr with additional subflows
> > -reset_with_cookies
> > -ip netns exec $ns1 ./pm_nl_ctl limits 0 3
> > -ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
> > -ip netns exec $ns2 ./pm_nl_ctl limits 1 3
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
> > -ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
> > -run_tests $ns1 $ns2 10.0.1.1
> > -chk_join_nr "subflows and signal w. cookies" 3 3 3
> > -chk_add_nr 1 1
> > +if [ -z $1 ]; then
> > +     all_tests
> > +     exit $ret
> > +fi
> > +
> > +while getopts 'fsltra64bpch' opt; do
> > +     case $opt in
> > +             f)
> > +                     subflows_tests
> > +                     ;;
> > +             s)
> > +                     signal_address_tests
> > +                     ;;
> > +             l)
> > +                     link_failure_tests
> > +                     ;;
> > +             t)
> > +                     add_addr_timeout_tests
> > +                     ;;
> > +             r)
> > +                     remove_tests
> > +                     ;;
> > +             a)
> > +                     add_tests
> > +                     ;;
> > +             6)
> > +                     ipv6_tests
> > +                     ;;
> > +             4)
> > +                     v4mapped_tests
> > +                     ;;
> > +             b)
> > +                     backup_tests
> > +                     ;;
> > +             p)
> > +                     add_addr_ports_tests
> > +                     ;;
> > +             c)
> > +                     syncookies_tests
> > +                     ;;
> > +             h | *)
> > +                     usage
> > +                     ;;
> > +     esac
> > +done
> >
> > exit $ret
> > --
> > 2.29.2
> > _______________________________________________
> > mptcp mailing list -- mptcp@lists.01.org
> > To unsubscribe send an email to mptcp-leave@lists.01.org
> >
>
> --
> Mat Martineau
> Intel

Comments

Mat Martineau Jan. 11, 2021, 11:44 p.m. UTC | #1
On Sat, 9 Jan 2021, Geliang Tang wrote:

> Hi Mat,
>
> Mat Martineau <mathew.j.martineau@linux.intel.com> 于2021年1月9日周六 上午9:25写道:
>>
>>
>> On Tue, 5 Jan 2021, Geliang Tang wrote:
>>
>>> Since the mptcp_join script is becoming too big, this patch split it into
>>> several smaller trunks, each of them has been defined in a function as a
>>> individual test group for several related testcases.
>>>
>>> Using bash getopts function to parse command line arguments, and involk
>>> each function to do the individual test group.
>>>
>>> Here are all the arguments:
>>>  -f subflows_tests
>>>  -s signal_address_tests
>>>  -l link_failure_tests
>>>  -t add_addr_timeout_tests
>>>  -r remove_tests
>>>  -a add_tests
>>>  -6 ipv6_tests
>>>  -4 v4mapped_tests
>>>  -b backup_tests
>>>  -p add_addr_ports_tests
>>>  -c syncookies_tests
>>>  -h help
>>>
>>> Run mptcp_join.sh with no argument will do all the testcases.
>>>
>>
>> This seems like a good idea to me, but what patchset(s) do I need to apply
>> first?
>>
>
> Sorry, here is the commit log with all my patches against
> export/20210108T061525:
>
> ---
>
> commit 25b58355f5ad79c2a623179060730b6b77d53cb2
> Author: Geliang Tang <geliangtang@gmail.com>
> Date:   Fri Dec 25 14:16:19 2020 +0800
>

...

>


Hi Geliang -

I tried to reproduce the history you listed, and 'git am' still gets stuck 
based on the most recent patch series in patchwork. I resolved one minor 
conflict (just context) in "mptcp: drop *_max fields in mptcp_pm_data", 
and then "ADD_ADDR: ports support" series applied ok.

But then this patch ("selftests: mptcp: add command line arguments for 
mptcp_join.sh") failed, and at this point I would just prefer to have all 
these series reposted on the mailing list so we know they apply cleanly:

v5  - mptcp: create subflow for newly added address and testcases
v10 - ADD_ADDR: ports support (also include the minor fix requested)
v2  - selftests: mptcp: add command line arguments for mptcp_join.sh
v2  - add add_addr_urgent


I apply each series to a local git workspace before reviewing so I can see 
the changes in context with all the other code, and to be able to build 
and test. I'll continue reviewing when everything easily applies - and 
that way everything will be ready for the topgit tree too.


> The first three patches (IPv4mapped patchset) should be sent by Matt, I
> only added them in the attachment.

Based on the conflict I found, it seems like there are local changes that 
aren't part of the posted v4 for that IPv4mapped patch set.


Thanks!

--
Mat Martineau
Intel
diff mbox series

Patch

From b770cc415024f0abd6514b90ce338060cc3cb8bf Mon Sep 17 00:00:00 2001
From: Geliang Tang <geliangtang@gmail.com>
Date: Sat, 19 Dec 2020 14:07:00 +0100
Subject: [PATCH 03/27] selftests: mptcp: add IPv4-mapped IPv6 testcases

Here, we make sure we support IPv4-mapped in IPv6 addresses in different
contexts:

- a v4-mapped address is received by the PM and can be used as v4.
- a v4 address is received by the PM and can be used even with a v4
  mapped socket.

We also make sure we don't try to establish subflows between v4 and v6
addresses, e.g. if a real v6 address ends with a valid v4 address.

Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
 .../testing/selftests/net/mptcp/mptcp_join.sh | 75 +++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index f74cd993b168..8d20a8a81128 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -790,6 +790,81 @@  chk_join_nr "remove subflow and signal IPv6" 2 2 2
 chk_add_nr 1 1
 chk_rm_nr 1 1
 
+# subflow IPv4-mapped to IPv4-mapped
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
+run_tests $ns1 $ns2 "::ffff:10.0.1.1"
+chk_join_nr "single subflow IPv4-mapped" 1 1 1
+
+# signal address IPv4-mapped with IPv4-mapped sk
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 1 1
+ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
+run_tests $ns1 $ns2 "::ffff:10.0.1.1"
+chk_join_nr "signal address IPv4-mapped" 1 1 1
+chk_add_nr 1 1
+
+# subflow v4-map-v6
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
+run_tests $ns1 $ns2 "::ffff:10.0.1.1"
+chk_join_nr "single subflow v4-map-v6" 1 1 1
+
+# signal address v4-map-v6
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 1 1
+ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
+run_tests $ns1 $ns2 "::ffff:10.0.1.1"
+chk_join_nr "signal address v4-map-v6" 1 1 1
+chk_add_nr 1 1
+
+# subflow v6-map-v4
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add "::ffff:10.0.3.2" flags subflow
+run_tests $ns1 $ns2 10.0.1.1
+chk_join_nr "single subflow v6-map-v4" 1 1 1
+
+# signal address v6-map-v4
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 1 1
+ip netns exec $ns1 ./pm_nl_ctl add "::ffff:10.0.2.1" flags signal
+run_tests $ns1 $ns2 10.0.1.1
+chk_join_nr "signal address v6-map-v4" 1 1 1
+chk_add_nr 1 1
+
+# no subflow fake IPv4-mapped
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add dead:beef:2::10.0.3.2 flags subflow
+run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+chk_join_nr "no JOIN with fake IPv4-mapped" 0 0 0
+
+# no subflow IPv6 to v4 address
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add dead:beef:3::2 flags subflow
+run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
+chk_join_nr "no JOIN with diff families v4-v6" 0 0 0
+
+# no subflow IPv4 to v6 address
+reset
+ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl limits 0 1
+ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
+run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
+chk_join_nr "no JOIN with diff families v6-v4" 0 0 0
+
 # single subflow, backup
 reset
 ip netns exec $ns1 ./pm_nl_ctl limits 0 1
-- 
2.29.2