linux/net/rxrpc/sysctl.c
<<
>>
Prefs
   1/* sysctls for configuring RxRPC operating parameters
   2 *
   3 * Copyright (C) 2014 Red Hat, Inc. All Rights Reserved.
   4 * Written by David Howells (dhowells@redhat.com)
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public Licence
   8 * as published by the Free Software Foundation; either version
   9 * 2 of the Licence, or (at your option) any later version.
  10 */
  11
  12#include <linux/sysctl.h>
  13#include <net/sock.h>
  14#include <net/af_rxrpc.h>
  15#include "ar-internal.h"
  16
  17static struct ctl_table_header *rxrpc_sysctl_reg_table;
  18static const unsigned int zero = 0;
  19static const unsigned int one = 1;
  20static const unsigned int four = 4;
  21static const unsigned int thirtytwo = 32;
  22static const unsigned int n_65535 = 65535;
  23static const unsigned int n_max_acks = RXRPC_RXTX_BUFF_SIZE - 1;
  24static const unsigned long one_jiffy = 1;
  25static const unsigned long max_jiffies = MAX_JIFFY_OFFSET;
  26
  27/*
  28 * RxRPC operating parameters.
  29 *
  30 * See Documentation/networking/rxrpc.txt and the variable definitions for more
  31 * information on the individual parameters.
  32 */
  33static struct ctl_table rxrpc_sysctl_table[] = {
  34        /* Values measured in milliseconds but used in jiffies */
  35        {
  36                .procname       = "req_ack_delay",
  37                .data           = &rxrpc_requested_ack_delay,
  38                .maxlen         = sizeof(unsigned long),
  39                .mode           = 0644,
  40                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  41                .extra1         = (void *)&one_jiffy,
  42                .extra2         = (void *)&max_jiffies,
  43        },
  44        {
  45                .procname       = "soft_ack_delay",
  46                .data           = &rxrpc_soft_ack_delay,
  47                .maxlen         = sizeof(unsigned long),
  48                .mode           = 0644,
  49                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  50                .extra1         = (void *)&one_jiffy,
  51                .extra2         = (void *)&max_jiffies,
  52        },
  53        {
  54                .procname       = "idle_ack_delay",
  55                .data           = &rxrpc_idle_ack_delay,
  56                .maxlen         = sizeof(unsigned long),
  57                .mode           = 0644,
  58                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  59                .extra1         = (void *)&one_jiffy,
  60                .extra2         = (void *)&max_jiffies,
  61        },
  62        {
  63                .procname       = "idle_conn_expiry",
  64                .data           = &rxrpc_conn_idle_client_expiry,
  65                .maxlen         = sizeof(unsigned long),
  66                .mode           = 0644,
  67                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  68                .extra1         = (void *)&one_jiffy,
  69                .extra2         = (void *)&max_jiffies,
  70        },
  71        {
  72                .procname       = "idle_conn_fast_expiry",
  73                .data           = &rxrpc_conn_idle_client_fast_expiry,
  74                .maxlen         = sizeof(unsigned long),
  75                .mode           = 0644,
  76                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  77                .extra1         = (void *)&one_jiffy,
  78                .extra2         = (void *)&max_jiffies,
  79        },
  80        {
  81                .procname       = "resend_timeout",
  82                .data           = &rxrpc_resend_timeout,
  83                .maxlen         = sizeof(unsigned long),
  84                .mode           = 0644,
  85                .proc_handler   = proc_doulongvec_ms_jiffies_minmax,
  86                .extra1         = (void *)&one_jiffy,
  87                .extra2         = (void *)&max_jiffies,
  88        },
  89
  90        /* Non-time values */
  91        {
  92                .procname       = "max_client_conns",
  93                .data           = &rxrpc_max_client_connections,
  94                .maxlen         = sizeof(unsigned int),
  95                .mode           = 0644,
  96                .proc_handler   = proc_dointvec_minmax,
  97                .extra1         = (void *)&rxrpc_reap_client_connections,
  98        },
  99        {
 100                .procname       = "reap_client_conns",
 101                .data           = &rxrpc_reap_client_connections,
 102                .maxlen         = sizeof(unsigned int),
 103                .mode           = 0644,
 104                .proc_handler   = proc_dointvec_minmax,
 105                .extra1         = (void *)&one,
 106                .extra2         = (void *)&rxrpc_max_client_connections,
 107        },
 108        {
 109                .procname       = "max_backlog",
 110                .data           = &rxrpc_max_backlog,
 111                .maxlen         = sizeof(unsigned int),
 112                .mode           = 0644,
 113                .proc_handler   = proc_dointvec_minmax,
 114                .extra1         = (void *)&four,
 115                .extra2         = (void *)&thirtytwo,
 116        },
 117        {
 118                .procname       = "rx_window_size",
 119                .data           = &rxrpc_rx_window_size,
 120                .maxlen         = sizeof(unsigned int),
 121                .mode           = 0644,
 122                .proc_handler   = proc_dointvec_minmax,
 123                .extra1         = (void *)&one,
 124                .extra2         = (void *)&n_max_acks,
 125        },
 126        {
 127                .procname       = "rx_mtu",
 128                .data           = &rxrpc_rx_mtu,
 129                .maxlen         = sizeof(unsigned int),
 130                .mode           = 0644,
 131                .proc_handler   = proc_dointvec_minmax,
 132                .extra1         = (void *)&one,
 133                .extra2         = (void *)&n_65535,
 134        },
 135        {
 136                .procname       = "rx_jumbo_max",
 137                .data           = &rxrpc_rx_jumbo_max,
 138                .maxlen         = sizeof(unsigned int),
 139                .mode           = 0644,
 140                .proc_handler   = proc_dointvec_minmax,
 141                .extra1         = (void *)&one,
 142                .extra2         = (void *)&four,
 143        },
 144
 145        { }
 146};
 147
 148int __init rxrpc_sysctl_init(void)
 149{
 150        rxrpc_sysctl_reg_table = register_net_sysctl(&init_net, "net/rxrpc",
 151                                                     rxrpc_sysctl_table);
 152        if (!rxrpc_sysctl_reg_table)
 153                return -ENOMEM;
 154        return 0;
 155}
 156
 157void rxrpc_sysctl_exit(void)
 158{
 159        if (rxrpc_sysctl_reg_table)
 160                unregister_net_sysctl_table(rxrpc_sysctl_reg_table);
 161}
 162