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 n_65535 = 65535;
  22static const unsigned int n_max_acks = RXRPC_MAXACKS;
  23
  24/*
  25 * RxRPC operating parameters.
  26 *
  27 * See Documentation/networking/rxrpc.txt and the variable definitions for more
  28 * information on the individual parameters.
  29 */
  30static struct ctl_table rxrpc_sysctl_table[] = {
  31        /* Values measured in milliseconds */
  32        {
  33                .procname       = "req_ack_delay",
  34                .data           = &rxrpc_requested_ack_delay,
  35                .maxlen         = sizeof(unsigned int),
  36                .mode           = 0644,
  37                .proc_handler   = proc_dointvec_ms_jiffies,
  38                .extra1         = (void *)&zero,
  39        },
  40        {
  41                .procname       = "soft_ack_delay",
  42                .data           = &rxrpc_soft_ack_delay,
  43                .maxlen         = sizeof(unsigned int),
  44                .mode           = 0644,
  45                .proc_handler   = proc_dointvec_ms_jiffies,
  46                .extra1         = (void *)&one,
  47        },
  48        {
  49                .procname       = "idle_ack_delay",
  50                .data           = &rxrpc_idle_ack_delay,
  51                .maxlen         = sizeof(unsigned int),
  52                .mode           = 0644,
  53                .proc_handler   = proc_dointvec_ms_jiffies,
  54                .extra1         = (void *)&one,
  55        },
  56        {
  57                .procname       = "resend_timeout",
  58                .data           = &rxrpc_resend_timeout,
  59                .maxlen         = sizeof(unsigned int),
  60                .mode           = 0644,
  61                .proc_handler   = proc_dointvec_ms_jiffies,
  62                .extra1         = (void *)&one,
  63        },
  64
  65        /* Values measured in seconds but used in jiffies */
  66        {
  67                .procname       = "max_call_lifetime",
  68                .data           = &rxrpc_max_call_lifetime,
  69                .maxlen         = sizeof(unsigned int),
  70                .mode           = 0644,
  71                .proc_handler   = proc_dointvec_jiffies,
  72                .extra1         = (void *)&one,
  73        },
  74        {
  75                .procname       = "dead_call_expiry",
  76                .data           = &rxrpc_dead_call_expiry,
  77                .maxlen         = sizeof(unsigned int),
  78                .mode           = 0644,
  79                .proc_handler   = proc_dointvec_jiffies,
  80                .extra1         = (void *)&one,
  81        },
  82
  83        /* Values measured in seconds */
  84        {
  85                .procname       = "connection_expiry",
  86                .data           = &rxrpc_connection_expiry,
  87                .maxlen         = sizeof(unsigned int),
  88                .mode           = 0644,
  89                .proc_handler   = proc_dointvec_minmax,
  90                .extra1         = (void *)&one,
  91        },
  92        {
  93                .procname       = "transport_expiry",
  94                .data           = &rxrpc_transport_expiry,
  95                .maxlen         = sizeof(unsigned int),
  96                .mode           = 0644,
  97                .proc_handler   = proc_dointvec_minmax,
  98                .extra1         = (void *)&one,
  99        },
 100
 101        /* Non-time values */
 102        {
 103                .procname       = "rx_window_size",
 104                .data           = &rxrpc_rx_window_size,
 105                .maxlen         = sizeof(unsigned int),
 106                .mode           = 0644,
 107                .proc_handler   = proc_dointvec_minmax,
 108                .extra1         = (void *)&one,
 109                .extra2         = (void *)&n_max_acks,
 110        },
 111        {
 112                .procname       = "rx_mtu",
 113                .data           = &rxrpc_rx_mtu,
 114                .maxlen         = sizeof(unsigned int),
 115                .mode           = 0644,
 116                .proc_handler   = proc_dointvec_minmax,
 117                .extra1         = (void *)&one,
 118                .extra2         = (void *)&n_65535,
 119        },
 120        {
 121                .procname       = "rx_jumbo_max",
 122                .data           = &rxrpc_rx_jumbo_max,
 123                .maxlen         = sizeof(unsigned int),
 124                .mode           = 0644,
 125                .proc_handler   = proc_dointvec_minmax,
 126                .extra1         = (void *)&one,
 127                .extra2         = (void *)&four,
 128        },
 129
 130        { }
 131};
 132
 133int __init rxrpc_sysctl_init(void)
 134{
 135        rxrpc_sysctl_reg_table = register_net_sysctl(&init_net, "net/rxrpc",
 136                                                     rxrpc_sysctl_table);
 137        if (!rxrpc_sysctl_reg_table)
 138                return -ENOMEM;
 139        return 0;
 140}
 141
 142void rxrpc_sysctl_exit(void)
 143{
 144        if (rxrpc_sysctl_reg_table)
 145                unregister_net_sysctl_table(rxrpc_sysctl_reg_table);
 146}
 147