linux/net/unix/sysctl_net_unix.c
<<
>>
Prefs
   1/*
   2 * NET4:        Sysctl interface to net af_unix subsystem.
   3 *
   4 * Authors:     Mike Shaver.
   5 *
   6 *              This program is free software; you can redistribute it and/or
   7 *              modify it under the terms of the GNU General Public License
   8 *              as published by the Free Software Foundation; either version
   9 *              2 of the License, or (at your option) any later version.
  10 */
  11
  12#include <linux/mm.h>
  13#include <linux/sysctl.h>
  14
  15#include <net/af_unix.h>
  16
  17static ctl_table unix_table[] = {
  18        {
  19                .ctl_name       = NET_UNIX_MAX_DGRAM_QLEN,
  20                .procname       = "max_dgram_qlen",
  21                .data           = &init_net.unx.sysctl_max_dgram_qlen,
  22                .maxlen         = sizeof(int),
  23                .mode           = 0644,
  24                .proc_handler   = proc_dointvec
  25        },
  26        { .ctl_name = 0 }
  27};
  28
  29static struct ctl_path unix_path[] = {
  30        { .procname = "net", .ctl_name = CTL_NET, },
  31        { .procname = "unix", .ctl_name = NET_UNIX, },
  32        { },
  33};
  34
  35int unix_sysctl_register(struct net *net)
  36{
  37        struct ctl_table *table;
  38
  39        table = kmemdup(unix_table, sizeof(unix_table), GFP_KERNEL);
  40        if (table == NULL)
  41                goto err_alloc;
  42
  43        table[0].data = &net->unx.sysctl_max_dgram_qlen;
  44        net->unx.ctl = register_net_sysctl_table(net, unix_path, table);
  45        if (net->unx.ctl == NULL)
  46                goto err_reg;
  47
  48        return 0;
  49
  50err_reg:
  51        kfree(table);
  52err_alloc:
  53        return -ENOMEM;
  54}
  55
  56void unix_sysctl_unregister(struct net *net)
  57{
  58        struct ctl_table *table;
  59
  60        table = net->unx.ctl->ctl_table_arg;
  61        unregister_sysctl_table(net->unx.ctl);
  62        kfree(table);
  63}
  64