From 2b65a560f4258d436933b0725ca2a9346c79e449 Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Mon, 12 Jan 2004 09:41:02 -0500 Subject: [PATCH] [PATCH] variable number of dummy devices Uses the new module_params that nobody else uses now. --- drivers/net/dummy.c | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c index 5ee716767f870..754c9f1f20e46 100644 --- a/drivers/net/dummy.c +++ b/drivers/net/dummy.c @@ -33,6 +33,9 @@ #include #include #include +#include + +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 +86,14 @@ static struct net_device_stats *dummy_get_stats(struct net_device *dev) 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_param(numdummies, int, 0); + +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 +105,40 @@ static int __init dummy_init_module(void) 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); -- 2.53.0