diff options
Diffstat (limited to 'net/802/p8023.c')
-rw-r--r-- | net/802/p8023.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/net/802/p8023.c b/net/802/p8023.c new file mode 100644 index 000000000000..a0b61b40225f --- /dev/null +++ b/net/802/p8023.c | |||
@@ -0,0 +1,61 @@ | |||
1 | /* | ||
2 | * NET3: 802.3 data link hooks used for IPX 802.3 | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or | ||
5 | * modify it under the terms of the GNU General Public License | ||
6 | * as published by the Free Software Foundation; either version | ||
7 | * 2 of the License, or (at your option) any later version. | ||
8 | * | ||
9 | * 802.3 isn't really a protocol data link layer. Some old IPX stuff | ||
10 | * uses it however. Note that there is only one 802.3 protocol layer | ||
11 | * in the system. We don't currently support different protocols | ||
12 | * running raw 802.3 on different devices. Thankfully nobody else | ||
13 | * has done anything like the old IPX. | ||
14 | */ | ||
15 | |||
16 | #include <linux/in.h> | ||
17 | #include <linux/mm.h> | ||
18 | #include <linux/module.h> | ||
19 | #include <linux/netdevice.h> | ||
20 | #include <linux/skbuff.h> | ||
21 | |||
22 | #include <net/datalink.h> | ||
23 | |||
24 | /* | ||
25 | * Place an 802.3 header on a packet. The driver will do the mac | ||
26 | * addresses, we just need to give it the buffer length. | ||
27 | */ | ||
28 | static int p8023_request(struct datalink_proto *dl, | ||
29 | struct sk_buff *skb, unsigned char *dest_node) | ||
30 | { | ||
31 | struct net_device *dev = skb->dev; | ||
32 | |||
33 | dev->hard_header(skb, dev, ETH_P_802_3, dest_node, NULL, skb->len); | ||
34 | return dev_queue_xmit(skb); | ||
35 | } | ||
36 | |||
37 | /* | ||
38 | * Create an 802.3 client. Note there can be only one 802.3 client | ||
39 | */ | ||
40 | struct datalink_proto *make_8023_client(void) | ||
41 | { | ||
42 | struct datalink_proto *proto = kmalloc(sizeof(*proto), GFP_ATOMIC); | ||
43 | |||
44 | if (proto) { | ||
45 | proto->header_length = 0; | ||
46 | proto->request = p8023_request; | ||
47 | } | ||
48 | return proto; | ||
49 | } | ||
50 | |||
51 | /* | ||
52 | * Destroy the 802.3 client. | ||
53 | */ | ||
54 | void destroy_8023_client(struct datalink_proto *dl) | ||
55 | { | ||
56 | if (dl) | ||
57 | kfree(dl); | ||
58 | } | ||
59 | |||
60 | EXPORT_SYMBOL(destroy_8023_client); | ||
61 | EXPORT_SYMBOL(make_8023_client); | ||