diff mbox series

[v2,2/6] mptcp: Reference inet_stream_ops routines through socket->ops

Message ID 20191106044133.14418-3-peter.krystad@linux.intel.com
State Accepted, archived
Delegated to: Matthieu Baerts
Headers show
Series IPv6 support | expand

Commit Message

Peter Krystad Nov. 6, 2019, 4:41 a.m. UTC
Call protocol routines on the subflow through the existing proto_ops
pointer in socket structure instead of calling them directly. This
will make all of the mptcp proto_ops routines work for both IPv4
and IPv6.

squashto: Associate MPTCP context with TCP socket
          (bind and stream_connect changes)
          Create SUBFLOW socket for incoming connections
          (getname, listen, and stream_accept changes)
          Add tcp_poll (poll changes)

Signed-off-by: Peter Krystad <peter.krystad@linux.intel.com>
---
 net/mptcp/protocol.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index c2b29f8d0377..b3263a7f6458 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1115,7 +1115,7 @@  static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 	if (IS_ERR(ssock))
 		return PTR_ERR(ssock);
 
-	err = inet_bind(ssock, uaddr, addr_len);
+	err = ssock->ops->bind(ssock, uaddr, addr_len);
 	sock_put(ssock->sk);
 	return err;
 }
@@ -1134,7 +1134,7 @@  static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr,
 	if (IS_ERR(ssock))
 		return PTR_ERR(ssock);
 
-	err = inet_stream_connect(ssock, uaddr, addr_len, flags);
+	err = ssock->ops->connect(ssock, uaddr, addr_len, flags);
 	sock_put(ssock->sk);
 	return err;
 }
@@ -1156,7 +1156,7 @@  static int mptcp_getname(struct socket *sock, struct sockaddr *uaddr,
 		 * bypass mptcp.
 		 */
 		sock->ops = &inet_stream_ops;
-		return inet_getname(sock, uaddr, peer);
+		return sock->ops->getname(sock, uaddr, peer);
 	}
 
 	lock_sock(sock->sk);
@@ -1164,7 +1164,7 @@  static int mptcp_getname(struct socket *sock, struct sockaddr *uaddr,
 	if (ssock) {
 		release_sock(sock->sk);
 		pr_debug("subflow=%p", ssock->sk);
-		ret = inet_getname(ssock, uaddr, peer);
+		ret = ssock->ops->getname(ssock, uaddr, peer);
 		sock_put(ssock->sk);
 		return ret;
 	}
@@ -1179,7 +1179,7 @@  static int mptcp_getname(struct socket *sock, struct sockaddr *uaddr,
 		return -ENOTCONN;
 	}
 
-	ret = inet_getname(ssk->sk_socket, uaddr, peer);
+	ret = ssk->sk_socket->ops->getname(ssk->sk_socket, uaddr, peer);
 	release_sock(sock->sk);
 	return ret;
 }
@@ -1196,7 +1196,7 @@  static int mptcp_listen(struct socket *sock, int backlog)
 	if (IS_ERR(ssock))
 		return PTR_ERR(ssock);
 
-	err = inet_listen(ssock, backlog);
+	err = ssock->ops->listen(ssock, backlog);
 	sock_put(ssock->sk);
 	return err;
 }
@@ -1214,7 +1214,7 @@  static int mptcp_stream_accept(struct socket *sock, struct socket *newsock,
 	if (!ssock)
 		return -EINVAL;
 
-	err = inet_accept(sock, newsock, flags, kern);
+	err = ssock->ops->accept(sock, newsock, flags, kern);
 	sock_put(ssock->sk);
 	return err;
 }
@@ -1233,7 +1233,7 @@  static __poll_t mptcp_poll(struct file *file, struct socket *sock,
 	ssock = __mptcp_fallback_get_ref(msk);
 	if (ssock) {
 		release_sock(sk);
-		ret = tcp_poll(file, ssock, wait);
+		ret = ssock->ops->poll(file, ssock, wait);
 		sock_put(ssock->sk);
 		return ret;
 	}