summaryrefslogtreecommitdiffstats
path: root/drivers/net/dummy.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1994-11-28 11:59:19 +0000
committer <ralf@linux-mips.org>1994-11-28 11:59:19 +0000
commit1513ff9b7899ab588401c89db0e99903dbf5f886 (patch)
treef69cc81a940a502ea23d664c3ffb2d215a479667 /drivers/net/dummy.c
Import of Linus's Linux 1.1.68
Diffstat (limited to 'drivers/net/dummy.c')
-rw-r--r--drivers/net/dummy.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
new file mode 100644
index 000000000..c70629d73
--- /dev/null
+++ b/drivers/net/dummy.c
@@ -0,0 +1,109 @@
+/* dummy.c: a dummy net driver
+
+ The purpose of this driver is to provide a device to point a
+ route through, but not to actually transmit packets.
+
+ Why? If you have a machine whose only connection is an occasional
+ PPP/SLIP/PLIP link, you can only connect to your own hostname
+ when the link is up. Otherwise you have to use localhost.
+ This isn't very consistent.
+
+ One solution is to set up a dummy link using PPP/SLIP/PLIP,
+ but this seems (to me) too much overhead for too little gain.
+ This driver provides a small alternative. Thus you can do
+
+ [when not running slip]
+ ifconfig dummy slip.addr.ess.here up
+ [to go to slip]
+ ifconfig dummy down
+ dip whatever
+
+ This was written by looking at Donald Becker's skeleton driver
+ and the loopback driver. I then threw away anything that didn't
+ apply! Thanks to Alan Cox for the key clue on what to do with
+ misguided packets.
+
+ Nick Holloway, 27th May 1994
+ [I tweaked this explanation a little but thats all]
+ Alan Cox, 30th May 1994
+*/
+
+/* To have statistics (just packets sent) define this */
+#undef DUMMY_STATS
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/fcntl.h>
+#include <linux/interrupt.h>
+#include <linux/ptrace.h>
+#include <linux/ioport.h>
+#include <linux/in.h>
+#include <linux/malloc.h>
+#include <linux/string.h>
+#include <asm/system.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+#include <linux/errno.h>
+
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+
+static int dummy_xmit(struct sk_buff *skb, struct device *dev);
+#ifdef DUMMY_STATS
+static struct enet_statistics *dummy_get_stats(struct device *dev);
+#endif
+
+int
+dummy_init(struct device *dev)
+{
+/* I commented this out as bootup is noisy enough anyway and this driver
+ seems pretty reliable 8) 8) 8) */
+/* printk ( KERN_INFO "Dummy net driver (94/05/27 v1.0)\n" ); */
+
+ /* Initialize the device structure. */
+ dev->hard_start_xmit = dummy_xmit;
+
+#if DUMMY_STATS
+ dev->priv = kmalloc(sizeof(struct enet_statistics), GFP_KERNEL);
+ memset(dev->priv, 0, sizeof(struct enet_statistics));
+ dev->get_stats = dummy_get_stats;
+#endif
+
+ /* Fill in the fields of the device structure with ethernet-generic values. */
+ ether_setup(dev);
+
+ return 0;
+}
+
+static int
+dummy_xmit(struct sk_buff *skb, struct device *dev)
+{
+#if DUMMY_STATS
+ struct enet_statistics *stats;
+#endif
+
+ if (skb == NULL || dev == NULL)
+ return 0;
+
+ dev_kfree_skb(skb, FREE_WRITE);
+
+#if DUMMY_STATS
+ stats = (struct enet_statistics *)dev->priv;
+ stats->tx_packets++;
+#endif
+
+ return 0;
+}
+
+#if DUMMY_STATS
+static struct enet_statistics *
+dummy_get_stats(struct device *dev)
+{
+ struct enet_statistics *stats = (struct enet_statistics*) dev->priv;
+ return stats;
+}
+#endif