^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright (c) 2006 Oracle. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * This software is available to you under a choice of one of two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * licenses. You may choose to be licensed under the terms of the GNU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * General Public License (GPL) Version 2, available from the file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * COPYING in the main directory of this source tree, or the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * OpenIB.org BSD license below:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Redistribution and use in source and binary forms, with or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * without modification, are permitted provided that the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * conditions are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * - Redistributions of source code must retain the above
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * copyright notice, this list of conditions and the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * - Redistributions in binary form must reproduce the above
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * copyright notice, this list of conditions and the following
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * disclaimer in the documentation and/or other materials
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * provided with the distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * SOFTWARE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #include <linux/sysctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #include <linux/proc_fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #include "rds.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) static struct ctl_table_header *rds_sysctl_reg_table;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) static unsigned long rds_sysctl_reconnect_min = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) static unsigned long rds_sysctl_reconnect_max = ~0UL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) unsigned long rds_sysctl_reconnect_min_jiffies;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) unsigned long rds_sysctl_reconnect_max_jiffies = HZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) unsigned int rds_sysctl_max_unacked_packets = 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) unsigned int rds_sysctl_max_unacked_bytes = (16 << 20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unsigned int rds_sysctl_ping_enable = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) static struct ctl_table rds_sysctl_rds_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) .procname = "reconnect_min_delay_ms",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) .data = &rds_sysctl_reconnect_min_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) .extra1 = &rds_sysctl_reconnect_min,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) .extra2 = &rds_sysctl_reconnect_max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) .procname = "reconnect_max_delay_ms",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) .data = &rds_sysctl_reconnect_max_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) .maxlen = sizeof(unsigned long),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) .proc_handler = proc_doulongvec_ms_jiffies_minmax,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) .extra1 = &rds_sysctl_reconnect_min_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) .extra2 = &rds_sysctl_reconnect_max,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) .procname = "max_unacked_packets",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) .data = &rds_sysctl_max_unacked_packets,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) .proc_handler = proc_dointvec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) .procname = "max_unacked_bytes",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) .data = &rds_sysctl_max_unacked_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) .proc_handler = proc_dointvec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) .procname = "ping_enable",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) .data = &rds_sysctl_ping_enable,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) .maxlen = sizeof(int),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) .proc_handler = proc_dointvec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) void rds_sysctl_exit(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) unregister_net_sysctl_table(rds_sysctl_reg_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) int rds_sysctl_init(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) rds_sysctl_reconnect_min = msecs_to_jiffies(1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) rds_sysctl_reconnect_min_jiffies = rds_sysctl_reconnect_min;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) rds_sysctl_reg_table =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) register_net_sysctl(&init_net, "net/rds", rds_sysctl_rds_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) if (!rds_sysctl_reg_table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) }