All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v3 0/2] Splitting commits for IP_TOS support in setsockopt()
@ 2021-10-27  2:41 Poorva Sonparote
  2021-10-27  2:41 ` [PATCH mptcp-next v3 1/2] Exposing __ip_sock_set_tos() in ip.h Poorva Sonparote
  2021-10-27  2:41 ` [PATCH mptcp-next v3 2/2] Support for IP_TOS for MPTCP setsockopt() Poorva Sonparote
  0 siblings, 2 replies; 3+ messages in thread
From: Poorva Sonparote @ 2021-10-27  2:41 UTC (permalink / raw)
  To: mptcp; +Cc: mathew.j.martineau, matthieu.baerts

- patch 1/2 Add Support for IP_TOS for MPTCP setsockopt()
- patch 2/2 Exposing  __ip_sock_set_tos() in ip.h


Poorva Sonparote (2):
  Exposing __ip_sock_set_tos() in ip.h
  Support for IP_TOS for MPTCP setsockopt()

 include/net/ip.h       |  1 +
 net/ipv4/ip_sockglue.c |  2 +-
 net/mptcp/sockopt.c    | 41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 43 insertions(+), 1 deletion(-)

-- 
2.18.2


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH mptcp-next v3 1/2] Exposing __ip_sock_set_tos() in ip.h
  2021-10-27  2:41 [PATCH mptcp-next v3 0/2] Splitting commits for IP_TOS support in setsockopt() Poorva Sonparote
@ 2021-10-27  2:41 ` Poorva Sonparote
  2021-10-27  2:41 ` [PATCH mptcp-next v3 2/2] Support for IP_TOS for MPTCP setsockopt() Poorva Sonparote
  1 sibling, 0 replies; 3+ messages in thread
From: Poorva Sonparote @ 2021-10-27  2:41 UTC (permalink / raw)
  To: mptcp; +Cc: mathew.j.martineau, matthieu.baerts

Making the static function __ip_sock_set_tos() from net/ipv4/ip_sockglue.c
accessible by declaring it in include/net/ip.h
The reason for doing this is to use this function to set IP_TOS value in
mptcp_setsockopt() without the lock.

Signed-off-by: Poorva Sonparote <psonparo@redhat.com>
---
 include/net/ip.h       | 1 +
 net/ipv4/ip_sockglue.c | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/net/ip.h b/include/net/ip.h
index cf229a531194..3d65a3be10e7 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -789,5 +789,6 @@ int ip_sock_set_mtu_discover(struct sock *sk, int val);
 void ip_sock_set_pktinfo(struct sock *sk);
 void ip_sock_set_recverr(struct sock *sk);
 void ip_sock_set_tos(struct sock *sk, int val);
+void  __ip_sock_set_tos(struct sock *sk, int val);
 
 #endif	/* _IP_H */
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index b297bb28556e..7fd83f14daae 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -576,7 +576,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
 	return err;
 }
 
-static void __ip_sock_set_tos(struct sock *sk, int val)
+void __ip_sock_set_tos(struct sock *sk, int val)
 {
 	if (sk->sk_type == SOCK_STREAM) {
 		val &= ~INET_ECN_MASK;
-- 
2.18.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH mptcp-next v3 2/2] Support for IP_TOS for MPTCP setsockopt()
  2021-10-27  2:41 [PATCH mptcp-next v3 0/2] Splitting commits for IP_TOS support in setsockopt() Poorva Sonparote
  2021-10-27  2:41 ` [PATCH mptcp-next v3 1/2] Exposing __ip_sock_set_tos() in ip.h Poorva Sonparote
@ 2021-10-27  2:41 ` Poorva Sonparote
  1 sibling, 0 replies; 3+ messages in thread
From: Poorva Sonparote @ 2021-10-27  2:41 UTC (permalink / raw)
  To: mptcp; +Cc: mathew.j.martineau, matthieu.baerts

SOL_IP provides a way to configure network layer attributes in a
socket. This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..)
https://github.com/multipath-tcp/mptcp_net-next/issues/220

Support for SOL_IP is added in mptcp_setsockopt() and IP_TOS is handled in
a private function. The idea here is to take in the value passed for IP_TOS
and set it to the current subflow, open subflows as well new subflows that
might be created after the initial call to setsockopt(). This sync is done
using sync_socket_options(.., ssk) and setting the value of tos using
 __ip_sock_set_tos(ssk,..).

The patch has been tested using the packetdrill script here -
https://github.com/multipath-tcp/mptcp_net-next/issues/220#issuecomment-947863717
It has not been selftested because there's no support for IP_TOS in
getsockopt() yet.

Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/220
Signed-off-by: Poorva Sonparote <psonparo@redhat.com>
---

Notes:
    - fixed formatting errors
    - split out the main patch into two commits
      1. Support for IP_TOS for MPTCP setsockopt()
      2. Exposing  __ip_sock_set_tos() in ip.h

 net/mptcp/sockopt.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 8137cc3a4296..ded47f0483ed 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -598,6 +598,43 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t
 	return ret;
 }
 
+static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname,
+				       sockptr_t optval, unsigned int optlen)
+{
+	struct mptcp_subflow_context *subflow;
+	struct sock *sk = (struct sock *)msk;
+	int ret, val;
+	int err;
+
+	err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
+
+	if (err != 0)
+		return err;
+
+	lock_sock(sk);
+	sockopt_seq_inc(msk);
+	val = inet_sk(sk)->tos;
+	mptcp_for_each_subflow(msk, subflow) {
+		struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+
+		__ip_sock_set_tos(ssk, val);
+	}
+	release_sock(sk);
+
+	return ret;
+}
+
+static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
+			       sockptr_t optval, unsigned int optlen)
+{
+	switch (optname) {
+	case IP_TOS:
+		return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen);
+	}
+
+	return -EOPNOTSUPP;
+}
+
 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
 				    sockptr_t optval, unsigned int optlen)
 {
@@ -637,6 +674,9 @@ int mptcp_setsockopt(struct sock *sk, int level, int optname,
 	if (ssk)
 		return tcp_setsockopt(ssk, level, optname, optval, optlen);
 
+	if (level == SOL_IP)
+		return mptcp_setsockopt_v4(msk, optname, optval, optlen);
+
 	if (level == SOL_IPV6)
 		return mptcp_setsockopt_v6(msk, optname, optval, optlen);
 
@@ -1000,6 +1040,7 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
 	ssk->sk_priority = sk->sk_priority;
 	ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
 	ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
+	__ip_sock_set_tos(ssk, inet_sk(sk)->tos);
 
 	if (sk->sk_userlocks & tx_rx_locks) {
 		ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
-- 
2.18.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-10-27  2:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-27  2:41 [PATCH mptcp-next v3 0/2] Splitting commits for IP_TOS support in setsockopt() Poorva Sonparote
2021-10-27  2:41 ` [PATCH mptcp-next v3 1/2] Exposing __ip_sock_set_tos() in ip.h Poorva Sonparote
2021-10-27  2:41 ` [PATCH mptcp-next v3 2/2] Support for IP_TOS for MPTCP setsockopt() Poorva Sonparote

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.