forked from Minki/linux
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: 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>
This commit is contained in:
parent
5c8c164095
commit
1315332409
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user