From patchwork Wed Mar 24 04:52:39 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Lindner X-Patchwork-Id: 83 Return-Path: Received: from smtp139.mail.ukl.yahoo.com (smtp139.mail.ukl.yahoo.com [77.238.184.70]) by open-mesh.net (Postfix) with SMTP id 443F21542F6 for ; Wed, 24 Mar 2010 05:57:38 +0100 (CET) Received: (qmail 12177 invoked from network); 24 Mar 2010 04:57:36 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.de; h=Received:X-Yahoo-SMTP:X-YMail-OSG:X-Yahoo-Newman-Property:From:To:Cc:Subject:Date:Message-Id:X-Mailer:In-Reply-To:References; b=En00/Ov5trkolDrPd3Hk14ENTlJMbnH0h/SPLdCHZdzgJAxX1fE8SGxVpNqwo4BRMr5G8vcfXKsI5pPXbO7wAA2GnaJbRkc8tpnl+b0pJiIe7SCqrEyeKhAmHqKJkfef7HqvHo00py6DN2x6/ohjzdFOycoqQGcMJfSrtjcD/qw= ; Received: from 61-59-128-157.static.seed.net.tw (lindner_marek@61.59.128.157 with plain) by smtp139.mail.ukl.yahoo.com with SMTP; 24 Mar 2010 04:57:34 +0000 GMT X-Yahoo-SMTP: tW.h3tiswBBMXO2coYcbPigGD5Lt6zY_.Zc- X-YMail-OSG: RWP9pnUVM1mKtfYVudISkeX1KGOR0KfDNUFNxbMFMI8DLNv2kjLSse0p.U.Ne15JW8mMPuWY8pPp1bvAQN1kBzNxO61qDPMD9TumSMMfPv6Nql4ofqY4PljpmMHYnL37tGE4A.YrGLfCbd.5oFdzK.gIc4Xi7C_n1tr4OROqYGovMNPzFkNX6fKyjLVQWsRbpOl.z4p7AKIw8xfaDqbyrwOnqtT4NnjfFOI5AF3kzQYrv2CqUCTDkHdvB3Lb0KgGpoU94Bov5VE0zg-- X-Yahoo-Newman-Property: ymail-3 From: Marek Lindner To: b.a.t.m.a.n@lists.open-mesh.net Date: Wed, 24 Mar 2010 12:52:39 +0800 Message-Id: <1269406363-9593-1-git-send-email-lindner_marek@yahoo.de> X-Mailer: git-send-email 1.7.0 In-Reply-To: <201003241252.18954.lindner_marek@yahoo.de> References: <201003241252.18954.lindner_marek@yahoo.de> Cc: Marek Lindner Subject: [B.A.T.M.A.N.] [PATCH 1/5] batman-adv: move originator interval setting from /proc to /sys X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.11 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Mar 2010 04:57:38 -0000 Signed-off-by: Marek Lindner --- batman-adv-kernelland/bat_sysfs.c | 47 +++++++++++++++++++++++ batman-adv-kernelland/main.c | 2 - batman-adv-kernelland/main.h | 1 - batman-adv-kernelland/proc.c | 75 ------------------------------------- batman-adv-kernelland/proc.h | 1 - batman-adv-kernelland/send.c | 6 +- batman-adv-kernelland/types.h | 1 + 7 files changed, 51 insertions(+), 82 deletions(-) diff --git a/batman-adv-kernelland/bat_sysfs.c b/batman-adv-kernelland/bat_sysfs.c index e4685a7..58bf44e 100644 --- a/batman-adv-kernelland/bat_sysfs.c +++ b/batman-adv-kernelland/bat_sysfs.c @@ -251,17 +251,63 @@ static ssize_t store_gw_mode(struct kobject *kobj, struct attribute *attr, return gw_mode_set(bat_priv, buff, 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(bonding, S_IRUGO | S_IWUSR, show_bond, store_bond); static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode); static BAT_ATTR(gw_mode, S_IRUGO | S_IWUSR, show_gw_mode, store_gw_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_bonding, &bat_attr_vis_mode, &bat_attr_gw_mode, + &bat_attr_orig_interval, NULL, }; @@ -345,6 +391,7 @@ int sysfs_add_meshif(struct net_device *dev) atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); atomic_set(&bat_priv->gw_mode, GW_MODE_OFF); atomic_set(&bat_priv->gw_class, 0); + atomic_set(&bat_priv->orig_interval, 1000); bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR, batif_kobject); diff --git a/batman-adv-kernelland/main.c b/batman-adv-kernelland/main.c index cd53ced..b276e86 100644 --- a/batman-adv-kernelland/main.c +++ b/batman-adv-kernelland/main.c @@ -44,7 +44,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; @@ -82,7 +81,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. */ diff --git a/batman-adv-kernelland/main.h b/batman-adv-kernelland/main.h index d72f2c2..ddb0d6c 100644 --- a/batman-adv-kernelland/main.h +++ b/batman-adv-kernelland/main.h @@ -131,7 +131,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; diff --git a/batman-adv-kernelland/proc.c b/batman-adv-kernelland/proc.c index d2dfdd7..a8a1a67 100644 --- a/batman-adv-kernelland/proc.c +++ b/batman-adv-kernelland/proc.c @@ -32,7 +32,6 @@ #include "gateway_client.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) { @@ -124,57 +123,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, @@ -184,20 +132,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); @@ -233,16 +169,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; } diff --git a/batman-adv-kernelland/proc.h b/batman-adv-kernelland/proc.h index 6a972a6..6f4f5b3 100644 --- a/batman-adv-kernelland/proc.h +++ b/batman-adv-kernelland/proc.h @@ -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); diff --git a/batman-adv-kernelland/send.c b/batman-adv-kernelland/send.c index 51011d4..b5a96f5 100644 --- a/batman-adv-kernelland/send.c +++ b/batman-adv-kernelland/send.c @@ -39,10 +39,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); } @@ -285,7 +285,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, diff --git a/batman-adv-kernelland/types.h b/batman-adv-kernelland/types.h index 98968b4..0794dfc 100644 --- a/batman-adv-kernelland/types.h +++ b/batman-adv-kernelland/types.h @@ -99,6 +99,7 @@ struct bat_priv { atomic_t vis_mode; atomic_t gw_mode; atomic_t gw_class; + atomic_t orig_interval; struct kobject *mesh_obj; };