patch-2.1.20 linux/net/802/p8022.c
Next file: linux/net/802/p8022tr.c
Previous file: linux/net/802/llc_macinit.c
Back to the patch index
Back to the overall index
- Lines: 74
- Date:
Thu Jan 2 15:13:27 1997
- Orig file:
v2.1.19/linux/net/802/p8022.c
- Orig date:
Mon Dec 30 15:39:16 1996
diff -u --recursive --new-file v2.1.19/linux/net/802/p8022.c linux/net/802/p8022.c
@@ -1,3 +1,21 @@
+/*
+ * NET3: Support for 802.2 demultiplexing off ethernet (Token ring
+ * is kept seperate see p8022tr.c)
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * Demultiplex 802.2 encoded protocols. We match the entry by the
+ * SSAP/DSAP pair and then deliver to the registered datalink that
+ * matches. The control byte is ignored and handling of such items
+ * is up to the routine passed the frame.
+ *
+ * Unlike the 802.3 datalink we have a list of 802.2 entries as there
+ * are multiple protocols to demux. The list is currently short (3 or
+ * 4 entries at most). The current demux assumes this.
+ */
+
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
@@ -12,11 +30,11 @@
* We don't handle the loopback SAP stuff, the extended
* 802.2 command set, multicast SAP identifiers and non UI
* frames. We have the absolute minimum needed for IPX,
- * IP and Appletalk phase 2.
+ * IP and Appletalk phase 2. See the llc_* routines for
+ * support libraries if your protocol needs these.
*/
-static struct datalink_proto *
-find_8022_client(unsigned char type)
+static struct datalink_proto *find_8022_client(unsigned char type)
{
struct datalink_proto *proto;
@@ -28,13 +46,13 @@
return proto;
}
-int
-p8022_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
+int p8022_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
{
struct datalink_proto *proto;
proto = find_8022_client(*(skb->h.raw));
- if (proto != NULL) {
+ if (proto != NULL)
+ {
skb->h.raw += 3;
skb_pull(skb,3);
return proto->rcvfunc(skb, dev, pt);
@@ -45,8 +63,7 @@
return 0;
}
-static void
-p8022_datalink_header(struct datalink_proto *dl,
+static void p8022_datalink_header(struct datalink_proto *dl,
struct sk_buff *skb, unsigned char *dest_node)
{
struct device *dev = skb->dev;
@@ -77,8 +94,7 @@
dev_add_pack(&p8022_packet_type);
}
-struct datalink_proto *
-register_8022_client(unsigned char type, int (*rcvfunc)(struct sk_buff *, struct device *, struct packet_type *))
+struct datalink_proto *register_8022_client(unsigned char type, int (*rcvfunc)(struct sk_buff *, struct device *, struct packet_type *))
{
struct datalink_proto *proto;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov