mptcp: add a new sysctl checksum_enabled
authorGeliang Tang <geliangtang@gmail.com>
Thu, 17 Jun 2021 23:46:19 +0000 (16:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Jun 2021 18:40:11 +0000 (11:40 -0700)
This patch added a new sysctl, named checksum_enabled, to control
whether DSS checksum can be enabled.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/networking/mptcp-sysctl.rst
net/mptcp/ctrl.c
net/mptcp/protocol.h

index 3b352e5f6300cb42c81cf281cecbe8707099185f..ee06fd782465a99e7ed0cec970ba331cb0cb49bd 100644 (file)
@@ -24,3 +24,11 @@ add_addr_timeout - INTEGER (seconds)
        sysctl.
 
        Default: 120
+
+checksum_enabled - BOOLEAN
+       Control whether DSS checksum can be enabled.
+
+       DSS checksum can be enabled if the value is nonzero. This is a
+       per-namespace sysctl.
+
+       Default: 0
index 1ec4d36a39f0548b934bdb286f509c997f49f85b..6c2639bb9c19f0bc7374cdd3da41872b2f2c19dc 100644 (file)
@@ -23,6 +23,7 @@ struct mptcp_pernet {
 
        u8 mptcp_enabled;
        unsigned int add_addr_timeout;
+       u8 checksum_enabled;
 };
 
 static struct mptcp_pernet *mptcp_get_pernet(struct net *net)
@@ -40,10 +41,16 @@ unsigned int mptcp_get_add_addr_timeout(struct net *net)
        return mptcp_get_pernet(net)->add_addr_timeout;
 }
 
+int mptcp_is_checksum_enabled(struct net *net)
+{
+       return mptcp_get_pernet(net)->checksum_enabled;
+}
+
 static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
 {
        pernet->mptcp_enabled = 1;
        pernet->add_addr_timeout = TCP_RTO_MAX;
+       pernet->checksum_enabled = 0;
 }
 
 #ifdef CONFIG_SYSCTL
@@ -65,6 +72,14 @@ static struct ctl_table mptcp_sysctl_table[] = {
                .mode = 0644,
                .proc_handler = proc_dointvec_jiffies,
        },
+       {
+               .procname = "checksum_enabled",
+               .maxlen = sizeof(u8),
+               .mode = 0644,
+               .proc_handler = proc_dou8vec_minmax,
+               .extra1       = SYSCTL_ZERO,
+               .extra2       = SYSCTL_ONE
+       },
        {}
 };
 
@@ -82,6 +97,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
 
        table[0].data = &pernet->mptcp_enabled;
        table[1].data = &pernet->add_addr_timeout;
+       table[2].data = &pernet->checksum_enabled;
 
        hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table);
        if (!hdr)
index 12637299b42ebe45282f7309c173f4eb9a076373..16e50caf200e58a7fa4d8f35160d7c1564db33b7 100644 (file)
@@ -542,7 +542,7 @@ static inline void mptcp_subflow_delegated_done(struct mptcp_subflow_context *su
 
 int mptcp_is_enabled(struct net *net);
 unsigned int mptcp_get_add_addr_timeout(struct net *net);
-static inline int mptcp_is_checksum_enabled(struct net *net) { return false; }
+int mptcp_is_checksum_enabled(struct net *net);
 void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
                                     struct mptcp_options_received *mp_opt);
 bool mptcp_subflow_data_available(struct sock *sk);