2 * Ethertap: A network device for bouncing packets via user space
4 * This is a very simple ethernet driver. It bounces ethernet frames
5 * to user space on /dev/tap0->/dev/tap15 and expects ethernet frames
6 * to be written back to it. By default it does not ARP. If you turn ARP
7 * on it will attempt to ARP the user space and reply to ARPS from the
10 * As this is an ethernet device you can use it for appletalk, IPX etc
11 * even for building bridging tunnels.
14 #include <linux/config.h>
15 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/jiffies.h>
19 #include <linux/slab.h>
20 #include <linux/string.h>
21 #include <linux/errno.h>
23 #include <linux/netdevice.h>
24 #include <linux/inetdevice.h>
25 #include <linux/etherdevice.h>
26 #include <linux/skbuff.h>
27 #include <linux/init.h>
30 #include <linux/netlink.h>
36 int ethertap_probe(struct net_device
*dev
);
37 static int ethertap_open(struct net_device
*dev
);
38 static int ethertap_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
);
39 static int ethertap_close(struct net_device
*dev
);
40 static struct net_device_stats
*ethertap_get_stats(struct net_device
*dev
);
41 static void ethertap_rx(struct sock
*sk
, int len
);
42 #ifdef CONFIG_ETHERTAP_MC
43 static void set_multicast_list(struct net_device
*dev
);
46 static int ethertap_debug
;
48 static struct net_device
*tap_map
[32]; /* Returns the tap device for a given netlink */
51 * Board-specific info in dev->priv.
57 #ifdef CONFIG_ETHERTAP_MC
60 struct net_device_stats stats
;
64 * To call this a probe is a bit misleading, however for real
65 * hardware it would have to check what was present.
68 int __init
ethertap_probe(struct net_device
*dev
)
70 SET_MODULE_OWNER(dev
);
72 memcpy(dev
->dev_addr
, "\xFE\xFD\x00\x00\x00\x00", 6);
73 if (dev
->mem_start
& 0xf)
74 ethertap_debug
= dev
->mem_start
& 0x7;
77 * Initialize the device structure.
80 dev
->priv
= kmalloc(sizeof(struct net_local
), GFP_KERNEL
);
81 if (dev
->priv
== NULL
)
83 memset(dev
->priv
, 0, sizeof(struct net_local
));
86 * The tap specific entries in the device structure.
89 dev
->open
= ethertap_open
;
90 dev
->hard_start_xmit
= ethertap_start_xmit
;
91 dev
->stop
= ethertap_close
;
92 dev
->get_stats
= ethertap_get_stats
;
93 #ifdef CONFIG_ETHERTAP_MC
94 dev
->set_multicast_list
= set_multicast_list
;
98 * Setup the generic properties
103 dev
->tx_queue_len
= 0;
104 dev
->flags
|=IFF_NOARP
;
105 tap_map
[dev
->base_addr
]=dev
;
111 * Open/initialize the board.
114 static int ethertap_open(struct net_device
*dev
)
116 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
118 if (ethertap_debug
> 2)
119 printk("%s: Doing ethertap_open()...", dev
->name
);
121 lp
->nl
= netlink_kernel_create(dev
->base_addr
, ethertap_rx
);
124 netif_start_queue(dev
);
128 #ifdef CONFIG_ETHERTAP_MC
129 static unsigned ethertap_mc_hash(__u8
*dest
)
138 return 1U << (idx
&0x1F);
141 static void set_multicast_list(struct net_device
*dev
)
143 unsigned groups
= ~0;
144 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
146 if (!(dev
->flags
&(IFF_NOARP
|IFF_PROMISC
|IFF_ALLMULTI
))) {
147 struct dev_mc_list
*dmi
;
149 groups
= ethertap_mc_hash(dev
->broadcast
);
151 for (dmi
=dev
->mc_list
; dmi
; dmi
=dmi
->next
) {
152 if (dmi
->dmi_addrlen
!= 6)
154 groups
|= ethertap_mc_hash(dmi
->dmi_addr
);
159 lp
->nl
->protinfo
.af_netlink
.groups
= groups
;
164 * We transmit by throwing the packet at netlink. We have to clone
165 * it for 2.0 so that we dev_kfree_skb() the locked original.
168 static int ethertap_start_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
170 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
171 #ifdef CONFIG_ETHERTAP_MC
172 struct ethhdr
*eth
= (struct ethhdr
*)skb
->data
;
175 if (skb_headroom(skb
) < 2) {
177 struct sk_buff
*skb2
;
181 printk(KERN_DEBUG
"%s: not aligned xmit by protocol %04x\n", dev
->name
, skb
->protocol
);
184 skb2
= skb_realloc_headroom(skb
, 2);
192 /* Make the same thing, which loopback does. */
193 if (skb_shared(skb
)) {
194 struct sk_buff
*skb2
= skb
;
195 skb
= skb_clone(skb
, GFP_ATOMIC
); /* Clone the buffer */
202 /* ... but do not orphan it here, netlink does it in any case. */
204 lp
->stats
.tx_bytes
+=skb
->len
;
205 lp
->stats
.tx_packets
++;
207 #ifndef CONFIG_ETHERTAP_MC
208 netlink_broadcast(lp
->nl
, skb
, 0, ~0, GFP_ATOMIC
);
210 if (dev
->flags
&IFF_NOARP
) {
211 netlink_broadcast(lp
->nl
, skb
, 0, ~0, GFP_ATOMIC
);
215 if (!(eth
->h_dest
[0]&1)) {
218 memcpy(&pid
, eth
->h_dest
+2, 4);
219 netlink_unicast(lp
->nl
, skb
, ntohl(pid
), MSG_DONTWAIT
);
221 netlink_broadcast(lp
->nl
, skb
, 0, ethertap_mc_hash(eth
->h_dest
), GFP_ATOMIC
);
226 static __inline__
int ethertap_rx_skb(struct sk_buff
*skb
, struct net_device
*dev
)
228 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
229 #ifdef CONFIG_ETHERTAP_MC
230 struct ethhdr
*eth
= (struct ethhdr
*)(skb
->data
+ 2);
235 printk(KERN_DEBUG
"%s : rx len = %d\n", dev
->name
, len
);
239 if (NETLINK_CREDS(skb
)->uid
) {
240 printk(KERN_INFO
"%s : user %d\n", dev
->name
, NETLINK_CREDS(skb
)->uid
);
245 #ifdef CONFIG_ETHERTAP_MC
246 if (!(dev
->flags
&(IFF_NOARP
|IFF_PROMISC
))) {
249 if (eth
->h_dest
[0]&1) {
250 if (!(ethertap_mc_hash(eth
->h_dest
)&lp
->groups
))
252 } else if (memcmp(eth
->h_dest
, dev
->dev_addr
, 6) != 0)
256 if (ethertap_debug
> 3)
257 printk(KERN_DEBUG
"%s : not for us\n", dev
->name
);
264 if (skb_shared(skb
)) {
265 struct sk_buff
*skb2
= skb
;
266 skb
= skb_clone(skb
, GFP_KERNEL
); /* Clone the buffer */
277 skb
->protocol
=eth_type_trans(skb
,dev
);
278 memset(skb
->cb
, 0, sizeof(skb
->cb
));
279 lp
->stats
.rx_packets
++;
280 lp
->stats
.rx_bytes
+=len
;
282 dev
->last_rx
= jiffies
;
287 * The typical workload of the driver:
288 * Handle the ether interface interrupts.
290 * (In this case handle the packets posted from user space..)
293 static void ethertap_rx(struct sock
*sk
, int len
)
295 struct net_device
*dev
= tap_map
[sk
->sk_protocol
];
299 printk(KERN_CRIT
"ethertap: bad unit!\n");
300 skb_queue_purge(&sk
->sk_receive_queue
);
304 if (ethertap_debug
> 3)
305 printk("%s: ethertap_rx()\n", dev
->name
);
307 while ((skb
= skb_dequeue(&sk
->sk_receive_queue
)) != NULL
)
308 ethertap_rx_skb(skb
, dev
);
311 static int ethertap_close(struct net_device
*dev
)
313 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
314 struct sock
*sk
= lp
->nl
;
316 if (ethertap_debug
> 2)
317 printk("%s: Shutting down.\n", dev
->name
);
319 netif_stop_queue(dev
);
323 sock_release(sk
->sk_socket
);
329 static struct net_device_stats
*ethertap_get_stats(struct net_device
*dev
)
331 struct net_local
*lp
= (struct net_local
*)dev
->priv
;
338 MODULE_PARM(unit
,"i");
339 MODULE_PARM_DESC(unit
,"Ethertap device number");
341 static struct net_device dev_ethertap
=
344 .init
= ethertap_probe
347 int init_module(void)
349 dev_ethertap
.base_addr
=unit
+NETLINK_TAPBASE
;
350 sprintf(dev_ethertap
.name
,"tap%d",unit
);
351 if (dev_get(dev_ethertap
.name
))
353 printk(KERN_INFO
"%s already loaded.\n", dev_ethertap
.name
);
356 if (register_netdev(&dev_ethertap
) != 0)
361 void cleanup_module(void)
363 tap_map
[dev_ethertap
.base_addr
]=NULL
;
364 unregister_netdev(&dev_ethertap
);
367 * Free up the private structure.
370 kfree(dev_ethertap
.priv
);
371 dev_ethertap
.priv
= NULL
; /* gets re-allocated by ethertap_probe */
375 MODULE_LICENSE("GPL");