All of lore.kernel.org
 help / color / mirror / Atom feed
* [MPTCP] [MPTCP][PATCH mptcp-next 1/2] mptcp: convert IPv4 address to IPv4-mapped
@ 2020-12-11  6:27 Geliang Tang
  0 siblings, 0 replies; only message in thread
From: Geliang Tang @ 2020-12-11  6:27 UTC (permalink / raw)
  To: mptcp

[-- Attachment #1: Type: text/plain, Size: 1648 bytes --]

Currently, PM doesn't create subflow with IPv4-mapped IPv6 socket. This
patch converts the IPv4 address to IPv4-mapped IPv6 address to fix it.

Signed-off-by: Geliang Tang <geliangtang(a)gmail.com>
---
 net/mptcp/pm_netlink.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 4aa88a697b74..34627843f0f1 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -132,6 +132,19 @@ static bool lookup_subflow_by_saddr(const struct list_head *list,
 	return false;
 }
 
+static void mptcp_pm_addr_convert_v4mapped(struct mptcp_sock *msk,
+					   struct mptcp_addr_info *addr)
+{
+	struct mptcp_addr_info local;
+
+	local_address((struct sock_common *)msk, &local);
+	if (ipv6_addr_v4mapped(&local.addr6) &&
+	    addr->family == AF_INET) {
+		ipv6_addr_set_v4mapped(addr->addr.s_addr, &addr->addr6);
+		addr->family = AF_INET6;
+	}
+}
+
 static struct mptcp_pm_addr_entry *
 select_local_address(const struct pm_nl_pernet *pernet,
 		     struct mptcp_sock *msk)
@@ -144,6 +157,8 @@ select_local_address(const struct pm_nl_pernet *pernet,
 		if (!(entry->addr.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW))
 			continue;
 
+		mptcp_pm_addr_convert_v4mapped(msk, &entry->addr);
+
 		/* avoid any address already in use by subflows and
 		 * pending join
 		 */
@@ -397,6 +412,7 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
 		remote.port = sk->sk_dport;
 	else
 		use_port = true;
+	mptcp_pm_addr_convert_v4mapped(msk, &remote);
 	memset(&local, 0, sizeof(local));
 	local.family = remote.family;
 
-- 
2.26.2

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-12-11  6:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-11  6:27 [MPTCP] [MPTCP][PATCH mptcp-next 1/2] mptcp: convert IPv4 address to IPv4-mapped Geliang Tang

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.