Allow multiple dummy devices again
Subsystems (2)
PATCH 1/1 Allow multiple dummy devices again
In 2.6 the old trick of copying the dummy module to get multiple dummy devices doesn't work anymore because the "dummy" device name is embedded in the module.
This patch adds a new module option that allows to specify how many dummy devices you want.
-Andi
drivers/net/dummy.c renamed from drivers/net/dummy.c-o +36 -5
@@ -34,6 +34,8 @@#include <linux/netdevice.h> #include <linux/init.h> +static int numdummies =1 ; +static int dummy_xmit (struct sk_buff *skb,struct net_device *dev);static struct net_device_stats *dummy_get_stats (struct net_device *dev);
@@ -83,10 +85,14 @@return dev->priv; } -static struct net_device *dev_dummy; +static struct net_device **dummies; -static int __init dummy_init_module (void ) +/* Number of dummy devices to be set up by this module. */ +MODULE_PARM(numdummies, "i") + +static int __init dummy_init_one (int index) { +struct net_device *dev_dummy;int err; dev_dummy = alloc_netdev(sizeof(struct net_device_stats),
@@ -98,15 +104,40 @@if ((err =register_netdev (dev_dummy))) {kfree (dev_dummy); dev_dummy =NULL ; + }else { + dummies[index] = dev_dummy; } +return err; } +static void __exit dummy_free_one(int index) +{ +unregister_netdev (dummies[index]); +free_netdev (dummies[index]); +} + +static int __init dummy_init_module (void ) +{ +int i, err =0 ; + dummies =kmalloc (numdummies *sizeof (void *),GFP_KERNEL ); +if (!dummies) +return -ENOMEM ; +for (i =0 ; i < numdummies && !err; i++) + err =dummy_init_one (i); +if (err) { +while (--i >=0 ) +dummy_free_one (i); + } +return err; +} + static void __exit dummy_cleanup_module(void) { -unregister_netdev (dev_dummy); -free_netdev (dev_dummy); - dev_dummy =NULL ; +int i; +for (i =0 ; i < numdummies; i++) +dummy_free_one (i); +kfree (dummies); }module_init (dummy_init_module);
Quoted 6 lines · On Fri, 28 Nov 2003 01:44:45 +0100 Andi Kleen <[email protected]> wrote:
In 2.6 the old trick of copying the dummy module to get multiple dummy devices doesn't work anymore because the "dummy" device name is embedded in the module.
This patch adds a new module option that allows to specify how many dummy devices you want.
Jeff, FWIW I'm fine with this.
Even though we generally frown upon module options for networking devices, I think it's wholly appropriate for this case.
Quoted 2 lines · David S. Miller
Even though we generally frown upon module options for networking devices, I think it's wholly appropriate for this case.
Why not make it also a boot option?
cheers,
jamal
Quoted 6 lines · On 27 Nov 2003 20:33:22 -0500 jamal <[email protected]> wrote:
Quoted 2 lines · David S. Miller
Even though we generally frown upon module options for networking devices, I think it's wholly appropriate for this case.
Why not make it also a boot option?
They're one in the same these days.
If the driver is built as a module, you pass the option in with at modload time, else you pass it in on the kernel command line.
Quoted 8 lines · David S. Miller
Quoted 5 lines · On 27 Nov 2003 20:33:22 -0500 jamal <[email protected]> wrote:
Quoted 2 lines · David S. Miller
Even though we generally frown upon module options for networking devices, I think it's wholly appropriate for this case.
Quoted 6 lines
Quoted 1 line
Why not make it also a boot option?
They're one in the same these days.
If the driver is built as a module, you pass the option in with at modload time, else you pass it in on the kernel command line.
You'd have to use module_param for that, but it appears the driver uses the deprectated MODULE_PARAM..
Quoted 2 lines · On Fri, 28 Nov 2003 07:04:37 +0000 Christoph Hellwig <[email protected]> wrote:
You'd have to use
module_paramfor that, but it appears the driver uses the deprectatedMODULE_PARAM..
Indeed, that should be fixed. Good catch.