aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-09-04 14:30:54 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-09-04 14:30:54 +0000
commit0164019edff939a3d0f6571cd5f2075f80c7b3f3 (patch)
treea955fd68d11cd53614bd21bba8f8c1ad881eb50d
parent5703290baa1d33d06e029056aad9c5e4a699a038 (diff)
parentb190c033dabca7b46b4cada819e0aa8f4b38364a (diff)
downloadxen-0164019edff939a3d0f6571cd5f2075f80c7b3f3.tar.gz
xen-0164019edff939a3d0f6571cd5f2075f80c7b3f3.tar.bz2
xen-0164019edff939a3d0f6571cd5f2075f80c7b3f3.zip
bitkeeper revision 1.401 (3f574c9elmWiO5WrYto-k7Z8DTde5A)
Merge scramble.cl.cam.ac.uk:/auto/groups/xeno/BK/xeno.bk into scramble.cl.cam.ac.uk:/local/scratch/kaf24/xeno
-rw-r--r--.rootkeys1
-rw-r--r--xen/common/kernel.c4
-rw-r--r--xen/drivers/net/dummy.c79
-rw-r--r--xen/net/dev.c17
4 files changed, 94 insertions, 7 deletions
diff --git a/.rootkeys b/.rootkeys
index 8ec90bcf83..0e1ba43b7c 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -236,6 +236,7 @@
3ddb79c0tWiE8xIFHszxipeVCGKTSA xen/drivers/net/Makefile
3f0c4247730LYUgz3p5ziYqy-s_glw xen/drivers/net/SUPPORTED_CARDS
3ddb79bfU-H1Hms4BuJEPPydjXUEaQ xen/drivers/net/Space.c
+3f574c95CQT9g-GDSJJ4YqiwCEQ72Q xen/drivers/net/dummy.c
3f0c428e41JP96bh-J0jnX59vJyUeQ xen/drivers/net/e100/LICENSE
3f0c428es_xrZnnZQXXHhjzuqj9CTg xen/drivers/net/e100/Makefile
3f0c428eCEnifr-r6XCZKUkzIEHdYw xen/drivers/net/e100/e100.h
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 10a7555eee..cc70814718 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -570,7 +570,9 @@ long do_console_write(char *str, unsigned int count)
spin_unlock_irqrestore(&console_lock, flags);
exported_str[j++]='\0';
- console_export(exported_str, j);
+
+ if ( current->domain != 0 )
+ console_export(exported_str, j);
return(0);
}
diff --git a/xen/drivers/net/dummy.c b/xen/drivers/net/dummy.c
new file mode 100644
index 0000000000..d0d1976cea
--- /dev/null
+++ b/xen/drivers/net/dummy.c
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * dummy.c
+ *
+ * A cut down version of Linux's dummy network driver. GPLed and all that.
+ */
+
+#include <xeno/config.h>
+#include <xeno/module.h>
+#include <xeno/kernel.h>
+#include <xeno/netdevice.h>
+#include <xeno/init.h>
+
+static int dummy_xmit(struct sk_buff *skb, struct net_device *dev);
+static struct net_device_stats *dummy_get_stats(struct net_device *dev);
+
+static int __init dummy_init(struct net_device *dev)
+{
+ dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
+ if ( dev->priv == NULL )
+ return -ENOMEM;
+ memset(dev->priv, 0, sizeof(struct net_device_stats));
+
+ dev->get_stats = dummy_get_stats;
+ dev->hard_start_xmit = dummy_xmit;
+
+ ether_setup(dev);
+ dev->flags |= IFF_NOARP;
+ dev->features = NETIF_F_SG | NETIF_F_HIGHDMA;
+
+ return 0;
+}
+
+static int dummy_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ struct net_device_stats *stats = dev->priv;
+
+ stats->tx_packets++;
+ stats->tx_bytes += skb->len;
+
+ dev_kfree_skb(skb);
+
+ return 0;
+}
+
+static struct net_device_stats *dummy_get_stats(struct net_device *dev)
+{
+ return dev->priv;
+}
+
+static struct net_device dev_dummy;
+
+static int __init dummy_init_module(void)
+{
+ int err;
+
+ dev_dummy.init = dummy_init;
+ SET_MODULE_OWNER(&dev_dummy);
+
+ if ( (err = dev_alloc_name(&dev_dummy,"dummy")) < 0 )
+ return err;
+
+ if ( (err = register_netdev(&dev_dummy)) < 0 )
+ return err;
+
+ return 0;
+}
+
+static void __exit dummy_cleanup_module(void)
+{
+ unregister_netdev(&dev_dummy);
+ kfree(dev_dummy.priv);
+
+ memset(&dev_dummy, 0, sizeof(dev_dummy));
+ dev_dummy.init = dummy_init;
+}
+
+module_init(dummy_init_module);
+module_exit(dummy_cleanup_module);
+MODULE_LICENSE("GPL");
diff --git a/xen/net/dev.c b/xen/net/dev.c
index 54b73bbf0a..c00994e6a1 100644
--- a/xen/net/dev.c
+++ b/xen/net/dev.c
@@ -2145,20 +2145,25 @@ int setup_network_devices(void)
{
int i, ret;
extern char opt_ifname[];
- struct net_device *dev = dev_get_by_name(opt_ifname);
+ struct net_device *dev;
- if ( dev == NULL )
+ if ( (dev = dev_get_by_name(opt_ifname)) == NULL )
{
- printk("Could not find device %s\n", opt_ifname);
- return 0;
+ printk("Could not find device %s: using dummy device\n", opt_ifname);
+ strcpy(opt_ifname, "dummy");
+ if ( (dev = dev_get_by_name(opt_ifname)) == NULL )
+ {
+ printk("Failed to find the dummy device!\n");
+ return 0;
+ }
}
- ret = dev_open(dev);
- if ( ret != 0 )
+ if ( (ret = dev_open(dev)) != 0 )
{
printk("Error opening device %s for use (%d)\n", opt_ifname, ret);
return 0;
}
+
printk("Device %s opened and ready for use.\n", opt_ifname);
the_dev = dev;