diff options
Diffstat (limited to 'drivers/net/dummy.c')
-rw-r--r-- | drivers/net/dummy.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c index dd8c15ac5c7..60673bc292c 100644 --- a/drivers/net/dummy.c +++ b/drivers/net/dummy.c | |||
@@ -11,7 +11,7 @@ | |||
11 | One solution is to set up a dummy link using PPP/SLIP/PLIP, | 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. | 12 | but this seems (to me) too much overhead for too little gain. |
13 | This driver provides a small alternative. Thus you can do | 13 | This driver provides a small alternative. Thus you can do |
14 | 14 | ||
15 | [when not running slip] | 15 | [when not running slip] |
16 | ifconfig dummy slip.addr.ess.here up | 16 | ifconfig dummy slip.addr.ess.here up |
17 | [to go to slip] | 17 | [to go to slip] |
@@ -28,7 +28,6 @@ | |||
28 | Alan Cox, 30th May 1994 | 28 | Alan Cox, 30th May 1994 |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/config.h> | ||
32 | #include <linux/module.h> | 31 | #include <linux/module.h> |
33 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
34 | #include <linux/netdevice.h> | 33 | #include <linux/netdevice.h> |
@@ -45,9 +44,9 @@ static int dummy_set_address(struct net_device *dev, void *p) | |||
45 | { | 44 | { |
46 | struct sockaddr *sa = p; | 45 | struct sockaddr *sa = p; |
47 | 46 | ||
48 | if (!is_valid_ether_addr(sa->sa_data)) | 47 | if (!is_valid_ether_addr(sa->sa_data)) |
49 | return -EADDRNOTAVAIL; | 48 | return -EADDRNOTAVAIL; |
50 | 49 | ||
51 | memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN); | 50 | memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN); |
52 | return 0; | 51 | return 0; |
53 | } | 52 | } |
@@ -112,7 +111,7 @@ static int __init dummy_init_one(int index) | |||
112 | free_netdev(dev_dummy); | 111 | free_netdev(dev_dummy); |
113 | dev_dummy = NULL; | 112 | dev_dummy = NULL; |
114 | } else { | 113 | } else { |
115 | dummies[index] = dev_dummy; | 114 | dummies[index] = dev_dummy; |
116 | } | 115 | } |
117 | 116 | ||
118 | return err; | 117 | return err; |
@@ -122,29 +121,30 @@ static void dummy_free_one(int index) | |||
122 | { | 121 | { |
123 | unregister_netdev(dummies[index]); | 122 | unregister_netdev(dummies[index]); |
124 | free_netdev(dummies[index]); | 123 | free_netdev(dummies[index]); |
125 | } | 124 | } |
126 | 125 | ||
127 | static int __init dummy_init_module(void) | 126 | static int __init dummy_init_module(void) |
128 | { | 127 | { |
129 | int i, err = 0; | 128 | int i, err = 0; |
130 | dummies = kmalloc(numdummies * sizeof(void *), GFP_KERNEL); | 129 | dummies = kmalloc(numdummies * sizeof(void *), GFP_KERNEL); |
131 | if (!dummies) | 130 | if (!dummies) |
132 | return -ENOMEM; | 131 | return -ENOMEM; |
133 | for (i = 0; i < numdummies && !err; i++) | 132 | for (i = 0; i < numdummies && !err; i++) |
134 | err = dummy_init_one(i); | 133 | err = dummy_init_one(i); |
135 | if (err) { | 134 | if (err) { |
135 | i--; | ||
136 | while (--i >= 0) | 136 | while (--i >= 0) |
137 | dummy_free_one(i); | 137 | dummy_free_one(i); |
138 | } | 138 | } |
139 | return err; | 139 | return err; |
140 | } | 140 | } |
141 | 141 | ||
142 | static void __exit dummy_cleanup_module(void) | 142 | static void __exit dummy_cleanup_module(void) |
143 | { | 143 | { |
144 | int i; | 144 | int i; |
145 | for (i = 0; i < numdummies; i++) | 145 | for (i = 0; i < numdummies; i++) |
146 | dummy_free_one(i); | 146 | dummy_free_one(i); |
147 | kfree(dummies); | 147 | kfree(dummies); |
148 | } | 148 | } |
149 | 149 | ||
150 | module_init(dummy_init_module); | 150 | module_init(dummy_init_module); |