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