* [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup
@ 2022-02-16 2:11 Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 1/8] mptcp: add SNDTIMEO setsockopt support Mat Martineau
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Mat Martineau, davem, kuba, matthieu.baerts, mptcp
Patch 1 adds support for the SO_SNDTIMEO socket option on MPTCP sockets.
The remaining patches are various small cleanups:
Patch 2 removes an obsolete declaration.
Patches 3 and 5 remove unnecessary function parameters.
Patch 4 removes an extra cast.
Patches 6 and 7 add some const and ro_after_init modifiers.
Patch 8 removes extra storage of TCP helpers.
Florian Westphal (2):
mptcp: mark ops structures as ro_after_init
mptcp: don't save tcp data_ready and write space callbacks
Geliang Tang (4):
mptcp: add SNDTIMEO setsockopt support
mptcp: drop unused sk in mptcp_get_options
mptcp: drop unneeded type casts for hmac
mptcp: drop port parameter of mptcp_pm_add_addr_signal
Matthieu Baerts (1):
mptcp: mptcp_parse_option is no longer exported
Paolo Abeni (1):
mptcp: constify a bunch of of helpers
include/net/mptcp.h | 6 ------
net/mptcp/options.c | 13 +++++--------
net/mptcp/pm.c | 11 ++++++-----
net/mptcp/pm_netlink.c | 42 +++++++++++++++++++++---------------------
net/mptcp/protocol.h | 29 +++++++++++++----------------
net/mptcp/sockopt.c | 2 ++
net/mptcp/subflow.c | 37 +++++++++++++++++--------------------
7 files changed, 64 insertions(+), 76 deletions(-)
base-commit: 2c955856da4faec3a36df1e85b3ba3dfe230d6fd
--
2.35.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH net-next 1/8] mptcp: add SNDTIMEO setsockopt support
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 2/8] mptcp: mptcp_parse_option is no longer exported Mat Martineau
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Geliang Tang, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Geliang Tang <geliang.tang@suse.com>
Add setsockopt support for SO_SNDTIMEO_OLD and SO_SNDTIMEO_NEW to fix this
error reported by the mptcp bpf selftest:
(network_helpers.c:64: errno: Operation not supported) Failed to set SO_SNDTIMEO
test_mptcp:FAIL:115
All error logs:
(network_helpers.c:64: errno: Operation not supported) Failed to set SO_SNDTIMEO
test_mptcp:FAIL:115
Summary: 0/0 PASSED, 0 SKIPPED, 1 FAILED
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/sockopt.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index dacf3cee0027..f949d22f52bd 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -343,6 +343,8 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
case SO_RCVLOWAT:
case SO_RCVTIMEO_OLD:
case SO_RCVTIMEO_NEW:
+ case SO_SNDTIMEO_OLD:
+ case SO_SNDTIMEO_NEW:
case SO_BUSY_POLL:
case SO_PREFER_BUSY_POLL:
case SO_BUSY_POLL_BUDGET:
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 2/8] mptcp: mptcp_parse_option is no longer exported
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 1/8] mptcp: add SNDTIMEO setsockopt support Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 3/8] mptcp: drop unused sk in mptcp_get_options Mat Martineau
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Matthieu Baerts, davem, kuba, mptcp, Paolo Abeni, Mat Martineau
From: Matthieu Baerts <matthieu.baerts@tessares.net>
Options parsing in now done from mptcp_incoming_options().
mptcp_parse_option() has been removed from mptcp.h when CONFIG_MPTCP is
defined but not when it is not.
Fixes: cfde141ea3fa ("mptcp: move option parsing into mptcp_incoming_options()")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
include/net/mptcp.h | 6 ------
1 file changed, 6 deletions(-)
diff --git a/include/net/mptcp.h b/include/net/mptcp.h
index a925349b4b89..0a3b0fb04a3b 100644
--- a/include/net/mptcp.h
+++ b/include/net/mptcp.h
@@ -217,12 +217,6 @@ static inline bool rsk_drop_req(const struct request_sock *req)
return false;
}
-static inline void mptcp_parse_option(const struct sk_buff *skb,
- const unsigned char *ptr, int opsize,
- struct tcp_options_received *opt_rx)
-{
-}
-
static inline bool mptcp_syn_options(struct sock *sk, const struct sk_buff *skb,
unsigned int *size,
struct mptcp_out_options *opts)
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 3/8] mptcp: drop unused sk in mptcp_get_options
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 1/8] mptcp: add SNDTIMEO setsockopt support Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 2/8] mptcp: mptcp_parse_option is no longer exported Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 4/8] mptcp: drop unneeded type casts for hmac Mat Martineau
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Geliang Tang, davem, kuba, matthieu.baerts, mptcp
From: Geliang Tang <geliang.tang@suse.com>
The parameter 'sk' became useless since the code using it was dropped
from mptcp_get_options() in the commit 8d548ea1dd15 ("mptcp: do not set
unconditionally csum_reqd on incoming opt"). Let's drop it.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
---
net/mptcp/options.c | 5 ++---
net/mptcp/protocol.h | 3 +--
net/mptcp/subflow.c | 10 +++++-----
3 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 3e82ac24d548..a10536d7c84b 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -355,8 +355,7 @@ static void mptcp_parse_option(const struct sk_buff *skb,
}
}
-void mptcp_get_options(const struct sock *sk,
- const struct sk_buff *skb,
+void mptcp_get_options(const struct sk_buff *skb,
struct mptcp_options_received *mp_opt)
{
const struct tcphdr *th = tcp_hdr(skb);
@@ -1114,7 +1113,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
return true;
}
- mptcp_get_options(sk, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
/* The subflow can be in close state only if check_fully_established()
* just sent a reset. If so, tell the caller to ignore the current packet.
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 85317ce38e3f..a23694ad69e7 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -643,8 +643,7 @@ int __init mptcp_proto_v6_init(void);
struct sock *mptcp_sk_clone(const struct sock *sk,
const struct mptcp_options_received *mp_opt,
struct request_sock *req);
-void mptcp_get_options(const struct sock *sk,
- const struct sk_buff *skb,
+void mptcp_get_options(const struct sk_buff *skb,
struct mptcp_options_received *mp_opt);
void mptcp_finish_connect(struct sock *sk);
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index bea47a1180dc..0d6a4109add1 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -153,7 +153,7 @@ static int subflow_check_req(struct request_sock *req,
return -EINVAL;
#endif
- mptcp_get_options(sk_listener, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
opt_mp_capable = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPC);
opt_mp_join = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ);
@@ -250,7 +250,7 @@ int mptcp_subflow_init_cookie_req(struct request_sock *req,
int err;
subflow_init_req(req, sk_listener);
- mptcp_get_options(sk_listener, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
opt_mp_capable = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPC);
opt_mp_join = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ);
@@ -410,7 +410,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
subflow->ssn_offset = TCP_SKB_CB(skb)->seq;
pr_debug("subflow=%p synack seq=%x", subflow, subflow->ssn_offset);
- mptcp_get_options(sk, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
if (subflow->request_mptcp) {
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPC)) {
MPTCP_INC_STATS(sock_net(sk),
@@ -663,7 +663,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
* reordered MPC will cause fallback, but we don't have other
* options.
*/
- mptcp_get_options(sk, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPC)) {
fallback = true;
goto create_child;
@@ -673,7 +673,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
if (!new_msk)
fallback = true;
} else if (subflow_req->mp_join) {
- mptcp_get_options(sk, skb, &mp_opt);
+ mptcp_get_options(skb, &mp_opt);
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ) ||
!subflow_hmac_valid(req, &mp_opt) ||
!mptcp_can_accept_new_subflow(subflow_req->msk)) {
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 4/8] mptcp: drop unneeded type casts for hmac
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (2 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 3/8] mptcp: drop unused sk in mptcp_get_options Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 5/8] mptcp: drop port parameter of mptcp_pm_add_addr_signal Mat Martineau
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Geliang Tang, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Geliang Tang <geliang.tang@suse.com>
Drop the unneeded type casts to 'unsigned long long' for printing out the
hmac values in add_addr_hmac_valid() and subflow_thmac_valid().
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/options.c | 3 +--
net/mptcp/subflow.c | 4 +---
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index a10536d7c84b..5a14420b77c8 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -1085,8 +1085,7 @@ static bool add_addr_hmac_valid(struct mptcp_sock *msk,
&mp_opt->addr);
pr_debug("msk=%p, ahmac=%llu, mp_opt->ahmac=%llu\n",
- msk, (unsigned long long)hmac,
- (unsigned long long)mp_opt->ahmac);
+ msk, hmac, mp_opt->ahmac);
return hmac == mp_opt->ahmac;
}
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 0d6a4109add1..8cf85684c88f 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -344,9 +344,7 @@ static bool subflow_thmac_valid(struct mptcp_subflow_context *subflow)
thmac = get_unaligned_be64(hmac);
pr_debug("subflow=%p, token=%u, thmac=%llu, subflow->thmac=%llu\n",
- subflow, subflow->token,
- (unsigned long long)thmac,
- (unsigned long long)subflow->thmac);
+ subflow, subflow->token, thmac, subflow->thmac);
return thmac == subflow->thmac;
}
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 5/8] mptcp: drop port parameter of mptcp_pm_add_addr_signal
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (3 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 4/8] mptcp: drop unneeded type casts for hmac Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 6/8] mptcp: constify a bunch of of helpers Mat Martineau
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Geliang Tang, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Geliang Tang <geliang.tang@suse.com>
Drop the port parameter of mptcp_pm_add_addr_signal() and reflect it to
avoid passing too many parameters.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/options.c | 5 ++---
net/mptcp/pm.c | 7 ++++---
net/mptcp/protocol.h | 2 +-
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 5a14420b77c8..ac10a04ccd7c 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -652,7 +652,6 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
bool drop_other_suboptions = false;
unsigned int opt_size = *size;
bool echo;
- bool port;
int len;
/* add addr will strip the existing options, be sure to avoid breaking
@@ -661,12 +660,12 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
if (!mptcp_pm_should_add_signal(msk) ||
(opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) ||
!mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr,
- &echo, &port, &drop_other_suboptions))
+ &echo, &drop_other_suboptions))
return false;
if (drop_other_suboptions)
remaining += opt_size;
- len = mptcp_add_addr_len(opts->addr.family, echo, port);
+ len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port);
if (remaining < len)
return false;
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 696b2c4613a7..ef6e4adeb0e5 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -278,11 +278,12 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq)
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
unsigned int opt_size, unsigned int remaining,
struct mptcp_addr_info *addr, bool *echo,
- bool *port, bool *drop_other_suboptions)
+ bool *drop_other_suboptions)
{
int ret = false;
u8 add_addr;
u8 family;
+ bool port;
spin_lock_bh(&msk->pm.lock);
@@ -300,10 +301,10 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
}
*echo = mptcp_pm_should_add_signal_echo(msk);
- *port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port);
+ port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port);
family = *echo ? msk->pm.remote.family : msk->pm.local.family;
- if (remaining < mptcp_add_addr_len(family, *echo, *port))
+ if (remaining < mptcp_add_addr_len(family, *echo, port))
goto out_unlock;
if (*echo) {
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index a23694ad69e7..e381054910d0 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -818,7 +818,7 @@ static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list)
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
unsigned int opt_size, unsigned int remaining,
struct mptcp_addr_info *addr, bool *echo,
- bool *port, bool *drop_other_suboptions);
+ bool *drop_other_suboptions);
bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
struct mptcp_rm_list *rm_list);
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 6/8] mptcp: constify a bunch of of helpers
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (4 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 5/8] mptcp: drop port parameter of mptcp_pm_add_addr_signal Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 7/8] mptcp: mark ops structures as ro_after_init Mat Martineau
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev; +Cc: Paolo Abeni, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Paolo Abeni <pabeni@redhat.com>
A few pm-related helpers don't touch arguments which lacking
the const modifier, let's constify them.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/pm.c | 4 ++--
net/mptcp/pm_netlink.c | 42 +++++++++++++++++++++---------------------
net/mptcp/protocol.h | 18 +++++++++---------
3 files changed, 32 insertions(+), 32 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index ef6e4adeb0e5..8755b81896de 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -219,7 +219,7 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
}
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr)
+ const struct mptcp_addr_info *addr)
{
struct mptcp_pm_data *pm = &msk->pm;
@@ -275,7 +275,7 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq)
/* path manager helpers */
-bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
+bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
unsigned int opt_size, unsigned int remaining,
struct mptcp_addr_info *addr, bool *echo,
bool *drop_other_suboptions)
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index e4fd54fff1d2..9aeee30e50ba 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -120,7 +120,7 @@ static void remote_address(const struct sock_common *skc,
}
static bool lookup_subflow_by_saddr(const struct list_head *list,
- struct mptcp_addr_info *saddr)
+ const struct mptcp_addr_info *saddr)
{
struct mptcp_subflow_context *subflow;
struct mptcp_addr_info cur;
@@ -138,7 +138,7 @@ static bool lookup_subflow_by_saddr(const struct list_head *list,
}
static bool lookup_subflow_by_daddr(const struct list_head *list,
- struct mptcp_addr_info *daddr)
+ const struct mptcp_addr_info *daddr)
{
struct mptcp_subflow_context *subflow;
struct mptcp_addr_info cur;
@@ -157,10 +157,10 @@ static bool lookup_subflow_by_daddr(const struct list_head *list,
static struct mptcp_pm_addr_entry *
select_local_address(const struct pm_nl_pernet *pernet,
- struct mptcp_sock *msk)
+ const struct mptcp_sock *msk)
{
+ const struct sock *sk = (const struct sock *)msk;
struct mptcp_pm_addr_entry *entry, *ret = NULL;
- struct sock *sk = (struct sock *)msk;
msk_owned_by_me(msk);
@@ -190,7 +190,7 @@ select_local_address(const struct pm_nl_pernet *pernet,
}
static struct mptcp_pm_addr_entry *
-select_signal_address(struct pm_nl_pernet *pernet, struct mptcp_sock *msk)
+select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk)
{
struct mptcp_pm_addr_entry *entry, *ret = NULL;
@@ -214,16 +214,16 @@ select_signal_address(struct pm_nl_pernet *pernet, struct mptcp_sock *msk)
return ret;
}
-unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk)
+unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk)
{
- struct pm_nl_pernet *pernet;
+ const struct pm_nl_pernet *pernet;
- pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
+ pernet = net_generic(sock_net((const struct sock *)msk), pm_nl_pernet_id);
return READ_ONCE(pernet->add_addr_signal_max);
}
EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_signal_max);
-unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk)
+unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk)
{
struct pm_nl_pernet *pernet;
@@ -232,7 +232,7 @@ unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk)
}
EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_accept_max);
-unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk)
+unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk)
{
struct pm_nl_pernet *pernet;
@@ -241,7 +241,7 @@ unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk)
}
EXPORT_SYMBOL_GPL(mptcp_pm_get_subflows_max);
-unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk)
+unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk)
{
struct pm_nl_pernet *pernet;
@@ -264,8 +264,8 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk)
}
struct mptcp_pm_add_entry *
-mptcp_lookup_anno_list_by_saddr(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr)
+mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
+ const struct mptcp_addr_info *addr)
{
struct mptcp_pm_add_entry *entry;
@@ -346,7 +346,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
struct mptcp_pm_add_entry *
mptcp_pm_del_add_timer(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr, bool check_id)
+ const struct mptcp_addr_info *addr, bool check_id)
{
struct mptcp_pm_add_entry *entry;
struct sock *sk = (struct sock *)msk;
@@ -364,7 +364,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
}
static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
- struct mptcp_pm_addr_entry *entry)
+ const struct mptcp_pm_addr_entry *entry)
{
struct mptcp_pm_add_entry *add_entry = NULL;
struct sock *sk = (struct sock *)msk;
@@ -410,8 +410,8 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk)
}
}
-static bool lookup_address_in_vec(struct mptcp_addr_info *addrs, unsigned int nr,
- struct mptcp_addr_info *addr)
+static bool lookup_address_in_vec(const struct mptcp_addr_info *addrs, unsigned int nr,
+ const struct mptcp_addr_info *addr)
{
int i;
@@ -493,9 +493,9 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info,
}
static int
-lookup_id_by_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr)
+lookup_id_by_addr(const struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr)
{
- struct mptcp_pm_addr_entry *entry;
+ const struct mptcp_pm_addr_entry *entry;
int ret = -1;
rcu_read_lock();
@@ -1281,7 +1281,7 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id,
}
static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr)
+ const struct mptcp_addr_info *addr)
{
struct mptcp_pm_add_entry *entry;
@@ -1296,7 +1296,7 @@ static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
}
static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr,
+ const struct mptcp_addr_info *addr,
bool force)
{
struct mptcp_rm_list list = { .nr = 0 };
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index e381054910d0..86910f20486a 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -742,7 +742,7 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, const struct sock *ssk,
void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
const struct mptcp_addr_info *addr);
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr);
+ const struct mptcp_addr_info *addr);
void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk);
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
@@ -753,10 +753,10 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk);
bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk);
struct mptcp_pm_add_entry *
mptcp_pm_del_add_timer(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr, bool check_id);
+ const struct mptcp_addr_info *addr, bool check_id);
struct mptcp_pm_add_entry *
-mptcp_lookup_anno_list_by_saddr(struct mptcp_sock *msk,
- struct mptcp_addr_info *addr);
+mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
+ const struct mptcp_addr_info *addr);
int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id,
u8 *flags, int *ifindex);
@@ -815,7 +815,7 @@ static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list)
return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1;
}
-bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
+bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
unsigned int opt_size, unsigned int remaining,
struct mptcp_addr_info *addr, bool *echo,
bool *drop_other_suboptions);
@@ -829,10 +829,10 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk);
void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,
const struct mptcp_rm_list *rm_list);
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
-unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk);
-unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk);
-unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk);
-unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk);
+unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
+unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk);
+unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk);
+unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk);
void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk);
void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk);
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 7/8] mptcp: mark ops structures as ro_after_init
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (5 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 6/8] mptcp: constify a bunch of of helpers Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 8/8] mptcp: don't save tcp data_ready and write space callbacks Mat Martineau
2022-02-17 4:54 ` [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Jakub Kicinski
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev
Cc: Florian Westphal, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Florian Westphal <fw@strlen.de>
These structures are initialised from the init hooks, so we can't make
them 'const'. But no writes occur afterwards, so we can use ro_after_init.
Also, remove bogus EXPORT_SYMBOL, the only access comes from ip
stack, not from kernel modules.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/subflow.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 8cf85684c88f..740cb4763461 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -482,8 +482,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
}
struct request_sock_ops mptcp_subflow_request_sock_ops;
-EXPORT_SYMBOL_GPL(mptcp_subflow_request_sock_ops);
-static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops;
+static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops __ro_after_init;
static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
{
@@ -504,9 +503,9 @@ static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
}
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
-static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops;
-static struct inet_connection_sock_af_ops subflow_v6_specific;
-static struct inet_connection_sock_af_ops subflow_v6m_specific;
+static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops __ro_after_init;
+static struct inet_connection_sock_af_ops subflow_v6_specific __ro_after_init;
+static struct inet_connection_sock_af_ops subflow_v6m_specific __ro_after_init;
static struct proto tcpv6_prot_override;
static int subflow_v6_conn_request(struct sock *sk, struct sk_buff *skb)
@@ -788,7 +787,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
return child;
}
-static struct inet_connection_sock_af_ops subflow_specific;
+static struct inet_connection_sock_af_ops subflow_specific __ro_after_init;
static struct proto tcp_prot_override;
enum mapping_status {
@@ -1309,7 +1308,7 @@ static void subflow_write_space(struct sock *ssk)
mptcp_write_space(sk);
}
-static struct inet_connection_sock_af_ops *
+static const struct inet_connection_sock_af_ops *
subflow_default_af_ops(struct sock *sk)
{
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
@@ -1324,7 +1323,7 @@ void mptcpv6_handle_mapped(struct sock *sk, bool mapped)
{
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
struct inet_connection_sock *icsk = inet_csk(sk);
- struct inet_connection_sock_af_ops *target;
+ const struct inet_connection_sock_af_ops *target;
target = mapped ? &subflow_v6m_specific : subflow_default_af_ops(sk);
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next 8/8] mptcp: don't save tcp data_ready and write space callbacks
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (6 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 7/8] mptcp: mark ops structures as ro_after_init Mat Martineau
@ 2022-02-16 2:11 ` Mat Martineau
2022-02-17 4:54 ` [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Jakub Kicinski
8 siblings, 0 replies; 10+ messages in thread
From: Mat Martineau @ 2022-02-16 2:11 UTC (permalink / raw)
To: netdev
Cc: Florian Westphal, davem, kuba, matthieu.baerts, mptcp, Mat Martineau
From: Florian Westphal <fw@strlen.de>
Assign the helpers directly rather than save/restore in the context
structure.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
---
net/mptcp/protocol.h | 6 ++----
net/mptcp/subflow.c | 8 ++++----
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 86910f20486a..9d0ee6cee07f 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -468,9 +468,7 @@ struct mptcp_subflow_context {
struct sock *tcp_sock; /* tcp sk backpointer */
struct sock *conn; /* parent mptcp_sock */
const struct inet_connection_sock_af_ops *icsk_af_ops;
- void (*tcp_data_ready)(struct sock *sk);
void (*tcp_state_change)(struct sock *sk);
- void (*tcp_write_space)(struct sock *sk);
void (*tcp_error_report)(struct sock *sk);
struct rcu_head rcu;
@@ -614,9 +612,9 @@ bool mptcp_subflow_active(struct mptcp_subflow_context *subflow);
static inline void mptcp_subflow_tcp_fallback(struct sock *sk,
struct mptcp_subflow_context *ctx)
{
- sk->sk_data_ready = ctx->tcp_data_ready;
+ sk->sk_data_ready = sock_def_readable;
sk->sk_state_change = ctx->tcp_state_change;
- sk->sk_write_space = ctx->tcp_write_space;
+ sk->sk_write_space = sk_stream_write_space;
sk->sk_error_report = ctx->tcp_error_report;
inet_csk(sk)->icsk_af_ops = ctx->icsk_af_ops;
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 740cb4763461..45c004f87f5a 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1654,10 +1654,12 @@ static int subflow_ulp_init(struct sock *sk)
tp->is_mptcp = 1;
ctx->icsk_af_ops = icsk->icsk_af_ops;
icsk->icsk_af_ops = subflow_default_af_ops(sk);
- ctx->tcp_data_ready = sk->sk_data_ready;
ctx->tcp_state_change = sk->sk_state_change;
- ctx->tcp_write_space = sk->sk_write_space;
ctx->tcp_error_report = sk->sk_error_report;
+
+ WARN_ON_ONCE(sk->sk_data_ready != sock_def_readable);
+ WARN_ON_ONCE(sk->sk_write_space != sk_stream_write_space);
+
sk->sk_data_ready = subflow_data_ready;
sk->sk_write_space = subflow_write_space;
sk->sk_state_change = subflow_state_change;
@@ -1712,9 +1714,7 @@ static void subflow_ulp_clone(const struct request_sock *req,
new_ctx->conn_finished = 1;
new_ctx->icsk_af_ops = old_ctx->icsk_af_ops;
- new_ctx->tcp_data_ready = old_ctx->tcp_data_ready;
new_ctx->tcp_state_change = old_ctx->tcp_state_change;
- new_ctx->tcp_write_space = old_ctx->tcp_write_space;
new_ctx->tcp_error_report = old_ctx->tcp_error_report;
new_ctx->rel_write_seq = 1;
new_ctx->tcp_sock = newsk;
--
2.35.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
` (7 preceding siblings ...)
2022-02-16 2:11 ` [PATCH net-next 8/8] mptcp: don't save tcp data_ready and write space callbacks Mat Martineau
@ 2022-02-17 4:54 ` Jakub Kicinski
8 siblings, 0 replies; 10+ messages in thread
From: Jakub Kicinski @ 2022-02-17 4:54 UTC (permalink / raw)
To: Mat Martineau; +Cc: netdev, davem, matthieu.baerts, mptcp
On Tue, 15 Feb 2022 18:11:22 -0800 Mat Martineau wrote:
> Patch 1 adds support for the SO_SNDTIMEO socket option on MPTCP sockets.
>
> The remaining patches are various small cleanups:
>
> Patch 2 removes an obsolete declaration.
>
> Patches 3 and 5 remove unnecessary function parameters.
>
> Patch 4 removes an extra cast.
>
> Patches 6 and 7 add some const and ro_after_init modifiers.
>
> Patch 8 removes extra storage of TCP helpers.
Applied, thanks!
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-02-17 4:55 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-16 2:11 [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 1/8] mptcp: add SNDTIMEO setsockopt support Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 2/8] mptcp: mptcp_parse_option is no longer exported Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 3/8] mptcp: drop unused sk in mptcp_get_options Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 4/8] mptcp: drop unneeded type casts for hmac Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 5/8] mptcp: drop port parameter of mptcp_pm_add_addr_signal Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 6/8] mptcp: constify a bunch of of helpers Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 7/8] mptcp: mark ops structures as ro_after_init Mat Martineau
2022-02-16 2:11 ` [PATCH net-next 8/8] mptcp: don't save tcp data_ready and write space callbacks Mat Martineau
2022-02-17 4:54 ` [PATCH net-next 0/8] mptcp: SO_SNDTIMEO and misc. cleanup Jakub Kicinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).