]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
selftests: mptcp: add remove cfg in mptcp_connect
authorGeliang Tang <geliangtang@gmail.com>
Thu, 24 Sep 2020 00:29:58 +0000 (08:29 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Sep 2020 02:58:34 +0000 (19:58 -0700)
This patch added a new cfg, named cfg_remove in mptcp_connect. This new
cfg_remove is copied from cfg_join. The only difference between them is in
the do_rnd_write function. Here we slow down the transfer process of all
data to let the RM_ADDR suboption can be sent and received completely.
Otherwise the remove address and subflow test cases don't work.

Suggested-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Suggested-by: Paolo Abeni <pabeni@redhat.com>
Suggested-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/mptcp/mptcp_connect.c

index a54966531a647953df440ce0c47ec808830e909a..77bb62feb87261c39863264696207d3ccb011bce 100644 (file)
@@ -54,6 +54,7 @@ static int pf = AF_INET;
 static int cfg_sndbuf;
 static int cfg_rcvbuf;
 static bool cfg_join;
+static bool cfg_remove;
 static int cfg_wait;
 
 static void die_usage(void)
@@ -271,6 +272,9 @@ static size_t do_rnd_write(const int fd, char *buf, const size_t len)
        if (cfg_join && first && do_w > 100)
                do_w = 100;
 
+       if (cfg_remove && do_w > 50)
+               do_w = 50;
+
        bw = write(fd, buf, do_w);
        if (bw < 0)
                perror("write");
@@ -281,6 +285,9 @@ static size_t do_rnd_write(const int fd, char *buf, const size_t len)
                first = false;
        }
 
+       if (cfg_remove)
+               usleep(200000);
+
        return bw;
 }
 
@@ -428,7 +435,7 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd)
        }
 
        /* leave some time for late join/announce */
-       if (cfg_join)
+       if (cfg_join || cfg_remove)
                usleep(cfg_wait);
 
        close(peerfd);
@@ -686,7 +693,7 @@ static void maybe_close(int fd)
 {
        unsigned int r = rand();
 
-       if (!cfg_join && (r & 1))
+       if (!(cfg_join || cfg_remove) && (r & 1))
                close(fd);
 }
 
@@ -822,13 +829,18 @@ static void parse_opts(int argc, char **argv)
 {
        int c;
 
-       while ((c = getopt(argc, argv, "6jlp:s:hut:m:S:R:w:")) != -1) {
+       while ((c = getopt(argc, argv, "6jrlp:s:hut:m:S:R:w:")) != -1) {
                switch (c) {
                case 'j':
                        cfg_join = true;
                        cfg_mode = CFG_MODE_POLL;
                        cfg_wait = 400000;
                        break;
+               case 'r':
+                       cfg_remove = true;
+                       cfg_mode = CFG_MODE_POLL;
+                       cfg_wait = 400000;
+                       break;
                case 'l':
                        listen_mode = true;
                        break;