OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [net/] [dummy.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* dummy.c: a dummy net driver
2
 
3
        The purpose of this driver is to provide a device to point a
4
        route through, but not to actually transmit packets.
5
 
6
        Why?  If you have a machine whose only connection is an occasional
7
        PPP/SLIP/PLIP link, you can only connect to your own hostname
8
        when the link is up.  Otherwise you have to use localhost.
9
        This isn't very consistent.
10
 
11
        One solution is to set up a dummy link using PPP/SLIP/PLIP,
12
        but this seems (to me) too much overhead for too little gain.
13
        This driver provides a small alternative. Thus you can do
14
 
15
        [when not running slip]
16
                ifconfig dummy slip.addr.ess.here up
17
        [to go to slip]
18
                ifconfig dummy down
19
                dip whatever
20
 
21
        This was written by looking at Donald Becker's skeleton driver
22
        and the loopback driver.  I then threw away anything that didn't
23
        apply!  Thanks to Alan Cox for the key clue on what to do with
24
        misguided packets.
25
 
26
                        Nick Holloway, 27th May 1994
27
        [I tweaked this explanation a little but that's all]
28
                        Alan Cox, 30th May 1994
29
*/
30
 
31
#include <linux/config.h>
32
#include <linux/module.h>
33
#include <linux/kernel.h>
34
#include <linux/netdevice.h>
35
#include <linux/init.h>
36
 
37
static int dummy_xmit(struct sk_buff *skb, struct net_device *dev);
38
static struct net_device_stats *dummy_get_stats(struct net_device *dev);
39
 
40
/* fake multicast ability */
41
static void set_multicast_list(struct net_device *dev)
42
{
43
}
44
 
45
#ifdef CONFIG_NET_FASTROUTE
46
static int dummy_accept_fastpath(struct net_device *dev, struct dst_entry *dst)
47
{
48
        return -1;
49
}
50
#endif
51
 
52
static int __init dummy_init(struct net_device *dev)
53
{
54
        /* Initialize the device structure. */
55
 
56
        dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);
57
        if (dev->priv == NULL)
58
                return -ENOMEM;
59
        memset(dev->priv, 0, sizeof(struct net_device_stats));
60
 
61
        dev->get_stats = dummy_get_stats;
62
        dev->hard_start_xmit = dummy_xmit;
63
        dev->set_multicast_list = set_multicast_list;
64
#ifdef CONFIG_NET_FASTROUTE
65
        dev->accept_fastpath = dummy_accept_fastpath;
66
#endif
67
 
68
        /* Fill in device structure with ethernet-generic values. */
69
        ether_setup(dev);
70
        dev->tx_queue_len = 0;
71
        dev->flags |= IFF_NOARP;
72
        dev->flags &= ~IFF_MULTICAST;
73
 
74
        return 0;
75
}
76
 
77
static int dummy_xmit(struct sk_buff *skb, struct net_device *dev)
78
{
79
        struct net_device_stats *stats = dev->priv;
80
 
81
        stats->tx_packets++;
82
        stats->tx_bytes+=skb->len;
83
 
84
        dev_kfree_skb(skb);
85
        return 0;
86
}
87
 
88
static struct net_device_stats *dummy_get_stats(struct net_device *dev)
89
{
90
        return dev->priv;
91
}
92
 
93
static struct net_device dev_dummy;
94
 
95
static int __init dummy_init_module(void)
96
{
97
        int err;
98
 
99
        dev_dummy.init = dummy_init;
100
        SET_MODULE_OWNER(&dev_dummy);
101
 
102
        /* Find a name for this unit */
103
        err=dev_alloc_name(&dev_dummy,"dummy%d");
104
        if(err<0)
105
                return err;
106
        err = register_netdev(&dev_dummy);
107
        if (err<0)
108
                return err;
109
        return 0;
110
}
111
 
112
static void __exit dummy_cleanup_module(void)
113
{
114
        unregister_netdev(&dev_dummy);
115
        kfree(dev_dummy.priv);
116
 
117
        memset(&dev_dummy, 0, sizeof(dev_dummy));
118
        dev_dummy.init = dummy_init;
119
}
120
 
121
module_init(dummy_init_module);
122
module_exit(dummy_cleanup_module);
123
MODULE_LICENSE("GPL");

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.