aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/goldfish/patches-2.6.30/0082-sysfs_net_ipv4-Add-sysfs-based-knobs-for-controllin.patch
diff options
context:
space:
mode:
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.patch128
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 000000000..f1fce089c
--- /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);