[Weekly meetings] MoM - 28th of March 2019
by Matthieu Baerts
Hello,
We just had our 44th meeting with Mat, Peter and Ossama (Intel OTC),
Florian, Paolo and Davide (Red Hat) and myself (Tessares).
Thanks again for this new good meeting!
Here are the minutes of the meeting:
Feedback from Netdev:
- Eric:
- is very happy to see that ULP is used to control the subflows!
- would be happy to comment on the architecture, we can even
send an email to him directly if we prefer. He can give his
recommendations, even if it is not working or important pieces are
missing (MP_JOIN)
- do we need to support the fact that the client (initiating the
connection) can support new subflows initiated by the server?
- no: should never been needed as many clients are being a NAT
(don't say IPv6! For more jokes:
https://www.netdevconf.org/0x13/session.html?talk-ipv4-unicast-expansions)
- Hoang has a proto to have a PM controlled by BPF
- Florian got positive feedbacks:
https://www.netdevconf.org/0x13/session.html?skb-meta-data-extensions
- (I forgot to ask: will they look at that for kTLS?)
Mat & Peter's patch-set:
- new version sent by Mat addressing comments shared on Gerrit
- Davide found issues when compiling without CONFIG_MPTCP
- Mat is fixing these issues.
- And combining that with what Peter is doing.
- Peter: ULP update 3/4 done, hoping to finish soon (maybe end of
Peter's week) and share the implementation
- MP_JOIN: the idea is first to have the support on the server side.
For the client, we can use mptcp.org implementation.
- seems still important to have that for the first submission to netdev.
- Once ULP is there, we can send this version to Eric for him to
look at.
- Then we can see his reaction, implement the MP_JOIN part and send
that to netdev.
- We don't have to wait for the client implementation to start
testing with only the "upstream" version: we can use Packetdrill for
that (TBC).
- once ULP is done, can we merge in our repo, hoping it will help
ease other contributions to the code in parallel and ease maintenance
for Mat & Peter.
Wiki:
- https://github.com/multipath-tcp/mptcp_net-next/wiki/Status
- has just been updated by Mat: outgoing/future/previous work has
been updated
- don't hesitate to comment on that!
mptcp.org:
- new fixes from Christoph (found with syzkaller)
Ossama:
- released the alpha for the Uspace PM (daemon)
- it is currently implementing the "first version" of kernel netlink
path-manager (Intel proposition from last year)
- next step: support the netlink version from mptcp.org (mptcp_trunk
branch)
- Available: https://github.com/intel/mptcpd
- Don't hesitate to like it ;-)
Next meeting:
- We propose to have it next Thursday, the 4th of April.
- *Back to the usual time* if you are in Europe: 16:00 UTC (9am
PDT, 6pm CEST)
- Still open to everyone!
- https://annuel2.framapad.org/p/mptcp_upstreaming_20190404
Feel free to comment on these points and propose new ones for the next
meeting!
Talk to you next week,
Matthieu
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
1 year, 9 months
Re: [MPTCP] [mptcp-dev] [PATCH] mptcp: fix typo in mptcp_options_write() stub
by Matthieu Baerts
On Wed, Mar 27, 2019 at 4:44 PM Davide Caratti <dcaratti(a)redhat.com> wrote:
>
> On Wed, 2019-03-27 at 15:20 +0100, Matthieu Baerts wrote:
> > Hi Davide,
> >
> > On Wed, Mar 27, 2019 at 2:59 PM Davide Caratti <dcaratti(a)redhat.com> wrote:
> > > it causes build errors when CONFIG_MPTCP is unset
> >
> > Thank you for the patch.
> > But I think you sent it to the wrong ML: mptcp-dev(a)listes.uclouvain.be
> > (current implementation) vs mptcp(a)lists.01.org (upstream project, now
> > in cc).
>
> woops. sorry for the noise.
>
> > Because what you want to fix has not been merged yet, feel free to
> > directly report this typo there:
> > https://review.gerrithub.io/c/multipath-tcp/mptcp_net-next/+/437402/9/inc...
> > ;-)
>
> ... and thanks for the guidance :)
You are welcome!
> I think the current review status includes all the build errors I'm
> getting now (and I see yesterday Mat already spotted the one in
> tcp_output.c (
> https://review.gerrithub.io/c/multipath-tcp/mptcp_net-next/+/437391/9 )
Thank you for having tested this case!
> Last time I worked with gerrit, years ago, we used to put negative reviews
> when we encountered build issues and known bugs - hence my '-1' to the
> above patchsets. Is that correct?
That looks correct to me!
Cheers,
Matt
> TIA,
> --
> davide
>
>
>
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
Disclaimer: https://www.tessares.net/mail-disclaimer/
1 year, 10 months
Re: [MPTCP] [mptcp-dev] [PATCH] mptcp: fix typo in mptcp_options_write() stub
by Matthieu Baerts
Hi Davide,
On Wed, Mar 27, 2019 at 2:59 PM Davide Caratti <dcaratti(a)redhat.com> wrote:
>
> it causes build errors when CONFIG_MPTCP is unset
Thank you for the patch.
But I think you sent it to the wrong ML: mptcp-dev(a)listes.uclouvain.be
(current implementation) vs mptcp(a)lists.01.org (upstream project, now
in cc).
Because what you want to fix has not been merged yet, feel free to
directly report this typo there:
https://review.gerrithub.io/c/multipath-tcp/mptcp_net-next/+/437402/9/inc...
;-)
Cheers,
Matt
>
> Signed-off-by: Davide Caratti <dcaratti(a)redhat.com>
> ---
> include/net/mptcp.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/net/mptcp.h b/include/net/mptcp.h
> index 9d38b191c97a..8b34ae46a075 100644
> --- a/include/net/mptcp.h
> +++ b/include/net/mptcp.h
> @@ -249,7 +249,7 @@ static inline bool mptcp_skb_ext_exist(const struct sk_buff *skb)
>
> static void mptcp_options_write(__be32 *ptr, struct sk_buff *skb,
> struct tcp_sock *tp,
> - struct tmpcp_out_options *opts)
> + struct mptcp_out_options *opts)
> {
> }
>
> --
> 2.20.1
>
> MPTCP-developpers Mailing-List
> Visit http://multipath-tcp.org to access the source-code of MPTCP in the Linux Kernel
>
> To Unsubscribe, visit https://listes-2.sipr.ucl.ac.be/sympa/info/mptcp-dev
>
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
1 year, 10 months
Change in ...mptcp_net-next[t/upstream]: selftest: mptcp: explicitly check for any kind of tcp-like socket pairs
by Mat Martineau (GerritHub)
Mat Martineau has uploaded this change for review. ( https://review.gerrithub.io/c/multipath-tcp/mptcp_net-next/+/448886
Change subject: selftest: mptcp: explicitly check for any kind of tcp-like socket pairs
......................................................................
selftest: mptcp: explicitly check for any kind of tcp-like socket pairs
This expands a bit the existing tests checking for any {[mp]tcp,subflow}
<->{[mp]tcp,subflow} pairs.
Moving most of the logic to the shell script we can simplify a bit the
test program.
This change also cleans a bit the tests script output.
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Change-Id: I97e29ccff0dab592b31f8ce253c5c467654ab68c
---
M tools/testing/selftests/net/mptcp/mptcp_connect.c
M tools/testing/selftests/net/mptcp/mptcp_connect.sh
2 files changed, 91 insertions(+), 80 deletions(-)
git pull ssh://review.gerrithub.io:29418/multipath-tcp/mptcp_net-next refs/changes/86/448886/1
--
To view, visit https://review.gerrithub.io/c/multipath-tcp/mptcp_net-next/+/448886
To unsubscribe, or for help writing mail filters, visit https://review.gerrithub.io/settings
Gerrit-Project: multipath-tcp/mptcp_net-next
Gerrit-Branch: t/upstream
Gerrit-Change-Id: I97e29ccff0dab592b31f8ce253c5c467654ab68c
Gerrit-Change-Number: 448886
Gerrit-PatchSet: 1
Gerrit-Owner: Mat Martineau <mathew.j.martineau(a)linux.intel.com>
Gerrit-MessageType: newchange
1 year, 10 months
[Weekly meetings] MoM - 14th of March 2019
by Matthieu Baerts
Hello,
We just had our 43th meeting with Mat, Peter and Ossama (Intel OTC),
Christoph (Apple), Paolo and Davide (Red Hat) and myself (Tessares).
Thanks again for this new good meeting!
Here are the minutes of the meeting:
multipath-tcp.org:
- new fixes have been merged (by Christoph and Benjamin)
- new sync with upstream v4.14 and v4.9 stable
- new releases:
- https://github.com/multipath-tcp/mptcp/releases/tag/v0.94.3
- https://github.com/multipath-tcp/mptcp/releases/tag/v0.93.4
RFC6824bis:
- Christoph just got the approval to publish modifications to
support this v1 in mptcp_trunk
- should be safe in term of patent (see previous meetings about that)
- Mat will consult with someone regarding patent-related issues
More selftests by Paolo:
- https://lists.01.org/pipermail/mptcp/2019-March/001028.html
- changes on top of Florian's tests
- This expands a bit the existing tests checking for any
{[mp]tcp,subflow} <->{[mp]tcp,subflow} pairs.
- Mat: will add this on top of the current patch-set in review
Questions about the code and where to ask them:
- Gerrithub is ideal if the code is in review but email is fine if
Gerrithub is not possible for you
- if you have an account, feel free to share it with Matth to add it
in the dev group (ability to give +2 but also to be able to add
everybody in cc)
Mat:
- working on the wiki to improve the doc (update)
- will send a notification when it is ready
Next meeting:
- We propose *NOT* to have it next week due to Netdev 0x13 but the
*week after*, on Thursday, the 28th of March.
- Still *NOT* the usual time if you are in Europe: 16:00 UTC (9am
PDT, 5pm CET)
- Still open to everyone!
- https://annuel2.framapad.org/p/mptcp_upstreaming_20190328
Feel free to comment on these points and propose new ones for the next
meeting!
Talk to you next week,
Matthieu
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
1 year, 10 months
[PATCH net-next] selftest: mptcp: explicitly check for any kind of tcp-like socket pairs
by Paolo Abeni
This expands a bit the existing tests checking for any {[mp]tcp,subflow}
<->{[mp]tcp,subflow} pairs.
Moving most of the logic to the shell script we can simplify a bit the
test program.
This change also cleans a bit the tests script output.
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
---
.../selftests/net/mptcp/mptcp_connect.c | 103 ++++++++++--------
.../selftests/net/mptcp/mptcp_connect.sh | 38 +++++--
2 files changed, 90 insertions(+), 51 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/testing/selftests/net/mptcp/mptcp_connect.c
index eeaba101512b..ca5c1e6305f1 100644
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.c
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c
@@ -9,6 +9,7 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+#include <strings.h>
#include <unistd.h>
#include <sys/poll.h>
@@ -21,7 +22,7 @@
extern int optind;
-#ifndef IPPROTO_MTPCP
+#ifndef IPPROTO_MPTCP
#define IPPROTO_MPTCP 99
#endif
@@ -29,10 +30,16 @@ extern int optind;
#define IPPROTO_SUBFLOW (IPPROTO_TCP | 0x100)
#endif
-static void die_usage(int x)
+static const char *cfg_host;
+static const char *cfg_port = "12000";
+static int cfg_server_proto = IPPROTO_MPTCP;
+static int cfg_client_proto = IPPROTO_MPTCP;
+
+static void die_usage(void)
{
- fputs("Usage: mptcp_connect host port\n", x ? stderr : stdout);
- exit(x);
+ fprintf(stderr, "Usage: mptcp_connect [-c MPTCP|TCP|SUBFLOW] [-p port] "
+ "[-s MPTCP|TCP|SUBFLOW]\n");
+ exit(-1);
}
static const char *getxinfo_strerr(int err)
@@ -100,7 +107,7 @@ static int sock_listen_mptcp(const char * const listenaddr, const char * const p
xgetaddrinfo(listenaddr, port, &hints, &addr);
for (a = addr; a != NULL ; a = a->ai_next) {
- sock = socket(a->ai_family, a->ai_socktype, IPPROTO_MPTCP);
+ sock = socket(a->ai_family, a->ai_socktype, cfg_server_proto);
if (sock < 0) {
perror("socket");
continue;
@@ -230,17 +237,6 @@ int main_loop_s(int listensock)
int remotesock;
char buf[2];
- salen = sizeof(ss);
- while ((remotesock = accept(listensock, (struct sockaddr *)&ss, &salen)) < 0)
- perror("accept");
-
- logendpoint(&ss, salen);
-
- /* deal with 'bogus' client first (plain tcp, not mptcp) */
- if (read(remotesock, buf, sizeof(buf)) != 0)
- return -1;
-
- close(remotesock);
salen = sizeof(ss);
while ((remotesock = accept(listensock, (struct sockaddr *)&ss, &salen)) < 0)
perror("accept");
@@ -264,7 +260,7 @@ static void init_rng(void)
srand(foo);
}
-int main_loop(const char *host, const char *port)
+int main_loop()
{
int pollfds = 2, timeout = -1;
char start[32];
@@ -283,7 +279,7 @@ int main_loop(const char *host, const char *port)
init_rng();
- fd = sock_listen_mptcp(NULL, port);
+ fd = sock_listen_mptcp(NULL, cfg_port);
if (fd < 0)
return -1;
@@ -308,17 +304,8 @@ int main_loop(const char *host, const char *port)
if (ret != 4 || strcmp(start, "RDY\n"))
return -1;
- /* listener is ready.
- *
- * First connect with _SUBFLOW, used to trigger NULL deref in kernel.
- */
- fd = sock_connect_mptcp(host, port, IPPROTO_SUBFLOW);
- if (fd < 0)
- return -1;
-
- close(fd);
-
- fd = sock_connect_mptcp(host, port, IPPROTO_MPTCP);
+ /* listener is ready. */
+ fd = sock_connect_mptcp(cfg_host, cfg_port, cfg_client_proto);
if (fd < 0)
return -1;
@@ -362,7 +349,8 @@ int main_loop(const char *host, const char *port)
}
write(1, buf, len);
- } else if (fds[1].revents & POLLIN) {
+ }
+ if (fds[1].revents & POLLIN) {
len = read(0, buf, sizeof(buf));
if (len == 0) {
pollfds = 1;
@@ -382,22 +370,51 @@ int main_loop(const char *host, const char *port)
return 1;
}
-int main(int argc, char *argv[])
+int parse_proto(const char *proto)
{
- const char *host, *port;
+ if (!strcasecmp(proto, "MPTCP"))
+ return IPPROTO_MPTCP;
+ if (!strcasecmp(proto, "TCP"))
+ return IPPROTO_TCP;
+ if (!strcasecmp(proto, "SUBFLOW"))
+ return IPPROTO_SUBFLOW;
+ die_usage();
+
+ /* silence compiler warning */
+ return 0;
+}
- if (optind >= argc)
- die_usage(1);
+static void parse_opts(int argc, char **argv)
+{
+ int c;
+
+ while ((c = getopt(argc, argv, "c:p:s:h")) != -1) {
+ switch (c) {
+ case 'c':
+ cfg_client_proto = parse_proto(optarg);
+ break;
+ case 'p':
+ cfg_port = optarg;
+ break;
+ case 's':
+ cfg_server_proto = parse_proto(optarg);
+ break;
+ case 'h':
+ die_usage();
+ break;
+ }
+ }
+
+ if (optind + 1 != argc)
+ die_usage();
+ cfg_host = argv[optind];
+}
- init_rng();
- host = argv[optind];
- argv++;
- argc--;
- if (optind < argc)
- port = argv[optind];
- else
- port = "12000";
+int main(int argc, char *argv[])
+{
+ init_rng();
- return main_loop(host, port);
+ parse_opts(argc, argv);
+ return main_loop();
}
diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.sh b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
index 2714c8a3f837..91db1ed5ff50 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_connect.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_connect.sh
@@ -8,6 +8,28 @@ cleanup()
rm -f "$tmpin" "$tmpout"
}
+check_transfer()
+{
+ cl_proto=${1}
+ srv_proto=${2}
+
+ printf "%-8s -> %-8s socket\t\t" ${cl_proto} ${srv_proto}
+
+ ./mptcp_connect -c ${cl_proto} -p 43212 -s ${srv_proto} 127.0.0.1 < "$tmpin" > "$tmpout" 2>/dev/null
+ ret=$?
+ if [ ${ret} -ne 0 ]; then
+ echo "[ FAIL ]"
+ return " exit code $ret"
+ fi
+ cmp "$tmpin" "$tmpout" > /dev/null 2>&1
+ if [ $? -ne 0 ] ;then
+ echo "[ FAIL ]"
+ ls -l "$tmpin" "$tmpout" 1>&2
+ else
+ echo "[ OK ]"
+ fi
+}
+
trap cleanup EXIT
SIZE=$((RANDOM % (1024 * 1024)))
@@ -16,14 +38,14 @@ if [ $SIZE -eq 0 ] ; then
fi
dd if=/dev/urandom of="$tmpin" bs=1 count=$SIZE 2> /dev/null
-./mptcp_connect 127.0.0.1 43212 < "$tmpin" > "$tmpout"
-cmp "$tmpin" "$tmpout"
-if [ $? -ne 0 ] ;then
- echo "FAIL: Input and output differ" 1>&2
- ls -l "$tmpin" "$tmpout" 1>&2
- exit 1
-fi
+check_transfer MPTCP MPTCP
+check_transfer MPTCP TCP
+check_transfer TCP MPTCP
+check_transfer SUBFLOW MPTCP
+check_transfer SUBFLOW TCP
+check_transfer SUBFLOW SUBFLOW
+check_transfer MPTCP SUBFLOW
+check_transfer TCP SUBFLOW
-echo "PASS: Input of $SIZE passed though mptcp connection unchanged"
exit 0
--
2.20.1
1 year, 10 months