Hi,

On Tue, 2018-03-13 at 02:57 -0700, Tonghao Zhang wrote:
> This patch moves the udp_rmem_min, udp_wmem_min
> to namespace and init the udp_l3mdev_accept explicitly.

Can you please be a little more descriptive on why this is
needed/helpful?

> Signed-off-by: Tonghao Zhang <xiangxia.m....@gmail.com>
> ---
>  include/net/netns/ipv4.h   |  3 ++
>  net/ipv4/sysctl_net_ipv4.c | 32 ++++++++---------
>  net/ipv4/udp.c             | 86 
> +++++++++++++++++++++++++++-------------------
>  net/ipv6/udp.c             | 52 ++++++++++++++--------------
>  4 files changed, 96 insertions(+), 77 deletions(-)
> 
> diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
> index 3a970e4..382bfd7 100644
> --- a/include/net/netns/ipv4.h
> +++ b/include/net/netns/ipv4.h
> @@ -168,6 +168,9 @@ struct netns_ipv4 {
>       atomic_t tfo_active_disable_times;
>       unsigned long tfo_active_disable_stamp;
>  
> +     int sysctl_udp_wmem_min;
> +     int sysctl_udp_rmem_min;
> +
>  #ifdef CONFIG_NET_L3_MASTER_DEV
>       int sysctl_udp_l3mdev_accept;
>  #endif
> diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
> index 011de9a..5b72d97 100644
> --- a/net/ipv4/sysctl_net_ipv4.c
> +++ b/net/ipv4/sysctl_net_ipv4.c
> @@ -520,22 +520,6 @@ static int proc_fib_multipath_hash_policy(struct 
> ctl_table *table, int write,
>               .mode           = 0644,
>               .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 int proc_fib_multipath_hash_policy(struct 
> ctl_table *table, int write,
>               .proc_handler   = proc_dointvec_minmax,
>               .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
> +     },
>       { }
>  };
>  
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index 3013404..7ae77f2 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -122,12 +122,6 @@
>  long sysctl_udp_mem[3] __read_mostly;
>  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;
>  EXPORT_SYMBOL(udp_memory_allocated);
>  
> @@ -2533,35 +2527,35 @@ int udp_abort(struct sock *sk, int err)
>  EXPORT_SYMBOL_GPL(udp_abort);
>  
>  struct proto udp_prot = {
> -     .name              = "UDP",
> -     .owner             = THIS_MODULE,
> -     .close             = udp_lib_close,
> -     .connect           = ip4_datagram_connect,
> -     .disconnect        = udp_disconnect,
> -     .ioctl             = udp_ioctl,
> -     .init              = udp_init_sock,
> -     .destroy           = udp_destroy_sock,
> -     .setsockopt        = udp_setsockopt,
> -     .getsockopt        = udp_getsockopt,
> -     .sendmsg           = udp_sendmsg,
> -     .recvmsg           = udp_recvmsg,
> -     .sendpage          = udp_sendpage,
> -     .release_cb        = ip4_datagram_release_cb,
> -     .hash              = udp_lib_hash,
> -     .unhash            = udp_lib_unhash,
> -     .rehash            = udp_v4_rehash,
> -     .get_port          = udp_v4_get_port,
> -     .memory_allocated  = &udp_memory_allocated,
> -     .sysctl_mem        = sysctl_udp_mem,
> -     .sysctl_wmem       = &sysctl_udp_wmem_min,
> -     .sysctl_rmem       = &sysctl_udp_rmem_min,
> -     .obj_size          = sizeof(struct udp_sock),
> -     .h.udp_table       = &udp_table,
> +     .name                   = "UDP",
> +     .owner                  = THIS_MODULE,
> +     .close                  = udp_lib_close,
> +     .connect                = ip4_datagram_connect,
> +     .disconnect             = udp_disconnect,
> +     .ioctl                  = udp_ioctl,
> +     .init                   = udp_init_sock,
> +     .destroy                = udp_destroy_sock,
> +     .setsockopt             = udp_setsockopt,
> +     .getsockopt             = udp_getsockopt,
> +     .sendmsg                = udp_sendmsg,
> +     .recvmsg                = udp_recvmsg,
> +     .sendpage               = udp_sendpage,
> +     .release_cb             = ip4_datagram_release_cb,
> +     .hash                   = udp_lib_hash,
> +     .unhash                 = udp_lib_unhash,
> +     .rehash                 = udp_v4_rehash,
> +     .get_port               = udp_v4_get_port,
> +     .memory_allocated       = &udp_memory_allocated,
> +     .sysctl_mem             = sysctl_udp_mem,
> +     .sysctl_wmem_offset     = offsetof(struct net, 
> ipv4.sysctl_udp_wmem_min),
> +     .sysctl_rmem_offset     = offsetof(struct net, 
> ipv4.sysctl_udp_rmem_min),
> +     .obj_size               = sizeof(struct udp_sock),
> +     .h.udp_table            = &udp_table,
>  #ifdef CONFIG_COMPAT
> -     .compat_setsockopt = compat_udp_setsockopt,
> -     .compat_getsockopt = compat_udp_getsockopt,
> +     .compat_setsockopt      = compat_udp_setsockopt,
> +     .compat_getsockopt      = compat_udp_getsockopt,
>  #endif
> -     .diag_destroy      = udp_abort,
> +     .diag_destroy           = udp_abort,
>  };
>  EXPORT_SYMBOL(udp_prot);
>  
> @@ -2831,6 +2825,21 @@ u32 udp_flow_hashrnd(void)
>  }
>  EXPORT_SYMBOL(udp_flow_hashrnd);
>  
> +static int __net_init 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
> +     return 0;
> +}
> +
> +static struct pernet_operations __net_initdata udp_sysctl_ops = {
> +     .init       = udp_sysctl_init,
> +};
> +
>  void __init udp_init(void)
>  {
>       unsigned long limit;
> @@ -2843,8 +2852,12 @@ void __init udp_init(void)
>       sysctl_udp_mem[1] = limit;
>       sysctl_udp_mem[2] = sysctl_udp_mem[0] * 2;
>  
> -     sysctl_udp_rmem_min = SK_MEM_QUANTUM;
> -     sysctl_udp_wmem_min = SK_MEM_QUANTUM;
> +     init_net.ipv4.sysctl_udp_rmem_min = SK_MEM_QUANTUM;
> +     init_net.ipv4.sysctl_udp_wmem_min = SK_MEM_QUANTUM;
> +
> +#ifdef CONFIG_NET_L3_MASTER_DEV
> +     init_net.ipv4.sysctl_udp_l3mdev_accept = 0;
> +#endif

You can avoid the code duplication here - and in udp_sysctl_init() -
using a common helper.

Thanks,

Paolo

Reply via email to