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 17 static struct ctl_table_header *rxrpc_sysctl_reg_table; 18 static const unsigned int zero = 0; 19 static const unsigned int one = 1; 20 static const unsigned int four = 4; 21 static const unsigned int thirtytwo = 32; 22 static const unsigned int n_65535 = 65535; 23 static const unsigned int n_max_acks = RXRPC_MAXACKS; 24 25 /* 26 * RxRPC operating parameters. 27 * 28 * See Documentation/networking/rxrpc.txt and the variable definitions for more 29 * information on the individual parameters. 30 */ 31 static struct ctl_table rxrpc_sysctl_table[] = { 32 /* Values measured in milliseconds */ 33 { 34 .procname = "req_ack_delay", 35 .data = &rxrpc_requested_ack_delay, 36 .maxlen = sizeof(unsigned int), 37 .mode = 0644, 38 .proc_handler = proc_dointvec_ms_jiffies, 39 .extra1 = (void *)&zero, 40 }, 41 { 42 .procname = "soft_ack_delay", 43 .data = &rxrpc_soft_ack_delay, 44 .maxlen = sizeof(unsigned int), 45 .mode = 0644, 46 .proc_handler = proc_dointvec_ms_jiffies, 47 .extra1 = (void *)&one, 48 }, 49 { 50 .procname = "idle_ack_delay", 51 .data = &rxrpc_idle_ack_delay, 52 .maxlen = sizeof(unsigned int), 53 .mode = 0644, 54 .proc_handler = proc_dointvec_ms_jiffies, 55 .extra1 = (void *)&one, 56 }, 57 { 58 .procname = "resend_timeout", 59 .data = &rxrpc_resend_timeout, 60 .maxlen = sizeof(unsigned int), 61 .mode = 0644, 62 .proc_handler = proc_dointvec_ms_jiffies, 63 .extra1 = (void *)&one, 64 }, 65 66 /* Values measured in seconds but used in jiffies */ 67 { 68 .procname = "max_call_lifetime", 69 .data = &rxrpc_max_call_lifetime, 70 .maxlen = sizeof(unsigned int), 71 .mode = 0644, 72 .proc_handler = proc_dointvec_jiffies, 73 .extra1 = (void *)&one, 74 }, 75 { 76 .procname = "dead_call_expiry", 77 .data = &rxrpc_dead_call_expiry, 78 .maxlen = sizeof(unsigned int), 79 .mode = 0644, 80 .proc_handler = proc_dointvec_jiffies, 81 .extra1 = (void *)&one, 82 }, 83 84 /* Values measured in seconds */ 85 { 86 .procname = "connection_expiry", 87 .data = &rxrpc_connection_expiry, 88 .maxlen = sizeof(unsigned int), 89 .mode = 0644, 90 .proc_handler = proc_dointvec_minmax, 91 .extra1 = (void *)&one, 92 }, 93 { 94 .procname = "transport_expiry", 95 .data = &rxrpc_transport_expiry, 96 .maxlen = sizeof(unsigned int), 97 .mode = 0644, 98 .proc_handler = proc_dointvec_minmax, 99 .extra1 = (void *)&one, 100 }, 101 102 /* Non-time values */ 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 143 int __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 152 void rxrpc_sysctl_exit(void) 153 { 154 if (rxrpc_sysctl_reg_table) 155 unregister_net_sysctl_table(rxrpc_sysctl_reg_table); 156 } 157