* [MPTCP] [PATCH 1/2] mptcp: Parse optional port field of ADD_ADDR
@ 2020-03-20 17:51 Peter Krystad
0 siblings, 0 replies; only message in thread
From: Peter Krystad @ 2020-03-20 17:51 UTC (permalink / raw)
To: mptcp
[-- Attachment #1: Type: text/plain, Size: 1620 bytes --]
Since we allow the option lengths that include the port
field we should correctly parse the field if present.
squashto: Add ADD_ADDR handling
Signed-off-by: Peter Krystad <peter.krystad(a)linux.intel.com>
---
include/linux/tcp.h | 1 +
net/mptcp/options.c | 11 +++++++++++
2 files changed, 12 insertions(+)
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 41e5a0e3622f..1225db308957 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -109,6 +109,7 @@ struct mptcp_options_received {
#endif
};
u64 ahmac;
+ u16 port;
};
#endif
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 9b90bdc419ac..d9e0d82fd1b9 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -205,16 +205,27 @@ void mptcp_parse_option(const struct sk_buff *skb, const unsigned char *ptr,
}
mp_opt->add_addr = 1;
+ mp_opt->port = 0;
mp_opt->addr_id = *ptr++;
pr_debug("ADD_ADDR: id=%d", mp_opt->addr_id);
if (mp_opt->family == MPTCP_ADDR_IPVERSION_4) {
memcpy((u8 *)&mp_opt->addr.s_addr, (u8 *)ptr, 4);
ptr += 4;
+ if (opsize == TCPOLEN_MPTCP_ADD_ADDR_PORT ||
+ opsize == TCPOLEN_MPTCP_ADD_ADDR_BASE_PORT) {
+ mp_opt->port = get_unaligned_be16(ptr);
+ ptr += 2;
+ }
}
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
else {
memcpy(mp_opt->addr6.s6_addr, (u8 *)ptr, 16);
ptr += 16;
+ if (opsize == TCPOLEN_MPTCP_ADD_ADDR6_PORT ||
+ opsize == TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT) {
+ mp_opt->port = get_unaligned_be16(ptr);
+ ptr += 2;
+ }
}
#endif
if (!mp_opt->echo) {
--
2.17.2
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2020-03-20 17:51 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-20 17:51 [MPTCP] [PATCH 1/2] mptcp: Parse optional port field of ADD_ADDR Peter Krystad
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.