It was suggested on the xen-users list that it would be useful if the
loopback driver could instantiate an arbitrary number of interfaces, so
the attached patch does that.
Pat
--
Patrick O'Rourke
porourke@xxxxxxxxxxx
diff -u --new-file --recursive
a/xen-unstable/linux-2.6-xen-sparse/drivers/xen/netback/loopback.c
b/xen-unstable/linux-2.6-xen-sparse/drivers/xen/netback/loopback.c
--- a/xen-unstable/linux-2.6-xen-sparse/drivers/xen/netback/loopback.c
2005-09-07 23:58:53.000000000 -0400
+++ b/xen-unstable/linux-2.6-xen-sparse/drivers/xen/netback/loopback.c
2005-09-08 13:26:39.000000000 -0400
@@ -29,6 +29,11 @@
#include <linux/skbuff.h>
#include <net/dst.h>
+static int nloopbacks = 1;
+module_param(nloopbacks, int, 0);
+MODULE_PARM_DESC(nloopbacks, "number of devices to create");
+static int make_loopback(int);
+
struct net_private {
struct net_device *loopback_dev;
struct net_device_stats stats;
@@ -120,11 +125,24 @@
static int __init loopback_init(void)
{
+ int i = 0;
+ int err;
+ do {
+ err = make_loopback(i);
+ } while (!err && (++i < nloopbacks));
+ return err;
+}
+
+static int __init make_loopback(int i)
+{
struct net_device *dev1, *dev2;
+ char dev_name[10];
int err = -ENOMEM;
- dev1 = alloc_netdev(sizeof(struct net_private), "vif0.0", ether_setup);
- dev2 = alloc_netdev(sizeof(struct net_private), "veth0", ether_setup);
+ sprintf(dev_name, "vif0.%d", i);
+ dev1 = alloc_netdev(sizeof(struct net_private), dev_name, ether_setup);
+ sprintf(dev_name, "veth%d", i);
+ dev2 = alloc_netdev(sizeof(struct net_private), dev_name, ether_setup);
if ( (dev1 == NULL) || (dev2 == NULL) )
goto fail;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|