Commit 1e802951 authored by Tonghao Zhang's avatar Tonghao Zhang Committed by David S. Miller

udp: Move the udp sysctl to namespace.

This patch moves the udp_rmem_min, udp_wmem_min
to namespace and init the udp_l3mdev_accept explicitly.

The udp_rmem_min/udp_wmem_min affect udp rx/tx queue,
with this patch namespaces can set them differently.
Signed-off-by: default avatarTonghao Zhang <xiangxia.m.yue@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 859844e5
...@@ -168,6 +168,9 @@ struct netns_ipv4 { ...@@ -168,6 +168,9 @@ struct netns_ipv4 {
atomic_t tfo_active_disable_times; atomic_t tfo_active_disable_times;
unsigned long tfo_active_disable_stamp; unsigned long tfo_active_disable_stamp;
int sysctl_udp_wmem_min;
int sysctl_udp_rmem_min;
#ifdef CONFIG_NET_L3_MASTER_DEV #ifdef CONFIG_NET_L3_MASTER_DEV
int sysctl_udp_l3mdev_accept; int sysctl_udp_l3mdev_accept;
#endif #endif
......
...@@ -520,22 +520,6 @@ static struct ctl_table ipv4_table[] = { ...@@ -520,22 +520,6 @@ static struct ctl_table ipv4_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = proc_doulongvec_minmax, .proc_handler = proc_doulongvec_minmax,
}, },
{
.procname = "udp_rmem_min",
.data = &sysctl_udp_rmem_min,
.maxlen = sizeof(sysctl_udp_rmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &one
},
{
.procname = "udp_wmem_min",
.data = &sysctl_udp_wmem_min,
.maxlen = sizeof(sysctl_udp_wmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &one
},
{ } { }
}; };
...@@ -1167,6 +1151,22 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1167,6 +1151,22 @@ static struct ctl_table ipv4_net_table[] = {
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dointvec_minmax,
.extra1 = &one, .extra1 = &one,
}, },
{
.procname = "udp_rmem_min",
.data = &init_net.ipv4.sysctl_udp_rmem_min,
.maxlen = sizeof(init_net.ipv4.sysctl_udp_rmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &one
},
{
.procname = "udp_wmem_min",
.data = &init_net.ipv4.sysctl_udp_wmem_min,
.maxlen = sizeof(init_net.ipv4.sysctl_udp_wmem_min),
.mode = 0644,
.proc_handler = proc_dointvec_minmax,
.extra1 = &one
},
{ } { }
}; };
......
...@@ -122,12 +122,6 @@ EXPORT_SYMBOL(udp_table); ...@@ -122,12 +122,6 @@ EXPORT_SYMBOL(udp_table);
long sysctl_udp_mem[3] __read_mostly; long sysctl_udp_mem[3] __read_mostly;
EXPORT_SYMBOL(sysctl_udp_mem); EXPORT_SYMBOL(sysctl_udp_mem);
int sysctl_udp_rmem_min __read_mostly;
EXPORT_SYMBOL(sysctl_udp_rmem_min);
int sysctl_udp_wmem_min __read_mostly;
EXPORT_SYMBOL(sysctl_udp_wmem_min);
atomic_long_t udp_memory_allocated; atomic_long_t udp_memory_allocated;
EXPORT_SYMBOL(udp_memory_allocated); EXPORT_SYMBOL(udp_memory_allocated);
...@@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err) ...@@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err)
EXPORT_SYMBOL_GPL(udp_abort); EXPORT_SYMBOL_GPL(udp_abort);
struct proto udp_prot = { struct proto udp_prot = {
.name = "UDP", .name = "UDP",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.close = udp_lib_close, .close = udp_lib_close,
.connect = ip4_datagram_connect, .connect = ip4_datagram_connect,
.disconnect = udp_disconnect, .disconnect = udp_disconnect,
.ioctl = udp_ioctl, .ioctl = udp_ioctl,
.init = udp_init_sock, .init = udp_init_sock,
.destroy = udp_destroy_sock, .destroy = udp_destroy_sock,
.setsockopt = udp_setsockopt, .setsockopt = udp_setsockopt,
.getsockopt = udp_getsockopt, .getsockopt = udp_getsockopt,
.sendmsg = udp_sendmsg, .sendmsg = udp_sendmsg,
.recvmsg = udp_recvmsg, .recvmsg = udp_recvmsg,
.sendpage = udp_sendpage, .sendpage = udp_sendpage,
.release_cb = ip4_datagram_release_cb, .release_cb = ip4_datagram_release_cb,
.hash = udp_lib_hash, .hash = udp_lib_hash,
.unhash = udp_lib_unhash, .unhash = udp_lib_unhash,
.rehash = udp_v4_rehash, .rehash = udp_v4_rehash,
.get_port = udp_v4_get_port, .get_port = udp_v4_get_port,
.memory_allocated = &udp_memory_allocated, .memory_allocated = &udp_memory_allocated,
.sysctl_mem = sysctl_udp_mem, .sysctl_mem = sysctl_udp_mem,
.sysctl_wmem = &sysctl_udp_wmem_min, .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
.sysctl_rmem = &sysctl_udp_rmem_min, .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
.obj_size = sizeof(struct udp_sock), .obj_size = sizeof(struct udp_sock),
.h.udp_table = &udp_table, .h.udp_table = &udp_table,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_setsockopt = compat_udp_setsockopt, .compat_setsockopt = compat_udp_setsockopt,
.compat_getsockopt = compat_udp_getsockopt, .compat_getsockopt = compat_udp_getsockopt,
#endif #endif
.diag_destroy = udp_abort, .diag_destroy = udp_abort,
}; };
EXPORT_SYMBOL(udp_prot); EXPORT_SYMBOL(udp_prot);
...@@ -2831,6 +2825,26 @@ u32 udp_flow_hashrnd(void) ...@@ -2831,6 +2825,26 @@ u32 udp_flow_hashrnd(void)
} }
EXPORT_SYMBOL(udp_flow_hashrnd); EXPORT_SYMBOL(udp_flow_hashrnd);
static void __udp_sysctl_init(struct net *net)
{
net->ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
net->ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
#ifdef CONFIG_NET_L3_MASTER_DEV
net->ipv4.sysctl_udp_l3mdev_accept = 0;
#endif
}
static int __net_init udp_sysctl_init(struct net *net)
{
__udp_sysctl_init(net);
return 0;
}
static struct pernet_operations __net_initdata udp_sysctl_ops = {
.init = udp_sysctl_init,
};
void __init udp_init(void) void __init udp_init(void)
{ {
unsigned long limit; unsigned long limit;
...@@ -2843,8 +2857,7 @@ void __init udp_init(void) ...@@ -2843,8 +2857,7 @@ void __init udp_init(void)
sysctl_udp_mem[1] = limit; sysctl_udp_mem[1] = limit;
sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2; sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2;
sysctl_udp_rmem_min = SK_MEM_QUANTUM; __udp_sysctl_init(&init_net);
sysctl_udp_wmem_min = SK_MEM_QUANTUM;
/* 16 spinlocks per cpu */ /* 16 spinlocks per cpu */
udp_busylocks_log = ilog2(nr_cpu_ids) + 4; udp_busylocks_log = ilog2(nr_cpu_ids) + 4;
...@@ -2854,4 +2867,7 @@ void __init udp_init(void) ...@@ -2854,4 +2867,7 @@ void __init udp_init(void)
panic("UDP: failed to alloc udp_busylocks\n"); panic("UDP: failed to alloc udp_busylocks\n");
for (i = 0; i < (1U << udp_busylocks_log); i++) for (i = 0; i < (1U << udp_busylocks_log); i++)
spin_lock_init(udp_busylocks + i); spin_lock_init(udp_busylocks + i);
if (register_pernet_subsys(&udp_sysctl_ops))
panic("UDP: failed to init sysctl parameters.\n");
} }
...@@ -1509,34 +1509,34 @@ void udp6_proc_exit(struct net *net) ...@@ -1509,34 +1509,34 @@ void udp6_proc_exit(struct net *net)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
struct proto udpv6_prot = { struct proto udpv6_prot = {
.name = "UDPv6", .name = "UDPv6",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.close = udp_lib_close, .close = udp_lib_close,
.connect = ip6_datagram_connect, .connect = ip6_datagram_connect,
.disconnect = udp_disconnect, .disconnect = udp_disconnect,
.ioctl = udp_ioctl, .ioctl = udp_ioctl,
.init = udp_init_sock, .init = udp_init_sock,
.destroy = udpv6_destroy_sock, .destroy = udpv6_destroy_sock,
.setsockopt = udpv6_setsockopt, .setsockopt = udpv6_setsockopt,
.getsockopt = udpv6_getsockopt, .getsockopt = udpv6_getsockopt,
.sendmsg = udpv6_sendmsg, .sendmsg = udpv6_sendmsg,
.recvmsg = udpv6_recvmsg, .recvmsg = udpv6_recvmsg,
.release_cb = ip6_datagram_release_cb, .release_cb = ip6_datagram_release_cb,
.hash = udp_lib_hash, .hash = udp_lib_hash,
.unhash = udp_lib_unhash, .unhash = udp_lib_unhash,
.rehash = udp_v6_rehash, .rehash = udp_v6_rehash,
.get_port = udp_v6_get_port, .get_port = udp_v6_get_port,
.memory_allocated = &udp_memory_allocated, .memory_allocated = &udp_memory_allocated,
.sysctl_mem = sysctl_udp_mem, .sysctl_mem = sysctl_udp_mem,
.sysctl_wmem = &sysctl_udp_wmem_min, .sysctl_wmem_offset = offsetof(struct net, ipv4.sysctl_udp_wmem_min),
.sysctl_rmem = &sysctl_udp_rmem_min, .sysctl_rmem_offset = offsetof(struct net, ipv4.sysctl_udp_rmem_min),
.obj_size = sizeof(struct udp6_sock), .obj_size = sizeof(struct udp6_sock),
.h.udp_table = &udp_table, .h.udp_table = &udp_table,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_setsockopt = compat_udpv6_setsockopt, .compat_setsockopt = compat_udpv6_setsockopt,
.compat_getsockopt = compat_udpv6_getsockopt, .compat_getsockopt = compat_udpv6_getsockopt,
#endif #endif
.diag_destroy = udp_abort, .diag_destroy = udp_abort,
}; };
static struct inet_protosw udpv6_protosw = { static struct inet_protosw udpv6_protosw = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment