Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d59f82c authored by Marek Lindner's avatar Marek Lindner Committed by Greg Kroah-Hartman
Browse files

Staging: batman-adv: move originator interval setting from /proc to /sys

parent 14741240
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -153,13 +153,59 @@ static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr,
	return count;
}

static ssize_t show_orig_interval(struct kobject *kobj, struct attribute *attr,
				 char *buff)
{
	struct device *dev = to_dev(kobj->parent);
	struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev));

	return sprintf(buff, "status: %i\n",
		       atomic_read(&bat_priv->orig_interval));
}

static ssize_t store_orig_interval(struct kobject *kobj, struct attribute *attr,
				  char *buff, size_t count)
{
	struct device *dev = to_dev(kobj->parent);
	struct net_device *net_dev = to_net_dev(dev);
	struct bat_priv *bat_priv = netdev_priv(net_dev);
	unsigned long orig_interval_tmp;
	int ret;

	ret = strict_strtoul(buff, 10, &orig_interval_tmp);
	if (ret) {
		printk(KERN_INFO "batman-adv:Invalid parameter for 'orig_interval' setting on mesh %s received: %s\n",
		       net_dev->name, buff);
		return -EINVAL;
	}

	if (orig_interval_tmp <= JITTER * 2) {
		printk(KERN_INFO "batman-adv:New originator interval too small: %li (min: %i)\n",
		       orig_interval_tmp, JITTER * 2);
		return -EINVAL;
	}

	if (atomic_read(&bat_priv->orig_interval) == orig_interval_tmp)
		return count;

	printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li on mesh: %s\n",
	       atomic_read(&bat_priv->orig_interval),
	       orig_interval_tmp, net_dev->name);

	atomic_set(&bat_priv->orig_interval, orig_interval_tmp);
	return count;
}

static BAT_ATTR(aggregate_ogm, S_IRUGO | S_IWUSR,
		show_aggr_ogm, store_aggr_ogm);
static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode);
static BAT_ATTR(orig_interval, S_IRUGO | S_IWUSR,
		show_orig_interval, store_orig_interval);

static struct bat_attribute *mesh_attrs[] = {
	&bat_attr_aggregate_ogm,
	&bat_attr_vis_mode,
	&bat_attr_orig_interval,
	NULL,
};

@@ -228,6 +274,7 @@ int sysfs_add_meshif(struct net_device *dev)
		  routine as soon as we have it */
	atomic_set(&bat_priv->aggregation_enabled, 1);
	atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE);
	atomic_set(&bat_priv->orig_interval, 1000);

	bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR,
						    batif_kobject);
+0 −2
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ DEFINE_SPINLOCK(orig_hash_lock);
DEFINE_SPINLOCK(forw_bat_list_lock);
DEFINE_SPINLOCK(forw_bcast_list_lock);

atomic_t originator_interval;
atomic_t vis_interval;
int16_t num_hna;
int16_t num_ifs;
@@ -80,7 +79,6 @@ int init_module(void)

	atomic_set(&module_state, MODULE_INACTIVE);

	atomic_set(&originator_interval, 1000);
	atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only
					 * for debugging now. */

+0 −1
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ extern spinlock_t orig_hash_lock;
extern spinlock_t forw_bat_list_lock;
extern spinlock_t forw_bcast_list_lock;

extern atomic_t originator_interval;
extern atomic_t vis_interval;
extern int16_t num_hna;
extern int16_t num_ifs;
+0 −75
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@
#include "vis.h"

static struct proc_dir_entry *proc_batman_dir, *proc_interface_file;
static struct proc_dir_entry *proc_orig_interval_file;

static int proc_interfaces_read(struct seq_file *seq, void *offset)
{
@@ -121,57 +120,6 @@ static ssize_t proc_interfaces_write(struct file *instance,
	return count;
}

static int proc_orig_interval_read(struct seq_file *seq, void *offset)
{
	seq_printf(seq, "%i\n", atomic_read(&originator_interval));

	return 0;
}

static ssize_t proc_orig_interval_write(struct file *file,
					const char __user *buffer,
					size_t count, loff_t *ppos)
{
	char *interval_string;
	int not_copied = 0;
	unsigned long originator_interval_tmp;
	int retval;

	interval_string = kmalloc(count, GFP_KERNEL);

	if (!interval_string)
		return -ENOMEM;

	not_copied = copy_from_user(interval_string, buffer, count);
	interval_string[count - not_copied - 1] = 0;

	retval = strict_strtoul(interval_string, 10, &originator_interval_tmp);
	if (retval) {
		printk(KERN_ERR "batman-adv:New originator interval invalid\n");
		goto end;
	}

	if (originator_interval_tmp <= JITTER * 2) {
		printk(KERN_WARNING "batman-adv:New originator interval too small: %li (min: %i)\n",
		       originator_interval_tmp, JITTER * 2);
		goto end;
	}

	printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li\n",
	       atomic_read(&originator_interval), originator_interval_tmp);

	atomic_set(&originator_interval, originator_interval_tmp);

end:
	kfree(interval_string);
	return count;
}

static int proc_orig_interval_open(struct inode *inode, struct file *file)
{
	return single_open(file, proc_orig_interval_read, NULL);
}

static const struct file_operations proc_interfaces_fops = {
	.owner		= THIS_MODULE,
	.open		= proc_interfaces_open,
@@ -181,20 +129,8 @@ static const struct file_operations proc_interfaces_fops = {
	.release	= single_release,
};

static const struct file_operations proc_orig_interval_fops = {
	.owner		= THIS_MODULE,
	.open		= proc_orig_interval_open,
	.read		= seq_read,
	.write		= proc_orig_interval_write,
	.llseek		= seq_lseek,
	.release	= single_release,
};

void cleanup_procfs(void)
{
	if (proc_orig_interval_file)
		remove_proc_entry(PROC_FILE_ORIG_INTERVAL, proc_batman_dir);

	if (proc_interface_file)
		remove_proc_entry(PROC_FILE_INTERFACES, proc_batman_dir);

@@ -230,16 +166,5 @@ int setup_procfs(void)
		return -EFAULT;
	}

	proc_orig_interval_file = create_proc_entry(PROC_FILE_ORIG_INTERVAL,
						    S_IWUSR | S_IRUGO,
						    proc_batman_dir);
	if (proc_orig_interval_file) {
		proc_orig_interval_file->proc_fops = &proc_orig_interval_fops;
	} else {
		printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_ORIG_INTERVAL);
		cleanup_procfs();
		return -EFAULT;
	}

	return 0;
}
+0 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@

#define PROC_ROOT_DIR "batman-adv"
#define PROC_FILE_INTERFACES "interfaces"
#define PROC_FILE_ORIG_INTERVAL "orig_interval"

void cleanup_procfs(void);
int setup_procfs(void);
Loading