Commit 13153324 authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller

selftests: mptcp: add remove cfg in mptcp_connect

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: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Suggested-by: default avatarPaolo Abeni <pabeni@redhat.com>
Suggested-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarGeliang Tang <geliangtang@gmail.com>
Reviewed-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5c8c1640
...@@ -54,6 +54,7 @@ static int pf = AF_INET; ...@@ -54,6 +54,7 @@ static int pf = AF_INET;
static int cfg_sndbuf; static int cfg_sndbuf;
static int cfg_rcvbuf; static int cfg_rcvbuf;
static bool cfg_join; static bool cfg_join;
static bool cfg_remove;
static int cfg_wait; static int cfg_wait;
static void die_usage(void) static void die_usage(void)
...@@ -271,6 +272,9 @@ static size_t do_rnd_write(const int fd, char *buf, const size_t len) ...@@ -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) if (cfg_join && first && do_w > 100)
do_w = 100; do_w = 100;
if (cfg_remove && do_w > 50)
do_w = 50;
bw = write(fd, buf, do_w); bw = write(fd, buf, do_w);
if (bw < 0) if (bw < 0)
perror("write"); perror("write");
...@@ -281,6 +285,9 @@ static size_t do_rnd_write(const int fd, char *buf, const size_t len) ...@@ -281,6 +285,9 @@ static size_t do_rnd_write(const int fd, char *buf, const size_t len)
first = false; first = false;
} }
if (cfg_remove)
usleep(200000);
return bw; return bw;
} }
...@@ -428,7 +435,7 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd) ...@@ -428,7 +435,7 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd)
} }
/* leave some time for late join/announce */ /* leave some time for late join/announce */
if (cfg_join) if (cfg_join || cfg_remove)
usleep(cfg_wait); usleep(cfg_wait);
close(peerfd); close(peerfd);
...@@ -686,7 +693,7 @@ static void maybe_close(int fd) ...@@ -686,7 +693,7 @@ static void maybe_close(int fd)
{ {
unsigned int r = rand(); unsigned int r = rand();
if (!cfg_join && (r & 1)) if (!(cfg_join || cfg_remove) && (r & 1))
close(fd); close(fd);
} }
...@@ -822,13 +829,18 @@ static void parse_opts(int argc, char **argv) ...@@ -822,13 +829,18 @@ static void parse_opts(int argc, char **argv)
{ {
int c; 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) { switch (c) {
case 'j': case 'j':
cfg_join = true; cfg_join = true;
cfg_mode = CFG_MODE_POLL; cfg_mode = CFG_MODE_POLL;
cfg_wait = 400000; cfg_wait = 400000;
break; break;
case 'r':
cfg_remove = true;
cfg_mode = CFG_MODE_POLL;
cfg_wait = 400000;
break;
case 'l': case 'l':
listen_mode = true; listen_mode = true;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment