Root/net/unix/sysctl_net_unix.c

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

Archive Download this file



interactive