diff options
author | Felix Fietkau <nbd@openwrt.org> | 2009-06-14 20:42:33 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2009-06-14 20:42:33 +0000 |
commit | f88360279f91387dc61725226ad38c3c95d3790a (patch) | |
tree | 66d21f3483914eb7e674c45f3497ab8912094ac0 /target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch | |
parent | a6d8f8be9e06c5ffb03f815c8c76ba743c64aa3d (diff) | |
download | mtk-20170518-f88360279f91387dc61725226ad38c3c95d3790a.zip mtk-20170518-f88360279f91387dc61725226ad38c3c95d3790a.tar.gz mtk-20170518-f88360279f91387dc61725226ad38c3c95d3790a.tar.bz2 |
add the 'goldfish' target, useful for experimenting with virtual phone hardware (includes the emulator)
SVN-Revision: 16459
Diffstat (limited to 'target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch')
-rw-r--r-- | target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch b/target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch new file mode 100644 index 0000000..f1fce08 --- /dev/null +++ b/target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch @@ -0,0 +1,128 @@ +From 75090d40ffbd9b4863238e1d62b43f8598da5e5e Mon Sep 17 00:00:00 2001 +From: Robert Love <rlove@google.com> +Date: Thu, 31 Jul 2008 11:12:44 -0400 +Subject: [PATCH 082/134] sysfs_net_ipv4: Add sysfs-based knobs for controlling TCP window size + +Add a family of knobs to /sys/kernel/ipv4 for controlling the TCP window size: + + tcp_wmem_min + tcp_wmem_def + tcp_wmem_max + tcp_rmem_min + tcp_rmem_def + tcp_rmem_max + +This six values mirror the sysctl knobs in /proc/sys/net/ipv4/tcp_wmem and +/proc/sys/net/ipv4/tcp_rmem. + +Sysfs, unlike sysctl, allows us to set and manage the files' permissions and +owners. + +Signed-off-by: Robert Love <rlove@google.com> +--- + net/ipv4/Makefile | 1 + + net/ipv4/sysfs_net_ipv4.c | 88 +++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 89 insertions(+), 0 deletions(-) + create mode 100644 net/ipv4/sysfs_net_ipv4.c + +--- a/net/ipv4/Makefile ++++ b/net/ipv4/Makefile +@@ -14,6 +14,7 @@ obj-y := route.o inetpeer.o protocol + inet_fragment.o + + obj-$(CONFIG_SYSCTL) += sysctl_net_ipv4.o ++obj-$(CONFIG_SYSFS) += sysfs_net_ipv4.o + obj-$(CONFIG_IP_FIB_HASH) += fib_hash.o + obj-$(CONFIG_IP_FIB_TRIE) += fib_trie.o + obj-$(CONFIG_PROC_FS) += proc.o +--- /dev/null ++++ b/net/ipv4/sysfs_net_ipv4.c +@@ -0,0 +1,88 @@ ++/* ++ * net/ipv4/sysfs_net_ipv4.c ++ * ++ * sysfs-based networking knobs (so we can, unlike with sysctl, control perms) ++ * ++ * Copyright (C) 2008 Google, Inc. ++ * ++ * Robert Love <rlove@google.com> ++ * ++ * This software is licensed under the terms of the GNU General Public ++ * License version 2, as published by the Free Software Foundation, and ++ * may be copied, distributed, and modified under those terms. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ */ ++ ++#include <linux/kobject.h> ++#include <linux/string.h> ++#include <linux/sysfs.h> ++#include <linux/init.h> ++#include <net/tcp.h> ++ ++#define CREATE_IPV4_FILE(_name, _var) \ ++static ssize_t _name##_show(struct kobject *kobj, \ ++ struct kobj_attribute *attr, char *buf) \ ++{ \ ++ return sprintf(buf, "%d\n", _var); \ ++} \ ++static ssize_t _name##_store(struct kobject *kobj, \ ++ struct kobj_attribute *attr, \ ++ const char *buf, size_t count) \ ++{ \ ++ int val, ret; \ ++ ret = sscanf(buf, "%d", &val); \ ++ if (ret != 1) \ ++ return -EINVAL; \ ++ if (val < 0) \ ++ return -EINVAL; \ ++ _var = val; \ ++ return count; \ ++} \ ++static struct kobj_attribute _name##_attr = \ ++ __ATTR(_name, 0644, _name##_show, _name##_store) ++ ++CREATE_IPV4_FILE(tcp_wmem_min, sysctl_tcp_wmem[0]); ++CREATE_IPV4_FILE(tcp_wmem_def, sysctl_tcp_wmem[1]); ++CREATE_IPV4_FILE(tcp_wmem_max, sysctl_tcp_wmem[2]); ++ ++CREATE_IPV4_FILE(tcp_rmem_min, sysctl_tcp_rmem[0]); ++CREATE_IPV4_FILE(tcp_rmem_def, sysctl_tcp_rmem[1]); ++CREATE_IPV4_FILE(tcp_rmem_max, sysctl_tcp_rmem[2]); ++ ++static struct attribute *ipv4_attrs[] = { ++ &tcp_wmem_min_attr.attr, ++ &tcp_wmem_def_attr.attr, ++ &tcp_wmem_max_attr.attr, ++ &tcp_rmem_min_attr.attr, ++ &tcp_rmem_def_attr.attr, ++ &tcp_rmem_max_attr.attr, ++ NULL ++}; ++ ++static struct attribute_group ipv4_attr_group = { ++ .attrs = ipv4_attrs, ++}; ++ ++static __init int sysfs_ipv4_init(void) ++{ ++ struct kobject *ipv4_kobject; ++ int ret; ++ ++ ipv4_kobject = kobject_create_and_add("ipv4", kernel_kobj); ++ if (!ipv4_kobject) ++ return -ENOMEM; ++ ++ ret = sysfs_create_group(ipv4_kobject, &ipv4_attr_group); ++ if (ret) { ++ kobject_put(ipv4_kobject); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++subsys_initcall(sysfs_ipv4_init); |