Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[platform/kernel/linux-rpi.git] / net / ipv4 / sysctl_net_ipv4.c
index cac8dd3..a82b440 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  * sysctl_net_ipv4.c: sysctl interface to net IPV4 subsystem.
  *
@@ -25,6 +26,7 @@
 #include <net/inet_frag.h>
 #include <net/ping.h>
 #include <net/protocol.h>
+#include <net/netevent.h>
 
 static int zero;
 static int one = 1;
@@ -284,7 +286,8 @@ static int proc_tcp_fastopen_key(struct ctl_table *table, int write,
                        ret = -EINVAL;
                        goto bad_key;
                }
-               tcp_fastopen_reset_cipher(net, user_key, TCP_FASTOPEN_KEY_LENGTH);
+               tcp_fastopen_reset_cipher(net, NULL, user_key,
+                                         TCP_FASTOPEN_KEY_LENGTH);
        }
 
 bad_key:
@@ -384,15 +387,25 @@ static int proc_tcp_available_ulp(struct ctl_table *ctl,
        return ret;
 }
 
+#ifdef CONFIG_IP_ROUTE_MULTIPATH
+static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
+                                         void __user *buffer, size_t *lenp,
+                                         loff_t *ppos)
+{
+       struct net *net = container_of(table->data, struct net,
+           ipv4.sysctl_fib_multipath_hash_policy);
+       int ret;
+
+       ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+       if (write && ret == 0)
+               call_netevent_notifiers(NETEVENT_MULTIPATH_HASH_UPDATE, net);
+
+       return ret;
+}
+#endif
+
 static struct ctl_table ipv4_table[] = {
        {
-               .procname       = "tcp_retrans_collapse",
-               .data           = &sysctl_tcp_retrans_collapse,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
                .procname       = "tcp_max_orphans",
                .data           = &sysctl_tcp_max_orphans,
                .maxlen         = sizeof(int),
@@ -400,27 +413,6 @@ static struct ctl_table ipv4_table[] = {
                .proc_handler   = proc_dointvec
        },
        {
-               .procname       = "tcp_abort_on_overflow",
-               .data           = &sysctl_tcp_abort_on_overflow,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_stdurg",
-               .data           = &sysctl_tcp_stdurg,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_rfc1337",
-               .data           = &sysctl_tcp_rfc1337,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
                .procname       = "inet_peer_threshold",
                .data           = &inet_peer_threshold,
                .maxlen         = sizeof(int),
@@ -442,34 +434,6 @@ static struct ctl_table ipv4_table[] = {
                .proc_handler   = proc_dointvec_jiffies,
        },
        {
-               .procname       = "tcp_fack",
-               .data           = &sysctl_tcp_fack,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_recovery",
-               .data           = &sysctl_tcp_recovery,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec,
-       },
-       {
-               .procname       = "tcp_max_reordering",
-               .data           = &sysctl_tcp_max_reordering,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_dsack",
-               .data           = &sysctl_tcp_dsack,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
                .procname       = "tcp_mem",
                .maxlen         = sizeof(sysctl_tcp_mem),
                .data           = &sysctl_tcp_mem,
@@ -493,36 +457,6 @@ static struct ctl_table ipv4_table[] = {
                .extra1         = &one,
        },
        {
-               .procname       = "tcp_app_win",
-               .data           = &sysctl_tcp_app_win,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_adv_win_scale",
-               .data           = &sysctl_tcp_adv_win_scale,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &tcp_adv_win_scale_min,
-               .extra2         = &tcp_adv_win_scale_max,
-       },
-       {
-               .procname       = "tcp_frto",
-               .data           = &sysctl_tcp_frto,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_min_rtt_wlen",
-               .data           = &sysctl_tcp_min_rtt_wlen,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
                .procname       = "tcp_low_latency",
                .data           = &sysctl_tcp_low_latency,
                .maxlen         = sizeof(int),
@@ -530,60 +464,11 @@ static struct ctl_table ipv4_table[] = {
                .proc_handler   = proc_dointvec
        },
        {
-               .procname       = "tcp_no_metrics_save",
-               .data           = &sysctl_tcp_nometrics_save,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec,
-       },
-       {
-               .procname       = "tcp_moderate_rcvbuf",
-               .data           = &sysctl_tcp_moderate_rcvbuf,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec,
-       },
-       {
-               .procname       = "tcp_tso_win_divisor",
-               .data           = &sysctl_tcp_tso_win_divisor,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec,
-       },
-       {
                .procname       = "tcp_congestion_control",
                .mode           = 0644,
                .maxlen         = TCP_CA_NAME_MAX,
                .proc_handler   = proc_tcp_congestion_control,
        },
-       {
-               .procname       = "tcp_workaround_signed_windows",
-               .data           = &sysctl_tcp_workaround_signed_windows,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_limit_output_bytes",
-               .data           = &sysctl_tcp_limit_output_bytes,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_challenge_ack_limit",
-               .data           = &sysctl_tcp_challenge_ack_limit,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_slow_start_after_idle",
-               .data           = &sysctl_tcp_slow_start_after_idle,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
 #ifdef CONFIG_NETLABEL
        {
                .procname       = "cipso_cache_enable",
@@ -627,65 +512,6 @@ static struct ctl_table ipv4_table[] = {
                .proc_handler   = proc_allowed_congestion_control,
        },
        {
-               .procname       = "tcp_thin_linear_timeouts",
-               .data           = &sysctl_tcp_thin_linear_timeouts,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec
-       },
-       {
-               .procname       = "tcp_early_retrans",
-               .data           = &sysctl_tcp_early_retrans,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &zero,
-               .extra2         = &four,
-       },
-       {
-               .procname       = "tcp_min_tso_segs",
-               .data           = &sysctl_tcp_min_tso_segs,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &one,
-               .extra2         = &gso_max_segs,
-       },
-       {
-               .procname       = "tcp_pacing_ss_ratio",
-               .data           = &sysctl_tcp_pacing_ss_ratio,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &zero,
-               .extra2         = &thousand,
-       },
-       {
-               .procname       = "tcp_pacing_ca_ratio",
-               .data           = &sysctl_tcp_pacing_ca_ratio,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &zero,
-               .extra2         = &thousand,
-       },
-       {
-               .procname       = "tcp_autocorking",
-               .data           = &sysctl_tcp_autocorking,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = &zero,
-               .extra2         = &one,
-       },
-       {
-               .procname       = "tcp_invalid_ratelimit",
-               .data           = &sysctl_tcp_invalid_ratelimit,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_ms_jiffies,
-       },
-       {
                .procname       = "tcp_available_ulp",
                .maxlen         = TCP_ULP_BUF_MAX,
                .mode           = 0444,
@@ -1100,7 +926,7 @@ static struct ctl_table ipv4_net_table[] = {
                .data           = &init_net.ipv4.sysctl_fib_multipath_hash_policy,
                .maxlen         = sizeof(int),
                .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
+               .proc_handler   = proc_fib_multipath_hash_policy,
                .extra1         = &zero,
                .extra2         = &one,
        },
@@ -1144,6 +970,200 @@ static struct ctl_table ipv4_net_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec
        },
+       {
+               .procname       = "tcp_early_retrans",
+               .data           = &init_net.ipv4.sysctl_tcp_early_retrans,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &zero,
+               .extra2         = &four,
+       },
+       {
+               .procname       = "tcp_recovery",
+               .data           = &init_net.ipv4.sysctl_tcp_recovery,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+       {
+               .procname       = "tcp_thin_linear_timeouts",
+               .data           = &init_net.ipv4.sysctl_tcp_thin_linear_timeouts,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_slow_start_after_idle",
+               .data           = &init_net.ipv4.sysctl_tcp_slow_start_after_idle,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_retrans_collapse",
+               .data           = &init_net.ipv4.sysctl_tcp_retrans_collapse,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_stdurg",
+               .data           = &init_net.ipv4.sysctl_tcp_stdurg,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_rfc1337",
+               .data           = &init_net.ipv4.sysctl_tcp_rfc1337,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_abort_on_overflow",
+               .data           = &init_net.ipv4.sysctl_tcp_abort_on_overflow,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_fack",
+               .data           = &init_net.ipv4.sysctl_tcp_fack,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_max_reordering",
+               .data           = &init_net.ipv4.sysctl_tcp_max_reordering,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_dsack",
+               .data           = &init_net.ipv4.sysctl_tcp_dsack,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_app_win",
+               .data           = &init_net.ipv4.sysctl_tcp_app_win,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_adv_win_scale",
+               .data           = &init_net.ipv4.sysctl_tcp_adv_win_scale,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &tcp_adv_win_scale_min,
+               .extra2         = &tcp_adv_win_scale_max,
+       },
+       {
+               .procname       = "tcp_frto",
+               .data           = &init_net.ipv4.sysctl_tcp_frto,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_no_metrics_save",
+               .data           = &init_net.ipv4.sysctl_tcp_nometrics_save,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+       {
+               .procname       = "tcp_moderate_rcvbuf",
+               .data           = &init_net.ipv4.sysctl_tcp_moderate_rcvbuf,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+       {
+               .procname       = "tcp_tso_win_divisor",
+               .data           = &init_net.ipv4.sysctl_tcp_tso_win_divisor,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
+       {
+               .procname       = "tcp_workaround_signed_windows",
+               .data           = &init_net.ipv4.sysctl_tcp_workaround_signed_windows,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_limit_output_bytes",
+               .data           = &init_net.ipv4.sysctl_tcp_limit_output_bytes,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_challenge_ack_limit",
+               .data           = &init_net.ipv4.sysctl_tcp_challenge_ack_limit,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_min_tso_segs",
+               .data           = &init_net.ipv4.sysctl_tcp_min_tso_segs,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &one,
+               .extra2         = &gso_max_segs,
+       },
+       {
+               .procname       = "tcp_min_rtt_wlen",
+               .data           = &init_net.ipv4.sysctl_tcp_min_rtt_wlen,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
+       {
+               .procname       = "tcp_autocorking",
+               .data           = &init_net.ipv4.sysctl_tcp_autocorking,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &zero,
+               .extra2         = &one,
+       },
+       {
+               .procname       = "tcp_invalid_ratelimit",
+               .data           = &init_net.ipv4.sysctl_tcp_invalid_ratelimit,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_ms_jiffies,
+       },
+       {
+               .procname       = "tcp_pacing_ss_ratio",
+               .data           = &init_net.ipv4.sysctl_tcp_pacing_ss_ratio,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &zero,
+               .extra2         = &thousand,
+       },
+       {
+               .procname       = "tcp_pacing_ca_ratio",
+               .data           = &init_net.ipv4.sysctl_tcp_pacing_ca_ratio,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_minmax,
+               .extra1         = &zero,
+               .extra2         = &thousand,
+       },
        { }
 };