Staging: batman-adv: move originator interval setting from /proc to /sys
authorMarek Lindner <lindner_marek@yahoo.de>
Fri, 7 May 2010 19:47:20 +0000 (21:47 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 11 May 2010 20:42:39 +0000 (13:42 -0700)
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/batman-adv/bat_sysfs.c
drivers/staging/batman-adv/main.c
drivers/staging/batman-adv/main.h
drivers/staging/batman-adv/proc.c
drivers/staging/batman-adv/proc.h
drivers/staging/batman-adv/send.c
drivers/staging/batman-adv/types.h

index c14ab47fc5a43efdf1db59619737cebb04a73746..ea7ce775009a8a095689f1bec280d724a21ea7a4 100644 (file)
@@ -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);
index 54e8cd5a32f3b2fd8aa8f80a771b641724eb9a6c..7d726857023e6d0942f31c4f94b7756a5d2bdb17 100644 (file)
@@ -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. */
 
index b2283a75ee61d4f501b5fc4124ed5638b6c4871e..59a70c7e90c0a5cb3def06a58bf2854cbf4ed8ea 100644 (file)
@@ -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;
index cbea64212db7f24c1af81e29b51dcff05ee52f13..25b24fe7b6af0c285f85aa9f5de332623a0cd2bf 100644 (file)
@@ -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 @@ end:
        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;
 }
index 6a972a6f26b1aa9e22bc098413e584e7fe3229ef..6f4f5b3e7e02ee08a92518f350762fadb7d2b652 100644 (file)
@@ -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);
index a00aa8871831edfd1aad4b596919be1d39a6dc8c..de2344a071c40e94b5b6d4fbea5ac7a5491faaeb 100644 (file)
@@ -36,10 +36,10 @@ static uint8_t hop_penalty(const uint8_t tq)
 }
 
 /* when do we schedule our own packet to be sent */
-static unsigned long own_send_time(void)
+static unsigned long own_send_time(struct bat_priv *bat_priv)
 {
        return jiffies +
-               (((atomic_read(&originator_interval) - JITTER +
+               (((atomic_read(&bat_priv->orig_interval) - JITTER +
                   (random32() % 2*JITTER)) * HZ) / 1000);
 }
 
@@ -277,7 +277,7 @@ void schedule_own_packet(struct batman_if *batman_if)
        atomic_inc(&batman_if->seqno);
 
        slide_own_bcast_window(batman_if);
-       send_time = own_send_time();
+       send_time = own_send_time(bat_priv);
        add_bat_packet_to_list(bat_priv,
                               batman_if->packet_buff,
                               batman_if->packet_len,
index e8d2e8c2c6455964096ae08649fbba14ead83f56..a8c6ad776df631c6089550203e49f88ae419ddf4 100644 (file)
@@ -84,6 +84,7 @@ struct bat_priv {
        struct net_device_stats stats;
        atomic_t aggregation_enabled;
        atomic_t vis_mode;
+       atomic_t orig_interval;
        struct kobject *mesh_obj;
 };